From 4af26c71d9414b8b8f568c0f119f123790cab152 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期三, 12 三月 2025 13:31:42 +0800
Subject: [PATCH] #修改  动态字段key-value值新增,显示优化

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java              |    8 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/MatnrService.java                       |    5 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderItemController.java          |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java                          |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/MatnrServiceImpl.java              |   58 +++++++
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java                    |    9 +
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/ReceiptParams.java                |    1 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java                 |    6 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java                     |    7 -
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java                 |  145 ++++++++++++++------
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java                  |   15 +
 rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java                                 |    6 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java                        |    5 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java |   15 ++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Matnr.java                               |    8 +
 rsf-server/src/main/java/com/vincent/rsf/server/common/utils/FieldsUtils.java                           |   58 ++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java          |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java    |    7 
 rsf-server/src/main/java/com/vincent/rsf/server/system/entity/FieldsItem.java                           |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java                |   12 
 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/ReceiptDetlsDto.java                     |   25 +++
 rsf-server/src/main/java/com/vincent/rsf/server/system/entity/Fields.java                               |    1 
 22 files changed, 316 insertions(+), 88 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
index 40f2243..2181e8a 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
@@ -94,7 +94,6 @@
         if (Objects.isNull(params)) {
             throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
-
         return mobileService.otherReceipt(params);
     }
 
@@ -114,4 +113,12 @@
     }
 
 
+    @PreAuthorize("hasAuthority('manager:asnOrder:list')")
+    @GetMapping("/dynamic/fields")
+    @ApiOperation("鑾峰彇鍔ㄦ�佸瓧娈�")
+    public R getDynamicFields() {
+        return R.ok(mobileService.getDynamicFields());
+    }
+
+
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/ReceiptParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/ReceiptParams.java
index e2f53d8..a933489 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/ReceiptParams.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/ReceiptParams.java
@@ -7,6 +7,7 @@
 import lombok.experimental.Accessors;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author Ryan
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/ReceiptDetlsDto.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/ReceiptDetlsDto.java
index ae83305..a5b525b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/ReceiptDetlsDto.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/ReceiptDetlsDto.java
@@ -1,12 +1,17 @@
 package com.vincent.rsf.server.api.entity.dto;
 
