From aecc30be4f72119829bf7f607aa6031e15fc3c0c Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期三, 30 七月 2025 08:01:28 +0800
Subject: [PATCH] 调拔单功能优化

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferOrder.java             |    7 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java |   90 ++++++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java          |  112 +++++++++++-------
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java    |   15 ++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OrgLocParams.java   |   30 +++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java          |    4 
 rsf-admin/src/page/orders/transfer/ManualCreate.jsx                                           |    7 
 rsf-admin/src/page/components/WarehouseSelect.jsx                                             |    2 
 rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx                                     |   44 ++----
 rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java              |    4 
 rsf-admin/src/page/orders/transfer/TransferOrders.jsx                                         |   18 ++
 11 files changed, 243 insertions(+), 90 deletions(-)

diff --git a/rsf-admin/src/page/components/WarehouseSelect.jsx b/rsf-admin/src/page/components/WarehouseSelect.jsx
index 54a9613..33ead33 100644
--- a/rsf-admin/src/page/components/WarehouseSelect.jsx
+++ b/rsf-admin/src/page/components/WarehouseSelect.jsx
@@ -16,7 +16,7 @@
     }, [dictTypeCode]);
 
     const http = async () => {
-        const res = await request.post('/warehouseAreas/page', {});
+        const res = await request.post('/warehouseAreas/page', {current: 1, pageSize: 100});
         if (res?.data?.code === 200) {
             setList(res.data.data.records.map((item) => {
                 return {
diff --git a/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx b/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx
index d61da62..78f7014 100644
--- a/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx
+++ b/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx
@@ -69,9 +69,8 @@
 
     const reset = () => {
         setFormData({
-            name: '',
-            code: '',
-            groupId: 0
+            maktx: '',
+            matnrCode: '',
         })
     }
 
@@ -98,14 +97,14 @@
     };
 
     const getData = async () => {
-        const res = await request.post(`/matnr/page`, {
+        const res = await request.post(`/transfer/locs/items`, {
             ...formData,
             current: page,
             pageSize: pageSize,
             orderBy: "create_time desc"
         });
         if (res?.data?.code === 200) {
-            const {data} = res.data;
+            const { data } = res.data;
             setTableData(data?.records);
             setRowCount(data?.total);
         } else {
@@ -147,8 +146,8 @@
                         <Grid item md={3}>
                             <TextField
                                 label={translate('table.field.matnr.name')}
-                                name="name"
-                                value={formData.name}
+                                name="maktx"
+                                value={formData.maktx}
                                 onChange={handleChange}
                                 size="small"
                             />
@@ -156,20 +155,10 @@
                         <Grid item md={3}>
                             <TextField
                                 label={translate('table.field.matnr.code')}
-                                name="code"
-                                value={formData.code}
+                                name="matnrCode"
+                                value={formData.matnrCode}
                                 onChange={handleChange}
                                 size="small"
-                            />
-                        </Grid>
-                        <Grid item md={3}>
-                            <TreeSelectInput
-                                label="table.field.matnr.groupId"
-                                value={formData.groupId}
-                                resource={'matnrGroup'}
-                                source="groupId"
-                                name="groupId"
-                                onChange={handleChange}
                             />
                         </Grid>
                         <Grid item md={2} sx={{ margin: 'auto' }}>
@@ -208,24 +197,21 @@
 export default CreateBySelectMats;
 
 
-const SelectMatsTableView = ({ tableData, page, pageSize,setPage, setPageSize, rowCount, setTableData, selectedRows, setSelectedRows, dyFields, setDyFields }) => {
+const SelectMatsTableView = ({ tableData, page, pageSize, setPage, setPageSize, rowCount, setTableData, selectedRows, setSelectedRows, dyFields, setDyFields }) => {
     const translate = useTranslate();
     const notify = useNotify();
     const [extendColumns, setExtendColumns] = useState([]);
 
     const [columns, setColumns] = useState([
-        { field: 'name', headerName: translate('table.field.matnr.name'), width: 300 },
-        { field: 'code', headerName: translate('table.field.matnr.code'), width: 200 },
-        { field: 'groupId$', headerName: translate('table.field.matnr.groupId'), width: 100 },
+        { field: 'maktx', headerName: translate('table.field.matnr.name'), width: 300 },
+        { field: 'matnrCode', headerName: translate('table.field.matnr.code'), width: 200 },
+        // { field: 'groupId$', headerName: translate('table.field.matnr.groupId'), width: 100 },
         { field: 'spec', headerName: translate('table.field.matnr.spec'), width: 100 },
+        { field: 'batch', headerName: translate('table.field.locItem.batch'), width: 100 },
         { field: 'model', headerName: translate('table.field.matnr.model'), width: 100 },
-        { field: 'weight', headerName: translate('table.field.matnr.weight'), width: 100 },
-        { field: 'describle', headerName: translate('table.field.matnr.describle'), width: 100 },
-        { field: 'nromNum', headerName: translate('table.field.matnr.nromNum'), width: 100 },
+        { field: 'anfme', headerName: translate('table.field.locItem.anfme'), width: 100 },
         { field: 'unit', headerName: translate('table.field.matnr.unit'), width: 100 },
-        { field: 'purchaseUnit', headerName: translate('table.field.matnr.purUnit'), width: 100 },
-        { field: 'stockUnit', headerName: translate('table.field.matnr.stockUnit'), width: 100 },
-        { field: 'stockLeval$', headerName: translate('table.field.matnr.stockLevel'), width: 100, sortable: false },
+        { field: 'wareArea', headerName: translate('table.field.locItem.wareArea'), width: 100, sortable: false },
     ])
 
     const handleSelectionChange = (ids) => {
diff --git a/rsf-admin/src/page/orders/transfer/ManualCreate.jsx b/rsf-admin/src/page/orders/transfer/ManualCreate.jsx
index a74fe34..f774644 100644
--- a/rsf-admin/src/page/orders/transfer/ManualCreate.jsx
+++ b/rsf-admin/src/page/orders/transfer/ManualCreate.jsx
@@ -344,24 +344,22 @@
         },
         {
             field: 'anfme',
-            headerName: translate('table.field.outStockItem.anfme') + "*",
+            headerName: translate('table.field.outStockItem.anfme'),
             type: 'number',
             minWidth: 100,
             flex: 1,
             editable: true,
             valueFormatter: (val) => val < 0 ? 0 : val,
-            headerClassName: "custom",
         },
         {
             field: 'splrCode',
-            headerName: translate('table.field.outStockItem.splrCode') + "*",
+            headerName: translate('table.field.outStockItem.splrCode'),
             minWidth: 100,
             flex: 1,
             editable: true,
             renderEditCell: (params) => (
                 <SelectInputSplrCodeEditCell {...params} />
             ),
-            headerClassName: "custom",
         },
         {
             field: 'splrName',
@@ -372,7 +370,6 @@
             renderEditCell: (params) => (
                 <SelectInputSplrNameEditCell {...params} />
             ),
-            headerClassName: "custom",
         },
         {
             field: 'batch',
diff --git a/rsf-admin/src/page/orders/transfer/TransferOrders.jsx b/rsf-admin/src/page/orders/transfer/TransferOrders.jsx
index 6ab3f0c..33835a6 100644
--- a/rsf-admin/src/page/orders/transfer/TransferOrders.jsx
+++ b/rsf-admin/src/page/orders/transfer/TransferOrders.jsx
@@ -11,6 +11,7 @@
     WrapperField,
     useRecordContext,
     DatagridConfigurable,
+    useRedirect,
 } from 'react-admin';
 
 import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting.js';
@@ -40,6 +41,7 @@
 }));
 
 const TransferOrders = () => {
+    const redirct = useRedirect();
     const record = useRecordContext();
     if (!record) return null;
     const translate = useTranslate();
@@ -65,12 +67,18 @@
                     perPage={DEFAULT_PAGE_SIZE}
                 >
                     <StyledDatagrid
-                        sx={{ width: '100%' }}
+                        sx={{ margin: 'auto', width: '98%' }}
                         preferenceKey='outStock'
                         bulkActionButtons={false}
-                        rowClick={false}
+                        rowClick={(id, resource, record) => {
+                            if (record.type == 'out') {
+                                redirct("/outStock")
+                            } else if (record.type == 'in') {
+                                redirct("/asnOrder")
+                            }                            
+                        }}
                         expandSingle={true}
-                        omit={['id', 'createTime', 'createBy$', 'memo']}
+                        omit={['id', 'memo']}
                     >
                         <NumberField source="id" />
                         <TextField source="code" label="table.field.transferOrder.code" />
@@ -80,10 +88,10 @@
                         <NumberField source="anfme" label="table.field.transferOrder.anfme" />
                         <NumberField source="workQty" label="table.field.transferOrder.workQty" />
                         <NumberField source="qty" label="table.field.transferOrder.qty" />
-                        <TextField source="updateBy$" label="common.field.updateBy" />
-                        <DateField source="updateTime" label="common.field.updateTime" showTime />
                         <TextField source="createBy$" label="common.field.createBy" />
+                        <TextField source="updateBy$" label="common.field.updateBy" />
                         <DateField source="createTime" label="common.field.createTime" showTime />
+                        <DateField source="updateTime" label="common.field.updateTime" showTime />
                         <BillStatusField cellClassName="status" source="exceStatus" label="table.field.outStock.exceStatus" />
                         <TextField source="memo" label="common.field.memo" sortable={false} />
                     </StyledDatagrid>
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 3842fd6..526ab46 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
@@ -11,6 +11,7 @@
 import com.vincent.rsf.server.common.domain.KeyValVo;
 import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams;
+import com.vincent.rsf.server.manager.controller.params.OrgLocParams;
 import com.vincent.rsf.server.manager.controller.params.TransferItemParams;
 import com.vincent.rsf.server.manager.entity.Transfer;
 import com.vincent.rsf.server.manager.entity.excel.CheckOrderTemplate;
@@ -154,7 +155,7 @@
 
     @ApiOperation("鍗曟嵁淇℃伅淇敼")
     @PostMapping("/transfer/items/update")
-    @PreAuthorize("hasAuthority('manager:outStock:update')")
+    @PreAuthorize("hasAuthority('manager:transfer:update')")
     public R orderAndrItemUpdate(@RequestBody TransferItemParams params) throws Exception {
         if (Objects.isNull(params)) {
             return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
@@ -163,6 +164,18 @@
     }
 
 
+    @ApiOperation("鑾峰彇鍘熷簱鍖虹墿鏂欎俊鎭�")
+    @PostMapping("/transfer/locs/items")
+    @PreAuthorize("hasAuthority('manager:transfer:list')")
+    public R locsPage(@RequestBody OrgLocParams params) throws Exception {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return R.ok().add(transferService.getLocsItems(params, getLoginUserId()));
+    }
+
+
+
 
     /**
      * @author Ryan
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OrgLocParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OrgLocParams.java
new file mode 100644
index 0000000..8f327e6
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OrgLocParams.java
@@ -0,0 +1,30 @@
+package com.vincent.rsf.server.manager.controller.params;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "OrgLocParams", description = "鍘熷簱鍖虹墿鏂�")
+public class OrgLocParams implements Serializable {
+
+    @ApiModelProperty("鍘熷簱鍖篒D")
+    private Long orgAreaId;
+
+    @ApiModelProperty("褰撳墠椤�")
+    private Integer current;
+
+    @ApiModelProperty("鐗╂枡缂栫爜")
+    private String matnrCode;
+
+    @ApiModelProperty("鐗╂枡鍚嶇О")
+    private String maktx;
+
+    @ApiModelProperty("褰撳墠椤垫暟")
+    private Integer pageSize;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferOrder.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferOrder.java
index 18eb434..38b9c5f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferOrder.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferOrder.java
@@ -20,13 +20,12 @@
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
+    @ApiModelProperty("鍗曟嵁绫诲瀷锛歩n: 鍏ュ簱锛� out:鍑哄簱")
+    private String type;
+
     @ApiModelProperty("璋冩嫈鍗旾D")
     private Long transferId;
 
     @ApiModelProperty("璁㈠崟ID")
     private Long orderId;
-
-    @ApiModelProperty("鎵ц鐘舵��")
-    private Integer exceStatus;
-
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java
index 8f8efb7..405ef34 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java
@@ -57,6 +57,8 @@
             return OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.type;
         } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.desc)) {
             return OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type;
+        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.desc)) {
+            return OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type;
         }
         return null;
     }
@@ -86,6 +88,8 @@
             return OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.desc;
         } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type)) {
             return OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.desc;
+        } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type)) {
+            return OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.desc;
         }
         return null;
     }
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 d74fa92..cba0f0e 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
@@ -13,8 +13,10 @@
 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.constant.SerialRuleCode;
 import com.vincent.rsf.server.system.entity.Config;
 import com.vincent.rsf.server.system.service.ConfigService;
+import com.vincent.rsf.server.system.utils.SerialRuleUtils;
 import com.vincent.rsf.server.system.utils.SystemAuthUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -92,6 +94,7 @@
      * @version 1.0
      */
     @Scheduled(cron = "0/5 * * * * ?  ")
+    @Transactional(rollbackFor = Exception.class)
     public void complateOutStock() throws Exception {
         List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
                 .eq(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id)
@@ -118,7 +121,7 @@
      * @version 1.0
      */
     @Transactional(rollbackFor = Exception.class)
-    public void genInStock(List<TaskItem> taskItems) {
+    public void genInStock(List<TaskItem> taskItems) throws Exception {
         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 -> {
@@ -126,10 +129,21 @@
             if (!orderItems.isEmpty()) {
                 WkOrder order = new WkOrder();
                 BeanUtils.copyProperties(wkOrder, order);
+                String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, order);
+                if (StringUtils.isNotBlank(ruleCode)) {
+                    throw new CoolException("鍏ュ簱鍗曞彿鐢熸垚澶辫触锛侊紒");
+                }
                 order.setWkType(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type)
                         .setId(null)
-                        .setType(OrderType.ORDER_IN.type)
-                        .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_RECEIPT_DONE.val);
+                        .setCode(ruleCode)
+                        .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val)
+                        .setType(OrderType.ORDER_IN.type);
+//                Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.DIRECT_WAIT_PAKIN));
+//                if (!Boolean.parseBoolean(config.getVal())) {
+//                    order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val);
+//                } else {
+//                    order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val);
+//                }
                 if (!asnOrderService.save(order)) {
                     throw new CoolException("鍏ュ簱鍗曠敓鎴愬け璐ワ紒锛�");
                 }
@@ -140,50 +154,60 @@
                        throw new CoolException("鍏ュ簱鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�");
                    }
                 });
+
+                Transfer transfer = transferService.getById(order.getPoId());
+
+                TransferOrder transferOrder = new TransferOrder();
+                transferOrder.setOrderId(order.getId())
+                        .setType(OrderType.ORDER_IN.type)
+                        .setTransferId(transfer.getId());
+                if (!transferOrderService.save(transferOrder)) {
+                    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("鍏ュ簱浠诲姟鏄庣粏淇濆瓨澶辫触锛侊紒");
-                    }
-                });
-            });
-        }
+//        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/TransferService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java
index a1e37d4..8bfb44d 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java
@@ -6,7 +6,9 @@
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.server.common.domain.BaseParam;
 import com.vincent.rsf.server.common.domain.PageParam;
+import com.vincent.rsf.server.manager.controller.params.OrgLocParams;
 import com.vincent.rsf.server.manager.controller.params.TransferItemParams;
+import com.vincent.rsf.server.manager.entity.LocItem;
 import com.vincent.rsf.server.manager.entity.Transfer;
 import com.vincent.rsf.server.manager.entity.WkOrder;
 
@@ -23,5 +25,7 @@
     Transfer genOutStock(Transfer transfer, Long loginUserId);
 
     boolean removeTransfer(List<Long> list);
+
+    IPage<LocItem> getLocsItems(OrgLocParams params, Long loginUserId);
 }
 
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 2a64db5..2749343 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
@@ -3,11 +3,13 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.common.domain.BaseParam;
 import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.common.domain.PageResult;
+import com.vincent.rsf.server.manager.controller.params.OrgLocParams;
 import com.vincent.rsf.server.manager.controller.params.TransferItemParams;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.enums.*;
@@ -40,6 +42,14 @@
     private TransferOrderService transferOrderService;
     @Autowired
     private TransferService transferService;
+    @Autowired
+    private AsnOrderService asnOrderService;
+    @Autowired
+    private AsnOrderItemService asnOrderItemService;
+    @Autowired
+    private LocItemService locItemService;
+    @Autowired
+    private LocService locService;
 
     /**
      * @author Ryan
@@ -239,13 +249,66 @@
         }
 
         TransferOrder transferOrder = new TransferOrder();
-        transferOrder.setTransferId(transfer.getId()).setOrderId(wkOrder.getId()).setExceStatus((int)CheckExceStatus.CHECK_ORDER_STATUS_INIT.val);
+        transferOrder.setTransferId(transfer.getId())
+                .setOrderId(wkOrder.getId())
+                .setType(OrderType.ORDER_OUT.type);
 
         if (!transferOrderService.save(transferOrder)) {
             throw new CoolException("鍗曟嵁鍏宠仈澶辫触锛侊紒");
         }
 
+        try {
+            /**鐢熸垚鍏ュ簱鍗曟嵁淇℃伅*/
+            genInStock(wkOrder, orderItems);
+        } catch (Exception e) {
+            throw new CoolException(e.getMessage());
+        }
+
         return transfer;
+    }
+
+    /**
+     * @author Ryan
+     * @date 2025/7/29
+     * @description: TODO
+     * @version 1.0
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void genInStock(WkOrder wkOrder, List<WkOrderItem> orderItems) throws Exception {
+        WkOrder order = new WkOrder();
+        BeanUtils.copyProperties(wkOrder, order);
+        order.setType(OrderType.ORDER_IN.type)
+                .setWkType(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type)
+                .setId(null);
+        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, order);
+        if (StringUtils.isBlank(ruleCode)) {
+            throw new CoolException("鍏ュ簱鍗曞彿鐢熸垚澶辫触锛侊紒");
+        }
+        order.setCode(ruleCode);
+
+        if (!asnOrderService.save(order)) {
+            throw new CoolException("鍗曟嵁淇濆瓨澶辫触锛侊紒");
+        }
+
+        orderItems.forEach(item -> {
+            item.setOrderId(order.getId())
+                    .setOrderCode(order.getCode())
+                    .setId(null);
+
+            if (!asnOrderItemService.save(item)) {
+                throw new CoolException("鍏ュ簱鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�");
+            }
+        });
+
+        TransferOrder transferOrder = new TransferOrder();
+        transferOrder.setTransferId(wkOrder.getPoId())
+                .setOrderId(order.getId())
+                .setType(OrderType.ORDER_IN.type);
+
+        if (!transferOrderService.save(transferOrder)) {
+            throw new CoolException("鍗曟嵁鍏宠仈澶辫触锛侊紒");
+        }
+
     }
 
     /**
@@ -273,4 +336,29 @@
         transferItemService.remove(new LambdaQueryWrapper<TransferItem>().in(TransferItem::getTransferId, list));
         return true;
     }
+
+    /**
+     * @author Ryan
+     * @date 2025/7/29
+     * @description: 鑾峰彇鍘熷簱鍖虹墿鏂欎俊鎭�
+     * @version 1.0
+     */
+    @Override
+    public IPage<LocItem> getLocsItems(OrgLocParams params, Long loginUserId) {
+        List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>()
+                .eq(!Objects.isNull(params.getOrgAreaId()), Loc::getAreaId, params.getOrgAreaId()));
+
+        Page<LocItem> page = new Page<>(params.getCurrent(), params.getPageSize());
+        LambdaQueryWrapper<LocItem> wrapper = new LambdaQueryWrapper<>();
+
+        wrapper.eq(StringUtils.isNotBlank(params.getMatnrCode()), LocItem::getMatnrCode, params.getMatnrCode().trim())
+                .like(StringUtils.isNotBlank(params.getMaktx().trim()), LocItem::getMaktx, params.getMaktx().trim());
+        if (!locs.isEmpty()) {
+            Set<Long> locIds = locs.stream().map(Loc::getId).collect(Collectors.toSet());
+            wrapper.in(LocItem::getLocId, locIds);
+            return locItemService.page(page, wrapper);
+        } else {
+            return locItemService.page(page, wrapper);
+        }
+    }
 }

--
Gitblit v1.9.1