lishiqiang 1 månad sedan
förälder
incheckning
307a45335f
17 ändrade filer med 352 tillägg och 270 borttagningar
  1. 3 0
      ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/controller/admin/distributor/vo/DistributorPageReqVO.java
  2. 4 0
      ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/controller/admin/distributor/vo/DistributorRespVO.java
  3. 3 0
      ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/controller/admin/distributor/vo/DistributorSaveReqVO.java
  4. 4 0
      ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/dal/dataobject/distributor/DistributorDO.java
  5. 2 0
      ship-module-product/ship-module-product-api/src/main/java/com/yc/ship/module/product/api/ProductApi.java
  6. 101 0
      ship-module-product/ship-module-product-api/src/main/java/com/yc/ship/module/product/api/dto/VoyageRespDTO.java
  7. 10 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/api/ProductApiImpl.java
  8. 49 11
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/OtcTradeOrderController.java
  9. 4 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/ShipTradeOrderCreateReqVO.java
  10. 4 2
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/refund/TradeRefundCreateReqVO.java
  11. 1 3
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeOrderMapper.java
  12. 2 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/TradeOrderService.java
  13. 20 12
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java
  14. 22 55
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java
  15. 103 117
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/refund/impl/TradeRefundServiceImpl.java
  16. 10 11
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeDetailMapper.xml
  17. 10 58
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeOrderMapper.xml

+ 3 - 0
ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/controller/admin/distributor/vo/DistributorPageReqVO.java

@@ -33,4 +33,7 @@ public class DistributorPageReqVO extends PageParam {
     @Schema(description = "登录名", example = "admin")
     private String loginName;
 
+    @Schema(description = "编码", example = "admin")
+    private String code;
+
 }

+ 4 - 0
ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/controller/admin/distributor/vo/DistributorRespVO.java