-import io.swagger.annotations.Api;
+import com.alibaba.fastjson.JSONObject;
+import com.vincent.rsf.server.api.controller.params.ReceiptParams;
+import com.vincent.rsf.server.common.utils.CommonUtil;
+import com.vincent.rsf.server.common.utils.FieldsUtils;
+import com.vincent.rsf.server.system.utils.SerialRuleUtils;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
+import java.util.Map;
 
 /**
  * @author Ryan
@@ -64,4 +69,22 @@
 
     @ApiModelProperty("渚涘簲鍟嗙紪鐮�")
     private String splrCode;
+
+    @ApiModelProperty("鎵╁睍瀛楁")
+    private Map<String, Object> extendFields;
+
+    public static void main(String[] args) {
+        String abc = "";
+        String s = CommonUtil.randomUUID16();
+       System.out.println("閲嶅瀛楃涓诧細" + s);
+//        for (int i = 0; i < 10000; i++) {
+//            String s = CommonUtil.randomUUID16();
+//            if (abc.equals(s)) {
+//                System.out.println("閲嶅瀛楃涓诧細" + abc);
+//            }
+//            abc = s;
+//        }
+    }
 }
+
+
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
index 2b67cd6..a4f69d4 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
@@ -5,6 +5,7 @@
 import com.vincent.rsf.server.api.controller.params.ReceiptParams;
 import com.vincent.rsf.server.manager.entity.AsnOrder;
 import com.vincent.rsf.server.system.controller.param.LoginParam;
+import com.vincent.rsf.server.system.entity.Fields;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
@@ -29,4 +30,6 @@
     List<AsnOrder> getAllAsnOrders();
 
     R getReceiptAreas();
+
+    List<Fields> getDynamicFields();
 }
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 b740cd0..a62dd3b 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
@@ -1,5 +1,6 @@
 package com.vincent.rsf.server.api.service.impl;
 
+import com.alibaba.druid.sql.visitor.functions.If;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.common.R;
@@ -12,6 +13,7 @@
 import com.vincent.rsf.server.common.config.ConfigProperties;
 import com.vincent.rsf.server.common.enums.WarehouseAreaType;
 import com.vincent.rsf.server.common.security.JwtSubject;
+import com.vincent.rsf.server.common.utils.CommonUtil;
 import com.vincent.rsf.server.common.utils.JwtUtil;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.mapper.*;
@@ -20,11 +22,12 @@
 import com.vincent.rsf.server.system.constant.CodeRes;
 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.Tenant;
-import com.vincent.rsf.server.system.entity.User;
-import com.vincent.rsf.server.system.entity.UserLogin;
+import com.vincent.rsf.server.system.entity.*;
+import com.vincent.rsf.server.system.mapper.FieldsMapper;
 import com.vincent.rsf.server.system.mapper.TenantMapper;
 import com.vincent.rsf.server.system.mapper.UserMapper;
+import com.vincent.rsf.server.system.service.FieldsItemService;
+import com.vincent.rsf.server.system.service.FieldsService;
 import com.vincent.rsf.server.system.service.UserLoginService;
 import com.vincent.rsf.server.system.utils.SerialRuleUtils;
 import org.apache.tika.utils.StringUtils;
@@ -73,6 +76,11 @@
     private StockItemMapper stockItemMapper;
     @Resource
     private PurchaseItemMapper purchaseItemMapper;
+    @Resource
+    private FieldsMapper fieldsMapper;
+
+    @Autowired
+    private FieldsItemService fieldsItemService;
 
 
     /**
@@ -122,7 +130,7 @@
         if (StringUtils.isEmpty(barcode)) {
             return R.error("鏍囩鐮佷笉鑳戒负绌猴紒锛�");
         }
-        AsnOrderItem asnOrderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getBarcode, barcode));
+        List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getBarcode, barcode));
         if (Objects.isNull(asnOrderItem)) {
             throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�");
         }
@@ -146,10 +154,14 @@
         if (Objects.isNull(params.getWhAreaId())) {
             throw new CoolException("搴撳尯鏍囪瘑涓嶈兘涓虹┖锛侊紒");
         }
+
         WarehouseAreas areasItem = warehouseAreasService.getOne(new LambdaQueryWrapper<WarehouseAreas>().eq(WarehouseAreas::getId, params.getWhAreaId()));
         if (Objects.isNull(areasItem)) {
             throw new CoolException("鏁版嵁閿欒锛氬綋鍓嶅簱鍖轰笉瀛樺湪锛侊紒");
         }
+        //鑾峰彇宸插惎鐢ㄧ殑鍔ㄦ�佹墿灞曞瓧
+        List<Fields> fields = fieldsMapper.selectList(new LambdaQueryWrapper<Fields>().eq(Fields::getFlagEnable, 1).eq(Fields::getStatus, 1));
+
         List<ReceiptDetlsDto> receipts = params.getReceipts();
         List<WarehouseAreasItem> allOrders =   new ArrayList<>();
         receipts.forEach(dto -> {
@@ -175,7 +187,36 @@
                     .setShipperId(matnr.getShipperId());
                     //TODO 渚涘簲鍟嗘爣璇嗘湭璁剧疆锛屾爣璇嗙敱PO鍗曚緵搴斿晢缂栫爜杞崲
 
+            if (!Objects.isNull(fields)) {
+                if (!Objects.isNull(dto.getExtendFields())) {
+                    //鑾峰彇16浣島uid
+                    String uuid16 = CommonUtil.randomUUID16();
+                    Map<String, Object> extendFields = dto.getExtendFields();
+                    //瀛楁闆嗗悎鐢虫槑
+                    List<FieldsItem> fieldsItems = new ArrayList<>();
+                    extendFields.keySet().forEach(key -> {
+                        fields.forEach(obj -> {
+                            //鍒ゆ柇key鍊间笌fields琛ㄥ瓧娈垫槸鍚︾浉鍚�
+                            if (obj.getFields().equals(key)) {
+                                FieldsItem fieldsItem = new FieldsItem();
+                                fieldsItem.setMatnrId(matnr.getId()).setFieldsId(obj.getId())
+                                        .setShiperId(matnr.getShipperId())
+                                        .setValue(extendFields.get(key).toString())
+                                        .setUuid(uuid16);
+
+                                fieldsItems.add(fieldsItem);
+                                //鍞竴鏍囪瘑鍏ュ簱
+                                item.setFieldsIndex(uuid16);
+                            }
+                        });
+                    });
+                    if (!fieldsItemService.saveBatch(fieldsItems)) {
+                        throw new CoolException("鎵╁睍瀛楁淇濆瓨澶辫触锛侊紒");
+                    }
+                }
+            }
             allOrders.add(item);
+
         });
 
         if (!warehouseAreasItemService.saveBatch(allOrders)) {
@@ -196,7 +237,7 @@
         if (Objects.isNull(params.getAsnCode())) {
             throw new CoolException("閫氱煡鍗曚笉鑳戒负绌猴紒锛�");
         }
-        AsnOrderItem asnOrderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>()
+        List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>()
                 .eq(AsnOrderItem::getAsnCode, params.getAsnCode())
                 .eq(!Objects.isNull(params.getBarcode()) ,AsnOrderItem::getBarcode, params.getBarcode()));
 
@@ -232,49 +273,67 @@
     }
 
     /**
-     * 鑾峰彇ReceiptDetlsDto
+     * @author Ryan
+     * @description 鑾峰彇鎵�鏈夊惎鐢ㄥ姩鎬佸瓧娈�
+     * @param
+     * @return
+     * @time 2025/3/12 09:23
      */
