From 63250869b7059e1ffc108a16eaffc557f8a44689 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期一, 28 七月 2025 09:30:14 +0800
Subject: [PATCH] 调拔单功能优化

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java     |   66 +++++++++++----
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferItemService.java          |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TransferType.java                   |    1 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferItemServiceImpl.java |   61 +++++++++++++++
 rsf-admin/src/page/orders/transfer/ManualCreate.jsx                                               |   43 +++++++---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java                  |   19 +++-
 6 files changed, 155 insertions(+), 38 deletions(-)

diff --git a/rsf-admin/src/page/orders/transfer/ManualCreate.jsx b/rsf-admin/src/page/orders/transfer/ManualCreate.jsx
index 5251ed0..ada8d0f 100644
--- a/rsf-admin/src/page/orders/transfer/ManualCreate.jsx
+++ b/rsf-admin/src/page/orders/transfer/ManualCreate.jsx
@@ -33,12 +33,12 @@
     Grid,
     Box,
 } from '@mui/material';
-import DialogCloseButton from "../../components/DialogCloseButton.jsx";
 import ConfirmationNumberIcon from '@mui/icons-material/ConfirmationNumber';
-import CreateBySelectMats from "./CreateBySelectMats.jsx";
+import DialogCloseButton from "../../components/DialogCloseButton.jsx";
 import { DataGrid, useGridApiRef } from '@mui/x-data-grid';
-import { Add, Edit, Delete } from '@mui/icons-material';
 import ConfirmButton from "../../components/ConfirmButton";
+import CreateBySelectMats from "./CreateBySelectMats.jsx";
+import { Add, Edit, Delete } from '@mui/icons-material';
 import DictSelect from "../../components/DictSelect";
 import { minHeight, padding } from "@mui/system";
 import SaveIcon from '@mui/icons-material/Save';
@@ -60,16 +60,25 @@
         }
     };
 
