yuhongqi 1 тиждень тому
батько
коміт
a3785615cf

+ 2 - 2
fs-admin/src/main/java/com/fs/his/controller/FsIntegralOrderController.java

@@ -464,8 +464,8 @@ public class FsIntegralOrderController extends BaseController
     {
         ExcelUtil<FsIntegralOrderExcelVO> util = new ExcelUtil<>(FsIntegralOrderExcelVO.class);
         List<FsIntegralOrderExcelVO> list = util.importExcel(file.getInputStream());
-        String message = fsIntegralOrderService.importOrderStatusData(list);
-        return AjaxResult.success(message);
+        FsIntegralOrderImportResultVO result = fsIntegralOrderService.importOrderStatusData(list);
+        return AjaxResult.success(result);
     }
 
     @GetMapping("/importUpdateOrderTemplate")

+ 23 - 0
fs-common/src/main/java/com/fs/common/utils/poi/ExcelUtil.java

@@ -19,6 +19,8 @@ import java.util.Set;
 import java.util.UUID;
 import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletResponse;
+
+import com.fs.common.core.domain.entity.SysDictData;
 import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
 import org.apache.poi.hssf.usermodel.HSSFPicture;
 import org.apache.poi.hssf.usermodel.HSSFPictureData;
@@ -705,6 +707,27 @@ public class ExcelUtil<T>
             // 这里默认设了2-101列只能选择不能输入.
             setXSSFValidation(sheet, attr.combo(), 1, 100, column, column);
         }