-    private R getAsnOrderItem(AsnOrderItem asnOrderItem) {
-        ReceiptDetlsDto detlsDto = new ReceiptDetlsDto();
+    @Override
+    public List<Fields> getDynamicFields() {
+        return fieldsMapper.selectList(new LambdaQueryWrapper<Fields>().eq(Fields::getFlagEnable, 1).eq(Fields::getStatus, 1));
+    }
 
-        detlsDto.setAsnCode(asnOrderItem.getAsnCode())
-                .setMatnk(asnOrderItem.getMatnk())
-                .setBarcode(asnOrderItem.getBarcode())
-                .setPoCode(asnOrderItem.getPoCode())
-                .setPurQty(asnOrderItem.getAnfme())
-                .setSplrBatch(asnOrderItem.getSplrBatch());
+    /**
+     * 鑾峰彇ReceiptDetlsDtos
+     */
+    private R getAsnOrderItem(List<AsnOrderItem> items) {
+        List<ReceiptDetlsDto> detlsDtos = new ArrayList<>();
+        items.forEach(asnOrderItem -> {
+            ReceiptDetlsDto detlsDto = new ReceiptDetlsDto();
 
-        Matnr matnr = matnrMapper.selectById(asnOrderItem.getMatnrId());
-        if (Objects.isNull(matnr)) {
-            throw new CoolException("鏁版嵁閿欒锛氬綋鍓嶇墿鏂欎笉瀛樺湪锛侊紒");
-        }
-        //SET 鐗╂枡鏈�澶у瓨鏀炬暟閲�
-        detlsDto.setMaxQty(matnr.getMaxQty())
-                .setMatnrId(matnr.getId())
-                .setStockUnit(matnr.getStockUnit());
-        QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>()
-                .eq(QlyInspect::getAsnItemId, asnOrderItem.getId()).eq(QlyInspect::getPoItemId, asnOrderItem.getPoDetlId()));
-        if (!Objects.isNull(inspect)) {
-            //set 璐ㄦ缁撴灉
-            detlsDto.setInspect(inspect.getStatus$());
-        }
-        //鑾峰彇褰撳墠搴撳瓨淇℃伅
-        StockItem stockItem = stockItemMapper.selectOne(new LambdaQueryWrapper<StockItem>()
-                .eq(StockItem::getAsnItemId, asnOrderItem.getId())
-                .eq(StockItem::getMatnrId, asnOrderItem.getMatnrId()));
-        //SET 褰撳墠搴撳瓨鏁伴噺
-        if (Objects.isNull(stockItem)) {
-            detlsDto.setStockQty(0.0);
-        } else {
-            detlsDto.setStockQty(stockItem.getQty() + stockItem.getWorkQty());
-        }
+            detlsDto.setAsnCode(asnOrderItem.getAsnCode())
+                    .setMatnk(asnOrderItem.getMatnk())
+                    .setBarcode(asnOrderItem.getBarcode())
+                    .setPoCode(asnOrderItem.getPoCode())
+                    .setPurQty(asnOrderItem.getAnfme())
+                    .setSplrBatch(asnOrderItem.getSplrBatch());
 
-        //鑾峰彇閲囪喘鍗曟槑缁嗕俊鎭�
-        PurchaseItem purchaseItem = purchaseItemMapper.selectOne(new LambdaQueryWrapper<PurchaseItem>().eq(PurchaseItem::getId, asnOrderItem.getPoDetlId()));
-        //SET 骞冲彴琛屽彿
-        detlsDto.setPlatformId(purchaseItem.getPlatItemId());
+            Matnr matnr = matnrMapper.selectById(asnOrderItem.getMatnrId());
+            if (Objects.isNull(matnr)) {
+                throw new CoolException("鏁版嵁閿欒锛氬綋鍓嶇墿鏂欎笉瀛樺湪锛侊紒");
+            }
+            //SET 鐗╂枡鏈�澶у瓨鏀炬暟閲�
+            detlsDto.setMaxQty(matnr.getMaxQty())
+                    .setMatnrId(matnr.getId())
+                    .setStockUnit(matnr.getStockUnit());
+            QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>()
+                    .eq(QlyInspect::getAsnItemId, asnOrderItem.getId()).eq(QlyInspect::getPoItemId, asnOrderItem.getPoDetlId()));
+            if (!Objects.isNull(inspect)) {
+                //set 璐ㄦ缁撴灉
+                detlsDto.setInspect(inspect.getStatus$());
+            }
+            //鑾峰彇褰撳墠搴撳瓨淇℃伅
+            StockItem stockItem = stockItemMapper.selectOne(new LambdaQueryWrapper<StockItem>()
+                    .eq(StockItem::getAsnItemId, asnOrderItem.getId())
+                    .eq(StockItem::getMatnrId, asnOrderItem.getMatnrId()));
+            //SET 褰撳墠搴撳瓨鏁伴噺
+            if (Objects.isNull(stockItem)) {
+                detlsDto.setStockQty(0.0);
+            } else {
+                detlsDto.setStockQty(stockItem.getQty() + stockItem.getWorkQty());
+            }
 
-        return R.ok(detlsDto);
+            //鑾峰彇閲囪喘鍗曟槑缁嗕俊鎭�
+            PurchaseItem purchaseItem = purchaseItemMapper.selectOne(new LambdaQueryWrapper<PurchaseItem>().eq(PurchaseItem::getId, asnOrderItem.getPoDetlId()));
+            //SET 骞冲彴琛屽彿
+            detlsDto.setPlatformId(purchaseItem.getPlatItemId());
+
+            detlsDtos.add(detlsDto);
+        });
+
+
+        return R.ok(detlsDtos);
     }
 
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java
index 7fc4da5..addfeef 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java
@@ -22,9 +22,9 @@
 //        generator.username="sa";
 //        generator.password="Zoneyung@zy56$";
 
