From b011b1368c2f8813ef2684a4a63914e6e59b5e15 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期四, 05 六月 2025 17:06:51 +0800
Subject: [PATCH] DO单优化 出库单优化

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java     |   12 ++
 rsf-admin/src/page/orders/outStock/OutOrderModal.jsx                                              |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java    |    5 +
 rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/POExceStatus.java                   |    2 
 rsf-admin/src/page/orders/outStock/OutOrderList.jsx                                               |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/OutStockTemplate.java        |  195 ++++++++++++++++++++++++++++++++++++++++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockItemServiceImpl.java |   11 +-
 7 files changed, 219 insertions(+), 10 deletions(-)

diff --git a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
index 979c23f..363ee0b 100644
--- a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
@@ -142,7 +142,7 @@
             <CreateByOrderButton setCreateDialog={setCreateDialog} />
             <MyCreateButton onClick={() => { setManualDialog(true); setmodalType(0) }} />
             <SelectColumnsButton preferenceKey='outStock' />
-            <ImportButton value={'asnOrderItem'} />
+            <ImportButton value={'outStock'} />
             {/* <MyExportButton /> */}
           </TopToolbar>
         )}
diff --git a/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx b/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx
index c3b530c..9adfabe 100644
--- a/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx
@@ -269,6 +269,7 @@
     const { setOpen } = props;
     const { selectedIds, onUnselectItems } = useListContext();
     const notify = useNotify();
+    const refresh = useRefresh();
     const confirm = async (event) => {
         const res = await request.post(`/outStock/generate/orders`, { ids: selectedIds });
         if (res?.data?.code === 200) {
@@ -276,6 +277,7 @@
         } else {
             notify(res.data.msg);
         }
+        refresh();
         onUnselectItems();
         setOpen(false);
     }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java