+        // 如果设置了dictType属性,则从字典中获取选项并设置下拉列表
+        if (StringUtils.isNotEmpty(attr.dictType()))
+        {
+            try
+            {
+                List<SysDictData> dictDatas = DictUtils.getDictCache(attr.dictType());
+                if (dictDatas != null && !dictDatas.isEmpty())
+                {
+                    // 提取字典标签列表
+                    String[] dictLabels = dictDatas.stream()
+                            .map(SysDictData::getDictLabel)
+                            .toArray(String[]::new);
+                    // 这里默认设了2-101列只能选择不能输入.
+                    setXSSFValidation(sheet, dictLabels, 1, 100, column, column);
+                }
+            }
+            catch (Exception e)
+            {
+                log.warn("设置字典下拉选项失败,dictType: {}, error: {}", attr.dictType(), e.getMessage());
+            }
+        }
     }
 
     /**

+ 30 - 0
fs-service/src/main/java/com/fs/his/enums/FsIntegralOrderStatusEnum.java

@@ -0,0 +1,30 @@
+package com.fs.his.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+import java.util.stream.Stream;
+
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+public enum FsIntegralOrderStatusEnum {
+    STATUS_1(1,"待发货"),
+    STATUS_2(2,"待收货"),
+    STATUS_3(3,"已完成"),
+    STATUS_4(4,"待支付"),
+    STATUS_6(5,"已取消");
+
+
+
+    private Integer value;
+    private String desc;
+
+    public static FsIntegralOrderStatusEnum toType(int value) {
+        return Stream.of(FsIntegralOrderStatusEnum.values())
+                .filter(p -> p.value == value)
+                .findAny()
+                .orElse(null);
+    }
+}

+ 1 - 1
fs-service/src/main/java/com/fs/his/service/IFsIntegralOrderService.java

@@ -114,5 +114,5 @@ public interface IFsIntegralOrderService
 
     void createErpOrder(Long orderId) throws ParseException;
 
-    String importOrderStatusData(List<FsIntegralOrderExcelVO> list);
+    FsIntegralOrderImportResultVO importOrderStatusData(List<FsIntegralOrderExcelVO> list);
 }

+ 69 - 46
fs-service/src/main/java/com/fs/his/service/impl/FsIntegralOrderServiceImpl.java

@@ -1100,45 +1100,60 @@ public class FsIntegralOrderServiceImpl implements IFsIntegralOrderService
     }
 
     @Override
-    public String importOrderStatusData(List<FsIntegralOrderExcelVO> list) {
+    public FsIntegralOrderImportResultVO importOrderStatusData(List<FsIntegralOrderExcelVO> list) {
         if (StringUtils.isNull(list) || list.isEmpty()) {
             throw new ServiceException("导入数据不能为空!");
         }
-        int successNum = 0;
-        int failureNum = 0;
-        StringBuilder successMsg = new StringBuilder();
-        StringBuilder failureMsg = new StringBuilder();
-        for (FsIntegralOrderExcelVO vo : list) {
+        FsIntegralOrderImportResultVO result = new FsIntegralOrderImportResultVO();
+        
+        for (int i = 0; i < list.size(); i++) {
+            FsIntegralOrderExcelVO vo = list.get(i);
+            int rowNum = i + 2; // Excel行号从2开始(第1行是表头)
+            
             try {
                 //1.必填参数
-                ExcelUtils.validateRequiredFields(vo, list.indexOf(vo) + 1); // 传入行号
+                ExcelUtils.validateRequiredFields(vo, rowNum);
 
                 FsIntegralOrder order = fsIntegralOrderMapper.selectOne(Wrappers.<FsIntegralOrder>lambdaQuery().eq(FsIntegralOrder::getOrderCode, vo.getOrderCode()));
-                if (order ==null){
-                    failureNum++;
-                    String msg = "<br/>" + failureNum + "、订单编号 " + vo.getOrderCode() + " 导入失败:";
-                    failureMsg.append(msg).append("订单不存在");
+                if (order == null) {
+                    FsIntegralOrderImportResultVO.ImportResultItem item = new FsIntegralOrderImportResultVO.ImportResultItem();
+                    item.setRowNum(rowNum);
+                    item.setOrderCode(vo.getOrderCode());
+                    item.setErrorMessage("订单不存在");
+                    result.getFailureList().add(item);
+                    result.setFailureNum(result.getFailureNum() + 1);
                     continue;
                 }
+                
                 FsIntegralOrder param = new FsIntegralOrder(); //修改订单的参数
                 param.setOrderCode(vo.getOrderCode());
                 param.setOrderId(order.getOrderId());
+                
                 if ("6".equals(vo.getStatus())) {
-                    failureNum++;
-                    String msg = "<br/>" + failureNum + "、订单编号 " + vo.getOrderCode() + " 导入失败:";
-                    failureMsg.append(msg).append("该状态不支持修改为待推送");
+                    FsIntegralOrderImportResultVO.ImportResultItem item = new FsIntegralOrderImportResultVO.ImportResultItem();
+                    item.setRowNum(rowNum);
+                    item.setOrderCode(vo.getOrderCode());
+                    item.setErrorMessage("该状态不支持修改为待推送");
+                    result.getFailureList().add(item);
+                    result.setFailureNum(result.getFailureNum() + 1);
                     continue;
                 }
                 if ("-1".equals(vo.getStatus())) {
-                    failureNum++;
-                    String msg = "<br/>" + failureNum + "、订单编号 " + vo.getOrderCode() + " 导入失败:";
-                    failureMsg.append(msg).append("该状态不支持修改为退款中,需要手动申请退款");
+                    FsIntegralOrderImportResultVO.ImportResultItem item = new FsIntegralOrderImportResultVO.ImportResultItem();
+                    item.setRowNum(rowNum);
+                    item.setOrderCode(vo.getOrderCode());
+                    item.setErrorMessage("该状态不支持修改为退款中,需要手动申请退款");
+                    result.getFailureList().add(item);
+                    result.setFailureNum(result.getFailureNum() + 1);
                     continue;
                 }
                 if ("-2".equals(vo.getStatus())) {
-                    failureNum++;
-                    String msg = "<br/>" + failureNum + "、订单编号 " + vo.getOrderCode() + " 导入失败:";
-                    failureMsg.append(msg).append("该状态不支持修改为退款中,需要审核完成退款");
+                    FsIntegralOrderImportResultVO.ImportResultItem item = new FsIntegralOrderImportResultVO.ImportResultItem();
+                    item.setRowNum(rowNum);
+                    item.setOrderCode(vo.getOrderCode());
+                    item.setErrorMessage("该状态不支持修改为退款中,需要审核完成退款");
+                    result.getFailureList().add(item);
+                    result.setFailureNum(result.getFailureNum() + 1);
                     continue;
                 }
 
@@ -1154,48 +1169,55 @@ public class FsIntegralOrderServiceImpl implements IFsIntegralOrderService
                 String userAddress = vo.getUserAddress();
                 String userPhone = vo.getUserPhone();
                 if (StringUtils.isNotBlank(userAddress) || StringUtils.isNotBlank(userPhone)){
-                    if (Objects.equals(FsStoreOrderStatusEnum.STATUS_6.getValue(), status)) {
+                    // 不要使用误导性枚举
+                    if (Objects.equals(FsIntegralOrderStatusEnum.STATUS_1.getValue(), status)) {
                         param.setUserAddress(userAddress.isEmpty()?null:userAddress);
                         param.setUserPhone(userPhone.isEmpty()?null:userPhone);
                     } else {
-                        failureNum++;
-                        String msg = "<br/>" + failureNum + "、订单编号 " + vo.getOrderCode() + " 修改失败:";
-                        failureMsg.append(msg).append("该状态不支持修改收货人地址或电话");
+                        FsIntegralOrderImportResultVO.ImportResultItem item = new FsIntegralOrderImportResultVO.ImportResultItem();
+                        item.setRowNum(rowNum);
+                        item.setOrderCode(vo.getOrderCode());
+                        item.setErrorMessage("该状态不支持修改收货人地址或电话");
+                        result.getFailureList().add(item);
+                        result.setFailureNum(result.getFailureNum() + 1);
                         continue;
                     }
                 }
+                
+                // 处理物流字段(非必须,填了就更新)
+                if (StringUtils.isNotBlank(vo.getDeliveryCode())) {
+                    param.setDeliveryCode(vo.getDeliveryCode());
+                }
+                if (StringUtils.isNotBlank(vo.getDeliveryName())) {
+                    param.setDeliveryName(vo.getDeliveryName());
+                }
+                if (StringUtils.isNotBlank(vo.getDeliverySn())) {
+                    param.setDeliverySn(vo.getDeliverySn());
+                }
+                
                 param.setDeliveryStatus((vo.getDeliveryStatus()==null|| vo.getDeliveryStatus().isEmpty())?null:Integer.valueOf(vo.getDeliveryStatus()));
                 param.setDeliveryType(vo.getDeliveryType().isEmpty()?null:vo.getDeliveryType());
                 param.setUpdateTime(DateUtils.getNowDate());
 
-                //修改订单金额
-//                BigDecimal payRemain = vo.getPayRemain();
-//                if (payRemain != null){
-//                    if (!payRemain.equals(order.getPayRemain())){
-//                        BigDecimal payMoney = order.getPayMoney(); //实收金额
-//                        param.setPayPrice(payMoney.add(payRemain)); //应收金额
-//                        param.setPayRemain(vo.getPayRemain());
-//                    }
-//                }
                 fsIntegralOrderMapper.updateById(param);
 
-                successNum++;
-                successMsg.append("<br/>").append(successNum).append("、订单编号 ").append(vo.getOrderCode()).append(" 修改成功");
+                FsIntegralOrderImportResultVO.ImportResultItem item = new FsIntegralOrderImportResultVO.ImportResultItem();
+                item.setRowNum(rowNum);
+                item.setOrderCode(vo.getOrderCode());
+                result.getSuccessList().add(item);
+                result.setSuccessNum(result.getSuccessNum() + 1);
 
             } catch (Exception e) {
-
-                failureNum++;
-                String msg = "<br/>" + failureNum + "、订单编号 " + vo.getOrderCode() + " 修改失败:";
-                failureMsg.append(msg).append(e.getMessage());
+                FsIntegralOrderImportResultVO.ImportResultItem item = new FsIntegralOrderImportResultVO.ImportResultItem();
+                item.setRowNum(rowNum);
+                item.setOrderCode(vo.getOrderCode());
+                item.setErrorMessage(e.getMessage());
+                result.getFailureList().add(item);
+                result.setFailureNum(result.getFailureNum() + 1);
             }
         }
-        if (failureNum > 0) {
-            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
-            throw new ServiceException(failureMsg.toString());
-        } else {
-            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
-        }
-        return successMsg.toString();
+        
+        return result;
     }
 
     /**
@@ -1258,3 +1280,4 @@ public class FsIntegralOrderServiceImpl implements IFsIntegralOrderService
         return cloned;
     }
 }
+

+ 15 - 1
fs-service/src/main/java/com/fs/his/vo/FsIntegralOrderExcelVO.java

@@ -3,8 +3,10 @@ package com.fs.his.vo;
 import com.fs.common.annotation.Excel;
 import lombok.Data;
 
+import java.io.Serializable;
+
 @Data
-public class FsIntegralOrderExcelVO {
+public class FsIntegralOrderExcelVO implements Serializable {
     @Excel(name = "订单号",required = true)
     private String orderCode;
 
@@ -29,4 +31,16 @@ public class FsIntegralOrderExcelVO {
     @Excel(name = "详情地址(例:广东省 韶关市 仁化县 亨特中心22楼)使用空格分割")
     private String userAddress;
 
+    /** 快递公司编号 */
+    @Excel(name = "快递公司编号")
+    private String deliveryCode;
+
+    /** 快递名称 */
+    @Excel(name = "快递名称")
+    private String deliveryName;
+
+    /** 快递单号 */
+    @Excel(name = "快递单号")
+    private String deliverySn;
+
 }

+ 47 - 0
fs-service/src/main/java/com/fs/his/vo/FsIntegralOrderImportResultVO.java

@@ -0,0 +1,47 @@
+package com.fs.his.vo;
+
+import lombok.Data;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 积分订单导入结果VO
+ *
+ * @author fs
+ * @date 2025-01-XX
+ */
+@Data
+public class FsIntegralOrderImportResultVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /** 成功数量 */
+    private Integer successNum = 0;
+
+    /** 失败数量 */
+    private Integer failureNum = 0;
+
+    /** 成功列表 */
+    private List<ImportResultItem> successList = new ArrayList<>();
+
+    /** 失败列表 */
+    private List<ImportResultItem> failureList = new ArrayList<>();
+
+    /**
+     * 导入结果项
+     */
+    @Data
+    public static class ImportResultItem implements Serializable {
+        private static final long serialVersionUID = 1L;
+
+        /** 行号 */
+        private Integer rowNum;
+
+        /** 订单号 */
+        private String orderCode;
+
+        /** 错误信息 */
+        private String errorMessage;
+    }
+}
+