-        generator.table="sys_fields_item";
-        generator.tableDesc="鎵╁睍瀛楁鏄庣粏琛�";
-        generator.packagePath="com.vincent.rsf.server.system";
+        generator.table="man_qly_inspect";
+        generator.tableDesc="璐ㄦ淇℃伅";
+        generator.packagePath="com.vincent.rsf.server.manager";
 
         generator.build();
     }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/FieldsUtils.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/FieldsUtils.java
new file mode 100644
index 0000000..c9f0206
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/FieldsUtils.java
@@ -0,0 +1,58 @@
+package com.vincent.rsf.server.common.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.vincent.rsf.framework.common.SpringUtils;
+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.context.annotation.Configuration;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title FieldsUtils
+ * @description
+ * @create 2025/3/12 12:33
+ */
+
+public class FieldsUtils {
+
+    /**
+     * @author Ryan
+     * @description 閫氳繃瀛楁鍞竴鏍囪瘑鑾峰彇鍔ㄦ�佸瓧娈礛ap
+     * @param
+     * @return
+     * @time 2025/3/12 12:50
+     */
+    public static Map<String, String> getFields(String uuid) {
+        Map<String, String> fieldsMap = new HashMap<>();
+        FieldsService fieldsService = SpringUtils.getBean(FieldsService.class);
+        List<Fields> fields = fieldsService.list(new LambdaQueryWrapper<Fields>().eq(Fields::getFlagEnable, 1).eq(Fields::getStatus, 1));
+        if (fields.isEmpty()) {
+            return null;
+        }
+        FieldsItemService fieldsItemService = SpringUtils.getBean(FieldsItemService.class);
+        List<FieldsItem> fieldsItems = fieldsItemService.list(new LambdaQueryWrapper<FieldsItem>().eq(FieldsItem::getUuid, uuid));
+        for (Fields field : fields ) {
+            if (fieldsItems.isEmpty()) {
+                fieldsMap.put(field.getFields(), null);
+                continue;
+            }
+            fieldsItems.forEach(fieldsItem -> {
+                if (fieldsItem.getFieldsId().equals(field.getId())) {
+                    fieldsMap.put(field.getFields(), fieldsItem.getValue());
+                }
+            });
+        }
+
+        return  fieldsMap;
+    }
+
+}
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 02f32e6..8e070ac 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
@@ -60,9 +60,7 @@
     @ApiOperation("淇濆瓨")
     public R save(@RequestBody AsnOrder asnOrder) {
         asnOrder.setCreateBy(getLoginUserId());
-        asnOrder.setCreateTime(new Date());
         asnOrder.setUpdateBy(getLoginUserId());
-        asnOrder.setUpdateTime(new Date());
         if (!asnOrderService.save(asnOrder)) {
             return R.error("Save Fail");
         }
@@ -133,5 +131,11 @@
         }
     }
 
