Browse Source

Merge branch 'main' of http://47.98.207.247:3000/lsq/ship-ota-server into main

luofeiyun 1 week ago
parent
commit
81128b0f21

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

@@ -25,6 +25,7 @@ import lombok.Data;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.Date;
 import java.util.List;
 
 import static com.yc.ship.framework.common.util.date.DateUtils.*;
@@ -69,6 +70,10 @@ public class TradeOrderRespNewVO {
     @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
     private LocalDateTime confirmDate;
 
+    @Schema(description = "游玩日期")
+    @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = FORMAT_YEAR_MONTH_DAY, timezone = TIME_ZONE_DEFAULT)
+    private Date travelDate;
+
     @Schema(description = "备注")
     @ExcelProperty("备注")
     private String remark;

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

@@ -10,6 +10,8 @@ import com.yc.ship.module.trade.enums.CredentialTypeEnum;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * 游客 DO
  *
@@ -141,4 +143,8 @@ public class TradeVisitorDO extends TenantBaseDO {
 
     @Schema(description = "地址", example = "")
     private String address;
+
+    @Schema(description = "产品类型 0 游船产品 1 附加产品 2:赠票", example = "")
+    @TableField(exist = false)
+    private Integer productType;
 }

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

@@ -4,17 +4,16 @@ package com.yc.ship.module.trade.service.order;
 import com.yc.ship.framework.common.pojo.CommonResult;
 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.TradeOrderPageReqVO;
 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;
 
 import java.util.List;
 
 /**
  * @Description 订单交易service接口
- * @Author qsl
+ * @author qsl
  * @Date 2025/6/4 15:03
  */
 public interface TradeOrderService {
@@ -34,94 +33,52 @@ public interface TradeOrderService {
 
     /**
      * 获取管理端订单分页列表
-     * @param reqVO
-     * @return
+     *
      */
     PageResult<TradeOrderRespVO> getPlatOrderPage(TradeOrderPageReqVO reqVO);
+
     /**
      * 订单创建
-     * @param orderCreateReqDTO
-     * @return
+     *
      */
     CommonResult<TradeOrderRespDTO> createOrder(TradeOrderCreateReqDTO orderCreateReqDTO);
 
     CommonResult<TradeOrderRespDTO> createShipOrder(ShipTradeOrderCreateReqVO orderCreateReqDTO);
+
     CommonResult<TradeOrderRespDTO> modifyShipOrder(ShipTradeOrderCreateReqVO orderCreateReqDTO);
 
-    /**
-     * 游客补录
-     * @param tradeBindVisitorReqDTO
-     * @return
-     */
-    CommonResult<?> bindVisitor(TradeBindVisitorReqDTO tradeBindVisitorReqDTO);
 
     /**
      * 订单关联
-     * @param tradeBindOrderReqDTO
-     * @return
+     *
      */
     CommonResult<Long> bindOrder(TradeBindOrderReqDTO tradeBindOrderReqDTO);
 
-    /**
-     * 订单解绑
-     * @param tradeBindOrderReqDTO
-     * @return
-     */
-    CommonResult<?> unbindOrder(TradeBindOrderReqDTO tradeBindOrderReqDTO);
 
     /**
      * 修改游客信息
-     * @param tradeModifyVisitorReqDTO
-     * @return
+     *
      */
     CommonResult<?> modifyVisitor(TradeModifyVisitorReqDTO tradeModifyVisitorReqDTO);
 
-    /**
-     * 订单转交
-     * @param tradeTransferReqDTO
-     * @return
-     */
-    CommonResult<?> transferOrder(TradeTransferReqDTO tradeTransferReqDTO);
-
-    /**
-     * 订单转交撤回
-     * @param tradeRefundRespDTO
-     * @return
-     */
-    CommonResult<?> transferOrderRevoke(TradeRefundRespDTO tradeRefundRespDTO);
-
-    /**
-     * 订单计调
-     * @param tradeOrderDispatchReqDTO
-     * @return
-     */
-    CommonResult<?> orderDispatch(TradeOrderDispatchReqDTO tradeOrderDispatchReqDTO);
 
     /**
      * 根据订单规格变更
-     * @param tradeOrderChangeReqDTO
-     * @return
+     *
      */
     CommonResult<TradeOrderChangeRespDTO> changeOrder(TradeOrderChangeReqDTO tradeOrderChangeReqDTO, TradeOrderDO tradeOrderDO);
 
     /**
      * 根据明细规格变更,暂时未使用
-     * @param tradeOrderChangeReqDTO
-     * @return
+     *
      */
-    CommonResult<TradeOrderChangeRespDTO> changeTicket(TradeOrderChangeReqDTO tradeOrderChangeReqDTO,TradeOrderDO tradeOrderDO);
+    CommonResult<TradeOrderChangeRespDTO> changeTicket(TradeOrderChangeReqDTO tradeOrderChangeReqDTO, TradeOrderDO tradeOrderDO);
 
     void bindChangeOrder(List<Long> originDetailIdList, Long orderId, Long originOrderId);
 
-    TradeDetailBaseDO getTradeDetailByNo(String ticketNo);
     int getMaxOrderNo(Long voyageId);
 
 
     List<TradeOrderDO> getTradeOrderByExpire(String expiretime);
 
-    
-    void autoBindRelatedOrder(TradeOrderDO tradeOrderDO);
-
-    void mergeAddOrder(TradeOrderDO tradeOrderDO);
-
 }

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

@@ -3,14 +3,11 @@ package com.yc.ship.module.trade.service.order.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.map.MapUtil;
-import cn.hutool.core.thread.ThreadUtil;
 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;
@@ -19,38 +16,30 @@ import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.common.util.date.DateUtils;
 import com.yc.ship.framework.common.util.object.ObjectUtils;
 import com.yc.ship.framework.security.core.LoginUser;
-import com.yc.ship.framework.tenant.core.context.TenantContextHolder;
 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.enums.ProductTypeEnum;
 import com.yc.ship.module.product.enums.SpecTypeEnum;
-import com.yc.ship.module.system.api.dict.DictDataApi;
-import com.yc.ship.module.system.api.dict.dto.DictDataRespDTO;
 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.dataobject.orderjz.OrderJzDO;
-import com.yc.ship.module.trade.dal.mysql.order.TradeDetailBaseMapper;
 import com.yc.ship.module.trade.dal.mysql.order.TradeDetailMapper;
 import com.yc.ship.module.trade.dal.mysql.order.TradeOrderMapper;
 import com.yc.ship.module.trade.enums.*;
 import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
-import com.yc.ship.module.trade.framework.common.ConfigUtils;
 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.TradeOrderBizService;
 import com.yc.ship.module.trade.service.order.TradeOrderRepositoryService;
 import com.yc.ship.module.trade.service.order.TradeOrderRuleValidate;
 import com.yc.ship.module.trade.service.order.TradeOrderService;
-import com.yc.ship.module.trade.service.order.bo.TradeBindOrderQueryBO;
 import com.yc.ship.module.trade.service.order.bo.TradeDetailBO;
 import com.yc.ship.module.trade.service.order.bo.TradeOrderBO;
 import com.yc.ship.module.trade.service.order.bo.TradeOrderDetailBO;
@@ -63,8 +52,6 @@ import com.yc.ship.module.trade.service.thirdsystem.ThirdGateSystemService;
 import com.yc.ship.module.trade.utils.AgencyAuthUtils;
 import com.yc.ship.module.trade.utils.TradeUUCodeUtils;
 import lombok.extern.slf4j.Slf4j;
-import org.redisson.api.RLock;
-import org.redisson.api.RedissonClient;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -72,7 +59,6 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
@@ -110,14 +96,8 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     @Resource
     private OtaDistributorApi otaDistributorApi;
     @Resource
-    private RedissonClient redissonClient;
-    @Resource
-    private TradeDetailBaseMapper tradeDetailBaseMapper;
-    @Resource
     private ThirdGateSystemService thirdGateSystemService;
     @Resource
-    private ConfigUtils configUtils;
-    @Resource
     private TradeDetailMapper tradeDetailMapper;
     @Resource
     private TradeRefundRepositoryService tradeRefundRepositoryService;
@@ -133,10 +113,10 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     public PageResult<TradeOrderRespVO> getPlatOrderPage(TradeOrderPageReqVO pageReqVO) {
         IPage<TradeOrderRespVO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
         LoginUser agencyLoginUser = agencyAuthUtils.getAgencyLoginUser();
-        if(agencyLoginUser.getDistributorId()!=null) {
+        if (agencyLoginUser.getDistributorId() != null) {
             pageReqVO.setDistributorId(agencyLoginUser.getDistributorId());
         }
-        if(agencyLoginUser.getStoreId()!=null) {
+        if (agencyLoginUser.getStoreId() != null) {
             pageReqVO.setStoreId(agencyLoginUser.getStoreId());
         }
         IPage<TradeOrderRespVO> iPage = tradeOrderMapper.getTradeOrderUserPage(page, pageReqVO);
@@ -240,49 +220,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         }
     }
 
-    @Override
-    @Deprecated
-    public CommonResult<?> bindVisitor(TradeBindVisitorReqDTO tradeBindVisitorReqDTO) {
-        //待使用、已核销门票可以补录信息
-        List<String> detailVoucherList = tradeBindVisitorReqDTO.getBindItemList().stream().map(TradeBindVisitorReqDTO.BindItem::getVoucherCode).collect(Collectors.toList());
-        List<TradeDetailRespVO> detailList = tradeOrderRepositoryService.getDetailAndVisitor(tradeBindVisitorReqDTO.getOrderId(), detailVoucherList);
-        List<TradeVisitorDO> visitorDOList = new ArrayList<>();
-        //验证、构建补录对象
-        for (TradeBindVisitorReqDTO.BindItem bindItem : tradeBindVisitorReqDTO.getBindItemList()) {
-            TradeDetailRespVO tradeDetailRespVO = detailList.stream().filter(detail -> ObjectUtil.equal(detail.getVoucherCode(), bindItem.getVoucherCode())).findFirst().orElse(null);
-            //实名产品不能补录、待使用、已核销可以补录
-            int bindCount;
-            if (tradeDetailRespVO == null || tradeDetailRespVO.getUseRealName() == YES ||
-                    ObjectUtil.notEqual(tradeDetailRespVO.getVoucherStatus(), VoucherStatusEnum.UNUSED.getStatus()) && ObjectUtil.notEqual(tradeDetailRespVO.getVoucherStatus(), VoucherStatusEnum.VERIFIED.getStatus())
-                    || ((bindCount = tradeDetailRespVO.getQuantityOfOne() - tradeDetailRespVO.getVisitors().size()) == 0) || bindItem.getVisitorList().isEmpty()) {
-                continue;
-            }
-
-            for (int i = 0; i < bindCount; i++) {
-                if (i == bindItem.getVisitorList().size()) {
-                    break;
-                }
-                TradeOrderCreateReqDTO.Visitor visitor = bindItem.getVisitorList().get(i);
-                TradeVisitorDO tradeVisitorDO = TradeOrderConvert.INSTANCE.convert(visitor);
-                //姓名证件必填
-                if (StrUtil.isBlank(tradeVisitorDO.getCredentialNo()) || StrUtil.isBlank(tradeVisitorDO.getName())) {
-                    continue;
-                }
-                tradeVisitorDO.setId(IdWorker.getId());
-                tradeVisitorDO.setDetailId(tradeDetailRespVO.getId());
-                visitorDOList.add(tradeVisitorDO);
-            }
-        }
-
-        if (!visitorDOList.isEmpty()) {
-            //保存补录信息
-            tradeOrderRepositoryService.saveVisitorList(visitorDOList);
-            //如果有平台供应商可以补录
-            tradeSupplierService.bindVisitor(tradeBindVisitorReqDTO.getOrderId(), visitorDOList);
-        }
-
-        return visitorDOList.isEmpty() ? CommonResult.error(ORDER_BIND_VISITOR_FAIL) : CommonResult.success(visitorDOList.size());
-    }
 
     @Override
     public CommonResult<Long> bindOrder(TradeBindOrderReqDTO tradeBindOrderReqDTO) {
@@ -313,17 +250,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         return CommonResult.success(tradeOrderBindDO.getId());
     }
 
-    @Override
-    public CommonResult<?> unbindOrder(TradeBindOrderReqDTO tradeBindOrderReqDTO) {
-        Asserts.isTrue(ObjectUtil.notEqual(tradeBindOrderReqDTO.getBindId(), tradeBindOrderReqDTO.getOrderId()), "解绑订单不能相等");
-
-        TradeOrderBindDO orderBindDO = tradeOrderRepositoryService.getBindOrder(tradeBindOrderReqDTO.getOrderId(),
-                tradeBindOrderReqDTO.getBindId(), tradeBindOrderReqDTO.getType());
-        Asserts.isTrue(orderBindDO != null, "订单关联系不存在");
-        tradeOrderRepositoryService.deleteOrderBind(orderBindDO.getId());
-
-        return CommonResult.success(true);
-    }
 
     @Override
     public CommonResult<?> modifyVisitor(TradeModifyVisitorReqDTO tradeModifyVisitorReqDTO) {
@@ -382,37 +308,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         }
 
 
-        //验证子票是否重复购买
-//        if(CollUtil.isNotEmpty(productSpuRespDTO.getProductGroupList())){
-//
-//            for (TradeOrderCreateReqDTO.OrderDetail orderDetail : tradeVisitorDOList) {
-//                for (TradeOrderCreateReqDTO.OrderDetailBase orderDetailBase : orderDetail.getDetailBaseList()) {
-//                    ProductGroupRespDTO productGroupRespDTO = productSpuRespDTO.getProductGroupList().stream().filter(item -> ObjectUtil.equal(item.getProductBaseId(), orderDetailBase.getProductBaseId())).findFirst().orElse(null);
-//                    LocalDateTime useDate = tradeDetailDO.getUseDate();
-//                    if(orderDetailBase.getUseDate()!=null){
-//                        useDate = DateUtil.toLocalDateTime(orderDetailBase.getUseDate());
-//                    }
-//                    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());
-//                        credentialNoList  = tradeVisitorDOList.stream().filter(visitor->{
-//                            Long detailId = detailIdList.stream().filter(id->ObjectUtil.equal(id,visitor.getDetailId())).findFirst().orElse(null);
-//                            return detailId!=null;
-//                        }).map(item->item.getCredentialNo()).collect(Collectors.toList());
-//                        if(CollUtil.isEmpty(credentialNoList)){
-//                            continue;
-//                        }
-//                        List<Map<String, Object>> productCountList = tradeOrderRepositoryService.getVisitorOrderProductBaseCount(productGroupRespDTO.getProductBaseId(), tradeDetailDO.getUseDate(), credentialNoList,excludeOrderId);
-//                        if(CollUtil.isNotEmpty(productCountList)){
-//                            String credentialNos = productCountList.stream().map(item-> MapUtil.getStr(item,"credential_no")).collect(Collectors.joining(","));
-//                            throw exception(ORDER_VISITOR_REPEAT_BUY_PRODUCT_BASE,credentialNos,productGroupRespDTO.getProductBaseName());
-//                        }
-//                    }
-//                }
-//            }
-//        }
-
-
         tradeOrderRepositoryService.insertOrUpdateVisitor(tradeVisitorDOList);
 
         //如果有平台供应商可以补录
@@ -426,151 +321,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         return CommonResult.success(null);
     }
 
-    @Override
-    @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.TRANSFER)
-    public CommonResult<?> transferOrder(TradeTransferReqDTO tradeTransferReqDTO) {
-        String lockKey = String.format(UPDATE_ORDER_LOCK, tradeTransferReqDTO.getOrderId());
-        RLock lock = redissonClient.getLock(lockKey);
-        try {
-            if (lock.tryLock(60, 90, TimeUnit.SECONDS)) {
-                TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(tradeTransferReqDTO.getOrderId());
-                if (tradeOrderDO.getTransDistributorId() != null || (ObjectUtil.notEqual(tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.UNUSED.getStatus()) && ObjectUtil.notEqual(tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.PARTIAL_REFUND.getStatus()))) {
-                    return CommonResult.error(500, "当前状态不能转交" + tradeOrderDO.getOrderStatus());
-                }
-                Asserts.isTrue(tradeOrderDO.getTransDistributorId() == null, "当前订单不能二次转交");
-                //验证规则,如果计调单已经出行或者单资源已经调度不能转交
-                List<TradeDetailDO> tradeDetailList = tradeOrderRepositoryService.getPlatDetailByOrderId(tradeOrderDO.getId());
-                List<String> checkList = tradeDetailList.stream().map(tradeDetail -> tradeDetail.getId().toString()).collect(Collectors.toList());
-//                if (!checkList.isEmpty()) {
-//                    DispatchVerifyReqDTO reqDTO = new DispatchVerifyReqDTO();
-//                    reqDTO.setOrderDetailIdList(checkList);
-//                    Asserts.isTrue(!dispatchApi.isPlanTravlV2(reqDTO).getCheckedData(), "门票已出行,规则要求不能转交");
-//                }
-                tradeOrderDO.setTransAmount(tradeTransferReqDTO.getTransAmount());
-                tradeOrderDO.setTransDistributorId(tradeTransferReqDTO.getDistributorId());
-                tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.TRANSFER.getStatus());
-                tradeOrderRepositoryService.updateTransOrder(tradeOrderDO);
-                Map<String, Object> extMap = new HashMap<>();
-                extMap.put("ota", tradeTransferReqDTO.getDistributorName());
-                extMap.put("price", "¥" + tradeTransferReqDTO.getTransAmount().setScale(2, RoundingMode.HALF_UP));
-                if (!tradeTransferReqDTO.getSpecPrices().isEmpty()) {
-                    // 记录转交规格单价
-                    StringJoiner joiner = new StringJoiner("、 ");
-                    for (TradeTransferSpecDTO item : tradeTransferReqDTO.getSpecPrices()) {
-                        DictDataApi dictDataApi = SpringUtil.getBean(DictDataApi.class);
-                        List<DictDataRespDTO> dictDataRespDTOList = dictDataApi.getDictDataList("project_specification_type");
-                        dictDataRespDTOList.stream()
-                                .filter(i -> Objects.equals(i.getValue(), item.getSpecType()))
-                                .findFirst()
-                                .ifPresent(specDict -> joiner.add(specDict.getLabel() + ":¥" + item.getPrice().setScale(2, RoundingMode.HALF_UP)));
-                    }
-                    extMap.put("specPrices", joiner.toString());
-                }
-                //记录订单日志
-                TradeOrderLogUtils.setOrderInfo(tradeTransferReqDTO.getOrderId(),
-                        TradeOrderStatusEnum.UNUSED.getStatus(),
-                        TradeOrderStatusEnum.TRANSFER.getStatus(), extMap);
-                return CommonResult.success(null);
-            }
-        } catch (ServiceException e) {
-            ExceptionUtils.log(log, "订单转交异常:", e);
-            return CommonResult.error(e);
-        } catch (Exception e) {
-            log.error("订单转交异常:", e);
-        } finally {
-            if (lock.isLocked() && lock.isHeldByCurrentThread()) {
-                lock.unlock();
-            }
-        }
-        return CommonResult.error(ORDER_TRANSFER_FAIL);
-    }
-
-    @Override
-    @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.TRANSFER_REVOKE)
-    public CommonResult<?> transferOrderRevoke(TradeRefundRespDTO tradeRefundRespDTO) {
-        String lockKey = String.format(UPDATE_ORDER_LOCK, tradeRefundRespDTO.getOrderId());
-        RLock lock = redissonClient.getLock(lockKey);
-        try {
-            if (lock.tryLock(60, 90, TimeUnit.SECONDS)) {
-                TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(tradeRefundRespDTO.getOrderId());
-                Asserts.isTrue(ObjectUtil.equal(tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.TRANSFER.getStatus()), "当前状态不能撤回转交{}", tradeOrderDO.getOrderStatus());
-                Asserts.isTrue(tradeOrderDO != null && tradeOrderDO.getTransDistributorId() != null, "当前订单不能撤回转交");
-                tradeOrderDO.setTransAmount(null);
-                tradeOrderDO.setTransDistributorId(null);
-                tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.UNUSED.getStatus());
-                tradeOrderRepositoryService.updateTransOrder(tradeOrderDO);
-                //记录订单日志
-                TradeOrderLogUtils.setOrderInfo(tradeRefundRespDTO.getOrderId(),
-                        TradeOrderStatusEnum.TRANSFER.getStatus(),
-                        TradeOrderStatusEnum.UNUSED.getStatus());
-                return CommonResult.success(null);
-            }
-        } catch (ServiceException e) {
-            ExceptionUtils.log(log, "订单转交异常:", e);
-            return CommonResult.error(e);
-        } catch (Exception e) {
-            log.error("订单转交异常:", e);
-        } finally {
-            if (lock.isLocked() && lock.isHeldByCurrentThread()) {
-                lock.unlock();
-            }
-        }
-        return CommonResult.error(ORDER_TRANSFER_FAIL);
-    }
-
-    @Override
-    public CommonResult<?> orderDispatch(TradeOrderDispatchReqDTO tradeOrderDispatchReqDTO) {
-        log.error("订单orderDispatch调度开始:{}", tradeOrderDispatchReqDTO.getDispatchId() + ";" + tradeOrderDispatchReqDTO.getProjectCode() + ";" + ";" + tradeOrderDispatchReqDTO.getDispatchDetailList().size());
-        long s1 = System.currentTimeMillis();
-        try {
-
-            TreeSet<Long> orderIdSet = new TreeSet<>();
-            if (tradeOrderDispatchReqDTO.getType() == null || tradeOrderDispatchReqDTO.getType() == 0) {
-                //删除计调订单原关联关系
-                TradeOrderDispatchDO tradeOrderDispatchDO = new TradeOrderDispatchDO();
-                tradeOrderDispatchDO.setDispatchId(tradeOrderDispatchReqDTO.getDispatchId());
-                if (StringUtils.isNotBlank(tradeOrderDispatchReqDTO.getProjectCode())) {
-                    tradeOrderDispatchDO.setProjectCode(tradeOrderDispatchReqDTO.getProjectCode());
-                }
-
-                List<Long> orderIdList = tradeOrderRepositoryService.getOrderIdListByDispatchId(tradeOrderDispatchReqDTO.getDispatchId(), tradeOrderDispatchReqDTO.getProjectCode());
-                if (CollUtil.isNotEmpty(orderIdList)) {
-                    orderIdSet.addAll(orderIdList);
-                    tradeOrderRepositoryService.delOrderDispatch(tradeOrderDispatchDO);
-                }
-            }
-            //有数据才进行关联
-            if (CollUtil.isNotEmpty(tradeOrderDispatchReqDTO.getDispatchDetailList())) {
-                //重新关联
-                List<TradeOrderDispatchDO> dispatchList = tradeOrderDispatchReqDTO.getDispatchDetailList().stream().map(detail -> {
-                    TradeOrderDispatchDO dispatchDO = TradeOrderConvert.INSTANCE.convert(detail);
-                    if (detail.getDetailBaseId() != null) {
-                        TradeDetailBaseDO tradeDetailBaseDO = tradeDetailBaseMapper.selectById(detail.getDetailBaseId());
-                        dispatchDO.setProjectCode(tradeDetailBaseDO.getProjectCode());
-                        dispatchDO.setDispatchCount(1);
-                    }
-                    dispatchDO.setId(IdWorker.getId());
-                    dispatchDO.setDispatchId(tradeOrderDispatchReqDTO.getDispatchId());
-                    if (StringUtils.isNotBlank(dispatchDO.getProjectCode()) && StringUtils.isNotBlank(tradeOrderDispatchReqDTO.getProjectCode())) {
-                        dispatchDO.setProjectCode(tradeOrderDispatchReqDTO.getProjectCode());
-                    }
-                    orderIdSet.add(dispatchDO.getOrderId());
-                    return dispatchDO;
-
-                }).collect(Collectors.toList());
-                tradeOrderRepositoryService.saveOrderDispatch(dispatchList);
-            }
-            //变更订单的计调状态,耗时操作异步执行
-            Long tenantId = TenantContextHolder.getTenantId();
-            ThreadUtil.execute(() -> {
-                tradeOrderRepositoryService.afterOrderDispatch(orderIdSet, tenantId);
-            });
-        } catch (Exception e) {
-            log.error("订单orderDispatch调度异常:{}", tradeOrderDispatchReqDTO.getDispatchId() + ";" + tradeOrderDispatchReqDTO + ";" + e.getMessage());
-        }
-        log.error("订单orderDispatch调度结束:{},执行时间:{}", tradeOrderDispatchReqDTO.getDispatchId() + ";" + tradeOrderDispatchReqDTO.getProjectCode() + ";" + ";" + tradeOrderDispatchReqDTO.getDispatchDetailList().size(), System.currentTimeMillis() - s1);
-        return CommonResult.success(null);
-    }
 
     @Override
     @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ORDER_APPLY_CHANGE)