index eb7d9a1..d64be92 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.common.R;
@@ -47,7 +48,9 @@
     public R page(@RequestBody Map<String, Object> map) {
         BaseParam baseParam = buildParam(map, BaseParam.class);
         PageParam<DeliveryItem, BaseParam> pageParam = new PageParam<>(baseParam, DeliveryItem.class);
-        return R.ok().add(deliveryItemService.page(pageParam, pageParam.buildWrapper(true)));
+        QueryWrapper<DeliveryItem> wrapper = pageParam.buildWrapper(true);
+        wrapper.apply("anfme > work_qty + qty ");
+        return R.ok().add(deliveryItemService.page(pageParam, wrapper));
     }
 
     @PreAuthorize("hasAuthority('manager:deliveryItem:list')")
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/OutStockTemplate.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/OutStockTemplate.java
new file mode 100644
index 0000000..8a67839
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/OutStockTemplate.java
@@ -0,0 +1,195 @@
+package com.vincent.rsf.server.manager.entity.excel;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelAutoColumnSize;
+import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelComment;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title AsnOrderTemplate
+ * @description
+ * @create 2025/3/12 13:49
+ */
+@Data
+@ExcelAutoColumnSize
+@Accessors(chain = true)
+public class OutStockTemplate {
+
+    /**
+     * 缂栧彿
+     */
+    @Excel(name = "*鍑哄簱鍗曞彿")
+    @ApiModelProperty(value = "*鍑哄簱鍗曞彿")
+    @ExcelComment(value = "code", example = "OS5945272236")
+    private String code;
+
+    /**
+     * PO鍗曞彿
+     */
+    @Excel(name = "DO鍗曞彿")
+    @ApiModelProperty(value = "DO鍗曞彿")
+    @ExcelComment(value = "poCode", example = "DO59755695")
+    private String poCode;
+
+//    /**
+//     * PO鍗曟嵁鏍囪瘑
+//     */
+//    @Excel(name = "PO鍗曟嵁鏍囪瘑")
+//    @ApiModelProperty(value= "PO鍗曟嵁鏍囪瘑")
+//    @ExcelComment(value = "poId", example = "123456698")
+//    private String poId;
+
+    @Excel(name = "琛屽彿")
+    @ApiModelProperty("琛屽彿")
+    @ExcelComment(value = "platItemId", example = "1357564255478")
+    private String platItemId;
+
+    @Excel(name = "瀹㈡埛璁㈠崟鍙�")
+    @ApiModelProperty("瀹㈡埛璁㈠崟鍙�")
+    @ExcelComment(value = "platOrderCode", example = "PT202564713301")
+    private String platOrderCode;
+
+    @Excel(name = "宸ュ崟鍙�")
+    @ApiModelProperty("宸ュ崟鍙�")
+    @ExcelComment(value = "platWorkCode", example = "PWC2354894211")
+    private String platWorkCode;
+
+    @Excel(name = "椤圭洰鍙�")
+    @ApiModelProperty("椤圭洰鍙�")
+    @ExcelComment(value = "projectCode", example = "PC2365845636001")
+    private String projectCode;
+
+    /**
+     * 鍗曟嵁绫诲瀷
+     */
+    @Excel(name = "*鍗曟嵁绫诲瀷")
+    @ApiModelProperty(value = "*鍗曟嵁绫诲瀷")
+    @ExcelComment(value = "type", example = "鍏ュ簱鍗�")
+    private String type;
+
+    /**
+     * 涓氬姟绫诲瀷
+     */
+    @Excel(name = "*涓氬姟绫诲瀷")
+    @ApiModelProperty(value = "*涓氬姟绫诲瀷")
+    @ExcelComment(value = "wkType", example = "閲囪喘鍏ュ簱鍗�")
+    private String wkType;
+
+
+//    @Excel(name = "鎵ц鐘舵��")
+//    @ApiModelProperty(value= "鎵ц鐘舵��")
+//    @ExcelComment(value = "exceStatus", example = "0")
+//    private String exceStatus;
+
+
+    @Excel(name = "*鐗╂枡缂栫爜")
+    @ApiModelProperty("*鐗╂枡缂栫爜")
+    @ExcelComment(value = "matnrCode", example = "102010101545")
+    private String matnrCode;
+
+
+    @Excel(name = "鐗╂枡鍚嶇О")
+    @ApiModelProperty("鐗╂枡鍚嶇О")
+    @ExcelComment(value = "maktx", example = "澶╃憺019-澶鍨嬫敮鏋�-55椋炴満杞粦鑹诧紝涓夎杞洊鍠锋紗閾惰壊 锛堝甫鏀讳笣閽夛級鍙�")
+    private String maktx;
+
+
+    //    @Excel(name = "鐗╂枡瑙勬牸")
+//    @ApiModelProperty("鐗╂枡瑙勬牸")
+//    @ExcelComment(value = "maktx",example = "2*3*6")
+//    private String spec;
+//
+//
+//    @Excel(name = "鐗╂枡鍨嬪彿")
+//    @ApiModelProperty("鐗╂枡鍨嬪彿")
+//    @ExcelComment(value = "maktx",example = "abc")
+//    private String model;
+    @Excel(name = "渚涘簲鍟嗙紪鐮�")
+    @ApiModelProperty("渚涘簲鍟嗙紪鐮�")
+    @ExcelComment(value = "splrCode", example = "685947")
+    private String splrCode;
+
+    @Excel(name = "渚涘簲鍟嗗悕绉�")
+    @ApiModelProperty("渚涘簲鍟嗗悕绉�")
+    @ExcelComment(value = "splrName", example = "娴欐睙涓壃绔嬪簱鎶�鏈湁闄愬叕鍙�")
+    private String splrName;
+
+
+//    @Excel(name = "搴撳瓨鍗曚綅")
+//    @ApiModelProperty("搴撳瓨鍗曚綅")
+//    @ExcelComment(value = "stockUnit", example = "涓�")
+//    private String stockUnit;
+
+//    @Excel(name = "閲囪喘鏁伴噺")
+//    @ApiModelProperty("閲囪喘鏁伴噺")
+//    @ExcelComment(value = "purQty", example = "0")
+//    private String purQty;
+//
+//    @Excel(name = "閲囪喘鍗曚綅")
+//    @ApiModelProperty("閲囪喘鍗曚綅")
+//    @ExcelComment(value = "purUnit", example = "涓�")
+//    private String purUnit;
+
+//    @Excel(name = "宸插畬鎴愭暟閲�")
+//    @ApiModelProperty("宸插畬鎴愭暟閲�")
+//    @ExcelComment(value = "qty", example = "0")
+//    private String qty;
+
+
+    @Excel(name = "渚涘簲鍟嗘壒娆�")
+    @ApiModelProperty("渚涘簲鍟嗘壒娆�")
+    @ExcelComment(value = "splrBatch", example = "25251212")
+    private String splrBatch;
+
+    @Excel(name = "*鏁伴噺")
+    @ApiModelProperty("*鏁伴噺")
+    @ExcelComment(value = "anfme", example = "75")
+    private String anfme;
+
+
+//    @Excel(name = "浜岀淮鐮�")
+//    @ApiModelProperty("浜岀淮鐮�")
+//    @ExcelComment(value = "qrcode",example = "")
+//    private String qrcode;
+
+    //    @Excel(name = "鏉″舰鐮�")
+//    @ApiModelProperty("鏉″舰鐮�")
+//    @ExcelComment(value = "barcode", example = "")
+//    private String barcode;
+//
+//    @Excel(name = "璺熻釜鐮�")
+//    @ApiModelProperty("璺熻釜鐮�")
+//    @ExcelComment(value = "trackCode", example = "")
+//    private String trackCode;
+    @Excel(name = "鐗╂祦鍗曞彿")
+    @ApiModelProperty("鐗╂祦鍗曞彿")
+    @ExcelComment(value = "logicNo", example = "SF100064851")
+    private String logicNo;
+
+
+    @Excel(name = "璐ㄦ鐘舵��")
+    @ApiModelProperty("璐ㄦ鐘舵��")
+    @ExcelComment(value = "isptResult", example = "鍚堟牸")
+    private String isptResult;
+
+
+    @Excel(name = "棰勮閫佽揪鏃堕棿")
+    @ApiModelProperty("棰勮閫佽揪鏃堕棿")
+    @ExcelComment(value = "arrTime", example = "2025-05-21")
+    private String arrTime;
+
+//    @Excel(name = "鍖呰鍚嶇О")
+//    @ApiModelProperty("鍖呰鍚嶇О")
+//    @ExcelComment(value = "packName", example = "绠�")
+//    private String packName;
+
+    @Excel(name = "澶囨敞")
+    @ApiModelProperty("澶囨敞")
+    @ExcelComment(value = "memo", example = "娉細鏄撶鍝侊紝杞绘嬁鏀�")
+    private String memo;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/POExceStatus.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/POExceStatus.java
index 318da31..5cb4d98 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/POExceStatus.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/POExceStatus.java
@@ -4,7 +4,7 @@
 public enum POExceStatus {
     PO_EXCE_STATUS_UN_EXCE("0", "鏈墽琛�"),
     PO_EXCE_STATUS_EXCE_ING("1", "鎵ц涓�"),
-    PO_EXCE_STATUS_SECTION_DONE("3", "閮ㄥ垎瀹屾垚"),
+    PO_EXCE_STATUS_SECTION_DONE("2", "閮ㄥ垎瀹屾垚"),
     PO_EXCE_STATUS_ALL_DONE("3", "宸插畬鎴�"),
     ;
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockItemServiceImpl.java
index 963e330..e7707b9 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockItemServiceImpl.java
@@ -10,6 +10,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.manager.entity.excel.OutStockTemplate;
 import com.vincent.rsf.server.manager.enums.OrderType;
 import com.vincent.rsf.server.manager.enums.OrderWorkType;
 import com.vincent.rsf.server.common.domain.BaseParam;
@@ -98,17 +99,17 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public R excelImport(MultipartFile file, HashMap<String, Object> hashMap, Long loginUserId) throws Exception {
-        ExcelImportResult result = ExcelImportUtil.importExcelMore(file.getInputStream(), AsnOrderTemplate.class, ExcelUtil.getDefaultImportParams());
+        ExcelImportResult result = ExcelImportUtil.importExcelMore(file.getInputStream(), OutStockTemplate.class, ExcelUtil.getDefaultImportParams());
         if (result.getList().isEmpty()) {
             throw new CoolException("鐗╂枡瀵煎叆澶辫触锛侊紒");
         }
         if (result.getList().isEmpty()) {
             throw new CoolException("琛ㄦ牸鍐呭涓嶈兘涓虹┖锛侊紒");
         }
-        List<AsnOrderTemplate> resultList = result.getList();
-        Map<String, List<AsnOrderTemplate>> listMap = resultList.stream().collect(Collectors.groupingBy(AsnOrderTemplate::getCode));
+        List<OutStockTemplate> resultList = result.getList();
+        Map<String, List<OutStockTemplate>> listMap = resultList.stream().collect(Collectors.groupingBy(OutStockTemplate::getCode));
         for (String key : listMap.keySet()) {
-            AsnOrderTemplate template = listMap.get(key).stream().findFirst().get();
+            OutStockTemplate template = listMap.get(key).stream().findFirst().get();
             AsnOrder asnOrder = outStockService.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, template.getCode()));
             if (Objects.isNull(asnOrder)) {
                 continue;
@@ -125,7 +126,7 @@
                 throw new CoolException("鍗曟嵁淇濆瓨澶辫触锛侊紒");
             }
             List<AsnOrderItem> items = new ArrayList<>();
-            for (AsnOrderTemplate orderTemplate : listMap.get(key)) {
+            for (OutStockTemplate orderTemplate : listMap.get(key)) {
                 AsnOrderItem orderItem = new AsnOrderItem();
                 Matnr matnr = null;
                 if (!Objects.isNull(orderTemplate.getMatnrCode()) || StringUtils.isNotBlank(orderTemplate.getMatnrCode())) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
index 70e07a5..ee49baf 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -193,12 +193,15 @@
             List<AsnOrderItem> orderItems = new ArrayList<>();
             listMap.get(key).forEach(item -> {
                 AsnOrderItem orderItem = new AsnOrderItem();
+                Double anfme = Math.round((item.getAnfme() - item.getWorkQty() - item.getQty()) * 10000) / 10000.0;
                 BeanUtils.copyProperties(item, orderItem);
                 orderItem.setId(null)
                         .setPoCode(order.getPoCode())
                         .setMaktx(item.getMaktx())
                         .setMatnrCode(item.getMatnrCode())
                         .setFieldsIndex(item.getFieldsIndex())
+                        .setAnfme(anfme)
+                        .setWorkQty(0.0)
                         .setAsnId(order.getId())
                         .setAsnCode(order.getCode())
                         .setStockUnit(item.getUnit())
@@ -221,7 +224,7 @@
 
             Double sum = orderItems.stream().mapToDouble(AsnOrderItem::getAnfme).sum();
             //淇敼璁″垝鏁伴噺
-            order.setAnfme(sum);
+            order.setAnfme(sum).setWorkQty(0.0);
             if (!this.saveOrUpdate(order)) {
                 throw new CoolException("涓诲崟鏁伴噺淇敼澶辫触锛侊紒");
             }
@@ -229,8 +232,13 @@
                 throw new CoolException("鏄庣粏淇濆瓨澶辫触锛侊紒");
             }
 
+            Short exceStatus = POExceStatus.PO_EXCE_STATUS_SECTION_DONE.val;
+            if (delivery.getAnfme().compareTo(order.getAnfme()) <= 0) {
+                exceStatus = AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val;
+            }
+
             if (!deliveryService.update(new LambdaUpdateWrapper<Delivery>()
-                    .set(Delivery::getExceStatus, POExceStatus.PO_EXCE_STATUS_EXCE_ING.val)
+                    .set(Delivery::getExceStatus, exceStatus)
                     .set(Delivery::getWorkQty, sum)
                     .eq(Delivery::getId, key))) {
                 throw new CoolException("涓诲崟淇敼澶辫触锛侊紒");

--
Gitblit v1.9.1