+    @PostMapping("/asnOrder")
+    @ApiOperation("ASN瀵煎叆鎺ュ彛")
+    @PreAuthorize("hasAuthority('manager:asnOrder:update')")
+    public R importExcel() {
 
+        return R.ok();
+    }
 }
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 118c505..a4a54c6 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
@@ -56,9 +56,8 @@
     @PostMapping("/asnOrderItem/save")
     public R save(@RequestBody AsnOrderItem asnOrderItem) {
         asnOrderItem.setCreateBy(getLoginUserId());
-        asnOrderItem.setCreateTime(new Date());
         asnOrderItem.setUpdateBy(getLoginUserId());
-        asnOrderItem.setUpdateTime(new Date());
+//        asnOrderItemService.getFieldsExtend
         if (!asnOrderItemService.save(asnOrderItem)) {
             return R.error("Save Fail");
         }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java
index 3b4fc39..29842a3 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java
@@ -137,13 +137,11 @@
     @PreAuthorize("hasAuthority('manager:matnr:save')")
     @ApiOperation(value = "excel琛ㄦ牸瀵煎叆鐗╂枡淇℃伅")
     @PostMapping("/matnr/import")
-    public R listImport(@RequestParam MultipartFile file) throws Exception {
+    public R listImport(MultipartFile file) throws Exception {
         if (Objects.isNull(file)) {
             throw new CoolException("鏂囦欢涓嶈兘涓虹┖锛侊紒");
         }
-        matnrService.importExcels(file);
-
-        return R.ok();
+       return matnrService.importExcels(file);
     }
 
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java
index f2e71f2..7bd0a7c 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java
@@ -12,6 +12,7 @@
 import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
 import com.vincent.rsf.server.manager.service.WarehouseAreasItemService;
 import com.vincent.rsf.server.system.controller.BaseController;
+import io.swagger.annotations.Api;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -19,6 +20,7 @@
 import javax.servlet.http.HttpServletResponse;
 import java.util.*;
 
+@Api(tags = "搴撳尯搴撳瓨鏄庣粏")
 @RestController
 public class WarehouseAreasItemController extends BaseController {
 
@@ -36,10 +38,11 @@
     @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')")
     @PostMapping("/warehouseAreasItem/list")
     public R list(@RequestBody Map<String, Object> map) {
-        return R.ok().add(warehouseAreasItemService.list());
+        return R.ok(warehouseAreasItemService.getList());
+//        return R.ok().add(warehouseAreasItemService.list());
     }
 
-    @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')")
+    @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list'   )")
     @PostMapping({"/warehouseAreasItem/many/{ids}", "/warehouseAreasItems/many/{ids}"})
     public R many(@PathVariable Long[] ids) {
         return R.ok().add(warehouseAreasItemService.listByIds(Arrays.asList(ids)));
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 226114d..f1e98da 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
@@ -6,14 +6,10 @@
 
 import lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import com.vincent.rsf.framework.common.Cools;
@@ -21,7 +17,6 @@
 import com.vincent.rsf.server.system.service.UserService;
 import com.vincent.rsf.server.system.entity.User;
 import java.io.Serializable;
-import java.util.Date;
 
 @Data
 @Accessors(chain = true)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Matnr.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Matnr.java
index b4af411..d127f14 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Matnr.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Matnr.java
@@ -9,6 +9,7 @@
 import com.vincent.rsf.server.manager.service.CompanysService;
 import com.vincent.rsf.server.manager.service.MatnrGroupService;
 import com.vincent.rsf.server.manager.service.ShipperService;
+import lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -27,6 +28,7 @@
 
 @Data
 @TableName("man_matnr")
+@Accessors(chain = true)
 @ApiModel(value = "Matnr", description = "鐗╂枡鎵�鏈夊熀纭�灞炴��")
 public class Matnr implements Serializable {
 
@@ -67,6 +69,12 @@
     private Long groupId;
 
     /**
+     * 鍒嗙粍鍔╄鐮�
+     */
+    @ApiModelProperty(value = "鍒嗙粍鍔╄鐮�")
+    private String groupCode;
+
+    /**
      * 瑙勫垯浠g爜
      */
     @ApiModelProperty(value= "瑙勫垯浠g爜")
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java
index 01005f3..d0b12a5 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java
@@ -1,6 +1,7 @@
 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;
 
@@ -10,10 +11,7 @@
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -23,9 +21,11 @@
 import com.vincent.rsf.server.system.entity.User;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.Map;
 
 @Data
 @Accessors(chain = true)
+@ApiModel(value = "WarehouseAreasItem", description = "搴撳尯搴撳瓨淇℃伅")
 @TableName("man_warehouse_areas_item")
 public class WarehouseAreasItem implements Serializable {
 
@@ -55,6 +55,9 @@
      */
     @ApiModelProperty(value= "鐗╂枡鏍囪瘑")
     private Long matnrId;
+
+    @ApiModelProperty(value = "鎵╁睍瀛楁鍞竴鏍囪瘑")
+    private String fieldsIndex;
 
     /**
      * 鐗╂枡鍚嶇О
@@ -179,6 +182,10 @@
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
 
+    @ApiModelProperty("鎵╁睍瀛楁")
+    @TableField(exist = false)
+    private Map<String, String> extendFields;
+
     /**
      * 澶囨敞
      */
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java
index 7ecf8b2..8ea3665 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java
@@ -30,9 +30,9 @@
     @ExcelComment(example = "鍗庝负鎵嬫満")
     private String name;
 
-    @Excel(name = "璐т富缂栫爜")
-    @ExcelComment(example = "PO12625")
-    private String shipperCode;
+    @Excel(name = "鍒嗙被鍔╄鐮�")
+    @ExcelComment(example = "256874556")
+    private String groupCode;
 
     @Excel(name = "鍒嗙被鍚嶇О")
     @ExcelComment(example = "绉诲姩璁惧")
@@ -79,7 +79,7 @@
     private String purUnit;
 
     @Excel(name = "ABC绫�")
-    @ExcelComment(notNull = false, example = "A")
+    @ExcelComment(notNull = false, example = "0")
     private String stockLevel;
 
     @Excel(name = "瀹夊叏搴撳瓨閲�")
@@ -107,11 +107,11 @@
     private String barcode;
 
     @Excel(name = "鏁堟湡棰勮闃堝��")
-    @ExcelComment(notNull = false, example = "2025-01-25 14:25:36")
+    @ExcelComment(notNull = false, example = "90")
     private String validWarn;
 
     @Excel(name = "鏄惁鍏嶆")
-    @ExcelComment(notNull = false, example = "鍚�")
+    @ExcelComment(notNull = false, example = "0")
     private String flagCheck;
 
     private Integer rowNum;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
index cf99f59..bf9ce37 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
@@ -92,7 +92,6 @@
                 throw new CoolException("ASN鍗曟嵁淇濆瓨澶辫触锛侊紒");
             }
             List<AsnOrderItem> orderItems = new ArrayList<>();
-            String uuid16 = CommonUtil.randomUUID16();
             items.forEach(item -> {
                 AsnOrderItem orderItem = new AsnOrderItem();
                 Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getCode, item.getMatnrCode()));
@@ -115,12 +114,6 @@
                         .setPurUnit(item.getUnit())
                         .setMatnk(matnr.getName())
                         .setMatnrId(matnr.getId() + "");
-                //鍒ゆ柇PO鍗曟槸鍚﹀凡璁剧疆鍔ㄦ�佸瓧娈电储寮�
-                if (Objects.isNull(item.getFieldsIndex())) {
-                    orderItem.setFieldsIndex(uuid16);
-                } else {
-                    orderItem.setFieldsIndex(item.getFieldsIndex());
-                }
                 orderItems.add(orderItem);
             });
             if (!asnOrderItemService.saveBatch(orderItems)) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/MatnrService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/MatnrService.java
index d17885a..435af53 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/MatnrService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/MatnrService.java
@@ -1,12 +1,11 @@
 package com.vincent.rsf.server.manager.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.server.manager.entity.Matnr;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.IOException;
-
 public interface MatnrService extends IService<Matnr> {
 
-    void importExcels(MultipartFile file) throws Exception;
+    R importExcels(MultipartFile file) throws Exception;
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
index 594363f..3018867 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
@@ -3,6 +3,10 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
 
+import java.util.List;
+import java.util.Map;
+
 public interface WarehouseAreasItemService extends IService<WarehouseAreasItem> {
 
+    List<WarehouseAreasItem> getList();
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/MatnrServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/MatnrServiceImpl.java
index 8ffcc4f..ccfd8ca 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/MatnrServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/MatnrServiceImpl.java
@@ -2,33 +2,81 @@
 
 import cn.afterturn.easypoi.excel.ExcelImportUtil;
 import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
+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.ExcelUtil;
+import com.vincent.rsf.server.manager.entity.MatnrGroup;
 import com.vincent.rsf.server.manager.entity.excel.MatnrsTemplate;
 import com.vincent.rsf.server.manager.mapper.MatnrMapper;
 import com.vincent.rsf.server.manager.entity.Matnr;
+import com.vincent.rsf.server.manager.service.MatnrGroupService;
 import com.vincent.rsf.server.manager.service.MatnrService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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 java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
 
 @Service("matnrService")
 public class MatnrServiceImpl extends ServiceImpl<MatnrMapper, Matnr> implements MatnrService {
 
+    @Autowired
+    private MatnrGroupService matnrGroupService;
+
     /**
+     * @return
+     * @throws
      * @author Ryan
      * @description 鐗╂枡鏁版嵁瀵煎叆鎺ュ鐞嗗疄鐜�
-     * @throws
-     * @return
      * @time 2025/3/3 13:08
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void importExcels(MultipartFile file) throws Exception {
+    public R importExcels(MultipartFile file) throws Exception {
         //璇诲彇涓婁紶鏂囦欢鍐呭
         ExcelImportResult<MatnrsTemplate> result = ExcelImportUtil.importExcelMore(file.getInputStream(), MatnrsTemplate.class, ExcelUtil.getDefaultImportParams());
-        //TODO 鐗╂枡鍐欏叆澶勭悊
+        if (result.getList().isEmpty()) {
+            throw new CoolException("鐗╂枡瀵煎叆澶辫触锛侊紒");
+        }
+        List<Matnr> matnrs = new ArrayList<>();
+        result.getList().forEach(template -> {
+            Matnr matnr = new Matnr();
+            matnr.setBarcode(template.getBarcode())
+                    .setCode(template.getErpCode())
+                    .setDescrible(template.getDescrible())
+                    .setColor(template.getColor())
+                    .setFlagCheck(Short.parseShort(template.getFlagCheck()))
+                    .setWeight(Double.parseDouble(template.getWeight()))
+                    .setValidWarn(Integer.parseInt(template.getValidWarn()))
+                    .setValid(Integer.parseInt(template.getValid()))
+                    .setUnit(template.getUnit())
+                    .setStockUnit(template.getPurUnit())
+                    .setSpec(template.getSpec())
+                    .setStagn(Integer.parseInt(template.getStagn()))
+                    .setModel(template.getModel())
+                    .setGroupCode(template.getGroupCode())
+                    .setPurUnit(template.getPurUnit())
+                    .setStockLevel(Short.parseShort(template.getStockLevel()))
+                    .setSafeQty(Double.parseDouble(template.getSafeQty()))
+                    .setMinQty(Double.parseDouble(template.getMinQty()));
+            if (Objects.isNull(template.getGroupCode()) && Objects.isNull(template.getGroupName())) {
+                MatnrGroup matnrGroups = matnrGroupService.getOne(new LambdaQueryWrapper<MatnrGroup>()
+                        .eq(!Objects.isNull(template.getGroupCode()), MatnrGroup::getCode, template.getGroupCode())
+                        .eq(!Objects.isNull(template.getGroupName()),MatnrGroup::getName, template.getName()));
+                matnr.setGroupId(matnrGroups.getId());
+            }
+
+            matnrs.add(matnr);
+        });
+
+        if (!this.saveBatch(matnrs)) {
+            throw new CoolException("瀵煎叆澶辫触锛侊紒");
+        }
+        return R.ok("瀵煎叆鎴愬姛锛侊紒");
     }
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java
index 430cd8e..bc7d6c3 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java
@@ -1,12 +1,27 @@
 package com.vincent.rsf.server.manager.service.impl;
 
+import com.vincent.rsf.server.common.utils.FieldsUtils;
 import com.vincent.rsf.server.manager.mapper.WarehouseAreasItemMapper;
 import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
 import com.vincent.rsf.server.manager.service.WarehouseAreasItemService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Objects;
+
 @Service("warehouseAreasItemService")
 public class WarehouseAreasItemServiceImpl extends ServiceImpl<WarehouseAreasItemMapper, WarehouseAreasItem> implements WarehouseAreasItemService {
 
+    @Override
+    public List<WarehouseAreasItem> getList() {
+        List<WarehouseAreasItem> areasItems = this.list();
+        for (WarehouseAreasItem areasItem : areasItems) {
+            if (Objects.isNull(areasItem.getFieldsIndex())) {
+                continue;
+            }
+            areasItem.setExtendFields(FieldsUtils.getFields(areasItem.getFieldsIndex()));
+        }
+        return areasItems;
+    }
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/entity/Fields.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/entity/Fields.java
index b0c0f07..3b1d374 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/entity/Fields.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/entity/Fields.java
@@ -21,6 +21,7 @@
 
 @Data
 @TableName("sys_fields")
+@ApiModel(value = "Fields", description = "鍔ㄦ�佸瓧娈�")
 public class Fields implements Serializable {
 
     private static final long serialVersionUID = 1L;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/entity/FieldsItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/entity/FieldsItem.java
index 4f0d218..eedc181 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/entity/FieldsItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/entity/FieldsItem.java
@@ -3,6 +3,8 @@
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+
+import lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -22,6 +24,7 @@
 import java.util.Date;
 
 @Data
+@Accessors(chain = true)
 @TableName("sys_fields_item")
 public class FieldsItem implements Serializable {
 

--
Gitblit v1.9.1