@@ -659,9 +409,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
 
     /**
      * 构建创建订单
-     *
-     * @param orderCreateReqDTO
-     * @return
      */
     private TradeOrderBO buildCreateOrder(TradeOrderCreateReqDTO orderCreateReqDTO) {
         //检查关联订单
@@ -738,9 +485,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
 
     /**
      * 构建创建订单
-     *
-     * @param orderCreateReqDTO
-     * @return
      */
     private TradeOrderBO buildShipCreateOrder(ShipTradeOrderCreateReqVO orderCreateReqDTO) {
         //重置金额
@@ -772,34 +516,34 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         tradeOrderDO.setLinkEmail(orderCreateReqDTO.getLinkEmail());
         //设置团散类型
         if (tradeOrderDO.getVisitorType() == null) {
-            if (tradeOrderDO.getSellMethod() == 7||tradeOrderDO.getSellMethod() == 1) {
+            if (tradeOrderDO.getSellMethod() == 7 || tradeOrderDO.getSellMethod() == 1) {
                 tradeOrderDO.setVisitorType(1);
             } else {
                 tradeOrderDO.setVisitorType(0);
             }
         }
-        if(orderCreateReqDTO.getOrderId()!=null) {
+        if (orderCreateReqDTO.getOrderId() != null) {
             tradeOrderDO.setId(orderCreateReqDTO.getOrderId());
-        }else{
+        } else {
             tradeOrderDO.setId(IdWorker.getId());
         }
         //旅行社编号 +  航次编号 + 3位 旅行社当天订单流水号
-        if(org.apache.commons.lang3.StringUtils.isNotEmpty(orderCreateReqDTO.getOrderNo())){
+        if (org.apache.commons.lang3.StringUtils.isNotEmpty(orderCreateReqDTO.getOrderNo())) {
             tradeOrderDO.setOrderNo(orderCreateReqDTO.getOrderNo());
-        }else {
+        } else {
             tradeOrderDO.setOrderNo(tradeUUCodeUtils.generateOrderNo(ORDER_PREFIX));
         }
         tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.INIT.getStatus());
-        if(orderCreateReqDTO.getIsYd()!=null && orderCreateReqDTO.getIsYd() == 1){
+        if (orderCreateReqDTO.getIsYd() != null && orderCreateReqDTO.getIsYd() == 1) {
             tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.YD.getStatus());
-        }else if(orderCreateReqDTO.getConfirmType()!=null && orderCreateReqDTO.getConfirmType() == 1){
+        } else if (orderCreateReqDTO.getConfirmType() != null && orderCreateReqDTO.getConfirmType() == 1) {
             //订单需要审核
             tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.TRANSFER.getStatus());
-        }else if(orderCreateReqDTO.getIsYd()!=null && orderCreateReqDTO.getIsYd() == 0){
+        } else if (orderCreateReqDTO.getIsYd() != null && orderCreateReqDTO.getIsYd() == 0) {
             tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.UNPAID.getStatus());
             tradeOrderDO.setConfirmDate(LocalDateTime.now());
         }
-        if(tradeOrderDO.getSellMethod() == 3){
+        if (tradeOrderDO.getSellMethod() == 3) {
             tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.YD.getStatus());
         }
         OrderJzDO orderJzDO = new OrderJzDO();
@@ -812,7 +556,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         tradeOrderBO.setOrderJzDO(orderJzDO);
 
         TradeOrderBindDO tradeOrderBindDO = orderCreateReqDTO.getTradeOrderBindDO();
-        if(tradeOrderBindDO != null) {
+        if (tradeOrderBindDO != null) {
             tradeOrderBindDO.setOrderId(tradeOrderDO.getId());
             tradeOrderBindDO.setCreateTime(LocalDateTime.now());
             tradeOrderBindDO.setCreator(tradeOrderDO.getCreator());
@@ -861,21 +605,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         if (SellMethodEnum.isPlatSellMethod(tradeOrderDO.getSellMethod())) {
             Asserts.isTrue(ObjectUtil.equal(tradeOrderDO.getSourceId(), orderCreateReqDTO.getOrderProperty().getSourceId()), "无该订单操作权限");
         }
-//        //如果被关联订单已经是增加订单了,则不能再增加
-//        if(ObjectUtil.equal(orderCreateReqDTO.getIsAddOrder() ,YES)){
-//            TradeOrderBindDO bindOrder = tradeOrderRepositoryService.getBindOrder(orderCreateReqDTO.getMainOrderId(), TradeOrderBindEnum.ADD_ORDER.getType());
-//            Asserts.isTrue(bindOrder == null,"当前订单为增加订单,不能再被增加");
-//            //增加订单,原订单不能被核销,全部退款
-//            Asserts.isTrue(ObjectUtils.equalsAny(tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.UNUSED.getStatus(),TradeOrderStatusEnum.PARTIAL_REFUND.getStatus())
-//                    ,"当前订单状态不能被增加{}",tradeOrderDO.getOrderStatus());
-//            if(ObjectUtils.equalsAny(tradeOrderDO.getOrderStatus(),TradeOrderStatusEnum.PARTIAL_REFUND.getStatus())){
-//                //部分退可能有已检票门票
-//                Long checkCount = tradeOrderRepositoryService.getCheckCount(tradeOrderDO.getId());
-//                if(checkCount!=null && checkCount>0){
-//                    Asserts.isTrue(false,"当前订单已核销不能被增加");
-//                }
-//            }
-//        }
         return tradeOrderDO;
     }
 
@@ -889,7 +618,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
             try {
                 productSpuRespDTO = productApi.getProduct(Long.parseLong(orderItem.getProductId())).getData();
             } catch (Exception e) {
-                log.error("获取产品信息失败:"+e);
+                log.error("获取产品信息失败:" + e);
             }
         }
         if (productSpuRespDTO == null) {
@@ -907,7 +636,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
             List<String> ticketNoList = tradeUUCodeUtils.generateTicketNo(orderDetail.getVisitorList().size());
             int i = 0;
             ProductSpuRespDTO product;
-            if (orderDetail.getProductType() == 1||orderDetail.getProductType() == 2) {
+            if (orderDetail.getProductType() == 1 || orderDetail.getProductType() == 2) {
                 product = productApi.getProduct(Long.parseLong(orderDetail.getProductId())).getCheckedData();
             } else {
                 product = finalProductSpuRespDTO;
@@ -933,7 +662,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
                     //补任意游玩日期
                     tradeOrderDO.setTravelDate(DateUtils.of(tradeDetailDO.getUseDate()));
                 }
-                List<TradeDetailBaseDO>  detailBaseDOList = buildShipDetailBase(orderDetail,tradeDetailDO,product);
+                List<TradeDetailBaseDO> detailBaseDOList = buildShipDetailBase(orderDetail, tradeDetailDO, product);
                 tradeDetailBaseDOList.addAll(detailBaseDOList);
                 TradeVisitorDO tradeVisitorDO = new TradeVisitorDO();
                 tradeVisitorDO.setId(IdWorker.getId());
@@ -950,14 +679,15 @@ public class TradeOrderServiceImpl implements TradeOrderService {
                 tradeVisitorDO.setRemark(visitor.getRemark());
                 tradeVisitorDO.setDeleted(false);
                 tradeVisitorDO.setNationality(visitor.getNationality());
-                tradeVisitorDO.setCohabitation(visitor.getCohabitation());
-                tradeVisitorDO.setRoomId(visitor.getRoomId());
-                tradeVisitorDO.setInitRoomId(visitor.getInitRoomId());
-                tradeVisitorDO.setFinalRoomId(visitor.getFinalRoomId());
+                if (orderDetail.getProductType() == 0) {
+                    tradeVisitorDO.setCohabitation(visitor.getCohabitation());
+                    tradeVisitorDO.setRoomId(visitor.getRoomId());
+                    tradeVisitorDO.setInitRoomId(visitor.getInitRoomId());
+                    tradeVisitorDO.setFinalRoomId(visitor.getFinalRoomId());
+                }
                 tradeVisitorDO.setCreateTime(LocalDateTime.now());
                 tradeVisitorDOList.add(tradeVisitorDO);
             }
-
         });
 
         tradeOrderDetailBO.setTradeDetailDOList(tradeDetailDOList);
@@ -1172,7 +902,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     private List<TradeDetailBaseDO> buildShipDetailBase(ShipTradeOrderCreateReqVO.OrderDetail orderDetail, TradeDetailDO tradeDetailDO, ProductSpuRespDTO productSpuRespDTO) {
         List<TradeDetailBaseDO> detailBaseDOList = new ArrayList<>();
         List<ProductGroupRespDTO> productGroupList = productSpuRespDTO.getProductGroupList();
-        if(productGroupList!=null) {
+        if (productGroupList != null) {
             productGroupList.forEach(productGroup -> {
                 TradeDetailBaseDO detailBaseDO = new TradeDetailBaseDO();
                 detailBaseDO.setId(IdWorker.getId());
@@ -1552,10 +1282,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         }
     }
 
-    @Override
-    public TradeDetailBaseDO getTradeDetailByNo(String ticketNo) {
-        return tradeDetailMapper.selectPlatTradeBaseDetail(ticketNo);
-    }
     @Override
     public int getMaxOrderNo(Long voyageId) {
         return tradeDetailMapper.getMaxOrderNo(voyageId);
@@ -1567,86 +1293,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     }
 
 
-    @Override
-    public void autoBindRelatedOrder(TradeOrderDO tradeOrderDO) {
-        //此处要排队执行,避免并发查不到
-        String lockKey = String.format(UPDATE_ORDER_LOCK, 1);
-        RLock lock = redissonClient.getLock(lockKey);
-        lock.lock();
-        TradeOrderUserDO orderUser = tradeOrderRepositoryService.getOrderUser(tradeOrderDO.getId());
-        if (orderUser == null || StrUtil.isBlank(orderUser.getMobile())) {
-            return;
-        }
-        List<Map<String, Object>> orderProductList = tradeOrderRepositoryService.getOrderProduct(tradeOrderDO.getId());
-        try {
-            for (Map<String, Object> orderProduct : orderProductList) {
-                Long productId = MapUtil.getLong(orderProduct, "product_id");
-                TradeBindOrderQueryBO vo = new TradeBindOrderQueryBO();
-                vo.setProductId(productId);
-                vo.setOrderId(tradeOrderDO.getId());
-                vo.setTravelDate(tradeOrderDO.getTravelDate());
-                vo.setMobile(orderUser.getMobile());
-                vo.setRoutePlanId(tradeOrderDO.getRoutePlanId());
-                List<TradeOrderDO> canBindOrderList = tradeOrderRepositoryService.getCanBindOrderList(vo);
-                if (CollUtil.isEmpty(canBindOrderList)) {
-                    return;
-                }
-
-                TradeOrderDO mainOrder = canBindOrderList.stream().filter(order -> ObjectUtil.equal(order.getIsBind(), ORDER_BIND_TYPE_MAIN)).findFirst().orElse(null);
-                if (mainOrder != null) {
-                    //关联
-                    TradeOrderBindDO tradeOrderBindDO = new TradeOrderBindDO();
-                    tradeOrderBindDO.setId(IdWorker.getId());
-                    tradeOrderBindDO.setType(TradeOrderBindEnum.ORDER_BIND.getType());
-                    tradeOrderBindDO.setOrderId(mainOrder.getId());
-                    tradeOrderBindDO.setBindId(tradeOrderDO.getId());
-
-                    tradeOrderRepositoryService.saveBindOrder(tradeOrderBindDO);
-                } else {
-                    for (TradeOrderDO orderDO : canBindOrderList) {
-                        TradeOrderBindDO tradeOrderBindDO = new TradeOrderBindDO();
-                        tradeOrderBindDO.setId(IdWorker.getId());
-                        tradeOrderBindDO.setType(TradeOrderBindEnum.ORDER_BIND.getType());
-                        tradeOrderBindDO.setOrderId(tradeOrderDO.getId());
-                        tradeOrderBindDO.setBindId(orderDO.getId());
-
-                        tradeOrderRepositoryService.saveBindOrder(tradeOrderBindDO);
-                    }
-                }
-            }
-        } finally {
-            if (lock.isLocked() && lock.isHeldByCurrentThread()) {
-                lock.unlock();
-            }
-        }
-    }
-
-    @Override
-    @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ORDER_MERGE)
-    public void mergeAddOrder(TradeOrderDO tradeOrderDO) {
-        if (ObjectUtil.notEqual(tradeOrderDO.getIsAddOrder(), YES)) {
-            return;
-        }
-
-        TradeOrderBindDO bindOrder = tradeOrderRepositoryService.getBindOrder(tradeOrderDO.getId(), TradeOrderBindEnum.ADD_ORDER.getType());
-        TradeOrderDO mainOrder = tradeOrderRepositoryService.getById(bindOrder.getOrderId());
-        List<TradeDetailBO> tradeDetailDOList = tradeOrderRepositoryService.getTradeDetailWithBase(tradeOrderDO.getId(), null, null);
-
-        //将新订单合并至原订单
-        //1.修改detail 、base关联orderId
-        //2.修改支付订单orderId
-        //3.更改原订单金额,删除新订单
-        tradeOrderRepositoryService.updateAddOrder(tradeOrderDO, mainOrder);
-        //4.合并平台供应商订单
-        tradeSupplierService.mergeSupplierOrder(tradeOrderDO.getId(), mainOrder.getId());
-        //如果是otc订单需更新内部旅行社平台金额
-        SpringUtil.getBean(TradeOrderBizService.class).updatePlatAmountAfterMergeSuccess(mainOrder);
-        //记录订单日志
-        TradeOrderLogUtils.setOrderInfo(mainOrder.getId(), mainOrder.getOrderStatus(), mainOrder.getOrderStatus(), MapUtil.<String, Object>builder().put("orderId", tradeOrderDO.getId())
-                .put("payAmount", tradeOrderDO.getPayAmount()).put("newPayAmount", tradeOrderDO.getPayAmount().add(mainOrder.getPayAmount())).build());
-
-    }
-
     private List<TradeDetailPriceDO> buildTradeDetailPrice(TradeOrderDO tradeOrderDO, List<TradeOrderCreateReqDTO.DetailPrice> tradeDetailPriceList, TradeDetailDO tradeDetailDO) {
         if (ObjectUtils.equalsAny(tradeOrderDO.getSellMethod(), SellMethodEnum.MINI_APP.getType()) && ObjectUtil.equal(tradeDetailDO.getCateType(), ProductTypeEnum.Hotel.getValue())) {
             Asserts.isTrue(CollUtil.isNotEmpty(tradeDetailPriceList), "下单参数不正确,明细价格不能为空");

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

@@ -92,7 +92,7 @@
 
     <select id="selectShipVisitor"
             resultType="com.yc.ship.module.trade.dal.dataobject.order.TradeVisitorDO">
-        select v.*,t3.id_card jzCard,t3.arrive_time jzTime,t3.phone jzPhone,t3.address jzAddress 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 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
         where t.order_id = #{orderId} and v.deleted =0 and t.product_type =0 and t.deleted =0
         group by v.id