From cbb0dfaec496d441bbf4287ca8ae85c2776e50ed Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期四, 13 三月 2025 13:12:39 +0800
Subject: [PATCH] #修改 1. 收货通知单明细模板修改 2. 收货通知单添加动态扩展字段

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java        |    6 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java    |   43 +++-
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReportMsgService.java                 |   12 +
 rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java               |    5 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java                |    6 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java        |   16 ++
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java           |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java                  |   14 +
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReportMsgController.java           |   20 ++
 /dev/null                                                                                         |   52 ------
 rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java                       |   95 +++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OrderParams.java            |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java |   46 +++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java     |   10 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java        |   31 ++-
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderItemService.java          |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java       |   27 ++
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReceiveMsgController.java          |   76 +++++++++
 rsf-server/src/main/resources/application-dev.yml                                                 |    2 
 19 files changed, 361 insertions(+), 108 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ErpApiController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ErpApiController.java
deleted file mode 100644
index e83aa51..0000000
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ErpApiController.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vincent.rsf.server.api.controller;
-
-import com.vincent.rsf.framework.common.R;
-import com.vincent.rsf.server.api.controller.params.Order;
-import com.vincent.rsf.server.api.service.ErpApiService;
-import com.vincent.rsf.server.system.controller.BaseController;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-
-/**
- * @author Ryan
- * @version 1.0
- * @title ErpApiController
- * @description
- * @create 2025/3/4 13:19
- */
-@RestController
-@RequestMapping("/erp")
-@Api(tags = "ERP鎺ュ彛瀵规帴")
-public class ErpApiController extends BaseController {
-
-    @Autowired
-    private ErpApiService erpApiService;
-
-    /**
-     * @author Ryan
-     * @description 鎺ユ敹ERP鎺ㄩ�佺殑PO鍗曟嵁
-     * @throws
-     * @return
-     * @time 2025/3/4 13:57
-     */
-    @ApiOperation(value = "鎺ユ敹鍚屾ERP閲囪喘鍗�")
-    @PostMapping("/sync/purchase")
-    public R syncPurchases(@RequestBody List<Order> orders) {
-        if (orders.isEmpty()) {
-            return R.error("鎺ㄩ�佽鍗曚笉鑳戒负绌猴紝璇锋鏌ユ牎楠屽悗鍐嶆搷浣滐紒锛�");
-        }
-        if (!erpApiService.syncPurchasee(orders)) {
-            return R.error("淇濆瓨澶辫触");
-        } else {
-            return R.ok("淇濆瓨鎴愬姛锛侊紒");
-        }
-    }
-
-}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReceiveMsgController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReceiveMsgController.java
new file mode 100644
index 0000000..16a5e11
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReceiveMsgController.java
@@ -0,0 +1,76 @@
+package com.vincent.rsf.server.api.controller;
+
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.server.api.controller.params.OrderParams;
+import com.vincent.rsf.server.api.service.ReceiveMsgService;
+import com.vincent.rsf.server.common.utils.ExcelUtil;
+import com.vincent.rsf.server.manager.entity.AsnOrder;
+import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate;
+import com.vincent.rsf.server.system.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title ErpApiController
+ * @description
+ * @create 2025/3/4 13:19
+ */
+@RestController
+@RequestMapping("/erp")
+@Api(tags = "ERP鎺ュ彛瀵规帴")
+public class ReceiveMsgController extends BaseController {
+
+    @Autowired
+    private ReceiveMsgService receiveMsgService;
+
+    /**
+     * @author Ryan
+     * @description 鎺ユ敹ERP鎺ㄩ�佺殑PO鍗曟嵁
+     * @throws
+     * @return
+     * @time 2025/3/4 13:57
+     */
+    @ApiOperation(value = "鎺ユ敹鍚屾ERP閲囪喘鍗�")
+    @PostMapping("/sync/purchase")
+    public R syncPurchases(@RequestBody List<OrderParams> orders) {
+        if (orders.isEmpty()) {
+            return R.error("鎺ㄩ�佽鍗曚笉鑳戒负绌猴紝璇锋鏌ユ牎楠屽悗鍐嶆搷浣滐紒锛�");
+        }
+        if (!receiveMsgService.syncPurchasee(orders)) {
+            return R.error("淇濆瓨澶辫触");
+        } else {
+            return R.ok("淇濆瓨鎴愬姛锛侊紒");
+        }
+    }
+
+    /**
+     * @author Ryan
+     * @description 鍚屾璐ㄦ缁撴灉淇℃伅
+     * @param
+     * @return
+     * @time 2025/3/12 16:56
+     */
+    @ApiOperation("璐ㄦ缁撴灉鍚屾")
+    @PostMapping("/sync/inspect")
+    public void syncQlyInspect(HttpServletRequest request, HttpServletResponse response) {
+        AsnOrderTemplate template = ExcelUtil.mockData(AsnOrderTemplate.class);
+        List<AsnOrderTemplate> list = new ArrayList<>();
+        list.add(template);
+         ExcelUtil.build(ExcelUtil.create(list, AsnOrderTemplate.class), response);
+        System.out.println(template);
+//        return R.ok();
+    }
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReportMsgController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReportMsgController.java
new file mode 100644
index 0000000..eb916b4
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/ReportMsgController.java
@@ -0,0 +1,20 @@
+package com.vincent.rsf.server.api.controller;
+
+import com.vincent.rsf.server.system.controller.BaseController;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title ReportMsgController
+ * @description
+ * @create 2025/3/12 17:00
+ */
+@RestController
+@RequestMapping("/report")
+@Api(tags = "涓婃姤淇℃伅鎺ュ彛绠$悊鍣�")
+public class ReportMsgController extends BaseController {
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/Order.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OrderParams.java
similarity index 96%
rename from rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/Order.java
rename to rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OrderParams.java
index 996b6ea..2c8d5c5 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/Order.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OrderParams.java
@@ -21,7 +21,7 @@
 @Data
 @Accessors(chain = true)
 @ApiModel(value = "PurchaseOrder", description = "鍏ュ簱鍗曟嵁")
-public class Order implements Serializable {
+public class OrderParams implements Serializable {
 
     @ApiModelProperty(value = "鍗曟嵁缂栫爜")
     private String code;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ErpApiService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java
similarity index 74%
rename from rsf-server/src/main/java/com/vincent/rsf/server/api/service/ErpApiService.java
rename to rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java
index 321eb7a..b0df19a 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ErpApiService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java
@@ -1,7 +1,7 @@
 package com.vincent.rsf.server.api.service;
 
 
-import com.vincent.rsf.server.api.controller.params.Order;
+import com.vincent.rsf.server.api.controller.params.OrderParams;
 import com.vincent.rsf.server.api.entity.dto.PoItemsDto;
 
 import java.util.List;
@@ -13,14 +13,14 @@
  * @description
  * @create 2025/3/4 16:23
  */
-public interface ErpApiService {
+public interface ReceiveMsgService {
 
     /**
      * 閲囪喘鍗曞悓姝�
      * @param orders
      * @return
      */
-    boolean syncPurchasee(List<Order> orders);
+    boolean syncPurchasee(List<OrderParams> orders);
 
     /**
      * 涓�閿姤妫�
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReportMsgService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReportMsgService.java
new file mode 100644
index 0000000..83ab495
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReportMsgService.java
@@ -0,0 +1,12 @@
+package com.vincent.rsf.server.api.service;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title ReportMsgService
+ * @description
+ * @create 2025/3/12 17:07
+ */
+public interface ReportMsgService {
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
index a62dd3b..525be1b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -20,6 +20,7 @@
 import com.vincent.rsf.server.manager.service.WarehouseAreasItemService;
 import com.vincent.rsf.server.manager.service.WarehouseAreasService;
 import com.vincent.rsf.server.system.constant.CodeRes;
+import com.vincent.rsf.server.system.constant.SerialRuleCode;
 import com.vincent.rsf.server.system.controller.param.LoginParam;
 import com.vincent.rsf.server.system.controller.result.LoginResult;
 import com.vincent.rsf.server.system.entity.*;
@@ -174,7 +175,7 @@
                     .setAreaName(areasItem.getName())
                     .setAreaId(areasItem.getId())
                     .setStockUnit(dto.getStockUnit())
-                    .setBatch(SerialRuleUtils.generateRuleCode("sys_receipt_batch", dto))
+                    .setBatch(SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_RECEIPT_BATCH, dto))
                     .setAnfme(dto.getReceiptQty())
                     .setSplrBtch(dto.getSplrBatch())
                     .setMatnrCode(matnr.getCode())
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
similarity index 89%
rename from rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java
rename to rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
index 320a1f8..1e3daf7 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
@@ -19,9 +19,12 @@
 import com.vincent.rsf.server.manager.service.PurchaseItemService;
 import com.vincent.rsf.server.manager.service.PurchaseService;
 import com.vincent.rsf.server.system.constant.SerialRuleCode;
-import com.vincent.rsf.server.api.controller.params.Order;
+import com.vincent.rsf.server.api.controller.params.OrderParams;
+import com.vincent.rsf.server.system.entity.Fields;
+import com.vincent.rsf.server.system.service.FieldsItemService;
+import com.vincent.rsf.server.system.service.FieldsService;
 import com.vincent.rsf.server.system.utils.SerialRuleUtils;
-import com.vincent.rsf.server.api.service.ErpApiService;
+import com.vincent.rsf.server.api.service.ReceiveMsgService;
 import com.vincent.rsf.server.manager.entity.Purchase;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
@@ -48,16 +51,14 @@
  */
 @Slf4j
 @Service("erpApiService")
-public class ErpApiServiceImpl implements ErpApiService {
+public class ReceiveMsgServiceImpl implements ReceiveMsgService {
 
     @Autowired
     private PurchaseService purchaseService;
     @Autowired
     private PurchaseItemService purchaseItemService;
-
     @Autowired
     private AsnOrderService asnOrderService;
-
     @Autowired
     private AsnOrderItemService asnOrderItemService;
     @Autowired
@@ -66,10 +67,14 @@
     private RemotesInfoProperties remotesInfoProperties;
     @Autowired
     private RemotesInfoProperties.ApiInfo apiInfo;
+    @Autowired
+    private FieldsService fieldsService;
+    @Autowired
+    private FieldsItemService fieldsItemService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean syncPurchasee(List<Order> orders) {
+    public boolean syncPurchasee(List<OrderParams> orders) {
         if (orders.isEmpty()) {
             throw new CoolException("鍗曟嵁鍐呭涓嶈兘涓虹┖锛侊紒");
         }
@@ -82,12 +87,22 @@
             if (!purchaseService.save(purchase)) {
                 throw new CoolException("閲囪喘鍗曟嵁淇濆瓨澶辫触");
             }
+
+            //鏌ヨ鎵╁睍瀛楁鏄惁瀛樺湪
+            List<Fields> fields = fieldsService.list(new LambdaQueryWrapper<Fields>().eq(Fields::getStatus, 1).eq(Fields::getFlagEnable, 1));
+
             //鍒ゆ柇瀛愬垪琛ㄤ笉涓虹┖
             if (!ors.getChildren().isEmpty()) {
                 ArrayList<PurchaseItem> list = new ArrayList<>();
                 ors.getChildren().forEach(orderItem -> {
                     PurchaseItem item = new PurchaseItem();
                     BeanUtils.copyProperties(orderItem, item);
+//                    if (!fields.isEmpty()) {
+//                        List<String> fieldValue = fields.stream().map(Fields::getFields).collect(Collectors.toList());
+//                        fieldValue.forEach(value -> {
+//
+//                        });
+//                    }
                     item.setPurchaseId(purchase.getId());
                     list.add(item);
                 });
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java
new file mode 100644
index 0000000..5f3bfc8
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java
@@ -0,0 +1,16 @@
+package com.vincent.rsf.server.api.service.impl;
+
+import com.vincent.rsf.server.api.service.ReportMsgService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title ReportMsgServiceImpl
+ * @description
+ * @create 2025/3/12 17:08
+ */
+@Service
+public class ReportMsgServiceImpl implements ReportMsgService {
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java
index b501bda..922d42f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java
@@ -1,8 +1,12 @@
 package com.vincent.rsf.server.common.utils;
 
+import cn.afterturn.easypoi.excel.annotation.Excel;
 import cn.afterturn.easypoi.excel.entity.ImportParams;
 import com.vincent.rsf.framework.common.Cools;
+import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelComment;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 import org.apache.poi.ss.usermodel.*;
@@ -20,6 +24,7 @@
 /**
  * Created by vincent on 2/17/2024
  */
+@Slf4j
 public class ExcelUtil {
 
     public static void build(Workbook workbook, HttpServletResponse response) {
@@ -33,6 +38,10 @@
     }
 
     public static <T> Workbook create(List<T> list, Class<T> clz) {
+        return  create(list, clz, false);
+    }
+
+    public static <T> Workbook create(List<T> list, Class<T> clz, boolean flagTemplate) {
         HSSFWorkbook workbook = new HSSFWorkbook();
         Sheet sheet = workbook.createSheet(clz.getSimpleName());
 
@@ -46,6 +55,15 @@
                 continue;
             }
             String memo = "Undefined";
+            if (flagTemplate) {
+                if (field.isAnnotationPresent(ExcelComment.class)) {
+                    memo = field.getAnnotation(ExcelComment.class).value();
+                }
+            } else {
+                if (field.isAnnotationPresent(Excel.class)) {
+                    memo = field.getAnnotation(Excel.class).name();
+                }
+            }
             if (field.isAnnotationPresent(ApiModelProperty.class)) {
                 memo = field.getAnnotation(ApiModelProperty.class).value();
             }
@@ -102,4 +120,81 @@
         return params;
     }
 
+    /**
+     * 鏍规嵁 {@code tClass} 鐩稿叧鎴愬憳鍙橀噺鐨� {@link ExcelComment#example()} 瀛楁鍒涘缓妯℃嫙鏁版嵁锛屾殏涓嶆敮鎸� 澶嶆潅绫诲瀷
+     * @param tClass
+     * @return
+     */
+    public static <T> T mockData(Class<T> tClass) {
+        if (tClass == null) {
+            return null;
+        }
+        T instance = null;
+
+        try {
+            instance = tClass.newInstance();
+            Field[] declaredFields = tClass.getDeclaredFields();
+            for (Field declaredField : declaredFields) {
+                ExcelComment comment = declaredField.getAnnotation(ExcelComment.class);
+                if (comment == null) {
+                    continue;
+                }
+                declaredField.setAccessible(true);
+                Class<?> fieldType = declaredField.getType();
+
+                String exampleValue = comment.example();
+                Object value = null;
+
+                if (fieldType == int.class || fieldType == Integer.class) {
+                    value = StringUtils.isBlank(exampleValue) ? 0 : Integer.parseInt(exampleValue);
+                } else if (fieldType == short.class || fieldType == Short.class) {
+                    value = StringUtils.isBlank(exampleValue) ? 0 : Short.parseShort(exampleValue);
+                } else if (fieldType == long.class || fieldType == Long.class) {
+                    value = StringUtils.isBlank(exampleValue) ? 0 : Long.parseLong(exampleValue);
+                } else if (fieldType == double.class || fieldType == Double.class) {
+                    value = StringUtils.isBlank(exampleValue) ? 0 : Double.parseDouble(exampleValue);
+                } else if (fieldType == boolean.class || fieldType == Boolean.class) {
+                    value = StringUtils.isNotBlank(exampleValue) && Boolean.parseBoolean(exampleValue);
+                } else if (fieldType == String.class) {
+                    value = exampleValue;
+                } else if (fieldType == Date.class) {
+                    value = DateUtils.parse(exampleValue);
+                }
+
+                if (value == null && !isBaseType(fieldType)) {
+                    declaredField.set(instance, null);
+                } else {
+                    declaredField.set(instance, value);
+                }
+            }
+        } catch (Exception e) {
+            log.error("鏁版嵁鏋勯�犲け璐ワ紝璇锋煡璇㈣缁嗕俊鎭�", e);
+            return instance;
+        }
+
+        return instance;
+    }
+
+
+    /**
+     * 鏄惁鏄熀纭�鏁版嵁绫诲瀷
+     *
+     * @param className
+     * @return
+     */
+    private static boolean isBaseType(Class<?> className) {
+        if (className.equals(java.lang.Integer.class) ||
+                className.equals(java.lang.Byte.class) ||
+                className.equals(java.lang.Long.class) ||
+                className.equals(java.lang.Double.class) ||
+                className.equals(java.lang.Float.class) ||
+                className.equals(java.lang.Character.class) ||
+                className.equals(java.lang.Short.class) ||
+                className.equals(java.lang.Boolean.class)) {
+            return true;
+        }
+        return false;
+    }
+
+
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java
index 80e9d25..38b052e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java
@@ -12,7 +12,9 @@
 import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.manager.entity.AsnOrder;
 import com.vincent.rsf.server.manager.service.AsnOrderService;
+import com.vincent.rsf.server.system.constant.SerialRuleCode;
 import com.vincent.rsf.server.system.controller.BaseController;
+import com.vincent.rsf.server.system.utils.SerialRuleUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -64,6 +66,10 @@
     public R save(@RequestBody AsnOrder asnOrder) {
         asnOrder.setCreateBy(getLoginUserId());
         asnOrder.setUpdateBy(getLoginUserId());
+        String code = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, asnOrder);
+        if (!Objects.isNull(code)) {
+            asnOrder.setCode(code);
+        }
         if (!asnOrderService.save(asnOrder)) {
             return R.error("Save Fail");
         }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java
index ab28479..0b65aca 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java
@@ -1,10 +1,13 @@
 package com.vincent.rsf.server.manager.controller;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.common.utils.CommonUtil;
 import com.vincent.rsf.server.common.utils.ExcelUtil;
 import com.vincent.rsf.server.common.annotation.OperationLog;
 import com.vincent.rsf.server.common.domain.BaseParam;
@@ -12,9 +15,15 @@
 import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.manager.controller.params.AsnOrderItemParams;
 import com.vincent.rsf.server.manager.entity.AsnOrderItem;
+import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate;
 import com.vincent.rsf.server.manager.service.AsnOrderItemService;
 import com.vincent.rsf.server.system.controller.BaseController;
+import com.vincent.rsf.server.system.entity.Fields;
+import com.vincent.rsf.server.system.entity.FieldsItem;
+import com.vincent.rsf.server.system.service.FieldsItemService;
+import com.vincent.rsf.server.system.service.FieldsService;
 import com.vincent.rsf.server.system.utils.SerialRuleUtils;
+import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -24,7 +33,9 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.*;
+import java.util.stream.Collectors;
 
+@Api(tags = "ASN鍗曟槑缁�")
 @RestController
 public class AsnOrderItemController extends BaseController {
 
@@ -60,17 +71,21 @@
     @PreAuthorize("hasAuthority('manager:asnOrderItem:save')")
     @OperationLog("Create ASN鍗曟嵁")
     @PostMapping("/asnOrderItem/save")
-    public R save(@RequestBody AsnOrderItem asnOrderItem) {
-        asnOrderItem.setCreateBy(getLoginUserId());
-        asnOrderItem.setUpdateBy(getLoginUserId());
-        String code = SerialRuleUtils.generateRuleCode("sys_ans_order", asnOrderItem);
-        if (!Objects.isNull(code)) {
-            asnOrderItem.setAsnCode(code);
+    public R save(@RequestBody Map<String, Object> params) {
+        if (Objects.isNull(params)) {
+            throw new CoolException("淇℃伅涓嶈兘涓虹┖锛侊紒");
         }
-        if (!asnOrderItemService.save(asnOrderItem)) {
+        params.put("createBy", getLoginUserId());
+        params.put("updateBy", getLoginUser());
+
+        if (!asnOrderItemService.fieldsSave(params)) {
             return R.error("Save Fail");
         }
-        return R.ok("Save Success").add(asnOrderItem);
+        return R.ok("Save Success");
+
+
+
+
     }
 
     @PreAuthorize("hasAuthority('manager:asnOrderItem:update')")
@@ -111,8 +126,12 @@
 
     @PreAuthorize("hasAuthority('manager:asnOrderItem:list')")
     @PostMapping("/asnOrderItem/export")
+    @ApiOperation("鏀惰揣閫氱煡鍗曟槑缁�")
     public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
-        ExcelUtil.build(ExcelUtil.create(asnOrderItemService.list(), AsnOrderItem.class), response);
+        AsnOrderTemplate template = ExcelUtil.mockData(AsnOrderTemplate.class);
+        List<AsnOrderTemplate> list = new ArrayList<>();
+        list.add(template);
+        ExcelUtil.build(ExcelUtil.create(list, AsnOrderTemplate.class, true), response);
     }
 
     /**
@@ -123,13 +142,13 @@
     @PostMapping("/asnOrder/import")
     @ApiOperation("ASN瀵煎叆鎺ュ彛")
     @PreAuthorize("hasAuthority('manager:asnOrder:update')")
-    public R importExcel(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request) throws Exception {
+    public R importExcel(@RequestParam(value = "file") MultipartFile file, @RequestParam String asnId) throws Exception {
         if (Objects.isNull(file)) {
             throw new CoolException("鏂囦欢涓嶈兘涓虹┖锛侊紒");
         }
         HashMap<String, Object> hashMap = new HashMap<>();
-        if (!Objects.isNull(request.getParameter("asnId"))) {
-            hashMap.put("asnId", request.getParameter("asnId"));
+        if (!Objects.isNull(asnId)) {
+            hashMap.put("asnId", asnId);
         }
         return asnOrderItemService.excelImport(file, hashMap);
     }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
index e2773cd..c37b9ed 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
@@ -1,15 +1,13 @@
 package com.vincent.rsf.server.manager.entity;
 
-import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.*;
+
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
 import lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import com.vincent.rsf.framework.common.Cools;
@@ -17,6 +15,7 @@
 import com.vincent.rsf.server.system.service.UserService;
 import com.vincent.rsf.server.system.entity.User;
 import java.io.Serializable;
+import java.util.Map;
 
 @Data
 @Accessors(chain = true)
@@ -45,6 +44,13 @@
     private String platItemId;
 
     /**
+     * 鎵╁睍瀛楁
+     */
+    @ApiModelProperty("鎵╁睍瀛楁")
+    @TableField(exist = false)
+    private Map<String, String> extendFields;
+
+    /**
      * 瀛楁绱㈠紩
      */
     @ApiModelProperty("瀛楁绱㈠紩")
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java
index 6e784bc..54f5883 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java
@@ -5,6 +5,8 @@
 import cn.afterturn.easypoi.handler.inter.IExcelModel;
 import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelAutoColumnSize;
 import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelComment;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
@@ -27,61 +29,60 @@
 public class AsnOrderTemplate implements IExcelModel, IExcelDataModel, Serializable {
 
     @Excel(name = "琛屽彿")
-    @ExcelComment(example = "1357564255478")
+    @ExcelComment(value = "platItemId", example = "1357564255478")
     private String platItemId;
 
     @Excel(name = "鐗╂枡鍚嶇О")
-    @ExcelComment(example = "鐗╂枡鍚嶇О")
+    @ExcelComment(value = "matnk",example = "鐗╂枡鍚嶇О")
     private String matnk;
 
     @Excel(name = "鏁伴噺")
-    @ExcelComment(example = "25")
+    @ExcelComment(value = "anfme",example = "25")
     private Double anfme;
 
     @Excel(name = "搴撳瓨鍗曚綅")
-    @ExcelComment(example = "涓�")
+    @ExcelComment(value = "stockUnit",example = "涓�")
     private String stockUnit;
 
     @Excel(name = "閲囪喘鏁伴噺")
-    @ExcelComment(example = "25")
+    @ExcelComment(value = "purQty",example = "25")
     private Double purQty;
 
     @Excel(name = "閲囪喘鍗曚綅")
-    @ExcelComment(example = "涓�")
+    @ExcelComment(value = "purUnit",example = "涓�")
     private String purUnit;
 
     @Excel(name = "宸插畬鎴愭暟閲�")
-    @ExcelComment(example = "25")
+    @ExcelComment(value = "qty",example = "25")
     private Double qty;
 
     @Excel(name = "渚涘簲鍟嗙紪鐮�")
-    @ExcelComment(example = "3654821")
+    @ExcelComment(value = "splrCode",example = "3654821")
     private String splrCode;
 
     @Excel(name = "渚涘簲鍟嗗悕绉�")
-    @ExcelComment(example = "娴欐睙涓壃鎶�鏈叕鍙�")
+    @ExcelComment(value = "splrName",example = "娴欐睙涓壃鎶�鏈叕鍙�")
     private String splrName;
 
     @Excel(name = "渚涘簲鍟嗘壒娆�")
-    @ExcelComment(example = "25251212")
+    @ExcelComment(value = "splrBatch",example = "25251212")
     private String splrBatch;
 
     @Excel(name = "浜岀淮鐮�")
-    @ExcelComment(example = "")
+    @ExcelComment(value = "qrcode",example = "")
     private String qrcode;
 
     @Excel(name = "鏉″舰鐮�")
-    @ExcelComment(example = "2354788")
+    @ExcelComment(value = "barcode",example = "2354788")
     private String barcode;
 
     @Excel(name = "鍖呰鍚嶇О")
-    @ExcelComment(example = "绠�")
+    @ExcelComment(value = "packName",example = "绠�")
     private String packName;
 
     @Excel(name = "澶囨敞")
-    @ExcelComment(example = "娉細鏄撶鍝侊紝杞绘嬁鏀�")
+    @ExcelComment(value = "memo",example = "娉細鏄撶鍝侊紝杞绘嬁鏀�")
     private String memo;
-
 
     private Integer rowNum;
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderItemService.java
index deaee2f..c677466 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderItemService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderItemService.java
@@ -8,8 +8,11 @@
 
 import java.io.IOException;
 import java.util.HashMap;
+import java.util.Map;
 
 public interface AsnOrderItemService extends IService<AsnOrderItem> {
 
     R excelImport(MultipartFile file, HashMap<String, Object> hashMap) throws Exception;
+
+    boolean fieldsSave(Map<String, Object> params);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
index 7e5cdf6..b7775b2 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
@@ -2,9 +2,11 @@
 
 import cn.afterturn.easypoi.excel.ExcelImportUtil;
 import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.common.utils.CommonUtil;
 import com.vincent.rsf.server.common.utils.ExcelUtil;
 import com.vincent.rsf.server.manager.entity.AsnOrder;
 import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate;
@@ -14,17 +16,19 @@
 import com.vincent.rsf.server.manager.mapper.AsnOrderMapper;
 import com.vincent.rsf.server.manager.service.AsnOrderItemService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vincent.rsf.server.system.entity.Fields;
+import com.vincent.rsf.server.system.entity.FieldsItem;
+import com.vincent.rsf.server.system.service.FieldsItemService;
+import com.vincent.rsf.server.system.service.FieldsService;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 @Service("asnOrderItemService")
 public class AsnOrderItemServiceImpl extends ServiceImpl<AsnOrderItemMapper, AsnOrderItem> implements AsnOrderItemService {
@@ -32,10 +36,14 @@
     @Resource
     private AsnOrderMapper asnOrderMapper;
 
+    @Autowired
+    private FieldsService fieldsService;
+    @Autowired
+    private FieldsItemService fieldsItemService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public R excelImport(MultipartFile file, HashMap<String, Object> hashMap) throws Exception {
-
         ExcelImportResult<AsnOrderTemplate> result = ExcelImportUtil.importExcelMore(file.getInputStream(), MatnrsTemplate.class, ExcelUtil.getDefaultImportParams());
         if (result.getList().isEmpty()) {
             throw new CoolException("鐗╂枡瀵煎叆澶辫触锛侊紒");
@@ -43,7 +51,6 @@
         if (!Objects.isNull(hashMap.get("asnId"))) {
             throw new CoolException("涓诲崟ID涓虹┖锛屾棤娉曟搷浣滐紒锛�");
         }
-
         AsnOrder order = asnOrderMapper.selectOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, hashMap.get("asnId")));
         if (Objects.isNull(order)) {
             throw new CoolException("ASN鍗曟嵁涓嶅瓨鍦紒锛�");
@@ -61,4 +68,31 @@
         }
         return R.ok("鎿嶄綔鎴愬姛锛侊紒");
     }
+
+    @Override
+    public boolean fieldsSave(Map<String, Object> params) {
+        List<Fields> fields = fieldsService.list(new LambdaQueryWrapper<Fields>().eq(Fields::getStatus, 1).eq(Fields::getFlagEnable, 1));
+        List<FieldsItem> fieldsItems = new ArrayList<>();
+        if (!fields.isEmpty()) {
+            String uuid16 = CommonUtil.randomUUID16();
+            for (Fields obj : fields) {
+                if (!Objects.isNull(params.get(obj.getFields()))) {
+                    FieldsItem item = new FieldsItem();
+                    item.setUuid(uuid16)
+                            .setValue(params.get(obj.getFields()).toString())
+                            .setMatnrId(Long.parseLong(params.get("matnrId").toString()))
+                            .setFieldsId(obj.getId());
+                    fieldsItems.add(item);
+                }
+            }
+            if (!fieldsItemService.saveBatch(fieldsItems)) {
+                throw new CoolException("鍗曟嵁鏄庣粏鎵╁睍瀛楁淇濆瓨澶辫触锛侊紒");
+            }
+        }
+        AsnOrderItem asnOrderItem = JSONObject.parseObject(JSONObject.toJSONString(params), AsnOrderItem.class);
+        if (!this.save(asnOrderItem)) {
+            throw new CoolException("鏀惰揣閫氱煡鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�");
+        }
+        return true;
+    }
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
index 61f0632..3e6b57d 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
@@ -1,12 +1,8 @@
 package com.vincent.rsf.server.manager.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.api.entity.dto.PoItemsDto;
-import com.vincent.rsf.server.api.service.ErpApiService;
-import com.vincent.rsf.server.manager.entity.AsnOrderItem;
-import com.vincent.rsf.server.manager.entity.Purchase;
-import com.vincent.rsf.server.manager.entity.PurchaseItem;
+import com.vincent.rsf.server.api.service.ReceiveMsgService;
 import com.vincent.rsf.server.manager.mapper.AsnOrderItemMapper;
 import com.vincent.rsf.server.manager.mapper.AsnOrderMapper;
 import com.vincent.rsf.server.manager.entity.AsnOrder;
@@ -32,7 +28,7 @@
 public class AsnOrderServiceImpl extends ServiceImpl<AsnOrderMapper, AsnOrder> implements AsnOrderService {
 
     @Autowired
-    private ErpApiService erpApiService;
+    private ReceiveMsgService receiveMsgService;
     @Resource
     private PurchaseMapper purchaseMapper;
 
@@ -49,7 +45,7 @@
             throw new CoolException("ASN鍗曟嵁涓嶈兘涓虹┖锛侊紒");
         }
         List<PoItemsDto> items = purchaseMapper.poList(asnIds);
-        if (erpApiService.reportInspectNotify(items)) {
+        if (receiveMsgService.reportInspectNotify(items)) {
             return true;
         } else {
             return false;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java
index 6fdeb55..49bc53d 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java
@@ -18,4 +18,9 @@
      * ASN閫氱煡鍗曠敓鎴愮紪鐮佽鍒�
      */
     public final static String SYS_ASN_ORDER = "sys_ans_order";
+
+    /**
+     * 鏀惰揣鎵规瑙勫垯
+     */
+    public final static String SYS_RECEIPT_BATCH = "sys_receipt_batch";
 }
diff --git a/rsf-server/src/main/resources/application-dev.yml b/rsf-server/src/main/resources/application-dev.yml
index 20d38b4..cf33bf5 100644
--- a/rsf-server/src/main/resources/application-dev.yml
+++ b/rsf-server/src/main/resources/application-dev.yml
@@ -76,7 +76,7 @@
     #绔彛鍙�
     port: 8080
     #鎺ュ搧閾炬帴鍓嶇紑
-    prePath: rsf-server
+    pre-path: rsf-server
     #鎺ュ彛鏄庣粏
     api:
       #璐ㄦ涓婃姤鎺ュ彛

--
Gitblit v1.9.1