+    const setFinally = () => {
+        const rows = tableRef.current.state.editRows;
+        for (const key in rows) {
+            const find = tabelData.find(item => item.matnrId === +key);
+            find.anfme = rows[key].anfme.value;
+        }
+        setTableData([...tabelData]);
+    }
+
     const handleSubmit = async () => {
         setFinally()
         setDisabled(true)
 
-        if (asnId === 0) {
+        if (orderId === 0) {
             const parmas = {
                 "orders": formData,
                 "items": tabelData,
             }
-            const res = await request.post(`/outStock/items/save`, parmas);
+            const res = await request.post(`/transfer/items/save`, parmas);
             if (res?.data?.code === 200) {
                 setOpen(false);
                 refresh();
@@ -82,7 +91,7 @@
                 "orders": formData,
                 "items": tabelData,
             }
-            const res = await request.post(`/outStock/items/update`, parmas);
+            const res = await request.post(`/transfer/items/update`, parmas);
             if (res?.data?.code === 200) {
                 setOpen(false);
                 refresh();
@@ -92,7 +101,6 @@
             }
         }
         setDisabled(false)
-
     };
 
     const handleSuccess = async (data) => {
@@ -109,6 +117,14 @@
         notify(error.message || 'common.response.fail', { type: 'error', messageArgs: { _: error.message } });
     };
 
+
+    const handleChange = (value, name) => {
+        setFormData((prevData) => ({
+            ...prevData,
+            [name]: value
+        }));
+    };
+
     return (
         <>
             <Box sx={{ padding: 1 }}>
@@ -118,22 +134,21 @@
                             <Grid item md={2}>
                                 <DictSelect
                                     label={translate("table.field.transfer.type")}
-                                    value={formData.wkType}
+                                    value={formData.type}
                                     variant="filled"
-                                    group='2'
-                                    onChange={(e) => handleChange(e.target.value, 'wkType')}
-                                    dictTypeCode="sys_business_type"
+                                    onChange={(e) => handleChange(e.target.value, 'type')}
+                                    dictTypeCode="sys_transfer_type"
                                     required
                                 />
                             </Grid>
                             <Grid item md={2}>
-                                <ReferenceInput reference="warehouseAreas" source="name">
+                                <ReferenceInput reference="warehouseAreas" source="orgAreaName">
                                     <AutocompleteInput optionText="name" label="table.field.transfer.orgAreaName" />
                                 </ReferenceInput>
                             </Grid>
                             <Grid item md={2}>
-                                <ReferenceInput reference="warehouseAreas" source="name">
-                                    <AutocompleteInput optionText="name" label="table.field.transfer.orgAreaName" />
+                                <ReferenceInput reference="warehouseAreas" source="tarAreaName">
+                                    <AutocompleteInput optionText="name" label="table.field.transfer.tarAreaName" />
                                 </ReferenceInput>
                             </Grid>
                         </Grid>
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java
index e9127c3..c81c788 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java
@@ -1,16 +1,17 @@
 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.checkerframework.checker.units.qual.A;
 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;
@@ -22,6 +23,7 @@
 import java.util.Date;
 
 @Data
+@Accessors(chain = true)
 @TableName("man_transfer_item")
 public class TransferItem implements Serializable {
 
@@ -100,6 +102,15 @@
     @ApiModelProperty(value= "渚涘簲鍟咺D")
     private Long splrId;
 
+    @TableField(exist = false)
+    @ApiModelProperty("渚涘簲鍟嗙紪鐮�")
+    private String splrCode;
+
+
+    @TableField(exist = false)
+    @ApiModelProperty("渚涘簲鍟嗗悕绉�")
+    private String splrName;
+
     /**
      * 瑙勬牸
      */
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TransferType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TransferType.java
index c23e0f3..86a1331 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TransferType.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TransferType.java
@@ -14,7 +14,6 @@
     TRANSFER_TYPE_LOCAL("0", "鏈湴璋冩嫈");
 
     private Integer val;
-
     private String desc;
 
     TransferType(String val, String desc) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferItemService.java
index b61038a..4c9bcb4 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferItemService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferItemService.java
@@ -3,6 +3,9 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.vincent.rsf.server.manager.entity.TransferItem;
 
+import java.util.Map;
+
 public interface TransferItemService extends IService<TransferItem> {
 
+    boolean fieldsSave(Map<String, Object> item, Long loginUserId);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferItemServiceImpl.java
index 094d00f..b0631b0 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferItemServiceImpl.java
@@ -1,12 +1,73 @@
 package com.vincent.rsf.server.manager.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.vincent.rsf.framework.common.Cools;
+import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.common.utils.FieldsUtils;
+import com.vincent.rsf.server.manager.entity.Companys;
+import com.vincent.rsf.server.manager.entity.WkOrderItem;
+import com.vincent.rsf.server.manager.enums.CompanysType;
 import com.vincent.rsf.server.manager.mapper.TransferItemMapper;
 import com.vincent.rsf.server.manager.entity.TransferItem;
+import com.vincent.rsf.server.manager.service.CompanysService;
 import com.vincent.rsf.server.manager.service.TransferItemService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Map;
+import java.util.Objects;
 
 @Service("transferItemService")
 public class TransferItemServiceImpl extends ServiceImpl<TransferItemMapper, TransferItem> implements TransferItemService {
 
+    @Autowired
+    private CompanysService companysService;
+
+
+    /**
+     * @author Ryan
+     * @date 2025/7/28
+     * @description: 璋冩嫈鍗曟墿灞曞瓧娈典繚瀛�
+     * @version 1.0
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean fieldsSave(Map<String, Object> params, Long loginUserId) {
+        TransferItem wkOrderItem = JSONObject.parseObject(JSONObject.toJSONString(params), TransferItem.class);
+        if (StringUtils.isNoneBlank(wkOrderItem.getSplrCode())) {
+            Companys companys = companysService.getOne(new LambdaQueryWrapper<Companys>()
+                    .eq(Companys::getId, wkOrderItem.getSplrCode())
+                    .eq(Companys::getType, CompanysType.COMPANYS_TYPE_SUPPLIER.val));
+            if (!Objects.isNull(companys)) {
+                wkOrderItem.setSplrId(companys.getId());
+            }
+        }
+        if (Objects.isNull(wkOrderItem.getAnfme()) || Double.compare(wkOrderItem.getAnfme(), 0.0) <= 0) {
+            throw new CoolException("璁″垝鏁颁笉鑳戒负绌猴紒锛�");
+        }
+        //淇濆瓨鎵╁睍瀛楁
+        try {
+            StringBuffer sb = new StringBuffer();
+            if (Objects.isNull(wkOrderItem.getFieldsIndex()) || StringUtils.isBlank(wkOrderItem.getFieldsIndex())) {
+                sb.append(wkOrderItem.getMatnrId() + wkOrderItem.getBatch() );
+                //鑾峰彇16浣島uid
+                String uuid16 = Cools.md5Chinese(sb.toString());
+                wkOrderItem.setFieldsIndex(uuid16);
+                params.put("index", uuid16);
+            }
+            //淇濆瓨鎴栨洿鏂板姩鎬佸瓧娈靛��
+            FieldsUtils.updateFieldsValue(params);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        wkOrderItem.setUpdateBy(loginUserId).setCreateBy(loginUserId);
+        if (!this.saveOrUpdate(wkOrderItem)) {
+            throw new CoolException("鏀惰揣閫氱煡鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�");
+        }
+        return true;
+    }
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java
index fa85fe3..cf840e9 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java
@@ -4,6 +4,7 @@
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.manager.controller.params.TransferItemParams;
+import com.vincent.rsf.server.manager.entity.TransferItem;
 import com.vincent.rsf.server.manager.entity.WkOrder;
 import com.vincent.rsf.server.manager.entity.WkOrderItem;
 import com.vincent.rsf.server.manager.enums.AsnExceStatus;
@@ -12,11 +13,14 @@
 import com.vincent.rsf.server.manager.enums.OrderType;
 import com.vincent.rsf.server.manager.mapper.TransferMapper;
 import com.vincent.rsf.server.manager.entity.Transfer;
+import com.vincent.rsf.server.manager.service.AsnOrderItemService;
+import com.vincent.rsf.server.manager.service.TransferItemService;
 import com.vincent.rsf.server.manager.service.TransferService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.vincent.rsf.server.system.constant.SerialRuleCode;
 import com.vincent.rsf.server.system.utils.SerialRuleUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -25,6 +29,9 @@
 
 @Service("transferService")
 public class TransferServiceImpl extends ServiceImpl<TransferMapper, Transfer> implements TransferService {
+
+    @Autowired
+    private TransferItemService transferItemService;
 
     /**
      * @author Ryan
@@ -68,25 +75,29 @@
     }
 
 
+    /**
+     * @author Ryan
+     * @date 2025/7/28
+     * @description: 璋冩嫈鍗曟嵁淇敼
+     * @version 1.0
+     */
     private void svaeOrUpdateOrderItem(TransferItemParams params, Long loginUserId) {
-//        Transfer orders = params.getTransfer();
-//        params.getItems().forEach(item -> {
-//            item.put("orderId", orders.getId());
-//            item.put("orderCode", orders.getCode());
-//            item.put("poCode", orders.getPoCode());
-//            item.put("createBy", loginUserId);
-//            item.put("updateBy", loginUserId);
-//            if (!asnOrderItemService.fieldsSave(item, loginUserId)) {
-//                throw new CoolException("鏄庣粏淇濆瓨澶辫触锛侊紒");
-//            }
-//        });
-//        List<WkOrderItem> orderItems = checkOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
-//                .eq(WkOrderItem::getOrderId, params.getOrders().getId()));
-//        Double sum = orderItems.stream().mapToDouble(WkOrderItem::getAnfme).sum();
-//        orders.setAnfme(sum);
-//        if (!this.updateById(orders)) {
-//            throw new CoolException("璁″垝鏀惰揣鏁伴噺淇敼澶辫触锛侊紒");
-//        }
+        Transfer orders = params.getTransfer();
+        params.getItems().forEach(item -> {
+            item.put("transferId", orders.getId());
+            item.put("transferCode", orders.getCode());
+            item.put("createBy", loginUserId);
+            item.put("updateBy", loginUserId);
+            if (!transferItemService.fieldsSave(item, loginUserId)) {
+                throw new CoolException("鏄庣粏淇濆瓨澶辫触锛侊紒");
+            }
+        });
+//        List<TransferItem> orderItems = transferItemService.list(new LambdaQueryWrapper<TransferItem>()
+//                .eq(TransferItem::getTransferId, params.getTransfer().getId()));
+//        Double sum = orderItems.stream().mapToDouble(TransferItem::getAnfme).sum();
+        if (!this.updateById(orders)) {
+            throw new CoolException("璁″垝鏀惰揣鏁伴噺淇敼澶辫触锛侊紒");
+        }
     }
 
 
@@ -98,6 +109,23 @@
      */
     @Override
     public R updateTransfer(TransferItemParams params, Long loginUserId) {
-        return null;
+        Transfer orders = params.getTransfer();
+        if (Objects.isNull(orders)) {
+            throw new CoolException("涓诲崟淇℃伅涓嶈兘涓虹┖锛侊紒");
+        }
+        if (Objects.isNull(orders.getId())) {
+            throw new CoolException("鏁版嵁閿欒锛氬崟鎹甀D涓嶈兘涓虹┖锛侊紒");
+        }
+        if (!this.updateById(orders)) {
+            throw new CoolException("涓诲崟淇敼澶辫触锛侊紒");
+        }
+        if (Objects.isNull(params.getItems()) || params.getItems().isEmpty()) {
+            return R.ok("鏄庣粏鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+
+        svaeOrUpdateOrderItem(params, loginUserId);
+
+        return R.ok("淇敼瀹屾垚锛侊紒");
+
     }
 }

--
Gitblit v1.9.1