@@ -57,6 +57,10 @@ public class DistributorRespVO {
     @ExcelProperty("简称")
     private String shortName;
 
+    @Schema(description = "编码", example = "张三")
+    @ExcelProperty("编码")
+    private String code;
+
     @Schema(description = "登录名", example = "王五")
     private String loginName;
 

+ 3 - 0
ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/controller/admin/distributor/vo/DistributorSaveReqVO.java

@@ -36,6 +36,9 @@ public class DistributorSaveReqVO {
     @Schema(description = "简称", example = "张三")
     private String shortName;
 
+    @Schema(description = "编码", example = "CJGL")
+    private String code;
+
     @Schema(description = "登录名", example = "王五")
     private String loginName;
 

+ 4 - 0
ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/dal/dataobject/distributor/DistributorDO.java

@@ -63,6 +63,10 @@ public class DistributorDO extends TenantBaseDO {
      * 简称
      */
     private String shortName;
+    /**
+     * 编码
+     */
+    private String code;
     /**
      * 登录名
      */

+ 2 - 0
ship-module-product/ship-module-product-api/src/main/java/com/yc/ship/module/product/api/ProductApi.java

@@ -27,5 +27,7 @@ public interface ProductApi {
 
     CommonResult<CategoryRespDTO> getCategory(Long id);
 
+    VoyageRespDTO getVoyage(Long id);
+
     CommonResult<List<CategoryRespDTO>> getCategoryListByIds(Integer type, List<Long> ids);
 }

+ 101 - 0
ship-module-product/ship-module-product-api/src/main/java/com/yc/ship/module/product/api/dto/VoyageRespDTO.java

@@ -0,0 +1,101 @@
+package com.yc.ship.module.product.api.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 航次管理 DO
+ *
+ * @author lfy
+ */
+@Schema(description = "RPC 服务 - 供应商 Response DTO")
+@Data
+public class VoyageRespDTO {
+
+    /**
+     * ID
+     */
+    private Long id;
+    /**
+     * 航次名称
+     */
+    private String name;
+    /**
+     * 航次代码
+     */
+    private String code;
+    /**
+     * 游轮
+     */
+    private Long shipId;
+    /**
+     * 航线
+     */
+    private Long routeId;
+    /**
+     * 登船时间
+     */
+    private LocalDateTime boardingTime;
+    /**
+     * 开航时间
+     */
+    private LocalDateTime startTime;
+    /**
+     * 离船时间
+     */
+    private LocalDateTime leaveTime;
+
+    private Integer type;
+    /**
+     * 是否中转
+     *
+     */
+    private Integer transfer;
+    /**
+     * 中转时间
+     */
+    private LocalDateTime transferTime;
+    /**
+     * 登船码头
+     */
+    private Long boardingDockId;
+    /**
+     * 登船地点
+     */
+    private String boardingAddress;
+    /**
+     * 离船地点
+     */
+    private String leaveAddress;
+    /**
+     * 预定渠道
+     *
+     */
+    private List<Integer> channel;
+    /**
+     * 库存是否可见
+     *
+     */
+    private Integer stockVisible;
+    /**
+     * 上架状态
+     *
+     */
+    private Integer shelfStatus;
+    /**
+     * 集合地点
+     */
+    private String venue;
+    /**
+     * 产品介绍
+     */
+    private String introduce;
+    /**
+     * 登船须知
+     */
+    private String notice;
+
+}

+ 10 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/api/ProductApiImpl.java

@@ -12,9 +12,11 @@ import com.yc.ship.module.product.controller.admin.productBase.vo.ProductBaseRes
 import com.yc.ship.module.product.controller.admin.productSpu.groupVO.ProductGroupRespVO;
 import com.yc.ship.module.product.controller.admin.productSpu.spuVO.ProductSpuRespVO;
 import com.yc.ship.module.product.dal.dataobject.productSpu.ProductSpuDO;
+import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
 import com.yc.ship.module.product.dal.mysql.productGroup.ProductGroupMapper;
 import com.yc.ship.module.product.service.productBase.ProductBaseService;
 import com.yc.ship.module.product.service.productSpu.ProductSpuService;
+import com.yc.ship.module.product.service.voyage.VoyageService;
 import com.yc.ship.module.resource.controller.admin.category.vo.CategoryListReqVO;
 import com.yc.ship.module.resource.controller.admin.category.vo.CategoryRespVO;
 import com.yc.ship.module.resource.dal.dataobject.category.CategoryDO;
@@ -54,6 +56,8 @@ public class ProductApiImpl implements ProductApi {
     private OtaDistributorApi otaDistributorApi;
     @Resource
     private ProductGroupMapper productGroupMapper;
+    @Resource
+    private VoyageService voyageService;
 
     @Override
     public List<ProductSpuRespDTO> getProductListByTenantId(Long tenantId) {
@@ -125,6 +129,12 @@ public class ProductApiImpl implements ProductApi {
 
     }
 
+    @Override
+    public VoyageRespDTO getVoyage(Long id) {
+        VoyageDO voyageDO = voyageService.getVoyage(id);
+        return BeanUtils.toBean(voyageDO, VoyageRespDTO.class);
+    }
+
     @Override
     public CommonResult<List<CategoryRespDTO>> getCategoryListByIds(Integer type, List<Long> ids) {
         CategoryListReqVO reqVO = new CategoryListReqVO();

+ 49 - 11
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/OtcTradeOrderController.java

@@ -25,15 +25,13 @@ import com.yc.ship.module.resource.api.ship.dto.ShipRespDTO;
 import com.yc.ship.module.trade.api.contract.dto.group.WindowCreateOrderGroup;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.*;
 import com.yc.ship.module.trade.controller.admin.order.vo.otc.PrintRespVO;
-import com.yc.ship.module.trade.controller.admin.order.vo.refund.TradeRefundCreateReqVO;
-import com.yc.ship.module.trade.controller.admin.order.vo.refund.TradeRefundCreateRespVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.refund.*;
 import com.yc.ship.module.trade.controller.app.otc.vo.AppTradeOrderPageReqVO;
 import com.yc.ship.module.trade.controller.app.otc.vo.AppTradeOrderRespVO;
 import com.yc.ship.module.trade.dal.dataobject.contract.ContractDO;
 import com.yc.ship.module.trade.dal.dataobject.insurance.InsuranceDO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeDetailBaseDO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderCountryDO;
-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.framework.annotation.PlatTenantEnv;
 import com.yc.ship.module.trade.framework.annotation.RequestDecryption;
@@ -62,6 +60,7 @@ import java.util.*;
 
 import static com.yc.ship.framework.common.pojo.CommonResult.success;
 import static com.yc.ship.framework.operatelog.core.enums.OperateTypeEnum.*;
+import static com.yc.ship.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
 
 
 /***
@@ -127,12 +126,7 @@ public class OtcTradeOrderController {
     }
 
 
-    @PostMapping("/window/refund")
-    @Operation(summary = "win-窗口退款")
-    @OperateLog(type = TRADE)
-    public CommonResult<TradeRefundCreateRespVO> windowRefund(@Valid @RequestBody TradeRefundCreateReqVO refundCreateReqVO) {
-        return adminTradeOrderService.refund(agencyAuthUtils.getAgencyLoginUser(), refundCreateReqVO);
-    }
+
 
 
     @RequestDecryption
@@ -166,7 +160,7 @@ public class OtcTradeOrderController {
     }
 
 
-    @GetMapping("/window/queryOrderStatus")
+    @GetMapping("/travl/queryOrderStatus")
     @Operation(summary = "win-查询订单状态")
     @OperateLog(type = API)
     @PlatTenantEnv
@@ -179,7 +173,7 @@ public class OtcTradeOrderController {
     @Operation(summary = "win-平台订单列表[分页]", description = "根据条件查询订单列表")
     @PlatTenantEnv
     public CommonResult<PageResult<TradeOrderRespNewVO>> getTradeOrderPage(@Valid @RequestBody TradeOrderPageReqVO pageReqVO) {
-        PageResult<TradeOrderDO> platOrderPage = tradeOrderService.getPlatOrderPage(pageReqVO);
+        PageResult<TradeOrderRespVO> platOrderPage = tradeOrderService.getPlatOrderPage(pageReqVO);
         PageResult<TradeOrderRespNewVO> page = BeanUtils.toBean(platOrderPage, TradeOrderRespNewVO.class);
         List<TradeOrderRespNewVO> list = page.getList();
         //处理游轮名称
@@ -282,6 +276,50 @@ public class OtcTradeOrderController {
         return success(otcTradeOrderService.getOrderInfo(id));
     }
 
+    @PostMapping("/travl/refund")
+    @Operation(summary = "win-旅行社退款")
+    @OperateLog(type = TRADE)
+    public CommonResult<TradeRefundCreateRespVO> windowRefund(@Valid @RequestBody TradeRefundCreateReqVO refundCreateReqVO) {
+        return adminTradeOrderService.refund(agencyAuthUtils.getAgencyLoginUser(), refundCreateReqVO);
+    }
+
+    @PostMapping("/refund/calculateRefundAmount")
+    @Operation(summary = "退款计算")
+    @OperateLog(type = API)
+    @PlatTenantEnv
+    public CommonResult<TradeRefundCalculateRespVO> calculateRefundAmount(@Valid @RequestBody TradeRefundCreateReqVO refundCreateReqVO) {
+        return adminTradeOrderService.calculateRefundAmount(getLoginUser(), refundCreateReqVO);
+    }
+
+    @PostMapping("/cancelRefund")
+    @Operation(summary = "取消退款,只能取消退款中,且供应商退款失败的")
+    @OperateLog(type = API)
+    @PlatTenantEnv
+    public CommonResult<?> cancelRefund(@RequestParam("refundId") Long refundId) {
+        return adminTradeOrderService.cancelRefund(refundId);
+    }
+    @PostMapping("/refund/refundOrderList")
+    @Operation(summary = "退单列表",description = "根据条件查询退单列表")
+    @OperateLog(type = API)
+    @PlatTenantEnv
+    public CommonResult<PageResult<RefundRespVO>> getRefundRecordPage(@Valid @RequestBody RefundPageReqVO pageReqVO) {
+        return success(otcTradeOrderService.getRefundRecordPage(pageReqVO));
+    }
+
+    @RequestDecryption
+    @PostMapping("/refundAudit")
+    @Operation(summary = "退款审核")
+    @OperateLog(type = API)
+    public CommonResult<?> refundAudit(@Valid @RequestBody TradeRefundAuditReqVO refundAuditReqVO){
+        return adminTradeOrderService.refundAudit(getLoginUser(),refundAuditReqVO);
+    }
+    @GetMapping("/refund/refundDetailList")
+    @Operation(summary = "退单批次详情",description = "根据退单id查询退单批次详情")
+    @OperateLog(type = API)
+    @PlatTenantEnv
+    public CommonResult<List<RefundDetailRespVO>> getRefundBatchDetails(@Valid @RequestParam("id") Long id) {
+        return success(otcTradeOrderService.getRefundBatchDetails(id));
+    }
     @GetMapping("/window/orderDetailInfo")
     @Operation(summary = "win-门票详情", description = "根据订单id查询门票详情")
     @OperateLog(type = API)

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

@@ -30,6 +30,10 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
     @Hidden
     private String externalOrderNo;
 
+    @Schema(description = "订单号", example = "MT1231312")
+    @Hidden
+    private String orderNo;
+
     @Schema(description = "出行日期", example = "2025-06-01")
     private Date travelDate;
 

+ 4 - 2
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/refund/TradeRefundCreateReqVO.java

@@ -1,6 +1,7 @@
 package com.yc.ship.module.trade.controller.admin.order.vo.refund;
 
 
+import com.yc.ship.framework.common.validation.InEnum;
 import com.yc.ship.framework.common.validation.IntEnum;
 import com.yc.ship.module.trade.api.dto.TradeRefundCreateReqDTO;
 import com.yc.ship.module.trade.enums.RefundChannelEnum;
@@ -27,7 +28,7 @@ public class TradeRefundCreateReqVO {
     private Integer refundBackType;
 
     @Schema(description = "退款渠道", example = "")
-    @IntEnum(value = RefundChannelEnum.class,message = "退款渠道不正确")
+//    @InEnum(value = RefundChannelEnum.class,message = "退款渠道不正确")
     private Integer refundChannel;
 
     @Schema(description = "退款订单列表,退款类型 0时必填", example = "")
@@ -58,7 +59,8 @@ public class TradeRefundCreateReqVO {
     public static class RefundOrderInfo{
         private Long orderId;
         private String orderNo;
-        @NotNull(message = "退款金额")
+
+//        @NotNull(message = "退款金额")
         private BigDecimal refundAmount;
         @Schema(description = "手续费")
         private BigDecimal fee;

+ 1 - 3
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeOrderMapper.java

@@ -53,9 +53,7 @@ public interface TradeOrderMapper extends BaseMapperX<TradeOrderDO> {
 
     TradeOrderCountRespVO getTradeOrderUserCount(@Param("vo") TradeOrderPageReqVO vo);
 
-    @Cacheable(cacheNames = "getOtcTradeOrderUserPage#20",key = "#p2")
-    IPage<TradeOrderRespVO> getOtcTradeOrderUserPage(IPage<TradeOrderRespVO> page, @Param("vo") TradeOrderPageReqVO vo, @Param("key") String key);
-    @Cacheable(cacheNames = "getOtcTradeOrderUserCount#20",key = "#p1")
+    IPage<TradeOrderRespVO> getOtcTradeOrderUserPage(IPage<TradeOrderRespVO> page, @Param("vo") TradeOrderPageReqVO vo);
     TradeOrderCountRespVO getOtcTradeOrderUserCount(@Param("vo") TradeOrderPageReqVO vo, @Param("key") String key);
 
     IPage<TradeTranOrderRespVO> getTransOrderPage(IPage<TradeOrderRespVO> page, @Param("vo") TradeOrderPageReqVO vo);

+ 2 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/TradeOrderService.java

@@ -6,6 +6,7 @@ import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.module.trade.api.dto.*;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderPageReqVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.ShipTradeOrderCreateReqVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderRespVO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeDetailBaseDO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
 
@@ -36,7 +37,7 @@ public interface TradeOrderService {
      * @param reqVO
      * @return
      */
-    PageResult<TradeOrderDO> getPlatOrderPage(TradeOrderPageReqVO reqVO);
+    PageResult<TradeOrderRespVO> getPlatOrderPage(TradeOrderPageReqVO reqVO);
     /**
      * 订单创建
      * @param orderCreateReqDTO

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

@@ -8,8 +8,10 @@ import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yc.ship.framework.common.exception.ServiceException;
 import com.yc.ship.framework.common.lang.Asserts;
 import com.yc.ship.framework.common.pojo.CommonResult;
@@ -29,6 +31,7 @@ import com.yc.ship.module.trade.api.dto.*;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.ShipTradeOrderCreateReqVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeDetailRespVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderPageReqVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderRespVO;
 import com.yc.ship.module.trade.convert.order.TradeOrderConvert;
 import com.yc.ship.module.trade.dal.dataobject.order.*;
 import com.yc.ship.module.trade.dal.mysql.order.TradeDetailBaseMapper;
@@ -121,10 +124,10 @@ public class TradeOrderServiceImpl implements TradeOrderService {
 
 
     @Override
-    public PageResult<TradeOrderDO> getPlatOrderPage(TradeOrderPageReqVO reqVO) {
-        return tradeOrderMapper.selectPlatOrderPage(reqVO);
-
-
+    public PageResult<TradeOrderRespVO> getPlatOrderPage(TradeOrderPageReqVO pageReqVO) {
+        IPage<TradeOrderRespVO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
+        IPage<TradeOrderRespVO> iPage = tradeOrderMapper.getTradeOrderUserPage(page, pageReqVO);
+        return new PageResult<>(iPage.getRecords(), iPage.getTotal());
     }
 
     @Override
@@ -736,7 +739,12 @@ public class TradeOrderServiceImpl implements TradeOrderService {
             }
         }
         tradeOrderDO.setId(IdWorker.getId());
-        tradeOrderDO.setOrderNo(tradeUUCodeUtils.generateOrderNo(ORDER_PREFIX));
+        //旅行社编号 +  航次编号 + 3位 旅行社当天订单流水号
+        if(org.apache.commons.lang3.StringUtils.isNotEmpty(orderCreateReqDTO.getOrderNo())){
+            tradeOrderDO.setOrderNo(orderCreateReqDTO.getOrderNo());
+        }else {
+            tradeOrderDO.setOrderNo(tradeUUCodeUtils.generateOrderNo(ORDER_PREFIX));
+        }
         tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.INIT.getStatus());
         //订单联系人
         TradeOrderUserDO tradeOrderUserDO = new TradeOrderUserDO();
@@ -1229,14 +1237,14 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         //执行下单后处理器
         tradeOrderHandlers.forEach(handler -> handler.afterOrderCreate(tradeOrderBO));
         tradePublishUtils.publishOrderCreateSuccessMsg(tradeOrderBO.getTradeOrderDO().getId().toString());
-        //支付倒计时
+        //支付倒计时--不超时,有预订单
         Integer payTimeOut;
-        if (ObjectUtil.equal(tradeOrderBO.getTradeOrderDO().getSellMethod(), SellMethodEnum.OTA.getType())) {
-            payTimeOut = configUtils.getPayTimeOut(Long.parseLong(tradeOrderBO.getTradeOrderDO().getSourceId()));
-        } else {
-            payTimeOut = configUtils.getPayTimeOut();
-        }
-        tradePublishUtils.publishOrderPayDelayMsg(tradeOrderBO.getTradeOrderDO().getId().toString(), payTimeOut * 60000);
+//        if (ObjectUtil.equal(tradeOrderBO.getTradeOrderDO().getSellMethod(), SellMethodEnum.OTA.getType())) {
+//            payTimeOut = configUtils.getPayTimeOut(Long.parseLong(tradeOrderBO.getTradeOrderDO().getSourceId()));
+//        } else {
+//            payTimeOut = configUtils.getPayTimeOut();
+//        }
+//        tradePublishUtils.publishOrderPayDelayMsg(tradeOrderBO.getTradeOrderDO().getId().toString(), payTimeOut * 60000);
         //记录订单日志
         TradeOrderLogUtils.setOrderInfo(tradeOrderBO.getTradeOrderDO().getId(), null, tradeOrderBO.getTradeOrderDO().getOrderStatus(), TradeOrderLogUtils.append("result", "成功"));
     }

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

@@ -5,6 +5,7 @@ import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.excel.util.DateUtils;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -518,13 +519,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
     @Override
     public CommonResult<?> queryOrderStatus(Long orderId) {
         TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(orderId);
-        if(tradeOrderDO == null){
-            //此处查不到可能是因为合并了
-            TradeOrderBindDO bindDO = tradeOrderRepositoryService.getBindOrder(orderId,TradeOrderBindEnum.ADD_ORDER.getType());
-            if(bindDO != null){
-                return CommonResult.success(TradeOrderStatusEnum.UNUSED.getStatus());
-            }
-        }else {
+        if(tradeOrderDO != null){
             return CommonResult.success(tradeOrderDO.getOrderStatus());
         }
         return CommonResult.success(TradeOrderStatusEnum.UNPAID.getStatus());
@@ -649,7 +644,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         Long s1 = System.currentTimeMillis();
         TradeOrderCountRespVO otcTradeOrderUserCount = tradeOrderMapper.getOtcTradeOrderUserCount(pageReqVO,key);
         page.setTotal(otcTradeOrderUserCount.getOrderNum());
-        IPage<TradeOrderRespVO> iPage = tradeOrderMapper.getOtcTradeOrderUserPage(page, pageReqVO,key);
+        IPage<TradeOrderRespVO> iPage = tradeOrderMapper.getOtcTradeOrderUserPage(page, pageReqVO);
         TenantContextHolder.setIgnore(false);
         Long s2 = System.currentTimeMillis();
         log.info("getOtcTradeOrderUserPage执行时间:"+(s2-s1));
@@ -783,7 +778,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             }
         }
         String key = pageReqVO.hashCode()+"_"+pageReqVO.getPageSize()+"_"+pageReqVO.getPageNo();
-        IPage<TradeOrderRespVO> iPage = tradeOrderMapper.getOtcTradeOrderUserPage(page, pageReqVO,key);
+        IPage<TradeOrderRespVO> iPage = tradeOrderMapper.getOtcTradeOrderUserPage(page, pageReqVO);
         List<TradeDetailRespVO> totalList = new ArrayList<>();
         List<DictDataRespDTO> dictList = dictDataApi.getDictDataList("project_specification_type");
         String res = "";
@@ -1048,20 +1043,6 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         //获取订单信息
         TradeOrderRespVO vo = tradeOrderMapper.getOrderInfo(id);
         if(vo != null && vo.getOrderNo()!=null){
-            //如果是改签订单,获取原支付方式
-            if(ObjectUtil.equal(vo.getIsChangeOrder(),ORDER_CHANGE_TYPE_NEW)){
-                TradeOrderBindDO tradeOrderBindDO = tradeOrderRepositoryService.getBindOrderByBindId(id,TradeOrderBindEnum.CHANGE);
-                if(tradeOrderBindDO!=null){
-                    List<TradeOrderPayDO> oldOrderPayList = tradeOrderRepositoryService.getOrderPayList(tradeOrderBindDO.getOrderId());
-                    //排除其他支付类型
-                    List<TradeOrderPayDTO> payList = vo.getOrderPayList().stream().filter(item -> ObjectUtil.notEqual(item.getPaymentType(), PayTypeEnum.OTHER.getType())).collect(Collectors.toList());
-                    List<TradeOrderPayDTO> oldPayList = BeanUtils.toBean(oldOrderPayList,TradeOrderPayDTO.class);
-                    if(oldOrderPayList!=null){
-                        payList.addAll(oldPayList);
-                    }
-                    vo.setOrderPayList(payList);
-                }
-            }
             if (vo.getSellerId() != null && !vo.getSellerId().isEmpty()) {
                 AdminUserRespDTO user = adminUserApi.getUserIgnoreTenant(Long.parseLong(vo.getSellerId()));
                 if (user != null) {
@@ -1082,43 +1063,26 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             if(detailList.isEmpty()){
                 return vo;
             }
-            //获取酒店预定信息
-            List<TradeOrderHotelDO> hotelBookingList = tradeOrderRepositoryService.getHotelBookingInfoByOrderId(vo.getId());
-            vo.setHotelBookingList(BeanUtils.toBean(hotelBookingList,TradeHotelBookingRespVO.class));
-            // 订单交付信息
-            TradeOrderDeliveryDO tradeOrderDeliveryDO = tradeOrderDeliveryMapper.selectByOrderId(id);
-            if (tradeOrderDeliveryDO != null) {
-                vo.setTradeOrderDelivery(BeanUtils.toBean(tradeOrderDeliveryDO, TradeOrderDeliveryVO.class));
-                if (tradeOrderDeliveryDO.getAddressId() != null && vo.getMemberId() != null) {
-                    vo.setMemberAddress(memberAddressApi.getAddress(tradeOrderDeliveryDO.getAddressId(), Long.valueOf(vo.getMemberId())));
-                }
-            }
-            Long productId = detailList.get(0).getProductId();
-            for (TradeDetailRespVO tradeDetailRespVO : detailList) {
-                StringBuilder detailSpecDes = new StringBuilder();
-                for (DetailBaseRespVO detailBaseRespVO : tradeDetailRespVO.getDetailBaseList()) {
-                    detailSpecDes.append(detailBaseRespVO.getProductBaseName()).append("-").
-                            append(detailBaseRespVO.getSpecificationName()).append("/");
-                }
-                if(StringUtils.isNotEmpty(detailSpecDes.toString()) && detailSpecDes.toString().endsWith("/")){
-                    detailSpecDes = new StringBuilder(detailSpecDes.substring(0, detailSpecDes.length() - 1));
-                }
-                tradeDetailRespVO.setDetailSpecDes(detailSpecDes.toString());
-            }
+//            Long productId = detailList.get(0).getProductId();
+//            for (TradeDetailRespVO tradeDetailRespVO : detailList) {
+//                StringBuilder detailSpecDes = new StringBuilder();
+//                for (DetailBaseRespVO detailBaseRespVO : tradeDetailRespVO.getDetailBaseList()) {
+//                    detailSpecDes.append(detailBaseRespVO.getProductBaseName()).append("-").
+//                            append(detailBaseRespVO.getSpecificationName()).append("/");
+//                }
+//                if(StringUtils.isNotEmpty(detailSpecDes.toString()) && detailSpecDes.toString().endsWith("/")){
+//                    detailSpecDes = new StringBuilder(detailSpecDes.substring(0, detailSpecDes.length() - 1));
+//                }
+//                tradeDetailRespVO.setDetailSpecDes(detailSpecDes.toString());
+//            }
             //售票规则
-            ProductSaleRuleRespDTO saleRuleDO = tradeDetailMapper.getProductSaleRule(productId);
-            vo.setSaleRule(saleRuleDO);
+//            ProductSaleRuleRespDTO saleRuleDO = tradeDetailMapper.getProductSaleRule(productId);
+//            vo.setSaleRule(saleRuleDO);
 
             vo.setTradeDetailList(detailList);
             //操作记录忽略租户,不然平台订单端查询不到记录
             vo.setSourceOrderNo(vo.getExternalOriginOrderNo());
             TenantUtils.executeIgnore(() -> {
-//                if (!Objects.isNull(vo.getRoutePlanId())) {
-//                    RoutePlanRespDTO routePlanDTO = tradeDetailMapper.getRoutePlanByPlanId(vo.getRoutePlanId());
-//                    if(routePlanDTO!=null){
-//                        vo.setRoutePlanName(routePlanDTO.getName());
-//                    }
-//                }
                 //获取订单操作记录
                 List<TradeOrderLogDO> tradeOrderLogDOS = tradeOrderLogMapper.selectList(TradeOrderLogDO::getOrderId, vo.getId());
                 List<TradeOrderLogDO> adminUserLogList = tradeOrderLogDOS.stream().filter(logDO -> (Objects.equals(logDO.getUserType(), UserTypeEnum.ADMIN.getValue()))).collect(Collectors.toList());
@@ -2237,7 +2201,9 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         if(storeInfo==null) {
             return CommonResult.error(ORDER_STORE_NONE);
         }
-
+        VoyageRespDTO voyage = productApi.getVoyage(createVO.getVoyageId());
+        String date = DateUtils.format(createVO.getBoardingTime(),"yyyyMMddmmss");
+        String orderNo = distributorDO.getCode()+"-"+voyage.getCode()+"-"+date;
         List<TradeOrderCountryReqVO> countryData = createVO.getCountryData();
         ShipTradeOrderCreateReqVO shipTradeOrderCreateReqVO = BeanUtils.toBean(createVO, ShipTradeOrderCreateReqVO.class);
         shipTradeOrderCreateReqVO.setDistributorId(loginUser.getDistributorId());
@@ -2252,6 +2218,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         shipTradeOrderCreateReqVO.setRemark(createVO.getRemark());
 
         shipTradeOrderCreateReqVO.setTravelDate(createVO.getBoardingTime());
+        shipTradeOrderCreateReqVO.setOrderNo(orderNo);
 
         ShipTradeOrderCreateReqVO.OrderProperty orderProperty = new ShipTradeOrderCreateReqVO.OrderProperty();
         orderProperty.setSellMethod(SellMethodEnum.OTC.getType());

+ 103 - 117
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/refund/impl/TradeRefundServiceImpl.java

@@ -26,7 +26,6 @@ import com.yc.ship.framework.tenant.core.context.TenantContextHolder;
 import com.yc.ship.framework.tenant.core.util.TenantUtils;
 import com.yc.ship.module.ota.api.OtaDistributorApi;
 import com.yc.ship.module.ota.api.dto.BillResetReqDTO;
-import com.yc.ship.module.ota.api.dto.DistributorProductRespDTO;
 import com.yc.ship.module.ota.api.dto.DistributorRespDTO;
 import com.yc.ship.module.product.api.ProductApi;
 import com.yc.ship.module.product.api.dto.ProductRefundRuleRespDTO;
@@ -74,14 +73,12 @@ import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static com.yc.ship.module.product.enums.YesOrNoEnum.NO;
+import static com.yc.ship.module.trade.enums.TravelhubDictTypeConstants.NO;
 import static com.yc.ship.module.trade.enums.ApiConstants.*;
 import static com.yc.ship.module.trade.enums.ErrorCodeConstants.*;
-import static com.yc.ship.module.trade.enums.TravelhubDictTypeConstants.PRODUCT_BASE_TYPE_PLAT;
 import static com.yc.ship.module.trade.enums.TravelhubDictTypeConstants.YES;
 import static com.yc.ship.module.trade.service.order.TradeOrderService.UPDATE_ORDER_LOCK;
 
@@ -182,7 +179,7 @@ public class TradeRefundServiceImpl implements TradeRefundService {
     private CommonResult<TradeRefundRespDTO> normalRefund(TradeRefundBO tradeRefundBO){
         TradeRefundRespDTO respDTO = new TradeRefundRespDTO().setRefundId(tradeRefundBO.getRefundDO().getId())
                 .setOrderId(tradeRefundBO.getRefundDO().getOrderId());
-        if(!tradeRefundBO.getNeedAudit()){
+//        if(!tradeRefundBO.getNeedAudit()){
 //            //无需审计直接退款
 //            //4.供应商退款
 //            CommonResult<?> supplerRefundResp = tradeSupplierService.refund(tradeRefundBO);
@@ -195,14 +192,14 @@ public class TradeRefundServiceImpl implements TradeRefundService {
 //            }
             //4.2 供应商退款成功回调, 发起对应渠道退款
 //            tradeSupplierCallbackService.afterAllRefund(tradeRefundBO);
-        }else{
+//        }else{
             //退款审核
             submitRefundAudit(tradeRefundBO);
             CommonResult<TradeRefundRespDTO> result = CommonResult.error(REFUND_AUDITING);
             result.setData(respDTO);
             return result;
-        }
-        return CommonResult.success(respDTO);
+//        }
+//        return CommonResult.success(respDTO);
     }
 
     private CommonResult<TradeRefundRespDTO> exceptionOrderRefund(TradeRefundBO tradeRefundBO){
@@ -235,7 +232,7 @@ public class TradeRefundServiceImpl implements TradeRefundService {
                 tradeRefundRepositoryService.updateRefundStatus(refundAuditReqDTO.getRefundId(),RefundStatusEnum.PASS);
             }
 
-            TradeRefundBO tradeRefundBO =buildRefundOrderFromRefund(refundDO);
+//            TradeRefundBO tradeRefundBO =buildRefundOrderFromRefund(refundDO);
 //            CommonResult<?> supplerRefundResp = tradeSupplierService.refund(tradeRefundBO);
 //            if(supplerRefundResp.isError()){
 //                //4.1 供应商退款失败回调 ,此时逻辑是供应退款失败了,不发起退款,看后面是否审核通过了就忽略供应商的状态,无论成功或失败都发起退款
@@ -563,34 +560,34 @@ public class TradeRefundServiceImpl implements TradeRefundService {
         //订单下所有门票信息
         List<TradeDetailBO> tradeDetailList = tradeOrderRepositoryService.getTradeDetailWithBase(refundCreateReqDTO.getOrderId(), null,null);
         //订单产品信息
-        Map<Long, ProductSpuRespDTO> productMap = getOrderProductByDetailList(tradeDetailList);
+//        Map<Long, ProductSpuRespDTO> productMap = getOrderProductByDetailList(tradeDetailList);
         TradeRefundCalculateRespDTO respDTO = new TradeRefundCalculateRespDTO();
         BigDecimal originRefundPrice = BigDecimal.ZERO;
         BigDecimal fee = BigDecimal.ZERO;
         BigDecimal refundAmount = BigDecimal.ZERO;
         List<TradeRefundCalculateRespDTO.RefundItem > refundItemList = new ArrayList<>();
-        if(refundCreateReqDTO.getItemlList() == null){
+//        if(refundCreateReqDTO.getItemlList() == null){
             //退单
             for (TradeDetailBO tradeDetail : tradeDetailList) {
-                TradeRefundCalculateRespDTO.RefundItem calculateRefundItem = calculateRefundDetailPrice(tradeOrderDO, tradeDetail, productMap.get(tradeDetail.getProductId()), null);
+                TradeRefundCalculateRespDTO.RefundItem calculateRefundItem = calculateRefundDetailPrice(tradeOrderDO, tradeDetail, null, null);
                 refundAmount = refundAmount.add(calculateRefundItem.getRefundAmount());
                 fee = fee.add(calculateRefundItem.getFee());
                 originRefundPrice = originRefundPrice.add(calculateRefundItem.getOriginRefundAmount());
                 refundItemList.add(calculateRefundItem);
             }
-        }else{
-            //过滤门票信息并验证
-            for (TradeRefundCreateReqDTO.RefundItem refundItem : refundCreateReqDTO.getItemlList()) {
-                TradeDetailBO tradeDetail = tradeDetailList.stream().filter(tradeDetailBO -> ObjectUtil.equal(refundItem.getOrderDetailId(),tradeDetailBO.getId()))
-                        .findFirst().orElse(null);
-                Asserts.isTrue(tradeDetail!=null,"未找到此退单项:{}",refundItem.getOrderDetailId());
-                TradeRefundCalculateRespDTO.RefundItem calculateRefundItem = calculateRefundDetailPrice(tradeOrderDO, tradeDetail, productMap.get(tradeDetail.getProductId()), refundItem);
-                refundAmount = refundAmount.add(calculateRefundItem.getRefundAmount());
-                fee = fee.add(calculateRefundItem.getFee());
-                originRefundPrice = originRefundPrice.add(calculateRefundItem.getOriginRefundAmount());
-                refundItemList.add(calculateRefundItem);
-            }
-        }
+//        }else{
+//            //过滤门票信息并验证
+//            for (TradeRefundCreateReqDTO.RefundItem refundItem : refundCreateReqDTO.getItemlList()) {
+//                TradeDetailBO tradeDetail = tradeDetailList.stream().filter(tradeDetailBO -> ObjectUtil.equal(refundItem.getOrderDetailId(),tradeDetailBO.getId()))
+//                        .findFirst().orElse(null);
+//                Asserts.isTrue(tradeDetail!=null,"未找到此退单项:{}",refundItem.getOrderDetailId());
+//                TradeRefundCalculateRespDTO.RefundItem calculateRefundItem = calculateRefundDetailPrice(tradeOrderDO, tradeDetail, productMap.get(tradeDetail.getProductId()), refundItem);
+//                refundAmount = refundAmount.add(calculateRefundItem.getRefundAmount());
+//                fee = fee.add(calculateRefundItem.getFee());
+//                originRefundPrice = originRefundPrice.add(calculateRefundItem.getOriginRefundAmount());
+//                refundItemList.add(calculateRefundItem);
+//            }
+//        }
         //获取当前可退金额
         BigDecimal orderApplyRefundAmount = tradeRefundRepositoryService.getOrderApplyRefundAmount(refundCreateReqDTO.getOrderId());
         BigDecimal canRefundAmount = tradeOrderDO.getPayAmount().subtract(orderApplyRefundAmount);
@@ -795,18 +792,6 @@ public class TradeRefundServiceImpl implements TradeRefundService {
         tradeDetailList.forEach(tradeDetail -> {
             ProductSpuRespDTO product = productMap.get(tradeDetail.getProductId());
             if(product == null){
-                if(tradeDetail.getProductType() == PRODUCT_BASE_TYPE_PLAT){
-                    //平台产品
-                    DistributorProductRespDTO distributorProductRespDTO = otaDistributorApi.getDistributorProductById(tradeDetail.getProductId()).getCheckedData();
-                    AtomicReference<ProductSpuRespDTO> productSpuAtomicRef = new AtomicReference<>();
-                    TenantUtils.execute(distributorProductRespDTO.getTenantId(),()->{
-                        productSpuAtomicRef.set(productApi.getProduct(distributorProductRespDTO.getProductId()).getCheckedData());
-                    });
-                    product = productSpuAtomicRef.get();
-                }else{
-                    //自建产品
-                    product = productApi.getProduct(tradeDetail.getProductId()).getCheckedData();
-                }
                 productMap.put(tradeDetail.getProductId(),product);
             }
         });
@@ -818,11 +803,11 @@ public class TradeRefundServiceImpl implements TradeRefundService {
      */
     private void validateRefundRule(TradeOrderDO tradeOrderDO,TradeDetailBO tradeDetailBO, ProductSpuRespDTO product){
 
-        //验证退票规则, 验证detail规则
-        ProductRefundRuleRespDTO productRefundRule = product.getProductRefundRule();
-        Asserts.isTrue(ObjectUtil.notEqual(productRefundRule.getRefundRule(), RefundRuleEnum.NOT_REFUND.getValue()),"产品不允许退款{}",tradeDetailBO.getVoucherCode());
-        //验证退票最晚时间
-        checkRefundByRefundLatestTime(tradeOrderDO, tradeDetailBO, productRefundRule);
+//        //验证退票规则, 验证detail规则
+//        ProductRefundRuleRespDTO productRefundRule = product.getProductRefundRule();
+//        Asserts.isTrue(ObjectUtil.notEqual(productRefundRule.getRefundRule(), RefundRuleEnum.NOT_REFUND.getValue()),"产品不允许退款{}",tradeDetailBO.getVoucherCode());
+//        //验证退票最晚时间
+//        checkRefundByRefundLatestTime(tradeOrderDO, tradeDetailBO, productRefundRule);
     }
 
     private TradeRefundCalculateRespDTO.RefundItem calculateRefundDetailPrice(TradeOrderDO tradeOrderDO,TradeDetailBO tradeDetail,ProductSpuRespDTO product,TradeRefundCreateReqDTO.RefundItem refundItem){
@@ -833,9 +818,9 @@ public class TradeRefundServiceImpl implements TradeRefundService {
         calculateRefundItem.setOrderDetailId(tradeDetail.getId());
         calculateRefundItem.setVoucherCode(tradeDetail.getVoucherCode());
 
-        BigDecimal percent = getRefundFeePercent(tradeOrderDO,tradeDetail,product);
-        percent = percent ==null?BigDecimal.ZERO:percent;
-
+//        BigDecimal percent = getRefundFeePercent(tradeOrderDO,tradeDetail,product);
+//        percent = percent ==null?BigDecimal.ZERO:percent;
+        BigDecimal percent = BigDecimal.ZERO;
         //退整张
         if(refundItem == null || CollUtil.isEmpty(refundItem.getDetailList())){
             fee = getRefundFee(tradeDetail.getActualPrice(),percent);
@@ -871,45 +856,45 @@ public class TradeRefundServiceImpl implements TradeRefundService {
     }
 
     private BigDecimal getRefundFeePercent(TradeOrderDO tradeOrderDO,TradeDetailBO tradeDetail,ProductSpuRespDTO product){
-        ProductRefundRuleRespDTO productRefundRule = product.getProductRefundRule();
-        BigDecimal percent = null;
-        if(ObjectUtils.equalsAny(productRefundRule.getRefundRule(),RefundRuleEnum.PAY_FEE.getValue(),RefundRuleEnum.AUDIT.getValue(),RefundRuleEnum.USE_DATE_AUDIT.getValue())){
-            //如果没配置就不计算手续费
-            if(StringUtils.isNotBlank(productRefundRule.getRefundFeeRule())){
-                //计算手续费
-                JSONArray jsonArray = JSONUtil.parseArray(productRefundRule.getRefundFeeRule());
-                //门票有效期
-                LocalDateTime useDate = tradeDetail.getUseDate()==null?tradeDetail.getValidityStartDate():tradeDetail.getUseDate();
-                if(useDate!=null){
-                    Date now  = new Date();
-                    Date refundUseDate = DateUtils.of(useDate);
-                    //如果有选择了时间方案,则退款以时间方案最早时间为手续费节点
-                    if(tradeDetail.getRoutePlanId()!=null){
-//                        RoutePlanDetailRespDTO routePlanMinDetail = getRoutePlanMinDetail(tradeDetail.getRoutePlanId());
-//                        if(routePlanMinDetail!=null && StrUtil.isNotBlank(routePlanMinDetail.getStartTime())){
-//                            String newUseDate = DateUtil.formatDate(refundUseDate)+" "+routePlanMinDetail.getStartTime();
-//                            refundUseDate = DateUtil.parse(newUseDate, DatePattern.NORM_DATETIME_MINUTE_PATTERN);
+//        ProductRefundRuleRespDTO productRefundRule = product.getProductRefundRule();
+        BigDecimal percent = BigDecimal.ZERO;
+//        if(ObjectUtils.equalsAny(productRefundRule.getRefundRule(),RefundRuleEnum.PAY_FEE.getValue(),RefundRuleEnum.AUDIT.getValue(),RefundRuleEnum.USE_DATE_AUDIT.getValue())){
+//            //如果没配置就不计算手续费
+//            if(StringUtils.isNotBlank(productRefundRule.getRefundFeeRule())){
+//                //计算手续费
+//                JSONArray jsonArray = JSONUtil.parseArray(productRefundRule.getRefundFeeRule());
+//                //门票有效期
+//                LocalDateTime useDate = tradeDetail.getUseDate()==null?tradeDetail.getValidityStartDate():tradeDetail.getUseDate();
+//                if(useDate!=null){
+//                    Date now  = new Date();
+//                    Date refundUseDate = DateUtils.of(useDate);
+//                    //如果有选择了时间方案,则退款以时间方案最早时间为手续费节点
+//                    if(tradeDetail.getRoutePlanId()!=null){
+////                        RoutePlanDetailRespDTO routePlanMinDetail = getRoutePlanMinDetail(tradeDetail.getRoutePlanId());
+////                        if(routePlanMinDetail!=null && StrUtil.isNotBlank(routePlanMinDetail.getStartTime())){
+////                            String newUseDate = DateUtil.formatDate(refundUseDate)+" "+routePlanMinDetail.getStartTime();
+////                            refundUseDate = DateUtil.parse(newUseDate, DatePattern.NORM_DATETIME_MINUTE_PATTERN);
+////                        }
+//                    }else if(StrUtil.isNotBlank(productRefundRule.getRefundFeeStartTime())){
+//                        String newUseDate = DateUtil.formatDate(refundUseDate)+" "+productRefundRule.getRefundFeeStartTime();
+//                        refundUseDate = DateUtil.parse(newUseDate, DatePattern.NORM_DATETIME_MINUTE_PATTERN);
+//                    }
+//                    long offestMinute = DateUtil.between(refundUseDate,now, DateUnit.MINUTE);
+//                    offestMinute = refundUseDate.after(now)?offestMinute : -offestMinute;
+//                    //过滤规则
+//                    BigDecimal offestMinuteBd = BigDecimal.valueOf(offestMinute);
+//                    for (int i = 0; i < jsonArray.size(); i++) {
+//                        JSONObject jsonObject = jsonArray.getJSONObject(i);
+//                        BigDecimal minMinute = jsonObject.getBigDecimal("minHour").multiply(new BigDecimal(60));
+//                        BigDecimal maxMinute = jsonObject.getBigDecimal("maxHour").multiply(new BigDecimal(60)); //不包含
+//                        if(offestMinuteBd.compareTo(minMinute)>=0 && offestMinuteBd.compareTo(maxMinute)<0){
+//                            percent = jsonObject.getBigDecimal("fee");
+//                            break;
 //                        }
-                    }else if(StrUtil.isNotBlank(productRefundRule.getRefundFeeStartTime())){
-                        String newUseDate = DateUtil.formatDate(refundUseDate)+" "+productRefundRule.getRefundFeeStartTime();
-                        refundUseDate = DateUtil.parse(newUseDate, DatePattern.NORM_DATETIME_MINUTE_PATTERN);
-                    }
-                    long offestMinute = DateUtil.between(refundUseDate,now, DateUnit.MINUTE);
-                    offestMinute = refundUseDate.after(now)?offestMinute : -offestMinute;
-                    //过滤规则
-                    BigDecimal offestMinuteBd = BigDecimal.valueOf(offestMinute);
-                    for (int i = 0; i < jsonArray.size(); i++) {
-                        JSONObject jsonObject = jsonArray.getJSONObject(i);
-                        BigDecimal minMinute = jsonObject.getBigDecimal("minHour").multiply(new BigDecimal(60));
-                        BigDecimal maxMinute = jsonObject.getBigDecimal("maxHour").multiply(new BigDecimal(60)); //不包含
-                        if(offestMinuteBd.compareTo(minMinute)>=0 && offestMinuteBd.compareTo(maxMinute)<0){
-                            percent = jsonObject.getBigDecimal("fee");
-                            break;
-                        }
-                    }
-                }
-            }
-        }
+//                    }
+//                }
+//            }
+//        }
         return percent;
     }
 
@@ -1047,16 +1032,17 @@ public class TradeRefundServiceImpl implements TradeRefundService {
         }
         if(!isAudit){
             //产品是否要求审核
-            isAudit = isProductNeedAudit(tradeRefundBO, refundCreateReqDTO, tradeDetailList);
+//            isAudit = isProductNeedAudit(tradeRefundBO, refundCreateReqDTO, tradeDetailList);
+            isAudit = false;
         }
 //        if(!isAudit){
 //            //订单被计调需要审核
 //            isAudit = ObjectUtils.equalsAny(tradeRefundBO.getTradeOrderDO().getDispatchStatus(),ORDER_DISPATCH_STATUS_FINISH,ORDER_DISPATCH_STATUS_PART);
 //        }
-        if(!isAudit){
-            //已转交订单需要审核
-            isAudit = tradeRefundBO.getTradeOrderDO().getTransDistributorId()!=null;
-        }
+//        if(!isAudit){
+//            //已转交订单需要审核
+//            isAudit = tradeRefundBO.getTradeOrderDO().getTransDistributorId()!=null;
+//        }
 
         return isAudit;
     }
@@ -1162,20 +1148,20 @@ public class TradeRefundServiceImpl implements TradeRefundService {
 
         if(refundItem == null || CollUtil.isEmpty(refundItem.getDetailList())){
             //全部退
-            tradeDetail.getTradeDetailBaseList().forEach(tradeDetailBase -> {
-                //构建退票明细基础信息
-                buildRefundDetailBase(tradeRefundBO,refundDetailDO,tradeDetailBase,null,refundDetailBaseDOList);
-
-            });
+//            tradeDetail.getTradeDetailBaseList().forEach(tradeDetailBase -> {
+//                //构建退票明细基础信息
+//                buildRefundDetailBase(tradeRefundBO,refundDetailDO,tradeDetailBase,null,refundDetailBaseDOList);
+//
+//            });
         }else{
-            //部分退
-            refundItem.getDetailList().forEach(refundSubItem -> {
-                TradeDetailBaseDO tradeDetailBase = tradeDetail.getTradeDetailBaseList().stream().filter(tradeDetailBaseDO -> ObjectUtil.equal(refundSubItem.getOrderDetailBaseId(), tradeDetailBaseDO.getId()))
-                        .findFirst().orElse(null);
-                Asserts.isTrue(tradeDetailBase!=null,"未找到此退单项明细:{}",refundItem.getOrderDetailId());
-                //构建退票明细基础信息
-                buildRefundDetailBase(tradeRefundBO,refundDetailDO,tradeDetailBase,refundSubItem,refundDetailBaseDOList);
-            });
+//            //部分退
+//            refundItem.getDetailList().forEach(refundSubItem -> {
+//                TradeDetailBaseDO tradeDetailBase = tradeDetail.getTradeDetailBaseList().stream().filter(tradeDetailBaseDO -> ObjectUtil.equal(refundSubItem.getOrderDetailBaseId(), tradeDetailBaseDO.getId()))
+//                        .findFirst().orElse(null);
+//                Asserts.isTrue(tradeDetailBase!=null,"未找到此退单项明细:{}",refundItem.getOrderDetailId());
+//                //构建退票明细基础信息
+//                buildRefundDetailBase(tradeRefundBO,refundDetailDO,tradeDetailBase,refundSubItem,refundDetailBaseDOList);
+//            });
         }
     }
 
@@ -1295,8 +1281,8 @@ public class TradeRefundServiceImpl implements TradeRefundService {
         refundDetailList.forEach(refundDetailDO -> {
             TradeRefundDetailBO tradeRefundDetailBO = new TradeRefundDetailBO();
             tradeRefundDetailBO.setRefundDetailDO(refundDetailDO);
-            List<RefundDetailBaseDO> refundDetailBaseList = tradeRefundRepositoryService.getRefundDetailBaseList(refundDetailDO.getId());
-            tradeRefundDetailBO.setRefundDetailBaseDOList(refundDetailBaseList);
+//            List<RefundDetailBaseDO> refundDetailBaseList = tradeRefundRepositoryService.getRefundDetailBaseList(refundDetailDO.getId());
+//            tradeRefundDetailBO.setRefundDetailBaseDOList(refundDetailBaseList);
             tradeRefundDetailBOList.add(tradeRefundDetailBO);
         });
         return tradeRefundBO;
@@ -1581,18 +1567,18 @@ public class TradeRefundServiceImpl implements TradeRefundService {
     }
 
     private void forceCheck(TradeRefundCreateReqDTO refundCreateReqDTO,TradeRefundBO tradeRefundBO,List<TradeDetailBO> tradeDetailList){
-        List<Long> checkList = new ArrayList<>();
-        if(refundCreateReqDTO.getItemlList() == null){
-            //验证是否在代退中
-            Asserts.isTrue(!isGuideRefund(tradeRefundBO.getTradeOrderDO(),null),"存在导游代退信息,当前订单不能发起退款");
-        }else{
-            //过滤门票信息并验证
-            for (TradeRefundCreateReqDTO.RefundItem refundItem : refundCreateReqDTO.getItemlList()) {
-                checkList.add(refundItem.getOrderDetailId());
-            }
-            //验证是否在代退中
-            Asserts.isTrue(!isGuideRefund(tradeRefundBO.getTradeOrderDO(),checkList),"存在导游代退信息,当前订单不能发起退款");
-        }
+//        List<Long> checkList = new ArrayList<>();
+//        if(refundCreateReqDTO.getItemlList() == null){
+//            //验证是否在代退中
+//            Asserts.isTrue(!isGuideRefund(tradeRefundBO.getTradeOrderDO(),null),"存在导游代退信息,当前订单不能发起退款");
+//        }else{
+//            //过滤门票信息并验证
+//            for (TradeRefundCreateReqDTO.RefundItem refundItem : refundCreateReqDTO.getItemlList()) {
+//                checkList.add(refundItem.getOrderDetailId());
+//            }
+//            //验证是否在代退中
+//            Asserts.isTrue(!isGuideRefund(tradeRefundBO.getTradeOrderDO(),checkList),"存在导游代退信息,当前订单不能发起退款");
+//        }
     }
 
     private boolean isGuideRefund(TradeOrderDO tradeOrderDO,List<Long> detailIdList){
@@ -1604,8 +1590,8 @@ public class TradeRefundServiceImpl implements TradeRefundService {
     }
 
     private boolean isCheckRefundOnStart(TradeRefundBO tradeRefundBO,TradeDetailBO tradeDetail){
-        ProductSpuRespDTO product = tradeRefundBO.getProductMap().get(tradeDetail.getProductId());
-        ProductRefundRuleRespDTO productRefundRule = product.getProductRefundRule();
+//        ProductSpuRespDTO product = tradeRefundBO.getProductMap().get(tradeDetail.getProductId());
+//        ProductRefundRuleRespDTO productRefundRule = product.getProductRefundRule();
         //暂时全部都要验证,不根据配置判断
         return true;
     }

+ 10 - 11
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeDetailMapper.xml

@@ -65,7 +65,7 @@
         tdb.supplier_name,tdb.is_system_direct,tdb.use_status,tdb.check_status base_check_status,tdb.verify_time base_verify_time,tdb.price base_price,tdb.usage_count,tdb.product_resource_price,tdb.project_id,tdb.project_name,
         tdb.specification_id,tdb.specification_name,tdb.spec_type base_spec_type,tdb.supplier_voucher_code,tdb.plat_supplier_order_id,tdb.project_code
         from trade_detail td
-        inner join trade_detail_base tdb on td.id = tdb.detail_id
+        left join trade_detail_base tdb on td.id = tdb.detail_id
         <where>
             td.order_id = #{orderId}
         <if test="tradeDetailId!=null">
@@ -157,8 +157,8 @@
         <result property="routePlanId" column="route_plan_id"/>
         <result property="routePlanGroupType" column="route_plan_group_type"/>
         <collection property="visitors" resultMap="visitorResultMap"/>
-        <collection property="detailBaseList" select="selectTradeDetailBase" column="{detailId=id}"
-                    ofType="com.yc.ship.module.trade.controller.admin.order.vo.order.DetailBaseRespVO"/>
+<!--        <collection property="detailBaseList" select="selectTradeDetailBase" column="{detailId=id}"-->
+<!--                    ofType="com.yc.ship.module.trade.controller.admin.order.vo.order.DetailBaseRespVO"/>-->
     </resultMap>
     <resultMap id="MiddleWareDtoResultMap2" type="com.yc.ship.module.trade.controller.admin.order.vo.order.TradeDetailRespVO">
         <id property="id" column="id"/>
@@ -246,12 +246,11 @@
 
     <select id="getOrderIdDetail" resultMap="MiddleWareDtoResultMap">
         SELECT td.*,tv.detail_id,tv.name,tv.id visitorId,tv.gender,tv.credential_no,
-               tv.credential_type, tv.mobile,tv.ota_detail_id,tv.is_insure,pc.full_path_name,p.product_tag,p.product_tag2,tstd.supp_spec_type
+               tv.credential_type, tv.mobile,tv.ota_detail_id,tv.is_insure,pc.full_path_name,p.product_tag,p.product_tag2
         FROM trade_detail td
-        inner join product_spu p on p.id = td.product_id
-        inner join product_category pc on pc.id = p.category_id
+        left join product_spu p on p.id = td.product_id
+        left join product_category pc on pc.id = p.category_id
         inner JOIN trade_visitor tv on td.id = tv.detail_id
-        left join trade_supp_ticket_detail tstd on td.id = tstd.trade_detail_id
         where 1= 1
         <if test="orderId != null and orderId != ''">
             AND td.order_id = #{orderId}
@@ -451,7 +450,7 @@
         <result property="tradeDetailPrice" column="tradeDetailPrice"/>
         <result property="actualPrice" column="actual_price"/>
         <result property="fee" column="fee"/>
-        <collection property="refundDetailBaseRespList" resultMap="RefundBaseMap"/>
+<!--        <collection property="refundDetailBaseRespList" resultMap="RefundBaseMap"/>-->
     </resultMap>
     <resultMap id="RefundBaseMap" type="com.yc.ship.module.trade.controller.admin.order.vo.refund.RefundDetailBaseRespVO">
         <id property="id" column="refundBaseId"/>
@@ -1343,13 +1342,13 @@
         SELECT
         tf.id,tf.refund_id,tf.trade_detail_id,tf.refund_amount refundDetailAmount,tf.voucher_status,tf.refund_status refundDetailStatus,tf.refund_time,
         tf.fee, td.voucher_code,td.product_id,td.product_name,td.price  tradeDetailPrice,td.actual_price,
-        tfb.id refundBaseId,tfb.trade_detail_base_id tradeBaseId,tfb.refund_amount refundBaseAmount,tfb.refund_status refundBaseStatus,tfb.use_status,tfb.plat_supplier_refund_id,tfb.plat_supplier_order_id,tfb.supplier_voucher_code,
+        tfb.id refundBaseId,tfb.trade_detail_base_id tradeBaseId,tfb.refund_amount refundBaseAmount,tfb.refund_status refundBaseStatus,tfb.use_status,
         tdb.product_base_id,tdb.product_base_name,tdb.product_resource_id,tdb.product_resource_name,tdb.supplier_product_id,tdb.project_name,tdb.product_resource_price,tdb.supplier_id,tdb.supplier_name,tdb.price tradeBasePrice
         FROM
         trade_refund_detail tf
         INNER JOIN trade_detail td ON tf.trade_detail_id = td.id
-        INNER JOIN trade_refund_detail_base tfb ON tfb.refund_detail_id = tf.id
-        INNER JOIN trade_detail_base tdb ON tfb.trade_detail_base_id = tdb.id
+        left JOIN trade_refund_detail_base tfb ON tfb.refund_detail_id = tf.id
+        left JOIN trade_detail_base tdb ON tfb.trade_detail_base_id = tdb.id
         where 1= 1
         <if test="refundId != null and refundId != ''">
             AND tf.refund_id = #{refundId}

+ 10 - 58
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeOrderMapper.xml

@@ -188,33 +188,15 @@
 
     <select id="getTradeOrderUserPage"
             resultType="com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderRespVO">
-        SELECT td.*,rt.name routePlanName,tou.contact_name,tou.credential_no,tou.mobile,count(tdl.id) num,sum(CASE WHEN tdl.voucher_status in (1,2,3,4,6,8,9) THEN	1 ELSE 0 END) realnum,(tr.origin_amount-tr.refund_amount) feeAmount,tdl.product_name,tdl.spec_type,if(td.is_change_order = 0,ifnull(tr.origin_amount-tr.refund_amount,0),ifnull(td.plat_amount,if(td.order_status>=6,td.pay_amount,0)-ifnull(tr.refund_amount,0))) realAmount
-             ,if(td.is_change_order = 0,ifnull(td.pay_amount - tr.origin_amount+tr.refund_amount,td.pay_amount),tr.refund_amount) refundAmount,obt.discountAmount saleAmount,tst.pay_amount suppAmount,
-             ps.product_tag productTag,ps.product_tag2 productTag2,ps.product_tag3 productTag3,ps.product_tag4 productTag4,
-        (
-        select GROUP_CONCAT(specTypeInfo)
-        from (
-        select CONCAT(tdt.spec_type,'*',count(*)) specTypeInfo
-        from
-        trade_detail tdt
-        where tdt.order_id = td.id
-        and tdt.voucher_status in (1,2,3,6,8,9)
-        GROUP BY tdt.spec_type
-        ) t
-        ) allSpecTypeInfo
+        SELECT td.*,tou.contact_name,tou.credential_no,tou.mobile,count(tdl.id) num,sum(CASE WHEN tdl.voucher_status in (1,2,3,4,6,8,9) THEN	1 ELSE 0 END) realnum,(tr.origin_amount-tr.refund_amount) feeAmount,tdl.product_name,tdl.spec_type,ifnull(tr.origin_amount-tr.refund_amount,0) realAmount
+             ,tr.refund_amount refundAmount,
+             ps.product_tag productTag,ps.product_tag2 productTag2,ps.product_tag3 productTag3,ps.product_tag4 productTag4
         FROM trade_order td
         INNER JOIN trade_order_user tou on td.id = tou.order_id
         INNER JOIN trade_detail tdl on td.id = tdl.order_id
         INNER JOIN product_spu ps on ps.id = tdl.product_id
-        left JOIN product_route_plan rt on rt.id = td.route_plan_id
-        LEFT JOIN (select * from trade_order_bind where deleted=0 and type = 0 ) ob ON ob.bind_id = td.id
-        LEFT JOIN trade_order o on ob.order_id = o.id
         LEFT JOIN ota_distributor od on od.id = td.source_id
         LEFT JOIN (select m2.order_id,sum(m2.refund_amount) refund_amount,sum(m2.origin_amount) origin_amount from trade_refund m2  where m2.refund_status = 6 and m2.refund_method !=2 GROUP BY m2.order_id) tr on td.id = tr.order_id
-        left join (select tod.order_id, sum(tod.custom) discountAmount from trade_order_bind tod where deleted=0 and type in (7,8)
-        group by tod.order_id
-        ) obt ON obt.order_id = td.id
-        left join (select order_id,sum(pay_amount) pay_amount from trade_supp_ticket where st_status=1 GROUP BY order_id) tst on tst.order_id = td.id
         where 1= 1
         <if test="vo.orderStatus!=null and vo.orderStatus.size()>0">
             and  td.order_status in
@@ -276,29 +258,12 @@
         <if test="vo.productTag4 != null and vo.productTag4 != ''">
             AND ps.product_tag4 = #{vo.productTag4}
         </if>
-        <if test="vo.planIds!=null and vo.planIds.size()>0 and vo.cateIds!=null and vo.cateIds.size()>0">
-            AND (td.route_plan_id in
-            <foreach collection="vo.planIds" item="item" separator=","  open="(" close=")">
-                #{item}
-            </foreach>
-            or tdl.product_id in
-            <foreach collection="vo.cateIds" item="item" separator=","  open="(" close=")">
-                #{item}
-            </foreach>
-            )
-        </if>
         <if test="vo.cateIds!=null and vo.cateIds.size()>0 and (vo.planIds==null or vo.planIds.size()==0)">
             AND tdl.product_id in
             <foreach collection="vo.cateIds" item="item" separator=","  open="(" close=")">
                 #{item}
             </foreach>
         </if>
-        <if test="vo.planIds!=null and vo.planIds.size()>0 and (vo.cateIds==null or vo.cateIds.size()==0)">
-            and td.route_plan_id in
-            <foreach collection="vo.planIds" item="item" separator=","  open="(" close=")">
-                #{item}
-            </foreach>
-        </if>
 
         <if test="vo.externalOrderNo != null and vo.externalOrderNo != ''">
             AND td.external_order_no = #{vo.externalOrderNo}
@@ -374,7 +339,7 @@
             AND exists (select 1 from trade_refund tr  where tr.order_id=td.id and tr.refund_status = 6 and tr.refund_time BETWEEN #{vo.orderRefundDateStart} and #{vo.orderRefundDateEnd} )
         </if>
         GROUP BY td.id
-        ORDER BY IF ( o.travel_date IS NULL, td.create_time, o.create_time ) DESC, td.is_bind
+        ORDER BY td.create_time DESC
 
     </select>
 
@@ -557,7 +522,7 @@
 
     <select id="getOtcTradeOrderUserPage"
             resultType="com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderRespVO">
-        SELECT td.*,rt.name routePlanName,tou.contact_name,tou.credential_no,tou.mobile,count(tdl.id) num,
+        SELECT td.*,tou.contact_name,tou.credential_no,tou.mobile,count(tdl.id) num,
         sum(CASE WHEN tdl.voucher_status in (1,2,3,4,6,8,9) THEN	1 ELSE 0 END) realnum,tdl.product_name,
         tdl.spec_type,if(td.is_change_order = 0,ifnull(tr.origin_amount-tr.refund_amount,0),if(td.order_status>=6,td.pay_amount,0)-ifnull(tr.refund_amount,0))  realAmount,ifnull(td.plat_amount,0) platAmount,
         if(td.is_change_order = 0,ifnull(td.pay_amount - tr.origin_amount+tr.refund_amount,td.pay_amount),tr.refund_amount)  refundAmount, SUM(IF(tv.credential_no IS NULL and tdl.voucher_status in (1,2,3,4,6,8,9) ,1,0)) notRealNum
@@ -1106,12 +1071,11 @@
 
     <select id="getRefundRecordPage"
             resultType="com.yc.ship.module.trade.controller.admin.order.vo.refund.RefundRespVO">
-        SELECT tr.*,td.order_no, ou.mobile,td.travel_date, ou.contact_name ,td.route_plan_id,plan.name as route_plan_name, tdl.product_name
+        SELECT tr.*,td.order_no, ou.mobile,td.travel_date, ou.contact_name ,tdl.product_name
         FROM trade_refund tr
         INNER JOIN  trade_order td on tr.order_id = td.id
         inner join trade_order_user ou on ou.order_id = td.id
         INNER JOIN trade_detail tdl on td.id = tdl.order_id  and tdl.deleted = 0
-        left join product_route_plan plan on td.route_plan_id = plan.id
         where 1= 1
         <if test="vo.orderNo != null and vo.orderNo != ''">
             AND td.order_no = #{vo.orderNo}
@@ -1161,17 +1125,6 @@
         <if test="vo.refundTimeEnd != null and vo.refundTimeEnd != ''">
             AND td.refund_time <![CDATA[ <= ]]> #{vo.refundTimeEnd}
         </if>
-        <if test="vo.planIds!=null and vo.planIds.size()>0 and vo.cateIds!=null and vo.cateIds.size()>0">
-            AND (td.route_plan_id in
-            <foreach collection="vo.planIds" item="item" separator=","  open="(" close=")">
-                #{item}
-            </foreach>
-            or tdl.product_id in
-            <foreach collection="vo.cateIds" item="item" separator=","  open="(" close=")">
-                #{item}
-            </foreach>
-            )
-        </if>
         <if test="vo.cateIds!=null and vo.cateIds.size()>0 and vo.planIds==null">
             AND tdl.product_id in
             <foreach collection="vo.cateIds" item="item" separator=","  open="(" close=")">
@@ -1190,18 +1143,17 @@
 
 
     <select id="getOrderInfo"  resultMap="MiddleWareDtoResultMap">
-        SELECT td.id,td.pay_amount,td.order_no,td.external_order_no,td.external_origin_order_no,td.route_plan_id,rt.name route_plan_name,td.visitor_type,td.travel_date,td.sell_method,td.source_id,td.source_name,td.store_id,td.seller_id,td.member_id,td.amount,td.order_status,td.remark,td.share_name,td.create_time,td.is_bind,td.area_manager_id,td.is_marketing,td.is_marketing_use,
-        tou.contact_name contactName,tou.credential_no credentialNo,tou.mobile,tou.county,tou.province,tou.city,td.is_change_order,td.agency_group_id,
+        SELECT td.id,td.pay_amount,td.order_no,td.external_order_no,td.visitor_type,td.travel_date,td.sell_method,td.source_id,td.source_name,td.store_id,td.seller_id,td.member_id,td.amount,td.order_status,td.remark,td.share_name,td.create_time,td.is_marketing,td.is_marketing_use,
+        tou.contact_name contactName,tou.credential_no credentialNo,tou.mobile,tou.county,tou.province,tou.city,td.agency_group_id,
         top.id payId,top.pay_amount payAmount,top.pay_status,top.payment_type,top.payment_date,top.payment_no,
-        td.store_name,td.dispatch_status,td.is_invoice, td.confirm_type, td.travel_status, tr.refund_amount,td.finish_status,
+        td.store_name,td.is_invoice, td.confirm_type, td.travel_status, tr.refund_amount,td.finish_status,
         ti.id insuranceId,ti.policy_no,ti.proposal_no,ti.insurance_no,ti.insurance_status,ti.insured_num,ti.insurance_effect_date,ti.electronic_policy,
-        tc.id contractId,tc.contract_no,tc.`status`,tc.tourists_count,tc.contract_url,tc.operate_name,tc.signer_name,tc.signer_mobile,tc.signing_time,tc.signing_url,tc.view_url
+        tc.id contractId,tc.contract_no,tc.`status`,tc.tourists_count,tc.contract_url,tc.operate_name,tc.signer_name,tc.signer_mobile,tc.signing_time
         FROM trade_order td
         INNER JOIN trade_order_user tou on td.id = tou.order_id
         left JOIN trade_order_pay top on td.id = top.order_id AND top.pay_status = 1 and top.deleted = 0
         left JOIN trade_insurance ti on td.id = ti.order_id
         left JOIN trade_contract tc on td.id = tc.order_id
-        left JOIN product_route_plan rt on rt.id = td.route_plan_id
         LEFT JOIN (select m2.order_id,sum(m1.refund_amount) refund_amount from trade_refund_detail m1
             inner join trade_refund m2 on m1.refund_id = m2.id where m2.order_id = #{id} and m1.refund_status = 6 GROUP BY m2.order_id) tr on td.id = tr.order_id
         where 1= 1