Browse Source

修复分车信息同步问题

jinch 4 days ago
parent
commit
b0170cec54

+ 15 - 10
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderRepositoryServiceImpl.java

@@ -177,7 +177,7 @@ public class TradeOrderRepositoryServiceImpl implements TradeOrderRepositoryServ
             // 将旧接站头表数据同步到新记录:前端未传的字段用旧值补齐
             if (CollUtil.isNotEmpty(oldJzList)) {
                 OrderJzDO oldJzDO = oldJzList.get(0);
-                if (newOrderJzDO.getIsJz() == null) {
+                if (newOrderJzDO.getIsJz() == null || newOrderJzDO.getIsJz() >= 0) {
                     newOrderJzDO.setIsJz(oldJzDO.getIsJz());
                 }
                 if (newOrderJzDO.getJzAddress() == null) {
@@ -189,6 +189,7 @@ public class TradeOrderRepositoryServiceImpl implements TradeOrderRepositoryServ
                 if (newOrderJzDO.getJzLinkPhone() == null) {
                     newOrderJzDO.setJzLinkPhone(oldJzDO.getJzLinkPhone());
                 }
+                newOrderJzDO.setDeleted(false);
             }
             orderJzMapper.insert(newOrderJzDO);
 
@@ -243,13 +244,15 @@ public class TradeOrderRepositoryServiceImpl implements TradeOrderRepositoryServ
 
         Long newJzId = tradeOrderBO.getOrderJzDO().getId();
 
-        // 1. 构建证件号到新游客ID的映射(从新订单的游客列表中获取)
-        Map<String, Long> credentialNoToNewVisitorIdMap = new HashMap<>(16);
+        // 1. 构建证件号和游客姓名到新游客ID的映射(从新订单的游客列表中获取)
+        Map<String, TradeVisitorDO> credentialNoToNewVisitorIdMap = new HashMap<>(16);
+        Map<String, TradeVisitorDO> nameToNewVisitorIdMap = 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());
+                    if (visitor.getCredentialNo() != null || visitor.getName() != null) {
+                        credentialNoToNewVisitorIdMap.put(visitor.getCredentialNo(), visitor);
+                        nameToNewVisitorIdMap.put(visitor.getName(), visitor);
                     }
                 });
             }
@@ -262,15 +265,16 @@ public class TradeOrderRepositoryServiceImpl implements TradeOrderRepositoryServ
             newDetail.setId(IdWorker.getId());
             newDetail.setJzId(newJzId);
             // 通过证件号匹配新游客ID,确保 visitor_id 关联到新订单的游客
-            Long newVisitorId = credentialNoToNewVisitorIdMap.get(oldDetail.getIdCard());
-            newDetail.setVisitorId(newVisitorId != null ? newVisitorId : oldDetail.getVisitorId());
+            TradeVisitorDO newVisitorId = credentialNoToNewVisitorIdMap.get(oldDetail.getIdCard());
+            TradeVisitorDO newVisitorId2 = nameToNewVisitorIdMap.get(oldDetail.getName());
+            newDetail.setVisitorId(newVisitorId != null ? newVisitorId.getId() : (newVisitorId2 != null ? newVisitorId2.getId() : oldDetail.getVisitorId()) );
             newDetail.setBatchNo(oldDetail.getBatchNo());
             newDetail.setArriveTime(oldDetail.getArriveTime());
             newDetail.setAddress(oldDetail.getAddress());
-            newDetail.setName(oldDetail.getName());
-            newDetail.setIdCard(oldDetail.getIdCard());
+            newDetail.setName(newVisitorId != null ? newVisitorId.getName() : (newVisitorId2 != null ? newVisitorId2.getName() : oldDetail.getName()));
+            newDetail.setIdCard(newVisitorId != null ? newVisitorId.getCredentialNo() : (newVisitorId2 != null ? newVisitorId2.getCredentialNo() : oldDetail.getIdCard()) );
             newDetail.setTenantId(oldDetail.getTenantId());
-            newDetail.setPhone(oldDetail.getPhone());
+            newDetail.setPhone(newVisitorId != null ? newVisitorId.getMobile() : (newVisitorId2 != null ? newVisitorId2.getMobile() :  oldDetail.getPhone()));
             newDetail.setRemark(oldDetail.getRemark());
             newDetail.setStatus(oldDetail.getStatus());
             newDetail.setSignTime(oldDetail.getSignTime());
@@ -279,6 +283,7 @@ public class TradeOrderRepositoryServiceImpl implements TradeOrderRepositoryServ
             newDetail.setSignImage(oldDetail.getSignImage());
             newDetail.setExtendOrderNo(oldDetail.getExtendOrderNo());
             newDetail.setExtendTicketNo(oldDetail.getExtendTicketNo());
+            newDetail.setDeleted(newVisitorId == null && (newVisitorId2 == null));
             newDetail.setDispatchId(oldDetail.getDispatchId());
             newJzDetailList.add(newDetail);
         }