Browse Source

退款流程和接站流程优化

lishiqiang 2 weeks ago
parent
commit
ce0cf2f6ba
23 changed files with 564 additions and 410 deletions
  1. 3 0
      ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/dal/mysql/distributor/DistributorMapper.java
  2. 1 0
      ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/service/distributor/DistributorService.java
  3. 10 0
      ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/service/distributor/DistributorServiceImpl.java
  4. 7 1
      ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/service/distributorrecharge/DistributorRechargeServiceImpl.java
  5. 3 0
      ship-module-ota/ship-module-ota-biz/src/main/resources/mapper/distributor/DistributorMapper.xml
  6. 1 1
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/resource/ResourceService.java
  7. 8 8
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/resource/ResourceServiceImpl.java
  8. 1 0
      ship-module-trade/ship-module-trade-api/src/main/java/com/yc/ship/module/trade/enums/TradeOrderOperateTypeEnum.java
  9. 16 14
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/ShipTradeOrderCreateReqVO.java
  10. 6 2
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/orderjzdetail/OrderJzDetailController.java
  11. 3 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/orderjzdetail/vo/OrderJzDetailSaveReqVO.java
  12. 5 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/dataobject/order/TradeVisitorDO.java
  13. 2 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/dataobject/orderjz/OrderJzDO.java
  14. 16 4
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/dataobject/orderjzdetail/OrderJzDetailDO.java
  15. 2 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeDetailMapper.java
  16. 54 56
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java
  17. 7 11
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/orderjz/OrderJzServiceImpl.java
  18. 278 203
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/orderjzdetail/OrderJzDetailServiceImpl.java
  19. 7 9
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/AppOtcTradeOrderServiceImpl.java
  20. 29 2
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java
  21. 95 95
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/supplier/system/ZshlSupplierTradeService.java
  22. 6 1
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeDetailMapper.xml
  23. 4 1
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeVisitorMapper.xml

+ 3 - 0
ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/dal/mysql/distributor/DistributorMapper.java

