|
|
@@ -31,6 +31,8 @@ import com.yc.ship.module.trade.dal.mysql.contract.ContractMapper;
|
|
|
import com.yc.ship.module.trade.dal.mysql.insurance.InsuranceMapper;
|
|
|
import com.yc.ship.module.trade.dal.mysql.order.*;
|
|
|
import com.yc.ship.module.trade.dal.mysql.orderjz.OrderJzMapper;
|
|
|
+import com.yc.ship.module.trade.dal.mysql.orderjzdetail.OrderJzDetailMapper;
|
|
|
+import com.yc.ship.module.trade.dal.dataobject.orderjzdetail.OrderJzDetailDO;
|
|
|
import com.yc.ship.module.trade.enums.*;
|
|
|
import com.yc.ship.module.trade.service.order.TradeOrderRepositoryService;
|
|
|
import com.yc.ship.module.trade.service.order.bo.*;
|
|
|
@@ -66,6 +68,8 @@ public class TradeOrderRepositoryServiceImpl implements TradeOrderRepositoryServ
|
|
|
@Resource
|
|
|
private OrderJzMapper orderJzMapper;
|
|
|
@Resource
|
|
|
+ private OrderJzDetailMapper orderJzDetailMapper;
|
|
|
+ @Resource
|
|
|
private TradeDetailMapper tradeDetailMapper;
|
|
|
@Resource
|
|
|
private TradeDetailBaseMapper tradeDetailBaseMapper;
|
|
|
@@ -145,12 +149,51 @@ public class TradeOrderRepositoryServiceImpl implements TradeOrderRepositoryServ
|
|
|
public void modifyOrder(TradeOrderBO tradeOrderBO,TradeOrderDO oldOrder) {
|
|
|
try {
|
|
|
Long oldOrderId = oldOrder.getId();
|
|
|
+
|
|
|
+ // ============ 先查询旧接站相关数据(在软删除之前),用于后续重建 ============
|
|
|
+ List<OrderJzDO> oldJzList = orderJzMapper.selectList(new LambdaQueryWrapper<OrderJzDO>()
|
|
|
+ .eq(OrderJzDO::getOrderId, oldOrderId));
|
|
|
+ List<Long> oldJzIdList = oldJzList.stream().map(OrderJzDO::getId).collect(Collectors.toList());
|
|
|
+ List<OrderJzDetailDO> oldJzDetailList = Collections.emptyList();
|
|
|
+ if (CollUtil.isNotEmpty(oldJzIdList)) {
|
|
|
+ oldJzDetailList = orderJzDetailMapper.selectList(new LambdaQueryWrapper<OrderJzDetailDO>()
|
|
|
+ .in(OrderJzDetailDO::getJzId, oldJzIdList));
|
|
|
+ }
|
|
|
+
|
|
|
+ // ============ 软删除旧订单主表 ============
|
|
|
tradeOrderMapper.updateOrderDeleted(oldOrderId,1);
|
|
|
TradeOrderDO tradeOrderDO = tradeOrderBO.getTradeOrderDO();
|
|
|
tradeOrderDO.setUpdateTime(LocalDateTime.now());
|
|
|
tradeOrderMapper.insert(tradeOrderDO);
|
|
|
|
|
|
- orderJzMapper.insert(tradeOrderBO.getOrderJzDO());
|
|
|
+ // ============ 软删除旧接站头表 + 旧接站明细 ============
|
|
|
+ orderJzMapper.updateDeleted(oldOrderId, 1);
|
|
|
+ if (CollUtil.isNotEmpty(oldJzIdList)) {
|
|
|
+ orderJzDetailMapper.updateDeletedByJzIds(oldJzIdList, 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ // ============ 插入新接站头表(同步旧接站头表数据) ============
|
|
|
+ OrderJzDO newOrderJzDO = tradeOrderBO.getOrderJzDO();
|
|
|
+ // 将旧接站头表数据同步到新记录:前端未传的字段用旧值补齐
|
|
|
+ if (CollUtil.isNotEmpty(oldJzList)) {
|
|
|
+ OrderJzDO oldJzDO = oldJzList.get(0);
|
|
|
+ if (newOrderJzDO.getIsJz() == null) {
|
|
|
+ newOrderJzDO.setIsJz(oldJzDO.getIsJz());
|
|
|
+ }
|
|
|
+ if (newOrderJzDO.getJzAddress() == null) {
|
|
|
+ newOrderJzDO.setJzAddress(oldJzDO.getJzAddress());
|
|
|
+ }
|
|
|
+ if (newOrderJzDO.getJzLinkName() == null) {
|
|
|
+ newOrderJzDO.setJzLinkName(oldJzDO.getJzLinkName());
|
|
|
+ }
|
|
|
+ if (newOrderJzDO.getJzLinkPhone() == null) {
|
|
|
+ newOrderJzDO.setJzLinkPhone(oldJzDO.getJzLinkPhone());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ orderJzMapper.insert(newOrderJzDO);
|
|
|
+
|
|
|
+ // ============ 为新订单重建接站明细 ============
|
|
|
+ rebuildOrderJzDetail(oldJzDetailList, tradeOrderBO);
|
|
|
|
|
|
tradeOrderBindMapper.update(new LambdaUpdateWrapper<TradeOrderBindDO>().set(TradeOrderBindDO::getDeleted, 1).set(TradeOrderBindDO::getUpdateTime, tradeOrderBO.getUpdateTime()==null?new Date():tradeOrderBO.getUpdateTime()).eq(TradeOrderBindDO::getOrderId, oldOrderId));
|
|
|
if (tradeOrderBO.getTradeOrderBindDO() != null) {
|
|
|
@@ -184,6 +227,68 @@ public class TradeOrderRepositoryServiceImpl implements TradeOrderRepositoryServ
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 修改订单时,为新订单重建接站明细数据。
|
|
|
+ * 通过旧接站明细的证件号(id_card)匹配新游客表(trade_visitor)中的记录,
|
|
|
+ * 将新的 visitor_id 和新的 jz_id 写入新创建的 trade_order_jz_detail 记录中,
|
|
|
+ * 确保 trade_order_jz_detail 与新订单的 trade_visitor 正确关联。
|
|
|
+ *
|
|
|
+ * @param oldJzDetailList 旧订单的接站明细列表(在软删除前已查询)
|
|
|
+ * @param tradeOrderBO 订单业务对象(包含新游客列表和新接站头表)
|
|
|
+ */
|
|
|
+ private void rebuildOrderJzDetail(List<OrderJzDetailDO> oldJzDetailList, TradeOrderBO tradeOrderBO) {
|
|
|
+ if (CollUtil.isEmpty(oldJzDetailList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Long newJzId = tradeOrderBO.getOrderJzDO().getId();
|
|
|
+
|
|
|
+ // 1. 构建证件号到新游客ID的映射(从新订单的游客列表中获取)
|
|
|
+ Map<String, Long> credentialNoToNewVisitorIdMap = new HashMap<>(16);
|
|
|
+ tradeOrderBO.getTradeOrderDetailBOList().forEach(detailBO -> {
|
|
|
+ if (CollUtil.isNotEmpty(detailBO.getTradeVisitorDOList())) {
|
|
|
+ detailBO.getTradeVisitorDOList().forEach(visitor -> {
|
|
|
+ if (visitor.getCredentialNo() != null) {
|
|
|
+ credentialNoToNewVisitorIdMap.put(visitor.getCredentialNo(), visitor.getId());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // 2. 基于旧接站明细重建新记录,关联新的 visitor_id 和 jz_id
|
|
|
+ List<OrderJzDetailDO> newJzDetailList = new ArrayList<>();
|
|
|
+ for (OrderJzDetailDO oldDetail : oldJzDetailList) {
|
|
|
+ OrderJzDetailDO newDetail = new OrderJzDetailDO();
|
|
|
+ newDetail.setId(IdWorker.getId());
|
|
|
+ newDetail.setJzId(newJzId);
|
|
|
+ // 通过证件号匹配新游客ID,确保 visitor_id 关联到新订单的游客
|
|
|
+ Long newVisitorId = credentialNoToNewVisitorIdMap.get(oldDetail.getIdCard());
|
|
|
+ newDetail.setVisitorId(newVisitorId != null ? newVisitorId : oldDetail.getVisitorId());
|
|
|
+ newDetail.setBatchNo(oldDetail.getBatchNo());
|
|
|
+ newDetail.setArriveTime(oldDetail.getArriveTime());
|
|
|
+ newDetail.setAddress(oldDetail.getAddress());
|
|
|
+ newDetail.setName(oldDetail.getName());
|
|
|
+ newDetail.setIdCard(oldDetail.getIdCard());
|
|
|
+ newDetail.setTenantId(oldDetail.getTenantId());
|
|
|
+ newDetail.setPhone(oldDetail.getPhone());
|
|
|
+ newDetail.setRemark(oldDetail.getRemark());
|
|
|
+ newDetail.setStatus(oldDetail.getStatus());
|
|
|
+ newDetail.setSignTime(oldDetail.getSignTime());
|
|
|
+ newDetail.setSignMan(oldDetail.getSignMan());
|
|
|
+ newDetail.setSignRemark(oldDetail.getSignRemark());
|
|
|
+ newDetail.setSignImage(oldDetail.getSignImage());
|
|
|
+ newDetail.setExtendOrderNo(oldDetail.getExtendOrderNo());
|
|
|
+ newDetail.setExtendTicketNo(oldDetail.getExtendTicketNo());
|
|
|
+ newDetail.setDispatchId(oldDetail.getDispatchId());
|
|
|
+ newJzDetailList.add(newDetail);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 批量插入新接站明细
|
|
|
+ if (CollUtil.isNotEmpty(newJzDetailList)) {
|
|
|
+ orderJzDetailMapper.insertBatch(newJzDetailList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public void updateOrderStatus(TradeOrderDO tradeOrderDO) {
|
|
|
//订单状态
|