xw 1 päivä sitten
vanhempi
commit
2056dc04c7

+ 53 - 5
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreHealthOrderScrmController.java

@@ -15,7 +15,9 @@ import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.service.ICompanyMoneyLogsService;
+import com.fs.course.domain.FsCoursePlaySourceConfig;
 import com.fs.course.dto.FsOrderDeliveryNoteDTO;
+import com.fs.course.service.IFsCoursePlaySourceConfigService;
 import com.fs.erp.service.IErpOrderService;
 import com.fs.framework.web.service.TokenService;
 import com.fs.his.domain.FsStoreOrderDf;
@@ -73,6 +75,9 @@ public class FsStoreHealthOrderScrmController extends BaseController {
     @Autowired
     private IFsStoreOrderDfService fsStoreOrderDfService;
 
+    @Autowired
+    private IFsCoursePlaySourceConfigService coursePlaySourceConfigService;
+
     // 允许的文件扩展名
     private static final String[] ALLOWED_EXCEL_EXTENSIONS = {".xlsx", ".xls"};
 
@@ -387,7 +392,7 @@ public class FsStoreHealthOrderScrmController extends BaseController {
     //订单发货批量导入
     @Log(title = "发货同步导入", businessType = BusinessType.IMPORT)
     @PostMapping("/importDeliveryNoteExpress")
-    public R importDeliveryNoteExpress(@RequestParam("file") MultipartFile file,@RequestParam("miniAppId") String miniAppId,@RequestParam("shipmentType") Integer shipmentType) {
+    public R importDeliveryNoteExpress(@RequestParam("file") MultipartFile file,@RequestParam("miniAppId") String miniAppId,@RequestParam(name = "shipmentType",required = false) Integer shipmentType) {
         // 1. 检查文件是否为空
         if (file.isEmpty()) {
             return R.error("上传的文件不能为空");
@@ -402,14 +407,37 @@ public class FsStoreHealthOrderScrmController extends BaseController {
             return R.error("请上传Excel文件(.xlsx或.xls格式)");
         }
 
-        ExcelUtil<FsOrderDeliveryNoteDTO> util=new ExcelUtil<>(FsOrderDeliveryNoteDTO.class);
+        ExcelUtil<FsStoreOrderDeliveryNoteExportVO> util=new ExcelUtil<>(FsStoreOrderDeliveryNoteExportVO.class);
         try {
-            List<FsOrderDeliveryNoteDTO> dtoList = util.importExcel(file.getInputStream());
+            List<FsStoreOrderDeliveryNoteExportVO> dtoList = util.importExcel(file.getInputStream());
             if(!dtoList.isEmpty()){
                 if(dtoList.size() > 200){
                     R.error("操作失败,导入数据不能大于200条!");
                 }
-               return fsStoreOrderService.importDeliveryNoteExpress(dtoList,miniAppId,shipmentType);
+                if(shipmentType == null){
+                    shipmentType = 2;
+                }
+                
+                // 从 fs_course_play_source_config 表查询所有小程序的appId
+                List<FsCoursePlaySourceConfig> configList = coursePlaySourceConfigService.lambdaQuery()
+                        .eq(FsCoursePlaySourceConfig::getType, 1)  // 1=小程序
+                        .eq(FsCoursePlaySourceConfig::getIsDel, 0)  // 未删除
+                        .list();
+                
+                // 提取所有appId,如果查不到就使用传入的miniAppId
+                String appId = miniAppId;
+                if (configList != null && !configList.isEmpty()) {
+                    // 优先查找与传入miniAppId匹配的
+                    boolean found = configList.stream()
+                            .anyMatch(config -> miniAppId.equals(config.getAppid()));
+                    if (!found && StringUtils.isNotEmpty(configList.get(0).getAppid())) {
+                        // 如果传入的miniAppId在数据库中不存在,使用第一个
+                        appId = configList.get(0).getAppid();
+                        logger.warn("传入的miniAppId {} 不存在,使用数据库中的appId: {}", miniAppId, appId);
+                    }
+                }
+                
+               return fsStoreOrderService.importDeliveryNoteExpress(dtoList,appId,shipmentType);
             }else {
                 R.error("操作失败,导入数据不能小于1条!");
             }
@@ -496,7 +524,27 @@ public class FsStoreHealthOrderScrmController extends BaseController {
                 if(dtoList.size() > 200){
                     R.error("操作失败,导入数据不能大于200条!");
                 }
-                return fsStoreOrderService.importDeliveryNoteExpress(dtoList,miniAppId);
+                
+                // 从 fs_course_play_source_config 表查询所有小程序的appId
+                List<FsCoursePlaySourceConfig> configList = coursePlaySourceConfigService.lambdaQuery()
+                        .eq(FsCoursePlaySourceConfig::getType, 1)  // 1=小程序
+                        .eq(FsCoursePlaySourceConfig::getIsDel, 0)  // 未删除
+                        .list();
+                
+                // 提取所有appId,如果查不到就使用传入的miniAppId
+                String appId = miniAppId;
+                if (configList != null && !configList.isEmpty()) {
+                    // 优先查找与传入miniAppId匹配的
+                    boolean found = configList.stream()
+                            .anyMatch(config -> miniAppId.equals(config.getAppid()));
+                    if (!found && StringUtils.isNotEmpty(configList.get(0).getAppid())) {
+                        // 如果传入的miniAppId在数据库中不存在,使用第一个
+                        appId = configList.get(0).getAppid();
+                        logger.warn("传入的miniAppId {} 不存在,使用数据库中的appId: {}", miniAppId, appId);
+                    }
+                }
+                
+                return fsStoreOrderService.importDeliveryNoteExpress(dtoList,appId);
             }else {
                 R.error("操作失败,导入数据不能小于1条!");
             }

+ 2 - 2
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderScrmService.java

@@ -293,10 +293,10 @@ public interface IFsStoreOrderScrmService
 
     /**
      * 批量导入更新微信订单发货状态
-     * @param dtoList 订单数据
+     * @param voList 订单数据
      * @param appId 小程序ID
      * **/
-    R importDeliveryNoteExpress(List<FsOrderDeliveryNoteDTO> dtoList,String appId,Integer shipmentType);
+    R importDeliveryNoteExpress(List<FsStoreOrderDeliveryNoteExportVO> voList,String appId,Integer shipmentType);
 
     /**
      * 查询app商城订单金额统计信息

+ 29 - 27
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -4110,35 +4110,37 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public R importDeliveryNoteExpress(List<FsOrderDeliveryNoteDTO> dtoList, String appId,Integer shipmentType) {
+    public R importDeliveryNoteExpress(List<FsStoreOrderDeliveryNoteExportVO> voList, String appId,Integer shipmentType) {
         try {
             StringBuilder builder = new StringBuilder();
             //获取商城配置
             String json = configService.selectConfigByKey("store.config");
             StoreConfig config = JSONUtil.toBean(json, StoreConfig.class);
 
-            List<FsOrderDeliveryNoteDTO> successList = new ArrayList<>(dtoList.size());
+            List<FsOrderDeliveryNoteDTO> successList = new ArrayList<>(voList.size());
             //提前获取所有必要数据
             Map<String, String> expressDeliveryMap = buildExpressDeliveryMap();
             //提取所有有效订单号
-            List<String> orderCodeList = new ArrayList<>(dtoList.size());
-            for (int i = 0; i < dtoList.size(); i++) {
-                FsOrderDeliveryNoteDTO dto = dtoList.get(i);
-                if (StringUtils.isEmpty(dto.getOrderNumber())) {
+            List<String> orderCodeList = new ArrayList<>(voList.size());
+            for (int i = 0; i < voList.size(); i++) {
+                FsStoreOrderDeliveryNoteExportVO vo = voList.get(i);
+                FsOrderDeliveryNoteDTO dto = new FsOrderDeliveryNoteDTO();
+                if (StringUtils.isEmpty(vo.getOrderNumber())) {
                     builder.append("数据第").append(i + 2).append("行系统订单为空!").append(System.lineSeparator());
                 }
-                if (StringUtils.isEmpty(dto.getLogisticsCompany())) {
+                if (StringUtils.isEmpty(vo.getLogisticsCompany())) {
                     builder.append("数据第").append(i + 2).append("行物流公司为空!").append(System.lineSeparator());
                 }
-                if (StringUtils.isEmpty(dto.getDeliveryId())) {
+                if (StringUtils.isEmpty(vo.getLogisticsCompany())) {
                     builder.append("数据第").append(i + 2).append("行快递单号为空!").append(System.lineSeparator());
                 } else {
                     //处理订单ID信息
-                    String originalOrderNumber = dto.getOrderNumber();
+                    String originalOrderNumber = vo.getOrderNumber();
                     String processedOrderNumber = extractNumbers(originalOrderNumber);
                     dto.setOrderNumber(processedOrderNumber);
-                    orderCodeList.add(dto.getOrderNumber());
+                    orderCodeList.add(processedOrderNumber);
                 }
+                dto.setDeliveryName(vo.getLogisticsCompany());
                 successList.add(dto);
 
 
@@ -4147,7 +4149,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                     FsStoreOrderScrm order = fsStoreOrderMapper.selectFsStoreOrderByOrderCode(dto.getOrderNumber());
                     //订阅物流回调
                     String lastFourNumber = "";
-                    if (dto.getDeliverySn().equals(ShipperCodeEnum.SF.getValue())  || order.getDeliverySn().equals(ShipperCodeEnum.ZTO.getValue())) {
+                    if (dto.getLogisticsCompany().equals(ShipperCodeEnum.SF.getDesc())  || order.getDeliverySn().equals(ShipperCodeEnum.ZTO.getValue())) {
                         lastFourNumber = order.getUserPhone();
                         if (lastFourNumber.length() == 11) {
                             lastFourNumber = StrUtil.sub(lastFourNumber, lastFourNumber.length(), -4);
@@ -4191,19 +4193,19 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
             String uploadTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"))
                     .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
 
-            for (int i = 0; i < dtoList.size(); i++) {
-                FsOrderDeliveryNoteDTO dto = dtoList.get(i);
+            for (int i = 0; i < successList.size(); i++) {
+                FsOrderDeliveryNoteDTO dto = successList.get(i);
                 int rowNum = i + 2;
                 if (StringUtils.isEmpty(dto.getOrderNumber())) {
                     continue;
                 }
-                if (StringUtils.isEmpty(dto.getDeliveryId())) {
-                    builder.append("数据第").append(rowNum).append("行快递单号为空!")
-                            .append(System.lineSeparator());
-                    continue;
-                }
+//                if (StringUtils.isEmpty(dto.getDeliveryId())) {
+//                    builder.append("数据第").append(rowNum).append("行快递单号为空!")
+//                            .append(System.lineSeparator());
+//                    continue;
+//                }
 
-                if (StringUtils.isEmpty(dto.getLogisticsCompany())) {
+                if (StringUtils.isEmpty(dto.getDeliveryName())) {
                     builder.append("数据第").append(rowNum).append("行快递公司编号为空!")
                             .append(System.lineSeparator());
                     continue;
@@ -4220,7 +4222,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
 //                    dto.setDeliveryPayTime(parseCstToDateOnlyString(dto.getDeliveryPayTime()));
 //                }
                 // 验证快递公司
-                String deliverySn = expressDeliveryMap.get(dto.getLogisticsCompany());
+                String deliverySn = expressDeliveryMap.get(dto.getDeliveryName());
                 if (deliverySn == null) {
                     builder.append("数据第").append(rowNum).append("行订单号为")
                             .append(dto.getOrderNumber()).append("物流公司名称异常")
@@ -5280,7 +5282,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
 
 
 
-    private void batchUpdateDeliveryNotes(List<FsOrderDeliveryNoteDTO> list) {
+    private void  batchUpdateDeliveryNotes(List<FsOrderDeliveryNoteDTO> list) {
         int batchSize = 500;
         int total = list.size();
         int batches = (total + batchSize - 1) / batchSize;
@@ -5420,12 +5422,12 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
 
     public Map<String, String> buildExpressDeliveryMap() {
         Map<String, String> map = new HashMap<>();
-        map.put("SF", "顺丰");
-        map.put("EMS", "邮政");
-        map.put("ZTO", "中通");
-        map.put("JD", "京东");
-        map.put("DBL", "德邦");
-        map.put("YTO", "圆通");
+        map.put("顺丰", "SF");
+        map.put("邮政", "EMS");
+        map.put("中通", "ZTO");
+        map.put("京东", "JD");
+        map.put("德邦", "DBL");
+        map.put("圆通", "YTO");
         return map;
     }