@@ -71,6 +71,9 @@ public interface DistributorMapper extends BaseMapperX<DistributorDO> {
 
     @TenantIgnore
     DistributorRespVO getDistributorById(@Param("id") Long id);
+
+    @TenantIgnore
+    DistributorDO getDistributorNew(@Param("id") Long id);
     @TenantIgnore
     DistributorRespVO getById(@Param("id") Long id);
 

+ 1 - 0
ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/service/distributor/DistributorService.java

@@ -52,6 +52,7 @@ public interface DistributorService {
      * @return 分销商信息
      */
     DistributorDO getDistributor(Long id);
+    DistributorDO getDistributorNew(Long id);
 
     DistributorDO getDistributorByName(String name);
 

+ 10 - 0
ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/service/distributor/DistributorServiceImpl.java

@@ -315,6 +315,16 @@ public class DistributorServiceImpl implements DistributorService {
         return distributorMapper.selectById(id);
     }
 
+    @Override
+    @TenantIgnore
+    public DistributorDO getDistributorNew(Long id) {
+        DistributorDO distributor = distributorMapper.selectById(id);
+        if(distributor == null){
+            distributor = distributorMapper.getDistributorNew(id);
+        }
+        return distributor;
+    }
+
     @Override
     @TenantIgnore
     public DistributorDO getDistributorByName(String name) {

+ 7 - 1
ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/service/distributorrecharge/DistributorRechargeServiceImpl.java

@@ -11,6 +11,7 @@ import com.yc.ship.framework.common.util.object.BeanUtils;
 import com.yc.ship.framework.mybatis.core.util.MyBatisUtils;
 import com.yc.ship.framework.tenant.core.aop.TenantIgnore;
 import com.yc.ship.framework.tenant.core.util.TenantUtils;
+import com.yc.ship.module.ota.controller.admin.distributor.vo.DistributorRespVO;
 import com.yc.ship.module.ota.controller.admin.distributorrecharge.vo.DistributorRechargeAuditReqVO;
 import com.yc.ship.module.ota.controller.admin.distributorrecharge.vo.DistributorRechargePageReqVO;
 import com.yc.ship.module.ota.controller.admin.distributorrecharge.vo.DistributorRechargeRespVO;
@@ -34,6 +35,8 @@ import com.yc.ship.module.otc.api.store.dto.StoreRespDTO;
 import com.yc.ship.module.otc.enums.StoreBalanceTypeEnum;
 import com.yc.ship.module.otc.enums.StoreCreditTypeEnum;
 import com.yc.ship.module.otc.enums.TradeModeEnum;
+import com.yc.ship.module.system.api.user.AdminUserApi;
+import com.yc.ship.module.system.api.user.dto.AdminUserRespDTO;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.redisson.api.RLock;
@@ -83,6 +86,9 @@ public class DistributorRechargeServiceImpl implements DistributorRechargeServic
     @Resource
     private StoreApi storeApi;
 
+    @Resource
+    private AdminUserApi adminUserApi;
+
 
     /**
      * 余额类型
@@ -329,7 +335,7 @@ public class DistributorRechargeServiceImpl implements DistributorRechargeServic
             }
             lock = redissonClient.getLock(key);
             if (lock.tryLock(10, 30, TimeUnit.SECONDS)) {
-                DistributorDO distributor = distributorService.getDistributor(Long.parseLong(rechargeReqDTO.getAccountId()));
+                DistributorDO distributor = distributorService.getDistributorNew(Long.parseLong(rechargeReqDTO.getAccountId()));
                 Asserts.isTrue(null != distributor, "分销商{}不存在", rechargeReqDTO.getAccountId());
                 //判断是否自营分销商 若不是自营分销商则需扣除
                 if (distributor.getSelfSupport() == 0 || ObjectUtil.equals(distributor.getType(), DistributorTypeEnum.OTC.getType())) {

+ 3 - 0
ship-module-ota/ship-module-ota-biz/src/main/resources/mapper/distributor/DistributorMapper.xml

@@ -46,6 +46,9 @@
     <select id="getDistributorById" resultType="com.yc.ship.module.ota.controller.admin.distributor.vo.DistributorRespVO">
         select * from ota_distributor where deleted = 0 and id = #{id}
     </select>
+    <select id="getDistributorNew" resultType="com.yc.ship.module.ota.dal.dataobject.distributor.DistributorDO">
+        select t1.* from ota_distributor t1 inner join system_users t2 on t1.id = t2.distributor_id  where t1.deleted = 0 and t2.id = #{id}
+    </select>
     <select id="getById" resultType="com.yc.ship.module.ota.controller.admin.distributor.vo.DistributorRespVO">
         select * from ota_distributor
         where id = #{id}

+ 1 - 1
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/resource/ResourceService.java

@@ -60,7 +60,7 @@ public interface ResourceService {
     List<ResourceDO> getResourceByCategoryId(Long categoryId);
 
     /***
-     *&#064;Description 获取第三方直连资源列表(九凤谷、船舶物资)
+     *&#064;Description 获取第三方直连资源列表(jfg、船舶物资)
      *@author qsl
      *@date 2025/8/15 20:34
       *@param supplierId

+ 8 - 8
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/resource/ResourceServiceImpl.java

@@ -124,7 +124,7 @@ public class ResourceServiceImpl implements ResourceService {
     }
 
     /***
-     *&#064;Description 获取第三方直连资源列表(九凤谷、船舶物资)
+     *&#064;Description 获取第三方直连资源列表(jfg、船舶物资)
      *@author qsl
      *@date 2025/8/15 10:08
       *@param supplierId
@@ -137,7 +137,7 @@ public class ResourceServiceImpl implements ResourceService {
         ProductSupplierDO supplierDO = productSupplierMapper.selectById(supplierId);
         if(supplierDO!=null && supplierDO.getIsSystemDirect()==1){
             if(ZSHL_SERVICE.equals(supplierDO.getDirectServer())){
-                //九凤谷票务
+                //jfg票务
                 return loadZshlProductList(supplierDO);
             }else if(CRUISE_SERVICE.equals(supplierDO.getDirectServer())){
                 //船舶物资
@@ -153,7 +153,7 @@ public class ResourceServiceImpl implements ResourceService {
     public List<ResourceAccessRespVO> loadZshlProductList(ProductSupplierDO supplierDO){
         List<ResourceAccessRespVO> list = new ArrayList<>();
         try {
-            //九凤谷票务
+            //jfg票务
             String method = "getProductInfo";
             String createOrderUrl = supplierDO.getDirectOrderUrl() + method;
             String userId = supplierDO.getDirectAccount();
@@ -170,7 +170,7 @@ public class ResourceServiceImpl implements ResourceService {
 
             String bodyStr = DesUtil.encrypt(rep_body.toString(), userKey);
             String signStr = userId + method + timestamp + bodyStr + userKey;
-            log.error("九凤谷供应商产品查询开始,signStr:{}", signStr);
+            log.error("jfg供应商产品查询开始,signStr:{}", signStr);
             String sign = MD5Utils.getMD5(signStr.getBytes("UTF-8"));
             rep_head.put("sign", sign);
 
@@ -180,16 +180,16 @@ public class ResourceServiceImpl implements ResourceService {
             Map<String, String> headMap = new HashMap<>();
             headMap.put("Content-type", "application/x-www-form-urlencoded");
 
-            log.info("九凤谷供应商产品查询开始,请求地址:{},请求参数:{}", createOrderUrl, req.toString());
+            log.info("jfg供应商产品查询开始,请求地址:{},请求参数:{}", createOrderUrl, req.toString());
             String res = HttpUtil.createPost(createOrderUrl).contentType("application/json")
                     .body(Base64Util.encode(req.toString()))
                     .headerMap(headMap, false)
                     .timeout(15000)
                     .execute().body();
-            log.info("九凤谷供应商产品查询完成,响应参数:{}", res);
+            log.info("jfg供应商产品查询完成,响应参数:{}", res);
             // base64解密
             String json = new String(Base64.decodeBase64(res.getBytes("UTF-8")));
-            log.info("九凤谷供应商退票完成,响应response参数:{}", json);
+            log.info("jfg供应商退票完成,响应response参数:{}", json);
             JSONObject jsonObj = JSONUtil.parseObj(json);
             JSONObject responseHead = jsonObj.getJSONObject("responseHead");
             if (StringUtils.equals("1000", responseHead.getStr("res_code"))) {
@@ -200,7 +200,7 @@ public class ResourceServiceImpl implements ResourceService {
                 } catch (Exception e) {
                     log.info(e.toString());
                 }
-                log.info("九凤谷供应商退票请求完成,响应body参数:{}", body);
+                log.info("jfg供应商退票请求完成,响应body参数:{}", body);
                 JSONObject responseBody = JSONUtil.parseObj(body);
                 JSONArray jsonArray = responseBody.getJSONArray("productList");
                 for (int i = 0; i < jsonArray.size(); i++) {

+ 1 - 0
ship-module-trade/ship-module-trade-api/src/main/java/com/yc/ship/module/trade/enums/TradeOrderOperateTypeEnum.java

@@ -45,6 +45,7 @@ public enum TradeOrderOperateTypeEnum {
     CANCEL_AUDIT(32, "订单取消审核,结果:{result}"),
     ORDER_DEPOSI_PAY(31, "订单定金支付,支付方式:{payType},金额:{payAmount}"),
     ORDER_BC_PAY(33, "订单补差价支付,支付方式:{payType},金额:{payAmount}"),
+    ORDER_AUDIT_LOG(34, "订单进入审核"),
     ;
 
     /**

+ 16 - 14
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/ShipTradeOrderCreateReqVO.java

@@ -2,11 +2,10 @@ package com.yc.ship.module.trade.controller.admin.order.vo.order;
 
 import com.yc.ship.framework.common.validation.IntEnum;
 import com.yc.ship.framework.common.validation.Mobile;
-import com.yc.ship.module.trade.dal.dataobject.order.*;
-import com.yc.ship.module.trade.dal.dataobject.orderjz.OrderJzDO;
+import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderBindDO;
+import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
+import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderTotalDO;
 import com.yc.ship.module.trade.enums.CredentialTypeEnum;
-import com.yc.ship.module.trade.service.order.bo.TradeOrderBO;
-import com.yc.ship.module.trade.service.order.bo.TradeOrderDetailBO;
 import io.swagger.v3.oas.annotations.Hidden;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -49,6 +48,9 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
     @Hidden
     private String orderNo;
 
+    @Schema(description = "产品名称")
+    private String productName;
+
     @Schema(description = "出行日期", example = "2025-06-01")
     private Date travelDate;
 
@@ -103,7 +105,7 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
     private BigDecimal damaged;
 
     @Schema(description = "补缴费金额")
-    private BigDecimal  supplementAmount;
+    private BigDecimal supplementAmount;
 
     @Schema(description = "取消状态 0:初始  1:待支付(审核通过)2:已支付")
     private Integer damagedStatus;
@@ -134,7 +136,7 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
     private OrderProperty orderProperty;
 
     @Schema(description = "订单备注", example = "xx游客岁数较大")
-    @Length(max = 120,message = "备注不能超过120个字符")
+    @Length(max = 120, message = "备注不能超过120个字符")
     private String remark;
 
     @Schema(description = "其它费用", example = "1")
@@ -216,7 +218,7 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
     @Schema(description = "订单项")
     @Data
     @Valid
-    public static class OrderItem{
+    public static class OrderItem {
         @Schema(description = "游船产品:楼层ID OR 附加产品:附加产品ID", example = "")
         @NotBlank(message = "楼层ID/附加产品ID不能为空")
         private String productId;
@@ -261,7 +263,7 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
     @Schema(description = "订单明细")
     @Data
     @Valid
-    public static class OrderDetail{
+    public static class OrderDetail {
 
         @Schema(description = "游船产品:楼层ID OR 附加产品:附加产品ID", example = "")
         @NotBlank(message = "楼层ID/附加产品ID不能为空")
@@ -306,7 +308,7 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
     @Schema(description = "订单明细基础")
     @Data
     @Valid
-    public static class OrderDetailBase{
+    public static class OrderDetailBase {
 
 
         @Schema(description = "基础产品ID", example = "")
@@ -341,7 +343,7 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
     @Schema(description = "游客信息")
     @Data
     @Valid
-    public static class Visitor{
+    public static class Visitor {
 
         @Schema(description = "游客ID,用于标记是一个人", example = "")
         private String vid;
@@ -370,7 +372,7 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
         private String credentialNo;
 
         @Schema(description = "证件类型", example = "")
-        @IntEnum(value = CredentialTypeEnum.class,message = "证件类型不正确")
+        @IntEnum(value = CredentialTypeEnum.class, message = "证件类型不正确")
         private Integer credentialType;
 
         @Mobile
@@ -413,7 +415,7 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
     @Schema(description = "订单联系人")
     @Data
     @Valid
-    public static class OrderUser{
+    public static class OrderUser {
 
         @Schema(description = "姓名", example = "")
         private String contactName;
@@ -422,7 +424,7 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
         private String credentialNo;
 
         @Schema(description = "证件类型", example = "")
-        @IntEnum(value = CredentialTypeEnum.class,message = "证件类型不正确")
+        @IntEnum(value = CredentialTypeEnum.class, message = "证件类型不正确")
         private Integer credentialType;
 
         @Mobile
@@ -450,7 +452,7 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
     @Schema(description = "订单属性")
     @Data
     @Valid
-    public static class OrderProperty{
+    public static class OrderProperty {
 
         @Schema(description = "游客类型", example = "")
         private Integer visitorType;

+ 6 - 2
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/orderjzdetail/OrderJzDetailController.java

@@ -6,6 +6,7 @@ import com.yc.ship.framework.common.pojo.PageParam;
 import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.common.util.object.BeanUtils;
 import com.yc.ship.framework.excel.core.util.ExcelUtils;
+import com.yc.ship.framework.operatelog.core.annotations.OperateLog;
 import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
 import com.yc.ship.module.product.service.voyage.VoyageService;
 import com.yc.ship.module.resource.dal.dataobject.route.ResourceRouteDO;
@@ -40,6 +41,7 @@ import java.util.stream.Collectors;
 
 import static com.yc.ship.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static com.yc.ship.framework.common.pojo.CommonResult.success;
+import static com.yc.ship.framework.operatelog.core.enums.OperateTypeEnum.TRADE;
 
 @Tag(name = "管理后台 - 订单接站人员名单")
 @RestController
@@ -138,7 +140,7 @@ public class OrderJzDetailController {
       // 接站地点
       if (finalAddressList != null) {
         List<DictDataRespDTO> addressList = finalAddressList.stream().filter(d -> d.getValue().equals(vo.getAddress())).collect(Collectors.toList());
-        if (addressList != null && addressList.size() > 0) {
+        if (!addressList.isEmpty()) {
           vo.setAddress(addressList.get(0).getLabel());
         }
       }
@@ -146,7 +148,7 @@ public class OrderJzDetailController {
       // 接站时间
       if(dictTimeList!=null) {
         List<DictDataRespDTO> timeList = dictTimeList.stream().filter(d -> d.getValue().equals(vo.getArriveTime())).collect(Collectors.toList());
-        if (timeList != null && timeList.size() > 0) {
+        if (!timeList.isEmpty()) {
           vo.setArriveTime(timeList.get(0).getLabel());
         }
       }
@@ -158,6 +160,8 @@ public class OrderJzDetailController {
 
   @PostMapping("/sign")
   @PermitAll
+  @Operation(summary = "订单接站人员名单签到")
+  @OperateLog(type = TRADE)
   public CommonResult<Long> createOrderJzDetail(@Valid @RequestBody List<OrderJzDetailSaveReqVO> createReqVOList) {
     return success(orderJzDetailService.createOrderJzDetail(createReqVOList));
   }

+ 3 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/orderjzdetail/vo/OrderJzDetailSaveReqVO.java

@@ -13,6 +13,9 @@ public class OrderJzDetailSaveReqVO {
     @Schema(description = "接站单ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18565")
     private Long jzId;
 
+    @Schema(description = "游客ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18565")
+    private Long visitorId;
+
     private String batchNo;
     private String idCard;
 

+ 5 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/dataobject/order/TradeVisitorDO.java

@@ -77,11 +77,15 @@ public class TradeVisitorDO extends TenantBaseDO {
      * 关联 {@link CredentialTypeEnum}
      */
     @Schema(description = "证件类型")
-        private Integer credentialType;
+    private Integer credentialType;
 
     @Schema(description = "证件类型名称")
     @TableField(exist = false)
     private String credentialTypeName;
+
+    @Schema(description = "房型名称")
+    @TableField(exist = false)
+    private String roomModelName;
     /**
      * 手机号
      */

+ 2 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/dataobject/orderjz/OrderJzDO.java

@@ -1,5 +1,6 @@
 package com.yc.ship.module.trade.dal.dataobject.orderjz;
 
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
 import lombok.*;
 import java.util.*;
 import com.baomidou.mybatisplus.annotation.*;
@@ -17,7 +18,7 @@ import com.yc.ship.framework.mybatis.core.dataobject.BaseDO;
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class OrderJzDO {
+public class OrderJzDO extends TenantBaseDO {
 
     /**
      * 主键

+ 16 - 4
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/dataobject/orderjzdetail/OrderJzDetailDO.java

@@ -1,9 +1,6 @@
 package com.yc.ship.module.trade.dal.dataobject.orderjzdetail;
 
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import com.yc.ship.framework.mybatis.core.dataobject.BaseDO;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -37,6 +34,11 @@ public class OrderJzDetailDO extends BaseDO {
      */
     private Long jzId;
 
+    /**
+     * 游客ID
+     */
+    private Long visitorId;
+
     private String batchNo;
 
     /**
@@ -72,6 +74,16 @@ public class OrderJzDetailDO extends BaseDO {
     private String signRemark;
     private String signImage;
 
+    /**
+     * 三方订单号
+     */
+    private String extendOrderNo;
+
+    /**
+     * 三方票号
+     */
+    private String extendTicketNo;
+
     /**
      * 分车ID
      */

+ 2 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeDetailMapper.java

@@ -142,6 +142,8 @@ public interface TradeDetailMapper extends BaseMapperX<TradeDetailDO> {
     // endregion
     @TenantIgnore
     List<TradeDetailRespVO> getOrderDetail(@Param("orderId") Long orderId);
+    @TenantIgnore
+    List<TradeDetailRespVO> getOrderDetailByOrderId(@Param("orderId") Long orderId);
 
     Map<String,Object> getProductProject(@Param("projectId") Long projectId);
 

+ 54 - 56
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java

@@ -1,14 +1,12 @@
 package com.yc.ship.module.trade.service.order.impl;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -20,28 +18,26 @@ import com.yc.ship.framework.common.util.collection.CollectionUtils;
 import com.yc.ship.framework.common.util.collection.MapUtils;
 import com.yc.ship.framework.common.util.date.DateUtils;
 import com.yc.ship.framework.common.util.object.ObjectUtils;
-import com.yc.ship.framework.common.util.object.PageUtils;
-import com.yc.ship.framework.ip.core.utils.AreaUtils;
 import com.yc.ship.framework.mybatis.core.util.MyBatisUtils;
 import com.yc.ship.framework.security.core.LoginUser;
 import com.yc.ship.module.ota.api.OtaDistributorApi;
 import com.yc.ship.module.ota.api.dto.DistributorProductRespDTO;
 import com.yc.ship.module.product.api.ProductApi;
 import com.yc.ship.module.product.api.dto.*;
-import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageRespVO;
-import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
 import com.yc.ship.module.product.enums.ProductTypeEnum;
 import com.yc.ship.module.product.enums.SpecTypeEnum;
 import com.yc.ship.module.product.service.voyage.VoyageService;
 import com.yc.ship.module.resource.api.ship.ShipApi;
-import com.yc.ship.module.resource.api.ship.dto.ShipRespDTO;
 import com.yc.ship.module.resource.dal.dataobject.route.ResourceRouteDO;
 import com.yc.ship.module.resource.service.route.ResourceRouteService;
 import com.yc.ship.module.system.api.permission.RoleApi;
 import com.yc.ship.module.system.api.permission.dto.AdminRoleRespDTO;
 import com.yc.ship.module.system.api.user.AdminUserApi;
 import com.yc.ship.module.system.api.user.dto.AdminUserRespDTO;
-import com.yc.ship.module.trade.api.dto.*;
+import com.yc.ship.module.trade.api.dto.TradeBindOrderReqDTO;
+import com.yc.ship.module.trade.api.dto.TradeModifyVisitorReqDTO;
+import com.yc.ship.module.trade.api.dto.TradeOrderCreateReqDTO;
+import com.yc.ship.module.trade.api.dto.TradeOrderRespDTO;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.*;
 import com.yc.ship.module.trade.controller.app.otc.vo.*;
 import com.yc.ship.module.trade.convert.order.TradeOrderConvert;
@@ -54,8 +50,6 @@ import com.yc.ship.module.trade.dal.mysql.order.TradeVisitorMapper;
 import com.yc.ship.module.trade.enums.*;
 import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
 import com.yc.ship.module.trade.framework.common.ExceptionUtils;
-import com.yc.ship.module.trade.framework.common.ThreadLocalUtil;
-import com.yc.ship.module.trade.framework.common.TradeOrderLogUtils;
 import com.yc.ship.module.trade.framework.mq.TradePublishUtils;
 import com.yc.ship.module.trade.service.order.*;
 import com.yc.ship.module.trade.service.order.bo.TradeDetailBO;
@@ -81,7 +75,6 @@ import java.math.RoundingMode;
 import java.time.Duration;
 import java.time.LocalDateTime;
 import java.util.*;
-import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
@@ -187,25 +180,25 @@ public class TradeOrderServiceImpl implements TradeOrderService {
             } else {
                 tradeOrderRespVO.setTotalNum(0);
             }
-            if(tradeOrderRespVO.getAuditUser()!=null && currentRoleList.contains(Long.parseLong(tradeOrderRespVO.getAuditUser()))) {
+            if (tradeOrderRespVO.getAuditUser() != null && currentRoleList.contains(Long.parseLong(tradeOrderRespVO.getAuditUser()))) {
                 tradeOrderRespVO.setIsShowAudit(1);
-            }else{
+            } else {
                 tradeOrderRespVO.setIsShowAudit(0);
             }
-            if(tradeOrderRespVO.getIsRead()==null){
+            if (tradeOrderRespVO.getIsRead() == null) {
                 tradeOrderRespVO.setIsRead(0);
             }
-            if(StringUtils.isNotBlank(tradeOrderRespVO.getAuditUser())){
+            if (StringUtils.isNotBlank(tradeOrderRespVO.getAuditUser())) {
                 tradeOrderRespVO.setAuditUserName(roleMap.get(Long.parseLong(tradeOrderRespVO.getAuditUser())));
             }
             if (tradeOrderRespVO.getReadUser() != null) {
                 tradeOrderRespVO.setReadUserName(userMap.get(tradeOrderRespVO.getReadUser()));
             }
             Integer payStatus = tradeOrderRespVO.getPayStatus();
-            if(payStatus!=null && payStatus==1){
+            if (payStatus != null && payStatus == 1) {
                 tradeOrderRespVO.setLoadPayAmount(BigDecimal.ZERO);
-            }else {
-                BigDecimal deposi = tradeOrderRespVO.getDeposi()==null?BigDecimal.ZERO:tradeOrderRespVO.getDeposi();
+            } else {
+                BigDecimal deposi = tradeOrderRespVO.getDeposi() == null ? BigDecimal.ZERO : tradeOrderRespVO.getDeposi();
                 tradeOrderRespVO.setLoadPayAmount(tradeOrderRespVO.getPayAmount().subtract(deposi));
             }
 
@@ -228,7 +221,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
             //2.下单前处理
             try {
                 beforeOrderCreate(tradeOrderBO);
-            }catch (Exception e){
+            } catch (Exception e) {
                 log.error("下单前处理异常", e);
                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                 throw e;
@@ -255,7 +248,8 @@ public class TradeOrderServiceImpl implements TradeOrderService {
             try {
                 ExceptionUtils.log(log, "下单失败:", e);
                 handleAfterOrderCreateFail(e.getCode(), tradeOrderBO);
-            }catch (Exception ee) {}
+            } catch (Exception ignored) {
+            }
             return CommonResult.error(e);
         } catch (Exception e) {
             log.error("下单失败:", e);
@@ -308,10 +302,10 @@ public class TradeOrderServiceImpl implements TradeOrderService {
 
             String changedFields = BeanUtils.getChangedFields(shipTradeOrderCreateReqVO.getOldtradeOrderDO(), tradeOrderBO.getTradeOrderDO());
             System.err.println("changedFields=" + changedFields + shipTradeOrderCreateReqVO.getChangedFields1());
-            if(tradeOrderBO.getTradeOrderBindDO()!=null) {
+            if (tradeOrderBO.getTradeOrderBindDO() != null) {
                 tradeOrderBO.getTradeOrderBindDO().setRemark(changedFields + shipTradeOrderCreateReqVO.getChangedFields1());
             }
-            tradeOrderRepositoryService.modifyOrder(tradeOrderBO,shipTradeOrderCreateReqVO.getOldtradeOrderDO());
+            tradeOrderRepositoryService.modifyOrder(tradeOrderBO, shipTradeOrderCreateReqVO.getOldtradeOrderDO());
             //4 下单成功回调
 //            tradeSupplierCallbackService.afterAllOrderCreate(tradeOrderBO.getTradeOrderDO());
             //5.下单后处理
@@ -327,7 +321,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
             try {
                 ExceptionUtils.log(log, "订单修改失败:", e);
                 handleAfterOrderCreateFail(e.getCode(), tradeOrderBO);
-            }catch (Exception ignored){
+            } catch (Exception ignored) {
 
             }
             return CommonResult.error(e);
@@ -523,18 +517,20 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         TradeOrderDO oldtradeOrderDO = orderCreateReqDTO.getOldtradeOrderDO();
         //订单
         TradeOrderDO tradeOrderDO = new TradeOrderDO();
-        if(oldtradeOrderDO!=null){
+        if (oldtradeOrderDO != null) {
             tradeOrderDO.setSellMethod(oldtradeOrderDO.getSellMethod());
-        }else{
+        } else {
             tradeOrderDO.setSellMethod(orderCreateReqDTO.getOrderProperty().getSellMethod());
         }
         tradeOrderDO.setSourceId(orderCreateReqDTO.getOrderProperty().getSourceId());
         tradeOrderDO.setSourceName(orderCreateReqDTO.getOrderProperty().getSourceName());
         tradeOrderDO.setSellerId(orderCreateReqDTO.getOrderProperty().getSellerId());
         tradeOrderDO.setMemberId(orderCreateReqDTO.getOrderProperty().getMemberId());
-        if(oldtradeOrderDO!=null) {
+        tradeOrderDO.setShareName(orderCreateReqDTO.getProductName());
+        if (oldtradeOrderDO != null) {
             tradeOrderDO.setStoreId(oldtradeOrderDO.getStoreId());
             tradeOrderDO.setStoreName(oldtradeOrderDO.getStoreName());
+            tradeOrderDO.setShareName(oldtradeOrderDO.getShareName());
             tradeOrderDO.setExternalOrderNo(oldtradeOrderDO.getExternalOrderNo());
             tradeOrderDO.setConfirmDate(oldtradeOrderDO.getConfirmDate());
             tradeOrderDO.setCreator(oldtradeOrderDO.getCreator());
@@ -552,11 +548,11 @@ public class TradeOrderServiceImpl implements TradeOrderService {
             tradeOrderDO.setSellerId(oldtradeOrderDO.getSellerId());
             tradeOrderDO.setMemberId(oldtradeOrderDO.getMemberId());
             tradeOrderDO.setTravelStatus(oldtradeOrderDO.getTravelStatus());
-        }else{
+        } else {
             tradeOrderDO.setStoreId(orderCreateReqDTO.getOrderProperty().getStoreId());
             tradeOrderDO.setStoreName(orderCreateReqDTO.getOrderProperty().getStoreName());
             tradeOrderDO.setExternalOrderNo(orderCreateReqDTO.getExternalOrderNo());
-            tradeOrderDO.setCreator(getLoginUserId()+"");
+            tradeOrderDO.setCreator(getLoginUserId() + "");
             tradeOrderDO.setCreateTime(LocalDateTime.now());
         }
         tradeOrderDO.setTravelDate(orderCreateReqDTO.getTravelDate());
@@ -686,6 +682,9 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         if (productSpuRespDTO == null) {
             productSpuRespDTO = new ProductSpuRespDTO();
             productSpuRespDTO.setProductName("游轮产品" + orderCreateReqDTO.getVoyageId());
+            if (StringUtils.isNotEmpty(tradeOrderDO.getShareName())) {
+                productSpuRespDTO.setProductName(tradeOrderDO.getShareName());
+            }
             productSpuRespDTO.setId(0L);
         }
         List<TradeDetailDO> tradeDetailDOList = new ArrayList<>();
@@ -760,15 +759,15 @@ public class TradeOrderServiceImpl implements TradeOrderService {
                     }
                     tradeVisitorDO.setCreateTime(LocalDateTime.now());
 
-                    int num = tradeVisitorMapper.queryVisitorByVovageId(voyageId, visitor.getCredentialNo(),tradeOrderDO.getOrderNo());
-                    if(num>0){
+                    int num = tradeVisitorMapper.queryVisitorByVovageId(voyageId, visitor.getCredentialNo(), tradeOrderDO.getOrderNo());
+                    if (num > 0) {
                         repeatVisitor.add(visitor.getCredentialNo());
                     }
                     tradeVisitorDOList.add(tradeVisitorDO);
                 }
             }
         });
-        if(!repeatVisitor.isEmpty()) {
+        if (!repeatVisitor.isEmpty()) {
             throw exception0(500, "该证件号`" + String.join(",", repeatVisitor) + "`已经购买过当前航次,请更换其他证件");
         }
         orderItem.getDetailList().forEach(orderDetail -> {
@@ -1186,7 +1185,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     private void afterOrderCreate(TradeOrderBO tradeOrderBO) {
         //执行下单后处理器
         tradeOrderHandlers.forEach(handler -> handler.afterOrderCreate(tradeOrderBO));
-        if(tradeOrderBO.getTradeOrderDO().getSellMethod()==3) {
+        if (tradeOrderBO.getTradeOrderDO().getSellMethod() == 3) {
             tradePublishUtils.publishOrderCreateSuccessMsg(tradeOrderBO.getTradeOrderDO().getId().toString());
         }
         //支付倒计时--不超时,有预订单
@@ -1238,7 +1237,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
                     }
                     if (productGroupRespDTO != null && useDate != null && ObjectUtil.equal(productGroupRespDTO.getCanRepeatBuy(), NO)) {
 
-                        List<Long> detailIdList = tradeDetailBaseDOList.stream().filter(tradeDetailBaseDO -> ObjectUtil.equal(tradeDetailBaseDO.getProductBaseId(), productGroupRespDTO.getProductBaseId())).map(tradeDetailBaseDO -> tradeDetailBaseDO.getDetailId()).collect(Collectors.toList());
+                        List<Long> detailIdList = tradeDetailBaseDOList.stream().filter(tradeDetailBaseDO -> ObjectUtil.equal(tradeDetailBaseDO.getProductBaseId(), productGroupRespDTO.getProductBaseId())).map(TradeDetailBaseDO::getDetailId).collect(Collectors.toList());
                         credentialNoList = tradeVisitorDOList.stream().filter(visitor -> {
                             Long detailId = detailIdList.stream().filter(id -> ObjectUtil.equal(id, visitor.getDetailId())).findFirst().orElse(null);
                             return detailId != null && StrUtil.isNotBlank(visitor.getCredentialNo());
@@ -1260,7 +1259,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
 
     /**
      * 因窗口可以改价,小程序有优惠券,重新计算支付单价和需要补的金额
-     *
      */
     private BigDecimal resetPriceAndReturnSubAmount(TradeOrderCreateReqDTO orderCreateReqDTO) {
         //订单可以改价,规格的总金额可以改价
@@ -1390,9 +1388,9 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     @Override
     public TradeOrderDO getLastOrderByOrderNo(String orderNo) {
         List<TradeOrderDO> list = tradeOrderMapper.queryOrderByLast(orderNo);
-        if(CollUtil.isEmpty(list)){
+        if (CollUtil.isEmpty(list)) {
             return null;
-        }else{
+        } else {
             return list.get(0);
         }
     }
@@ -1407,7 +1405,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
             pageReqVO.setStoreId(agencyLoginUser.getStoreId());
         }
         Map<String, Object> map = tradeOrderMapper.getOrderCount(pageReqVO);
-        return MapUtil.getStr(map, "name")+";成人:"+MapUtil.getStr(map, "num1")+",儿童:"+MapUtil.getStr(map, "num2")+",陪同:"+MapUtil.getStr(map, "num3")+";领队:"+MapUtil.getStr(map, "num4");
+        return MapUtil.getStr(map, "name") + ";成人:" + MapUtil.getStr(map, "num1") + ",儿童:" + MapUtil.getStr(map, "num2") + ",陪同:" + MapUtil.getStr(map, "num3") + ";领队:" + MapUtil.getStr(map, "num4");
     }
 
     @Override
@@ -1421,21 +1419,21 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     public List<AppMyItineraryVO> getMyItinerary(Long loginUserId, Integer status, String keyword) {
         List<AppMyItineraryVO> list = tradeOrderMapper.selectMyItinerary(loginUserId, status, keyword);
         List<Long> orderIds = CollectionUtils.convertList(list, AppMyItineraryVO::getOrderId);
-        if(CollectionUtils.isAnyEmpty(orderIds)) {
+        if (CollectionUtils.isAnyEmpty(orderIds)) {
             return list;
         }
         List<AppPersonDescVO> personDescVOS = tradeVisitorMapper.selectPersonDesc(orderIds);
         Map<Long, AppPersonDescVO> personDescMap = CollectionUtils.convertMap(personDescVOS, AppPersonDescVO::getOrderId);
         List<AppRoomDescVO> roomDescVOS = tradeOrderRoomModelMapper.selectRoomDesc(orderIds);
         Map<Long, AppRoomDescVO> roomDescMap = CollectionUtils.convertMap(roomDescVOS, AppRoomDescVO::getOrderId);
-        list.stream().forEach(item -> {
+        list.forEach(item -> {
             String statusDesc = formatStatus(status, item.getBoardingTime());
             item.setStatusDesc(statusDesc);
             MapUtils.findAndThen(personDescMap, item.getOrderId(), personDescVO -> {
                 item.setPersonDesc(personDescVO.getName() + "等" + personDescVO.getNum() + "人");
             });
             MapUtils.findAndThen(roomDescMap, item.getOrderId(), roomDescVO -> {
-                item.setRoomDesc((roomDescVO.getRoomNum() == null ? "" : roomDescVO.getRoomNum()) + roomDescVO.getRoomModelName() + "(" + roomDescVO.getFloor() + "F)" );
+                item.setRoomDesc((roomDescVO.getRoomNum() == null ? "" : roomDescVO.getRoomNum()) + roomDescVO.getRoomModelName() + "(" + roomDescVO.getFloor() + "F)");
             });
         });
         return list;
@@ -1456,22 +1454,22 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     private String formatStatus(Integer status, LocalDateTime boardingTime) {
         String statusDesc = "";
         switch (status) {
-           case 1:
-               statusDesc += "待出行";
-               Duration between = LocalDateTimeUtil.between(LocalDateTime.now(), boardingTime);
-               long l = between.toDays();
-               if (l > 0) {
-                   statusDesc += "(距离登船" + l + "天)";
-               }else {
-                   long l1 = between.toHours();
-                   if (l1 > 0) {
-                       statusDesc += "(距离登船" + l1 + "小时)";
-                   }else {
-                       long l2 = between.toMinutes();
-                       statusDesc += "(距离登船" + l2 + "分)";
-                   }
-               }
-               break;
+            case 1:
+                statusDesc += "待出行";
+                Duration between = LocalDateTimeUtil.between(LocalDateTime.now(), boardingTime);
+                long l = between.toDays();
+                if (l > 0) {
+                    statusDesc += "(距离登船" + l + "天)";
+                } else {
+                    long l1 = between.toHours();
+                    if (l1 > 0) {
+                        statusDesc += "(距离登船" + l1 + "小时)";
+                    } else {
+                        long l2 = between.toMinutes();
+                        statusDesc += "(距离登船" + l2 + "分)";
+                    }
+                }
+                break;
             case 2:
                 statusDesc += "进行中";
                 break;

+ 7 - 11
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/orderjz/OrderJzServiceImpl.java

@@ -1,21 +1,17 @@
 package com.yc.ship.module.trade.service.orderjz;
 
-import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
-import com.yc.ship.module.trade.controller.admin.orderjz.vo.*;
-import com.yc.ship.module.trade.dal.dataobject.orderjz.OrderJzDO;
 import com.yc.ship.framework.common.pojo.PageResult;
-import com.yc.ship.framework.common.pojo.PageParam;
 import com.yc.ship.framework.common.util.object.BeanUtils;
-
+import com.yc.ship.module.trade.controller.admin.orderjz.vo.OrderJzPageReqVO;
+import com.yc.ship.module.trade.controller.admin.orderjz.vo.OrderJzSaveReqVO;
+import com.yc.ship.module.trade.dal.dataobject.orderjz.OrderJzDO;
 import com.yc.ship.module.trade.dal.mysql.orderjz.OrderJzMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
 
 import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static com.yc.ship.module.trade.enums.ErrorCodeConstants.*;
 
 /**
  * 订单接站 Service 实现类

+ 278 - 203
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/orderjzdetail/OrderJzDetailServiceImpl.java

@@ -2,6 +2,8 @@ package com.yc.ship.module.trade.service.orderjzdetail;
 
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.util.IdUtil;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
 import com.alibaba.excel.util.DateUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -18,11 +20,13 @@ import com.yc.ship.module.trade.dal.dataobject.orderjzdetail.OrderJzDetailDO;
 import com.yc.ship.module.trade.dal.mysql.order.TradeOrderMapper;
 import com.yc.ship.module.trade.dal.mysql.orderjz.OrderJzMapper;
 import com.yc.ship.module.trade.dal.mysql.orderjzdetail.OrderJzDetailMapper;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -38,230 +42,301 @@ import static com.yc.ship.framework.security.core.util.SecurityFrameworkUtils.ge
  */
 @Service
 @Validated
+@Slf4j
 public class OrderJzDetailServiceImpl implements OrderJzDetailService {
 
-  @Resource
-  private TradeOrderMapper tradeOrderMapper;
+    @Resource
+    private TradeOrderMapper tradeOrderMapper;
 
-  @Resource
-  private OrderJzMapper orderJzMapper;
+    @Resource
+    private OrderJzMapper orderJzMapper;
 
-  @Resource
-  private OrderJzDetailMapper orderJzDetailMapper;
+    @Resource
+    private OrderJzDetailMapper orderJzDetailMapper;
 
-  @Override
-  public Long createOrderJzDetail(OrderJzDetailSaveReqVO createReqVO) {
-    // 插入
-    OrderJzDetailDO orderJzDetail = BeanUtils.toBean(createReqVO, OrderJzDetailDO.class);
-    orderJzDetail.setTenantId(1L);
-    orderJzDetail.setIdCard(createReqVO.getIdCard());
-    orderJzDetailMapper.insert(orderJzDetail);
-    // 返回
-    return orderJzDetail.getId();
-  }
+    @Override
+    public Long createOrderJzDetail(OrderJzDetailSaveReqVO createReqVO) {
+        // 插入
+        OrderJzDetailDO orderJzDetail = BeanUtils.toBean(createReqVO, OrderJzDetailDO.class);
+        orderJzDetail.setTenantId(1L);
+        orderJzDetail.setIdCard(createReqVO.getIdCard());
+        orderJzDetailMapper.insert(orderJzDetail);
+        // 返回
+        return orderJzDetail.getId();
+    }
 
 
-  @Override
-  @TenantIgnore
-  public Long createOrderJzDetail(List<OrderJzDetailSaveReqVO> createReqVOList) {
-    if (createReqVOList == null || createReqVOList.isEmpty()) {
-      return 0L;
+    @Override
+    @TenantIgnore
+    public Long createOrderJzDetail(List<OrderJzDetailSaveReqVO> createReqVOList) {
+        if (createReqVOList == null || createReqVOList.isEmpty()) {
+            return 0L;
+        }
+        String oid = createReqVOList.get(0).getOid();
+        if (oid == null || oid.isEmpty()) {
+            throw new RuntimeException("未查询到相关订单");
+        }
+        TradeOrderDO orderDo = tradeOrderMapper.selectOne(new LambdaQueryWrapper<TradeOrderDO>().eq(TradeOrderDO::getId, oid));
+        if (orderDo == null) {
+            throw new RuntimeException("未查询到相关订单");
+        }
+        // 根据订单编号查询jz编号
+        OrderJzDO orderJzDO = orderJzMapper.selectOne(new LambdaQueryWrapper<OrderJzDO>().eq(OrderJzDO::getOrderId, oid));
+        if (orderJzDO == null) {
+            orderJzDO = new OrderJzDO();
+            orderJzDO.setId(IdUtil.getSnowflake(0, 0).nextId());
+            orderJzDO.setIsJz(1);
+            orderJzDO.setJzAddress("");
+            orderJzDO.setJzLinkName("");
+            orderJzDO.setJzLinkPhone("");
+            orderJzDO.setOrderId(orderDo.getId());
+            orderJzDO.setCreateTime(LocalDateTime.now());
+            orderJzDO.setTenantId(orderDo.getTenantId());
+            orderJzDO.setDeleted(false);
+            orderJzMapper.insert(orderJzDO);
+        }
+        long count = 0;
+        String batchNo = IdUtil.getSnowflake(0, 0).nextIdStr();
+        // 先删除当前传入游客的历史接站数据
+        for (OrderJzDetailSaveReqVO orderJzDetailSaveReqVO : createReqVOList) {
+            orderJzDetailMapper.delete(new LambdaQueryWrapper<OrderJzDetailDO>().eq(OrderJzDetailDO::getVisitorId, orderJzDetailSaveReqVO.getVisitorId()));
+        }
+        //处理三方系统退票
+        for (OrderJzDetailSaveReqVO orderJzDetailSaveReqVO : createReqVOList) {
+            orderJzDetailSaveReqVO.setBatchNo(batchNo);
+            createOrderJzDetail(orderJzDetailSaveReqVO);
+            count++;
+        }
+        try {
+            //处理三方系统出票 二期接站
+            createSupplierJz(createReqVOList, orderDo);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return count;
     }
-    String oid = createReqVOList.get(0).getOid();
-    if (oid == null || oid.isEmpty()) {
-      throw new RuntimeException("未查询到相关订单");
+
+    private void createSupplierJz(List<OrderJzDetailSaveReqVO> createReqVOList, TradeOrderDO tradeOrderDO) {
+        Long id = null;
+        String productId = "";
+        String bookname = "";
+        String mobile = "";
+        String idcard = "";
+        for (OrderJzDetailSaveReqVO orderJzDetailSaveReqVO : createReqVOList) {
+            id = orderJzDetailSaveReqVO.getId();
+            mobile = orderJzDetailSaveReqVO.getPhone();
+            idcard = orderJzDetailSaveReqVO.getIdCard();
+        }
+        JSONObject rep_body = new JSONObject();
+        rep_body.put("orderId", id);
+        rep_body.put("travelDate", tradeOrderDO.getTravelDate());
+        rep_body.put("travelTime", "");
+        rep_body.put("quantity", createReqVOList.size());
+        rep_body.put("productId", "productId");
+        rep_body.put("bookName", bookname);
+        rep_body.put("bookMobile", mobile);
+        rep_body.put("idCard", idcard);
+
+        JSONArray vistorList = new JSONArray();
+        for (OrderJzDetailSaveReqVO tradeVisitorDO : createReqVOList) {
+            JSONObject vistor = new JSONObject();
+            vistor.put("name", tradeVisitorDO.getName());
+            vistor.put("mobile", tradeVisitorDO.getPhone());
+            vistor.put("idCard", tradeVisitorDO.getIdCard());
+            vistor.put("face", "");
+            vistorList.add(vistor);
+        }
+        rep_body.put("visitPersons", vistorList);
+//    String bodyStr = DesUtil.encrypt(rep_body.toString(),userKey);
+//    String signStr = userId+method+timestamp+bodyStr+userKey;
+//    log.info("jfg供应商预下单开始,signStr:{}",signStr);
+//    String sign = MD5Utils.getMD5(signStr.getBytes("UTF-8"));
+//
+//    JSONObject rep_head=new JSONObject();
+//    rep_head.put("user_id", userId);
+//    rep_head.put("method",method );
+//    rep_head.put("timestamp", timestamp);
+//    rep_head.put("sign", sign);
+//
+//    JSONObject req=new JSONObject();
+//    req.put("requestHead", rep_head);
+//    req.put("requestBody", bodyStr);
+//    Map<String, String> headMap = new HashMap<>();
+//    headMap.put("Content-type", "application/x-www-form-urlencoded");
+//    log.info("jfg供应商预下单开始,请求地址:{},请求参数:{}",createOrderUrl,req.toString());
+//    String res = HttpUtil.createPost(createOrderUrl).contentType("application/json")
+//            .body(Base64Util.encode(req.toString()))
+//            .headerMap(headMap,false)
+//            .timeout(100000)
+//            .execute().body();
+//    log.info("jfg供应商预下单完成,响应参数:{}",res);
+//    // base64解密
+//    String json = new String(Base64.decodeBase64(res.getBytes("UTF-8")));
+//    log.info("jfg供应商预下单完成,响应response参数:{}",json);
+//    JSONObject jsonObj = JSONUtil.parseObj(json);
+//    JSONObject responseHead = jsonObj.getJSONObject("responseHead");
+//    if(StringUtils.equals("1000",responseHead.getStr("res_code"))){
+//      String response = jsonObj.getStr("responseBody");
+//      String body = "";
+//      try {
+//        body = DesUtil.decrypt(response, userKey);
+//      } catch (Exception e) {
+//        log.info(e.toString());
+//      }
+//      log.info("jfg供应商预下单完成,响应body参数:{}",body);
+//      JSONObject responseBody =JSONUtil.parseObj(body);
+//      return CommonResult.success(new SupplierTradeOrderRespBO().setSupplierOrderNo(responseBody.getStr("partnerOrderId")));
+//    }else{
+//      return CommonResult.error(500,responseHead.getStr("res_msg"));
+//    }
     }
-    TradeOrderDO orderDo = tradeOrderMapper.selectOne(new LambdaQueryWrapper<TradeOrderDO>().eq(TradeOrderDO::getId, oid));
-    if (orderDo == null) {
-      throw new RuntimeException("未查询到相关订单");
+
+
+    @Override
+    public void updateOrderJzDetail(OrderJzDetailSaveReqVO updateReqVO) {
+        // 校验存在
+        validateOrderJzDetailExists(updateReqVO.getId());
+        // 更新
+        OrderJzDetailDO updateObj = BeanUtils.toBean(updateReqVO, OrderJzDetailDO.class);
+        orderJzDetailMapper.updateById(updateObj);
     }
-    // 根据订单编号查询jz编号
-    OrderJzDO orderJzDO = orderJzMapper.selectOne(new LambdaQueryWrapper<OrderJzDO>().eq(OrderJzDO::getOrderId, oid));
-    if (orderJzDO == null) {
-      orderJzDO = new OrderJzDO();
-      orderJzDO.setId(IdUtil.getSnowflake(0, 0).nextId());
-      orderJzDO.setIsJz(1);
-      orderJzDO.setJzAddress("");
-      orderJzDO.setJzLinkName("");
-      orderJzDO.setJzLinkPhone("");
-      orderJzDO.setOrderId(orderDo.getId());
-      orderJzMapper.insert(orderJzDO);
+
+    @Override
+    public void deleteOrderJzDetail(Long id) {
+        // 校验存在
+        validateOrderJzDetailExists(id);
+        // 删除
+        orderJzDetailMapper.deleteById(id);
     }
 
-    long count = 0;
-    String batchNo = IdUtil.getSnowflake(0, 0).nextIdStr();
-    // 先删除上一次手机号录入的数据
-    for (OrderJzDetailSaveReqVO orderJzDetailSaveReqVO : createReqVOList) {
-      orderJzDetailSaveReqVO.setJzId(orderJzDO.getId());
-      deleteDetailList(orderJzDetailSaveReqVO.getJzId(), orderJzDetailSaveReqVO.getIdCard());
+    private void validateOrderJzDetailExists(Long id) {
+        if (orderJzDetailMapper.selectById(id) == null) {
+            throw exception(500, "不存在");
+        }
     }
-    for (OrderJzDetailSaveReqVO orderJzDetailSaveReqVO : createReqVOList) {
-      orderJzDetailSaveReqVO.setBatchNo(batchNo);
-      createOrderJzDetail(orderJzDetailSaveReqVO);
-      count++;
+
+    @Override
+    public OrderJzDetailDO getOrderJzDetail(Long id) {
+        return orderJzDetailMapper.selectById(id);
     }
-    return count;
-  }
-
-  private void deleteDetailList(Long jzId, String idCard) {
-    LambdaQueryWrapper<OrderJzDetailDO> w1 = new LambdaQueryWrapper<>();
-    w1.eq(OrderJzDetailDO::getJzId, jzId);
-    w1.eq(OrderJzDetailDO::getIdCard, idCard);
-    List<OrderJzDetailDO> detailList = orderJzDetailMapper.selectList(w1);
-    if (detailList == null || detailList.isEmpty()) {
-      return;
+
+    @Override
+    public PageResult<OrderJzDetailDO> getOrderJzDetailPage(OrderJzDetailPageReqVO pageReqVO) {
+        return orderJzDetailMapper.selectPage(pageReqVO);
     }
-    for (OrderJzDetailDO orderJzDetailDO : detailList) {
-      orderJzDetailMapper.deleteById(orderJzDetailDO.getId());
+
+    @Override
+    public List<OrderJzDetailDO> selectPageByVoyageId(String voyageId) {
+        return orderJzDetailMapper.selectPageByVoyageId(voyageId);
     }
-  }
-
-
-  @Override
-  public void updateOrderJzDetail(OrderJzDetailSaveReqVO updateReqVO) {
-    // 校验存在
-    validateOrderJzDetailExists(updateReqVO.getId());
-    // 更新
-    OrderJzDetailDO updateObj = BeanUtils.toBean(updateReqVO, OrderJzDetailDO.class);
-    orderJzDetailMapper.updateById(updateObj);
-  }
-
-  @Override
-  public void deleteOrderJzDetail(Long id) {
-    // 校验存在
-    validateOrderJzDetailExists(id);
-    // 删除
-    orderJzDetailMapper.deleteById(id);
-  }
-
-  private void validateOrderJzDetailExists(Long id) {
-    if (orderJzDetailMapper.selectById(id) == null) {
-      throw exception(500,"不存在");
+
+    @Override
+    public List<OrderJzDetailDO> getOrderJzDetailList(OrderJzDetailPageReqVO pageReqVO) {
+        String oid = pageReqVO.getOid();
+        // 根据订单编号查询jz编号
+        OrderJzDO orderJzDO = orderJzMapper.selectOne(new LambdaQueryWrapper<OrderJzDO>().eq(OrderJzDO::getOrderId, oid));
+        if (orderJzDO == null) {
+            return new ArrayList<>();
+        }
+        pageReqVO.setJzId(orderJzDO.getId());
+        return orderJzDetailMapper.selectList(pageReqVO);
     }
-  }
-
-  @Override
-  public OrderJzDetailDO getOrderJzDetail(Long id) {
-    return orderJzDetailMapper.selectById(id);
-  }
-
-  @Override
-  public PageResult<OrderJzDetailDO> getOrderJzDetailPage(OrderJzDetailPageReqVO pageReqVO) {
-    return orderJzDetailMapper.selectPage(pageReqVO);
-  }
-
-  @Override
-  public List<OrderJzDetailDO> selectPageByVoyageId(String voyageId) {
-    return orderJzDetailMapper.selectPageByVoyageId(voyageId);
-  }
-
-  @Override
-  public List<OrderJzDetailDO> getOrderJzDetailList(OrderJzDetailPageReqVO pageReqVO) {
-    String oid = pageReqVO.getOid();
-    // 根据订单编号查询jz编号
-    OrderJzDO orderJzDO = orderJzMapper.selectOne(new LambdaQueryWrapper<OrderJzDO>().eq(OrderJzDO::getOrderId, oid));
-    if (orderJzDO == null) {
-      return new ArrayList<>();
+
+    @Override
+    public Long cleanOrderJzDetail(String id) {
+        return orderJzDetailMapper.cleanSign(id);
     }
-    pageReqVO.setJzId(orderJzDO.getId());
-    return orderJzDetailMapper.selectList(pageReqVO);
-  }
-
-  @Override
-  public Long cleanOrderJzDetail(String id) {
-    return orderJzDetailMapper.cleanSign(id);
-  }
-
-  @Override
-  public Long signOrderJzDetail(OrderJzDetailSaveReqVO createReqVO) {
-    OrderJzDetailDO detail = getOrderJzDetail(createReqVO.getId());
-    // 如果ID为空,则为补登游客,按订单来查询
-    if(detail == null) {
-      // 查询是否有接站头表
-      List<OrderJzDO> orderJzDOList  = orderJzMapper.selectList(new LambdaQueryWrapper<OrderJzDO>().eq(OrderJzDO::getOrderId, createReqVO.getOid()));
-      OrderJzDO orderJzDO = null;
-      if (orderJzDOList == null || orderJzDOList.size() == 0) { // 创建一条
-        TradeOrderDO orderDo = tradeOrderMapper.selectById(createReqVO.getOid());
-        if (orderDo == null) {
-          throw new RuntimeException("未查询到相关订单");
+
+    @Override
+    public Long signOrderJzDetail(OrderJzDetailSaveReqVO createReqVO) {
+        OrderJzDetailDO detail = getOrderJzDetail(createReqVO.getId());
+        // 如果ID为空,则为补登游客,按订单来查询
+        if (detail == null) {
+            // 查询是否有接站头表
+            List<OrderJzDO> orderJzDOList = orderJzMapper.selectList(new LambdaQueryWrapper<OrderJzDO>().eq(OrderJzDO::getOrderId, createReqVO.getOid()));
+            OrderJzDO orderJzDO = null;
+            if (orderJzDOList == null || orderJzDOList.size() == 0) { // 创建一条
+                TradeOrderDO orderDo = tradeOrderMapper.selectById(createReqVO.getOid());
+                if (orderDo == null) {
+                    throw new RuntimeException("未查询到相关订单");
+                }
+                orderJzDO = new OrderJzDO();
+                orderJzDO.setId(IdUtil.getSnowflake(0, 0).nextId());
+                orderJzDO.setIsJz(1);
+                orderJzDO.setJzAddress("");
+                orderJzDO.setJzLinkName("");
+                orderJzDO.setJzLinkPhone("");
+                orderJzDO.setOrderId(Long.valueOf(createReqVO.getOid()));
+                orderJzMapper.insert(orderJzDO);
+            } else {
+                orderJzDO = orderJzDOList.get(0);
+            }
+            detail = new OrderJzDetailDO();
+            detail.setJzId(orderJzDO.getId());
+            detail.setBatchNo(IdUtil.getSnowflake(0, 0).nextIdStr());
+            detail.setArriveTime(createReqVO.getArriveTime());
+            detail.setAddress(createReqVO.getAddress());
+            detail.setName(createReqVO.getName());
+            detail.setIdCard(createReqVO.getIdCard());
+            detail.setPhone(createReqVO.getPhone());
+            detail.setRemark("接站补登");
+            detail.setStatus(1);
         }
-        orderJzDO = new OrderJzDO();
-        orderJzDO.setId(IdUtil.getSnowflake(0, 0).nextId());
-        orderJzDO.setIsJz(1);
-        orderJzDO.setJzAddress("");
-        orderJzDO.setJzLinkName("");
-        orderJzDO.setJzLinkPhone("");
-        orderJzDO.setOrderId(Long.valueOf(createReqVO.getOid()));
-        orderJzMapper.insert(orderJzDO);
-      } else {
-        orderJzDO = orderJzDOList.get(0);
-      }
-      detail = new OrderJzDetailDO();
-      detail.setJzId(orderJzDO.getId());
-      detail.setBatchNo(IdUtil.getSnowflake(0, 0).nextIdStr());
-      detail.setArriveTime(createReqVO.getArriveTime());
-      detail.setAddress(createReqVO.getAddress());
-      detail.setName(createReqVO.getName());
-      detail.setIdCard(createReqVO.getIdCard());
-      detail.setPhone(createReqVO.getPhone());
-      detail.setRemark("接站补登");
-      detail.setStatus(1);
+        detail.setSignTime(DateUtils.format(new Date(), DatePattern.NORM_DATETIME_PATTERN));
+        // 当前登录人
+        LoginUser loginUser = getLoginUser();
+        detail.setSignMan(MapUtils.getString(loginUser.getInfo(), LoginUser.INFO_KEY_NICKNAME));
+        detail.setSignRemark(createReqVO.getSignRemark());
+        detail.setSignImage(createReqVO.getSignImage());
+
+        if (detail.getId() == null) {
+            orderJzDetailMapper.insert(detail);
+        } else {
+            orderJzDetailMapper.updateById(detail);
+        }
+        return detail.getId();
+    }
+
+    @Override
+    public PageResult<OrderJzDetailDO> getOrderJzDetailPage2(OrderJzDetailPageReqVO pageReqVO) {
+        IPage<OrderJzDetailDO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
+        IPage<OrderJzDetailDO> iPage = orderJzDetailMapper.selectPage2(page, pageReqVO);
+        return new PageResult<>(iPage.getRecords(), iPage.getTotal());
     }
-    detail.setSignTime(DateUtils.format(new Date(), DatePattern.NORM_DATETIME_PATTERN));
-    // 当前登录人
-    LoginUser loginUser = getLoginUser();
-    detail.setSignMan(MapUtils.getString(loginUser.getInfo(), LoginUser.INFO_KEY_NICKNAME));
-    detail.setSignRemark(createReqVO.getSignRemark());
-    detail.setSignImage(createReqVO.getSignImage());
-
-    if(detail.getId() == null) {
-      orderJzDetailMapper.insert(detail);
-    } else {
-      orderJzDetailMapper.updateById(detail);
+
+
+    @Override
+    public PageResult<?> getOrderJzDetailPage3(OrderJzDetailPageReqVO pageReqVO) {
+        IPage<Map> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
+        IPage<?> iPage = orderJzDetailMapper.selectPage3(page, pageReqVO);
+        return new PageResult<>(iPage.getRecords(), iPage.getTotal());
+    }
+
+    @Override
+    public List<OrderJzDetailDO> getVisitorExportList(OrderJzDetailPageReqVO pageReqVO) {
+        return orderJzDetailMapper.selectVisitorExportList(pageReqVO);
+    }
+
+    // ==================== 赠送行程接站相关 ====================
+
+    @Override
+    public PageResult<OrderJzDetailDO> getGiftPage(OrderJzDetailPageReqVO pageReqVO) {
+        IPage<OrderJzDetailDO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
+        IPage<OrderJzDetailDO> iPage = orderJzDetailMapper.selectGiftPage(page, pageReqVO);
+        return new PageResult<>(iPage.getRecords(), iPage.getTotal());
+    }
+
+    @Override
+    public List<OrderJzDetailDO> getGiftExportList(OrderJzDetailPageReqVO pageReqVO) {
+        return orderJzDetailMapper.selectGiftExportList(pageReqVO);
+    }
+
+    @Override
+    public PageResult<?> getGiftOrderPage(OrderJzDetailPageReqVO pageReqVO) {
+        IPage<Map> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
+        IPage<?> iPage = orderJzDetailMapper.selectGiftOrderPage(page, pageReqVO);
+        return new PageResult<>(iPage.getRecords(), iPage.getTotal());
     }
-    return detail.getId();
-  }
-
-  @Override
-  public PageResult<OrderJzDetailDO> getOrderJzDetailPage2(OrderJzDetailPageReqVO pageReqVO) {
-    IPage<OrderJzDetailDO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
-    IPage<OrderJzDetailDO> iPage = orderJzDetailMapper.selectPage2(page, pageReqVO);
-    return new PageResult<>(iPage.getRecords(), iPage.getTotal());
-  }
-
-
-  @Override
-  public PageResult<?> getOrderJzDetailPage3(OrderJzDetailPageReqVO pageReqVO) {
-    IPage<Map> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
-    IPage<?> iPage = orderJzDetailMapper.selectPage3(page, pageReqVO);
-    return new PageResult<>(iPage.getRecords(), iPage.getTotal());
-  }
-
-  @Override
-  public List<OrderJzDetailDO> getVisitorExportList(OrderJzDetailPageReqVO pageReqVO) {
-    return orderJzDetailMapper.selectVisitorExportList(pageReqVO);
-  }
-
-  // ==================== 赠送行程接站相关 ====================
-
-  @Override
-  public PageResult<OrderJzDetailDO> getGiftPage(OrderJzDetailPageReqVO pageReqVO) {
-    IPage<OrderJzDetailDO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
-    IPage<OrderJzDetailDO> iPage = orderJzDetailMapper.selectGiftPage(page, pageReqVO);
-    return new PageResult<>(iPage.getRecords(), iPage.getTotal());
-  }
-
-  @Override
-  public List<OrderJzDetailDO> getGiftExportList(OrderJzDetailPageReqVO pageReqVO) {
-    return orderJzDetailMapper.selectGiftExportList(pageReqVO);
-  }
-
-  @Override
-  public PageResult<?> getGiftOrderPage(OrderJzDetailPageReqVO pageReqVO) {
-    IPage<Map> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
-    IPage<?> iPage = orderJzDetailMapper.selectGiftOrderPage(page, pageReqVO);
-    return new PageResult<>(iPage.getRecords(), iPage.getTotal());
-  }
 
 
 }

+ 7 - 9
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/AppOtcTradeOrderServiceImpl.java

@@ -12,11 +12,8 @@ import com.yc.ship.module.infra.api.config.ConfigApi;
 import com.yc.ship.module.ota.api.OtaDistributorApi;
 import com.yc.ship.module.ota.api.dto.DistributorRespDTO;
 import com.yc.ship.module.product.api.ProductApi;
-import com.yc.ship.module.product.api.VoyageApi;
 import com.yc.ship.module.product.api.dto.VoyageRespDTO;
-import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
 import com.yc.ship.module.product.framework.lock.ProductRedisKeyConstants;
-import com.yc.ship.module.product.service.voyage.VoyageService;
 import com.yc.ship.module.resource.api.route.RouteApi;
 import com.yc.ship.module.resource.api.route.dto.RouteRespDTO;
 import com.yc.ship.module.resource.api.ship.ShipApi;
@@ -51,7 +48,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
@@ -116,14 +112,14 @@ public class AppOtcTradeOrderServiceImpl implements AppOtcTradeOrderService {
     public CommonResult<OtcTradeOrderCreateRespVO> miniAppCreateOrder(LoginUser loginUser, MiniTradeOrderCreateReqVO miniTradeOrderCreateReqVO) {
         TradeOrderOtcCreateVO createVO = BeanUtils.toBean(miniTradeOrderCreateReqVO, TradeOrderOtcCreateVO.class);
         Long distributorId = createVO.getDistributorId();
-        if(distributorId != null) {
+        if (distributorId != null) {
             DistributorRespDTO distributor = otaDistributorApi.getDistributorById(distributorId);
-            if(distributor!=null) {
+            if (distributor != null) {
                 createVO.setCustomerName(distributor.getName());
             }
         }
         VoyageRespDTO voyage = productApi.getVoyage(createVO.getVoyageId());
-        if(voyage != null) {
+        if (voyage != null) {
             createVO.setBoardingTime(com.yc.ship.framework.common.util.date.DateUtils.of(voyage.getBoardingTime()));
             createVO.setLeaveTime(com.yc.ship.framework.common.util.date.DateUtils.of(voyage.getLeaveTime()));
         }
@@ -133,6 +129,7 @@ public class AppOtcTradeOrderServiceImpl implements AppOtcTradeOrderService {
         RouteRespDTO routeRespDTO = routeApi.queryRouteById(voyage.getRouteId());
         ShipRespDTO ship = shipApi.queryShip(createVO.getShipId());
         int maxOrderNo = tradeOrderService.getMaxOrderNo(createVO.getVoyageId());
+        String sname = ship.getName() + "-" + routeRespDTO.getName() + "-" + voyage.getName();
         String date = DateUtils.format(voyage.getBoardingTime(), "yyyyMMdd");
         String code = "YC";
         if (routeRespDTO != null && routeRespDTO.getDirection() == 2) {
@@ -178,9 +175,10 @@ public class AppOtcTradeOrderServiceImpl implements AppOtcTradeOrderService {
             shipTradeOrderCreateReqVO.setIsYd(createVO.getIsYd());
             shipTradeOrderCreateReqVO.setTravelDate(createVO.getBoardingTime());
             shipTradeOrderCreateReqVO.setOrderNo(orderNo);
+            shipTradeOrderCreateReqVO.setProductName(sname);
             ShipTradeOrderCreateReqVO.OrderProperty orderProperty = new ShipTradeOrderCreateReqVO.OrderProperty();
             orderProperty.setSellMethod(SellMethodEnum.MINI_APP.getType());
-            orderProperty.setSourceId(createVO.getDistributorId()+"");
+            orderProperty.setSourceId(createVO.getDistributorId() + "");
             orderProperty.setSourceName(createVO.getCustomerName());
             shipTradeOrderCreateReqVO.setOrderProperty(orderProperty);
             ShipTradeOrderCreateReqVO.OrderItem orderItem = new ShipTradeOrderCreateReqVO.OrderItem();
@@ -270,7 +268,7 @@ public class AppOtcTradeOrderServiceImpl implements AppOtcTradeOrderService {
             // TODO:需要发布订单超时mq
             OtcTradeOrderCreateRespVO respVO = TradeOrderConvert.INSTANCE.convert(result.getData());
             return CommonResult.success(respVO);
-        }finally {
+        } finally {
             if (lock.isHeldByCurrentThread() && lock.isLocked()) {
                 lock.unlock();
             }

+ 29 - 2
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java

@@ -1663,6 +1663,8 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         if (routeRespDTO != null && routeRespDTO.getDirection() == 2) {
             code = "CY";
         }
+        String sname = ship.getName()+"-"+routeRespDTO.getName()+"-"+voyage.getName();
+
         String orderNo;
         if (ship.getCode() == null) {
             orderNo = date + "-" + voyage.getCode() + "-" + (maxOrderNo + 1);
@@ -1695,6 +1697,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 shipTradeOrderCreateReqVO.setAmount(orderMoney);
                 shipTradeOrderCreateReqVO.setPayAmount(realAmount);
             }
+            shipTradeOrderCreateReqVO.setProductName(sname);
             shipTradeOrderCreateReqVO.setDiscountId(discountId);
             if (realOrderMoney != null) {
                 shipTradeOrderCreateReqVO.setPayAmount(realOrderMoney);
@@ -2127,6 +2130,10 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                     }
                 }
             }
+            List<TradeDetailRespVO> orderDetailByOrderId = tradeDetailMapper.getOrderDetailByOrderId(orderId);
+            if(orderDetailByOrderId!=null){
+
+            }
 
             if(tradeOrderDO.getPayStatus()==1 && tradeOrderDO.getPayAmount().subtract(shipTradeOrderCreateReqVO.getPayAmount()).compareTo(BigDecimal.ZERO)!=0){
                 return CommonResult.error(500, "已支付订单金额发生变化"+tradeOrderDO.getPayAmount()+"->"+shipTradeOrderCreateReqVO.getPayAmount());
@@ -2215,26 +2222,32 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             if (!list.isEmpty()) {
                 tradeOrderRoomModelMapper.insertBatch(list);
             }
-
+            String desc = "";
             if (!Objects.equals(shipTradeOrderCreateReqVO.getRemark(), tradeOrderDO.getRemark()) || !Objects.equals(shipTradeOrderCreateReqVO.getLinkMobile(), tradeOrderDO.getLinkMobile()) || !Objects.equals(shipTradeOrderCreateReqVO.getLinkMan(), tradeOrderDO.getLinkMan())) {
                 auditType = 2;
+                desc = "订单联系人信息修改,订单进入二级审核";
             }
             if (!CollUtil.isEmpty(createVO.getPolicyList()) &&isAudit) {
                 auditType = 2;
+                desc = "政策优惠提交,订单进入二级审核";
             }
             if (!Objects.equals(shipTradeOrderCreateReqVO.getAmount(), tradeOrderDO.getAmount()) && loginUser.getDistributorId() == null) {
                 auditType = 3;
+                desc = "平台修改订单金额发生变化,订单进入三级审核";
             }
             BigDecimal oldDeposi = tradeOrderDO.getDeposi()==null?BigDecimal.ZERO:tradeOrderDO.getDeposi();
             BigDecimal newDeposi = shipTradeOrderCreateReqVO.getDeposi()==null?BigDecimal.ZERO:shipTradeOrderCreateReqVO.getDeposi();
             if (oldDeposi.compareTo(newDeposi)!=0) {
                 auditType = 3;
+                desc = "平台修改定金金额,订单进入三级审核";
             }
             if (!Objects.equals(oldleaderAmount, leaderAmount) || !Objects.equals(oldwithAmount, withAmount) || !Objects.equals(oldotherMoney, otherMoney)) {
                 auditType = 4;
+                desc = "领队陪同修改,订单进入四级审核";
             }
             if (!Objects.equals(shipTradeOrderCreateReqVO.getAmount(), tradeOrderDO.getAmount()) && loginUser.getDistributorId() != null) {
                 auditType = 4;
+                desc = "分销商修改订单金额发生变化,订单进入四级审核";
             }
             //1.取消订单,四级审核,销售-计调-运营主管-营销经理
             //2.重要信息修改(修改游客信息,价格变动),四级审核,销售-计调-运营主管-营销经理
@@ -2256,7 +2269,18 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 neworderStatus = TradeOrderStatusEnum.TRANSFER.getStatus();
                 log.error(orderNo+">>>>>>>>>>>>>>>>>>>>>> motifyOtcOrder 进入审核流程2 <<<<<<<<<<<<<<<<<<<<<<"+3+";"+(auditUserDO == null ? "" : auditUserDO.getAuditUser()));
             }
-
+            if(Objects.equals(TradeOrderStatusEnum.TRANSFER.getStatus(), neworderStatus)) {
+                TradeOrderLogDO tradeOrderLogDO = new TradeOrderLogDO();
+                tradeOrderLogDO.setId(IdWorker.getId());
+                tradeOrderLogDO.setOrderId(tradeOrderDO.getId());
+                tradeOrderLogDO.setUserId(getLoginUserId());
+                tradeOrderLogDO.setUserType(2);
+                tradeOrderLogDO.setOperateType(TradeOrderOperateTypeEnum.ORDER_AUDIT_LOG.getType());
+                tradeOrderLogDO.setBeforeStatus(tradeOrderDO.getOrderStatus());
+                tradeOrderLogDO.setAfterStatus(TradeOrderStatusEnum.TRANSFER.getStatus());
+                tradeOrderLogDO.setContent(desc);
+                tradeOrderLogMapper.insert(tradeOrderLogDO);
+            }
 
             try {
                 if(!Objects.equals(tradeOrderDO.getOrderStatus(), neworderStatus)) {
@@ -2290,6 +2314,9 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
 
             //支付倒计时--不超时,有预订单
             Map<String, Object> append = TradeOrderLogUtils.append("result", "订单修改成功");
+            if(StringUtils.isNotEmpty(desc) && Objects.equals(tradeOrderDO.getOrderStatus(), neworderStatus)){
+                content = content + "," + desc;
+            }
             append.put("content", content);
             TradeOrderLogUtils.setOrderInfo(neworderId, tradeOrderDO.getOrderStatus(), neworderStatus, append);
             tradePublishUtils.publishOrderCreateSuccessMsg(neworderId + "");

+ 95 - 95
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/supplier/system/ZshlSupplierTradeService.java

@@ -35,7 +35,7 @@ import static com.yc.ship.module.trade.enums.ErrorCodeConstants.*;
 import static com.yc.ship.module.trade.service.supplier.SupplierTradeService.ZSHL_SERVICE;
 
 /**
- * &#064;Description :智胜慧旅提供供应商服务 https://huilvticket.yuque.com/staff-kx84vq/wnasfn/tyg2sn#ZaEN4
+ * &#064;Description :智胜慧旅提供供应商服务 <a href="https://huilvticket.yuque.com/staff-kx84vq/wnasfn/tyg2sn#ZaEN4">...</a>
  * &#064;Author :qsl
  * &#064;Date :2025/6/16 16:02
  */
@@ -51,71 +51,71 @@ public class ZshlSupplierTradeService implements SupplierTradeService {
 
     @Override
     public CommonResult<SupplierTradeOrderRespBO> createOrder(SupplierTradeOrderBO supplierTradeOrderBO, SupplierRespDTO supplierRespDTO) {
-        try{
+        try {
 
-            log.info("九凤谷createOrder="+11);
-            //九凤谷景区对接
+            log.info("三峡二期系统createOrder=" + 11);
+            //jfg景区对接
             //下单地址
             String method = "createOrder";
-            String createOrderUrl = supplierRespDTO.getDirectOrderUrl()+method;
+            String createOrderUrl = supplierRespDTO.getDirectOrderUrl() + method;
             String userId = supplierRespDTO.getDirectAccount();
             String userKey = supplierRespDTO.getDirectParam();
             String productId = supplierTradeOrderBO.getTradeSupplierOrderDO().getSupplierProductId();
-            Long timestamp = System.currentTimeMillis()/1000;
+            Long timestamp = System.currentTimeMillis() / 1000;
 
             TradeOrderUserDO tradeOrderUserDO = tradeOrderRepositoryService.getOrderUser(supplierTradeOrderBO.getTradeSupplierOrderDO().getOrderId());
 
-            JSONObject rep_body=new JSONObject();
-            rep_body.put("orderId",supplierTradeOrderBO.getTradeSupplierOrderDO().getTradeNo());
+            JSONObject rep_body = new JSONObject();
+            rep_body.put("orderId", supplierTradeOrderBO.getTradeSupplierOrderDO().getTradeNo());
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
             String localDateNowStr = supplierTradeOrderBO.getTradeSupplierOrderDO().getUseDate().format(formatter);
             rep_body.put("travelDate", localDateNowStr);
-            rep_body.put("travelTime","");
-            rep_body.put("quantity",supplierTradeOrderBO.getTradeVisitorDOList().size());
-            rep_body.put("productId",productId);
-            rep_body.put("bookName",tradeOrderUserDO.getContactName());
-            rep_body.put("bookMobile",tradeOrderUserDO.getMobile());
-            rep_body.put("idCard",tradeOrderUserDO.getCredentialNo());
+            rep_body.put("travelTime", "");
+            rep_body.put("quantity", supplierTradeOrderBO.getTradeVisitorDOList().size());
+            rep_body.put("productId", productId);
+            rep_body.put("bookName", tradeOrderUserDO.getContactName());
+            rep_body.put("bookMobile", tradeOrderUserDO.getMobile());
+            rep_body.put("idCard", tradeOrderUserDO.getCredentialNo());
 
-            JSONArray vistorList=new JSONArray();
+            JSONArray vistorList = new JSONArray();
             for (TradeVisitorDO tradeVisitorDO : supplierTradeOrderBO.getTradeVisitorDOList()) {
-                JSONObject vistor=new JSONObject();
-                vistor.put("name",tradeVisitorDO.getName());
-                vistor.put("mobile",tradeVisitorDO.getMobile());
-                vistor.put("idCard",tradeVisitorDO.getCredentialNo());
-                vistor.put("face","");
+                JSONObject vistor = new JSONObject();
+                vistor.put("name", tradeVisitorDO.getName());
+                vistor.put("mobile", tradeVisitorDO.getMobile());
+                vistor.put("idCard", tradeVisitorDO.getCredentialNo());
+                vistor.put("face", "");
                 vistorList.add(vistor);
             }
-            rep_body.put("visitPersons",vistorList);
-            String bodyStr = DesUtil.encrypt(rep_body.toString(),userKey);
-            String signStr = userId+method+timestamp+bodyStr+userKey;
-            log.info("九凤谷供应商预下单开始,signStr:{}",signStr);
+            rep_body.put("visitPersons", vistorList);
+            String bodyStr = DesUtil.encrypt(rep_body.toString(), userKey);
+            String signStr = userId + method + timestamp + bodyStr + userKey;
+            log.info("jfg供应商预下单开始,signStr:{}", signStr);
             String sign = MD5Utils.getMD5(signStr.getBytes("UTF-8"));
 
-            JSONObject rep_head=new JSONObject();
+            JSONObject rep_head = new JSONObject();
             rep_head.put("user_id", userId);
-            rep_head.put("method",method );
+            rep_head.put("method", method);
             rep_head.put("timestamp", timestamp);
             rep_head.put("sign", sign);
 
-            JSONObject req=new JSONObject();
+            JSONObject req = new JSONObject();
             req.put("requestHead", rep_head);
             req.put("requestBody", bodyStr);
             Map<String, String> headMap = new HashMap<>();
             headMap.put("Content-type", "application/x-www-form-urlencoded");
-            log.info("九凤谷供应商预下单开始,请求地址:{},请求参数:{}",createOrderUrl,req.toString());
+            log.info("jfg供应商预下单开始,请求地址:{},请求参数:{}", createOrderUrl, req.toString());
             String res = HttpUtil.createPost(createOrderUrl).contentType("application/json")
                     .body(Base64Util.encode(req.toString()))
-                    .headerMap(headMap,false)
+                    .headerMap(headMap, false)
                     .timeout(100000)
                     .execute().body();
-            log.info("九凤谷供应商预下单完成,响应参数:{}",res);
+            log.info("jfg供应商预下单完成,响应参数:{}", res);
             // base64解密
             String json = new String(Base64.decodeBase64(res.getBytes("UTF-8")));
-            log.info("九凤谷供应商预下单完成,响应response参数:{}",json);
+            log.info("jfg供应商预下单完成,响应response参数:{}", json);
             JSONObject jsonObj = JSONUtil.parseObj(json);
             JSONObject responseHead = jsonObj.getJSONObject("responseHead");
-            if(StringUtils.equals("1000",responseHead.getStr("res_code"))){
+            if (StringUtils.equals("1000", responseHead.getStr("res_code"))) {
                 String response = jsonObj.getStr("responseBody");
                 String body = "";
                 try {
@@ -123,66 +123,66 @@ public class ZshlSupplierTradeService implements SupplierTradeService {
                 } catch (Exception e) {
                     log.info(e.toString());
                 }
-                log.info("九凤谷供应商预下单完成,响应body参数:{}",body);
-                JSONObject responseBody =JSONUtil.parseObj(body);
+                log.info("jfg供应商预下单完成,响应body参数:{}", body);
+                JSONObject responseBody = JSONUtil.parseObj(body);
                 return CommonResult.success(new SupplierTradeOrderRespBO().setSupplierOrderNo(responseBody.getStr("partnerOrderId")));
-            }else{
-                return CommonResult.error(500,responseHead.getStr("res_msg"));
+            } else {
+                return CommonResult.error(500, responseHead.getStr("res_msg"));
             }
-        }catch (ServiceException e){
-            log.error("九凤谷供应商预下单失败:",e);
+        } catch (ServiceException e) {
+            log.error("jfg供应商预下单失败:", e);
             return CommonResult.error(e);
-        }catch (Exception e){
-            log.error("九凤谷供应商预下单失败:",e);
+        } catch (Exception e) {
+            log.error("jfg供应商预下单失败:", e);
             return CommonResult.error(SUPPLIER_ZSHL_ORDER_CREATE_FAIL);
         }
     }
 
     @Override
     public CommonResult<SupplierTradeOrderPayRespBO> payOrder(SupplierTradeOrderPayBO supplierTradeOrderPayBO, SupplierRespDTO supplierRespDTO) {
-        try{
-            //九凤谷景区对接
+        try {
+            //jfg景区对接
             //下单地址
             String method = "payOrder";
-            String createOrderUrl = supplierRespDTO.getDirectOrderUrl()+method;
+            String createOrderUrl = supplierRespDTO.getDirectOrderUrl() + method;
             String userId = supplierRespDTO.getDirectAccount();
             String userKey = supplierRespDTO.getDirectParam();
-            Long timestamp = System.currentTimeMillis()/1000;
+            Long timestamp = System.currentTimeMillis() / 1000;
 
-            JSONObject rep_head=new JSONObject();
+            JSONObject rep_head = new JSONObject();
             rep_head.put("user_id", userId);
-            rep_head.put("method",method );
+            rep_head.put("method", method);
             rep_head.put("timestamp", timestamp);
 
-            JSONObject rep_body=new JSONObject();
-            rep_body.put("orderId",supplierTradeOrderPayBO.getTradeSupplierOrderDO().getTradeNo());
-            rep_body.put("partnerOrderId",supplierTradeOrderPayBO.getTradeSupplierOrderDO().getSupplierOrderNo());
+            JSONObject rep_body = new JSONObject();
+            rep_body.put("orderId", supplierTradeOrderPayBO.getTradeSupplierOrderDO().getTradeNo());
+            rep_body.put("partnerOrderId", supplierTradeOrderPayBO.getTradeSupplierOrderDO().getSupplierOrderNo());
 
-            String bodyStr = DesUtil.encrypt(rep_body.toString(),userKey);
-            String signStr = userId+method+timestamp+bodyStr+userKey;
-            log.error("九凤谷供应商预下单开始,signStr:{}",signStr);
+            String bodyStr = DesUtil.encrypt(rep_body.toString(), userKey);
+            String signStr = userId + method + timestamp + bodyStr + userKey;
+            log.error("jfg供应商预下单开始,signStr:{}", signStr);
             String sign = MD5Utils.getMD5(signStr.getBytes("UTF-8"));
             rep_head.put("sign", sign);
 
-            JSONObject req=new JSONObject();
+            JSONObject req = new JSONObject();
             req.put("requestHead", rep_head);
             req.put("requestBody", bodyStr);
 
             Map<String, String> headMap = new HashMap<>();
             headMap.put("Content-type", "application/x-www-form-urlencoded");
-            log.info("九凤谷供应商支付下单开始,请求地址:{},请求参数:{}",createOrderUrl,req.toString());
+            log.info("jfg供应商支付下单开始,请求地址:{},请求参数:{}", createOrderUrl, req.toString());
             String res = HttpUtil.createPost(createOrderUrl).contentType("application/json")
                     .body(Base64Util.encode(req.toString()))
-                    .headerMap(headMap,false)
+                    .headerMap(headMap, false)
                     .timeout(15000)
                     .execute().body();
-            log.info("九凤谷供应商支付下单完成,响应参数:{}",res);
+            log.info("jfg供应商支付下单完成,响应参数:{}", res);
             // base64解密
             String json = new String(Base64.decodeBase64(res.getBytes("UTF-8")));
-            log.info("九凤谷供应商支付完成,响应response参数:{}",json);
+            log.info("jfg供应商支付完成,响应response参数:{}", json);
             JSONObject jsonObj = JSONUtil.parseObj(json);
             JSONObject responseHead = jsonObj.getJSONObject("responseHead");
-            if(StringUtils.equals("1000",responseHead.getStr("res_code"))){
+            if (StringUtils.equals("1000", responseHead.getStr("res_code"))) {
                 String response = jsonObj.getStr("responseBody");
                 String body = "";
                 try {
@@ -190,9 +190,9 @@ public class ZshlSupplierTradeService implements SupplierTradeService {
                 } catch (Exception e) {
                     log.info(e.toString());
                 }
-                log.info("九凤谷供应商支付请求完成,响应body参数:{}",body);
-                JSONObject responseBody =JSONUtil.parseObj(body);
-                JSONArray vistors =responseBody.getJSONArray("visitPersons");
+                log.info("jfg供应商支付请求完成,响应body参数:{}", body);
+                JSONObject responseBody = JSONUtil.parseObj(body);
+                JSONArray vistors = responseBody.getJSONArray("visitPersons");
                 List<OtaVoucherVO> list = new ArrayList<>();
                 for (int i = 0; i < vistors.size(); i++) {
                     JSONObject vistor = vistors.getJSONObject(i);
@@ -204,70 +204,70 @@ public class ZshlSupplierTradeService implements SupplierTradeService {
                 return CommonResult.success(new SupplierTradeOrderPayRespBO().setSupplierOrderNo(supplierTradeOrderPayBO.getTradeSupplierOrderDO().getSupplierOrderNo())
                         .setPlatSupplierOrderId(supplierTradeOrderPayBO.getTradeSupplierOrderDO().getId())
                         .setVoucherList(list));
-            }else{
-                return CommonResult.error(500,responseHead.getStr("res_msg"));
+            } else {
+                return CommonResult.error(500, responseHead.getStr("res_msg"));
             }
-        }catch (ServiceException e){
-            log.error("九凤谷票务系统供应商支付失败:",e);
+        } catch (ServiceException e) {
+            log.error("jfg票务系统供应商支付失败:", e);
             return CommonResult.error(e);
-        }catch (Exception e){
-            log.error("九凤谷票务系统供应商支付失败:",e);
+        } catch (Exception e) {
+            log.error("jfg票务系统供应商支付失败:", e);
             return CommonResult.error(SUPPLIER_PLAT_ORDER_PAY_FAIL);
         }
     }
 
     @Override
     public CommonResult<SupplierRefundRespBO> refund(SupplierRefundDO supplierRefundDO, SupplierRespDTO supplierRespDTO) {
-        try{
-            //九凤谷景区对接
+        try {
+            //jfg景区对接
             //退票地址
             String method = "cancelTicket";
-            String createOrderUrl = supplierRespDTO.getDirectOrderUrl()+method;
+            String createOrderUrl = supplierRespDTO.getDirectOrderUrl() + method;
             String userId = supplierRespDTO.getDirectAccount();
             String userKey = supplierRespDTO.getDirectParam();
-            Long timestamp = System.currentTimeMillis()/1000;
+            Long timestamp = System.currentTimeMillis() / 1000;
 
-            JSONObject rep_head=new JSONObject();
+            JSONObject rep_head = new JSONObject();
             rep_head.put("user_id", userId);
-            rep_head.put("method",method );
+            rep_head.put("method", method);
             rep_head.put("timestamp", timestamp);
             List<TradeSupplierOrderDO> tradeSupplierOrderDOList = tradeSupplierOrderRepositoryService.getTradeSupplierOrderList(supplierRefundDO.getOrderId());
             String orderId = "";
-            if(tradeSupplierOrderDOList!=null && tradeSupplierOrderDOList.size()>0){
+            if (tradeSupplierOrderDOList != null && tradeSupplierOrderDOList.size() > 0) {
                 orderId = tradeSupplierOrderDOList.get(0).getTradeNo();
             }
-            JSONObject rep_body=new JSONObject();
-            rep_body.put("orderId",orderId);
-            rep_body.put("partnerOrderId",supplierRefundDO.getSupplierOrderNo());
+            JSONObject rep_body = new JSONObject();
+            rep_body.put("orderId", orderId);
+            rep_body.put("partnerOrderId", supplierRefundDO.getSupplierOrderNo());
             List<String> ticketIds = tradeSupplierOrderRepositoryService.getVoucherListByPlatSupplierRefundId(supplierRefundDO.getId());
 
-            rep_body.put("refundDetailIds",ticketIds);
+            rep_body.put("refundDetailIds", ticketIds);
 
-            String bodyStr = DesUtil.encrypt(rep_body.toString(),userKey);
-            String signStr = userId+method+timestamp+bodyStr+userKey;
-            log.error("九凤谷供应商退票开始,signStr:{}",signStr);
+            String bodyStr = DesUtil.encrypt(rep_body.toString(), userKey);
+            String signStr = userId + method + timestamp + bodyStr + userKey;
+            log.error("jfg供应商退票开始,signStr:{}", signStr);
             String sign = MD5Utils.getMD5(signStr.getBytes("UTF-8"));
             rep_head.put("sign", sign);
 
-            JSONObject req=new JSONObject();
+            JSONObject req = new JSONObject();
             req.put("requestHead", rep_head);
             req.put("requestBody", bodyStr);
             Map<String, String> headMap = new HashMap<>();
             headMap.put("Content-type", "application/x-www-form-urlencoded");
 
-            log.info("九凤谷供应商退票开始,请求地址:{},请求参数:{}",createOrderUrl,req.toString());
+            log.info("jfg供应商退票开始,请求地址:{},请求参数:{}", createOrderUrl, req.toString());
             String res = HttpUtil.createPost(createOrderUrl).contentType("application/json")
                     .body(Base64Util.encode(req.toString()))
-                    .headerMap(headMap,false)
+                    .headerMap(headMap, false)
                     .timeout(15000)
                     .execute().body();
-            log.info("九凤谷供应商退票完成,响应参数:{}",res);
+            log.info("jfg供应商退票完成,响应参数:{}", res);
             // base64解密
             String json = new String(Base64.decodeBase64(res.getBytes("UTF-8")));
-            log.info("九凤谷供应商退票完成,响应response参数:{}",json);
+            log.info("jfg供应商退票完成,响应response参数:{}", json);
             JSONObject jsonObj = JSONUtil.parseObj(json);
             JSONObject responseHead = jsonObj.getJSONObject("responseHead");
-            if(StringUtils.equals("1000",responseHead.getStr("res_code"))){
+            if (StringUtils.equals("1000", responseHead.getStr("res_code"))) {
                 String response = jsonObj.getStr("responseBody");
                 String body = "";
                 try {
@@ -275,17 +275,17 @@ public class ZshlSupplierTradeService implements SupplierTradeService {
                 } catch (Exception e) {
                     log.info(e.toString());
                 }
-                log.info("九凤谷供应商退票请求完成,响应body参数:{}",body);
-                JSONObject responseBody =JSONUtil.parseObj(body);
+                log.info("jfg供应商退票请求完成,响应body参数:{}", body);
+                JSONObject responseBody = JSONUtil.parseObj(body);
                 return CommonResult.success(new SupplierRefundRespBO().setSupplierRefundNo(responseBody.getStr("partnerOrderId")));
-            }else{
-                return CommonResult.error(500,responseHead.getStr("res_msg"));
+            } else {
+                return CommonResult.error(500, responseHead.getStr("res_msg"));
             }
-        }catch (ServiceException e){
-            log.error("九凤谷票务系统供应商退票失败:",e);
+        } catch (ServiceException e) {
+            log.error("jfg票务系统供应商退票失败:", e);
             return CommonResult.error(e);
-        }catch (Exception e){
-            log.error("九凤谷票务系统供应商退票失败:",e);
+        } catch (Exception e) {
+            log.error("jfg票务系统供应商退票失败:", e);
             return CommonResult.error(SUPPLIER_ZSHL_REFUND_FAIL);
         }
     }

+ 6 - 1
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeDetailMapper.xml

@@ -453,7 +453,7 @@
     <select id="selectRefundCount" resultType="java.util.Map">
         select count(*) totalCount,count(if(td.voucher_status=5,1,null)) refundCount
         from trade_detail td
-        where td.order_id=#{orderId}
+        where td.order_id=#{orderId} and product_type = 0
     </select>
 
     <resultMap id="RefundDetailMap" type="com.yc.ship.module.trade.controller.admin.order.vo.refund.RefundDetailRespVO">
@@ -1111,6 +1111,11 @@
         </if>
     </select>
 
+    <select id="getOrderDetailByOrderId"
+            resultType="com.yc.ship.module.trade.controller.admin.order.vo.order.TradeDetailRespVO">
+        SELECT * FROM trade_detail where order_id = #{orderId} and deleted = 0 and product_type =0
+    </select>
+
     <select id="getProductProject" resultType="java.util.Map">
         select pp.id,pp.name
         from product_project pp

+ 4 - 1
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeVisitorMapper.xml

@@ -92,9 +92,12 @@
 
     <select id="selectShipVisitor"
             resultType="com.yc.ship.module.trade.dal.dataobject.order.TradeVisitorDO">
-        select t.product_type productType,v.*,t3.id_card jzCard,t3.arrive_time jzTime,t3.phone jzPhone,t3.address jzAddress, a.name nationalityName from trade_detail t inner join trade_visitor v on v.detail_id = t.id
+        select t.product_type productType,v.*,t3.id_card jzCard,t3.arrive_time jzTime,t3.phone jzPhone,t3.address jzAddress
+        , a.name nationalityName,t5.room_model_name roomModelName
+        from trade_detail t inner join trade_visitor v on v.detail_id = t.id
         left join trade_order_jz_detail t3 on v.credential_no = t3.id_card and t3.deleted =0
         left join area a on v.nationality = a.id
+        left join trade_order_room_model t5 on v.room_index_id = t5.room_index_id
         where t.order_id = #{orderId} and v.deleted =0 and t.product_type =0 and t.deleted =0
         group by v.id
     </select>