From c229a84e0a8eb68c974e6d23fa1296e064025d76 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期二, 29 七月 2025 17:09:00 +0800
Subject: [PATCH] 调拔单功能优化

---
 rsf-admin/src/page/task/TaskItemList.jsx                                                      |    8 +-
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java     |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java |    8 ++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java          |  101 ++++++++++++++++++++++++++++++++-
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java    |    4 -
 rsf-admin/src/page/task/TaskEdit.jsx                                                          |    3 
 rsf-admin/src/page/orders/transfer/ManualCreate.jsx                                           |    3 
 rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx                                     |   15 ++--
 rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java              |    1 
 rsf-admin/src/page/orders/transfer/TransferList.jsx                                           |    4 
 11 files changed, 124 insertions(+), 29 deletions(-)

diff --git a/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx b/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx
index ef7023d..d61da62 100644
--- a/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx
+++ b/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx
@@ -107,12 +107,7 @@
         if (res?.data?.code === 200) {
             const {data} = res.data;
             setTableData(data?.records);
-            setRowCount(data?.total)
-
-            console.log(rowCount);
-            console.log(data);
-            
-            
+            setRowCount(data?.total);
         } else {
             notify(res.data.msg);
         }
@@ -120,7 +115,7 @@
 
     useEffect(() => {
         getData();
-    }, [open]);
+    }, [open, page]);
 
     const handleSearch = () => {
         getData()
@@ -215,7 +210,6 @@
 
 const SelectMatsTableView = ({ tableData, page, pageSize,setPage, setPageSize, rowCount, setTableData, selectedRows, setSelectedRows, dyFields, setDyFields }) => {
     const translate = useTranslate();
-
     const notify = useNotify();
     const [extendColumns, setExtendColumns] = useState([]);
 
@@ -239,6 +233,11 @@
     };
 
     useEffect(() => {
+        console.log('------->');
+        console.log(page);
+    }, [page])
+
+    useEffect(() => {
         if (extendColumns == undefined || extendColumns.length < 1) {
             getDynamicFields();
         }
diff --git a/rsf-admin/src/page/orders/transfer/ManualCreate.jsx b/rsf-admin/src/page/orders/transfer/ManualCreate.jsx
index 309a331..a74fe34 100644
--- a/rsf-admin/src/page/orders/transfer/ManualCreate.jsx
+++ b/rsf-admin/src/page/orders/transfer/ManualCreate.jsx
@@ -47,6 +47,7 @@
 import { minHeight, padding } from "@mui/system";
 import SaveIcon from '@mui/icons-material/Save';
 import request from '@/utils/request';
+import _, { set } from 'lodash';
 
 const ManualCreate = (props) => {
     const { open, setOpen, orderId } = props;
@@ -374,7 +375,7 @@
             headerClassName: "custom",
         },
         {
-            field: 'splrBatch',
+            field: 'batch',
             headerName: translate('table.field.outStockItem.splrBatch'),
             minWidth: 100,
             flex: 1,
diff --git a/rsf-admin/src/page/orders/transfer/TransferList.jsx b/rsf-admin/src/page/orders/transfer/TransferList.jsx
index 827cbcf..e31ad77 100644
--- a/rsf-admin/src/page/orders/transfer/TransferList.jsx
+++ b/rsf-admin/src/page/orders/transfer/TransferList.jsx
@@ -138,7 +138,7 @@
             >
                 <StyledDatagrid
                     preferenceKey='transfer'
-                    bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
+                    bulkActionButtons={false}
                     rowClick={(id, resource, record) => false}
                     expand={() => <TransferOrders />}
                     expandSingle={true}
@@ -163,7 +163,7 @@
                     <DateField source="createTime" label="common.field.createTime" showTime />
                     <TextField source="memo" label="common.field.memo" sortable={false} />
                     <WrapperField cellClassName="opt" label="common.field.opt">
-                        <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
+                        <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} label="toolbar.detail"/>
                         <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
                         <PublicButton setDrawerVal={setDrawerVal} drawerVal={drawerVal} setSelect={setSelect} />
                     </WrapperField>
diff --git a/rsf-admin/src/page/task/TaskEdit.jsx b/rsf-admin/src/page/task/TaskEdit.jsx
index e5c4a9f..e9686fe 100644
--- a/rsf-admin/src/page/task/TaskEdit.jsx
+++ b/rsf-admin/src/page/task/TaskEdit.jsx
@@ -40,7 +40,7 @@
                 <SimpleForm
                     shouldUnregister
                     warnWhenUnsavedChanges
-                    toolbar={<FormToolbar />}
+                    toolbar={false}
                     mode="onTouched"
                     defaultValues={{}}
                     sx={{
@@ -113,6 +113,7 @@
                                 <NumberInput
                                     label="table.field.task.sort"
                                     source="sort"
+                                    readOnly
                                 />
                             </Stack>
                         </Grid>
diff --git a/rsf-admin/src/page/task/TaskItemList.jsx b/rsf-admin/src/page/task/TaskItemList.jsx
index 76e19e7..abf3e6e 100644
--- a/rsf-admin/src/page/task/TaskItemList.jsx
+++ b/rsf-admin/src/page/task/TaskItemList.jsx
@@ -22,11 +22,11 @@
     NumberInput,
     useGetRecordId,
 } from 'react-admin';
-import { Box, Typography, Card, Stack, LinearProgress } from '@mui/material';
-import { styled } from '@mui/material/styles';
-import PageDrawer from "../components/PageDrawer";
 import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
+import { Box, Typography, Card, Stack, LinearProgress } from '@mui/material';
 import MyCreateButton from "../components/MyCreateButton";
+import PageDrawer from "../components/PageDrawer";
+import { styled } from '@mui/material/styles';
 import TaskItemCreate from "./TaskItemCreate";
 import request from '@/utils/request';
 
@@ -103,7 +103,7 @@
                 actions={(
                     <TopToolbar>
                         <FilterButton />
-                        <MyCreateButton onClick={() => { setCreateDialog(true) }} />
+                        {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */}
                         <SelectColumnsButton preferenceKey='taskItem' />
                         {/* <MyExportButton /> */}
                     </TopToolbar>
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java
index e1add27..3842fd6 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java
@@ -99,10 +99,6 @@
         if (!transferService.save(transfer)) {
             return R.error("Save Fail");
         }
-
-        /***淇濆瓨鎴愬姛锛岃嚜鍔ㄧ敓鎴愬嚭搴撳崟*/
-        transferService.genOutStock(transfer, getLoginUserId());
-
         return R.ok("Save Success").add(transfer);
     }
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
index f767169..d74fa92 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -2,15 +2,16 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.api.service.WcsService;
 import com.vincent.rsf.server.api.utils.LocUtils;
 import com.vincent.rsf.server.common.constant.Constants;
 import com.vincent.rsf.server.manager.controller.params.LocToTaskParams;
-import com.vincent.rsf.server.manager.enums.LocStsType;
-import com.vincent.rsf.server.manager.enums.TaskStsType;
+import com.vincent.rsf.server.manager.enums.*;
 import com.vincent.rsf.server.manager.entity.*;
-import com.vincent.rsf.server.manager.enums.TaskType;
 import com.vincent.rsf.server.manager.service.*;
 import com.vincent.rsf.server.manager.service.impl.LocServiceImpl;
+import com.vincent.rsf.server.manager.service.impl.TransferOrderServiceImpl;
+import com.vincent.rsf.server.manager.utils.LocManageUtil;
 import com.vincent.rsf.server.system.constant.GlobalConfigCode;
 import com.vincent.rsf.server.system.entity.Config;
 import com.vincent.rsf.server.system.service.ConfigService;
@@ -53,6 +54,18 @@
     private List<Integer> rows;
     @Autowired
     private LocItemService locItemService;
+    @Autowired
+    private OutStockService outStockService;
+    @Autowired
+    private OutStockItemService outStockItemService;
+    @Autowired
+    private AsnOrderItemService asnOrderItemService;
+    @Autowired
+    private AsnOrderService asnOrderService;
+    @Autowired
+    private TransferOrderService transferOrderService;
+    @Autowired
+    private TransferService transferService;
 
     /**
      * @param
@@ -89,6 +102,88 @@
         List<Long> longSet = tasks.stream().map(Task::getId).collect(Collectors.toList());
         List<Task> vaildTasks = taskService.list(new LambdaQueryWrapper<Task>().in(Task::getId, longSet));
         taskService.completeTask(vaildTasks);
+
+        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>()
+                .eq(TaskItem::getWkType, OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type)
+                .in(TaskItem::getTaskId, longSet));
+        if (!taskItems.isEmpty()) {
+            genInStock(taskItems);
+        }
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/7/29
+     * @description: 鐢熸垚鍏ュ簱鍗�
+     * @version 1.0
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void genInStock(List<TaskItem> taskItems) {
+        Set<Long> orderIds = taskItems.stream().map(TaskItem::getSourceId).collect(Collectors.toSet());
+        List<WkOrder> wkOrders = outStockService.list(new LambdaQueryWrapper<WkOrder>().in(WkOrder::getId, orderIds));
+        wkOrders.forEach(wkOrder -> {
+            List<WkOrderItem> orderItems = outStockItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, wkOrder.getId()));
+            if (!orderItems.isEmpty()) {
+                WkOrder order = new WkOrder();
+                BeanUtils.copyProperties(wkOrder, order);
+                order.setWkType(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type)
+                        .setId(null)
+                        .setType(OrderType.ORDER_IN.type)
+                        .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_RECEIPT_DONE.val);
+                if (!asnOrderService.save(order)) {
+                    throw new CoolException("鍏ュ簱鍗曠敓鎴愬け璐ワ紒锛�");
+                }
+
+                orderItems.forEach(orderItem -> {
+                   orderItem.setOrderId(order.getId()).setOrderCode(order.getCode()).setId(null);
+                   if (!asnOrderItemService.save(orderItem)) {
+                       throw new CoolException("鍏ュ簱鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�");
+                   }
+                });
+            }
+        });
+
+        Set<Long> taskIds = taskItems.stream().map(TaskItem::getTaskId).collect(Collectors.toSet());
+        List<Task> tasks = taskService.listByIds(taskIds);
+        if (!tasks.isEmpty()) {
+            tasks.forEach(task -> {
+                TaskItem one = taskItemService.getOne(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()), false);
+                if (Objects.isNull(one)) {
+                    throw new CoolException("鏁版嵁閿欒锛氫换鍔℃槑缁嗕涪澶憋紒锛�");
+                }
+                TransferOrder order = transferOrderService.getOne(new LambdaQueryWrapper<TransferOrder>().eq(TransferOrder::getOrderId, one.getOrderId()));
+                if (Objects.isNull(order)) {
+                    throw new CoolException("鏁版嵁閿欒锛侊紒");
+                }
+                Transfer transfer = transferService.getById(order.getTransferId());
+                Task task1 = new Task();
+                BeanUtils.copyProperties(task, task1);
+                String targetLoc = LocManageUtil.getTargetLoc(transfer.getTarAreaId());
+                if (Objects.isNull(targetLoc)) {
+                    throw new CoolException("鏈兘鎵惧埌鏈夋晥搴撲綅");
+                }
+                task.setTaskType(TaskType.TASK_TYPE_IN.type)
+                        .setTargLoc(targetLoc)
+                        .setTargSite(null)
+                        .setId(null)
+                        .setTaskStatus(TaskStsType.GENERATE_IN.id);
+                if (!taskService.save(task1)) {
+                    throw new CoolException("浠诲姟鐢熸垚澶辫触锛侊紒");
+                }
+                List<TaskItem> items = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+                if (items.isEmpty()) {
+                    throw new CoolException("鏁版嵁閿欒锛侊紒");
+                }
+                items.forEach(taskItem -> {
+                    TaskItem item = new TaskItem();
+                    BeanUtils.copyProperties(taskItem, item);
+                    item.setTaskId(task1.getId()).setId(null);
+                    if (!taskItemService.save(item)) {
+                        throw new CoolException("鍏ュ簱浠诲姟鏄庣粏淇濆瓨澶辫触锛侊紒");
+                    }
+                });
+            });
+        }
     }
 
     /**
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 42daaa4..9b829a1 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
@@ -488,7 +488,7 @@
                 WkOrderItem orderItem = outStockItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
                         .eq(WkOrderItem::getOrderId, outId)
                         .eq(StringUtils.isNotBlank(locItem.getBatch()), WkOrderItem::getSplrBatch, locItem.getBatch())
-                        .eq(StringUtils.isNotBlank(locItem.getFieldsIndex()), WkOrderItem::getFieldsIndex, locItem.getFieldsIndex())
+//                        .eq(StringUtils.isNotBlank(locItem.getFieldsIndex()), WkOrderItem::getFieldsIndex, locItem.getFieldsIndex())
                         .eq(WkOrderItem::getMatnrId, locItem.getMatnrId()));
 
                 if (Objects.isNull(orderItem)) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
index c536971..5d9fb64 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -1150,7 +1150,8 @@
                     } catch (Exception e) {
                         throw new CoolException(e.getMessage());
                     }
-                } else if (task.getResource().equals(TaskResouceType.TASK_RESOUCE_ORDER_TYPE.val) || task.getResource().equals(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val)) {
+                } else if (task.getResource().equals(TaskResouceType.TASK_RESOUCE_ORDER_TYPE.val)
+                        || task.getResource().equals(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val)) {
                     WkOrderItem orderItem = new WkOrderItem();
                     if (task.getResource().equals(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val)) {
                         CheckDiffItem diffItem = checkDiffItemService.getById(key);
@@ -1279,7 +1280,6 @@
         if (!stockItemService.saveBatch(stockItems)) {
             throw new CoolException("搴撳瓨淇敼鏋跺け璐ワ紒锛�");
         }
-
     }
 
     /**
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 dd30339..2a64db5 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
@@ -100,6 +100,10 @@
         } catch (Exception e) {
             throw new CoolException(e.getMessage());
         }
+
+        /***淇濆瓨鎴愬姛锛岃嚜鍔ㄧ敓鎴愬嚭搴撳崟*/
+        genOutStock(transfer, loginUserId);
+
         return R.ok();
     }
 
@@ -199,7 +203,7 @@
         Double anfmes = items.stream().mapToDouble(TransferItem::getAnfme).sum();
         wkOrder.setCode(ruleCode)
                 .setAnfme(anfmes)
-                .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val)
+                .setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val)
                 .setType(OrderType.ORDER_OUT.type)
                 .setWkType(OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type)
                 .setCreateBy(loginUserId)
@@ -258,7 +262,7 @@
             Set<Long> longs = wkOrders.stream().map(WkOrder::getId).collect(Collectors.toSet());
             if (!outStockService.remove(new LambdaQueryWrapper<WkOrder>()
                     .in(WkOrder::getId, longs)
-                    .ne(WkOrder::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_INIT.val))) {
+                    .eq(WkOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val))) {
                 throw new CoolException("褰撳墠鍑哄簱鍗曞凡鎵ц锛屼笉鏀寔鍒犻櫎锛侊紒");
             }
             outStockItemService.remove(new LambdaQueryWrapper<WkOrderItem>().in(WkOrderItem::getOrderId, longs));
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java
index 7e69732..ccad70d 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java
@@ -29,7 +29,6 @@
     public static String getTargetLoc(Long areaId) {
         //TODO 搴撲綅绛栫暐鍚庣画鎺掓湡
         LocService locService = SpringUtils.getBean(LocService.class);
-
         Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>()
                 .eq(Loc::getAreaId, areaId)
                 .orderByAsc(Loc::getLev)

--
Gitblit v1.9.1