From 1af8eb8dc7bdafd9e2f8d8650c93243a0cb6963c Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期一, 26 五月 2025 18:14:21 +0800
Subject: [PATCH] 代码优化

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java   |   90 +++++++-----
 rsf-admin/src/page/work/checkOutBound/CheckOutBoundList.jsx                                    |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java           |    6 
 rsf-admin/src/page/orders/delivery/DeliveryList.jsx                                            |   12 +
 rsf-server/src/main/java/com/vincent/rsf/server/api/utils/LocUtils.java                        |    7 
 rsf-admin/src/page/work/outBound/OutBoundList.jsx                                              |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java      |   15 +
 rsf-admin/src/page/locItem/LocItemList.jsx                                                     |    1 
 rsf-admin/src/page/task/TaskList.jsx                                                           |   19 ++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/DeliveryTemplate.java     |  118 ++++++++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/common/constant/Constants.java                 |   15 ++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java      |   21 +-
 rsf-admin/src/i18n/zh.js                                                                       |    3 
 rsf-admin/src/page/basicInfo/loc/LocEdit.jsx                                                   |    5 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocItemService.java            |    6 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/LocToTaskParams.java |   32 ++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryController.java     |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java         |    5 
 18 files changed, 283 insertions(+), 78 deletions(-)

diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index 5f6a0a8..1dc296c 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -208,7 +208,8 @@
         basContainer: '瀹瑰櫒绠$悊',
         outBound: '鍑哄簱浣滀笟',
         checkOutBound: '鐩樼偣鍑哄簱',
-        stockTransfer: '搴撳瓨杞Щ',
+        stockTransfer: '搴撲綅杞Щ',
+        
     },
     table: {        
         field: {
diff --git a/rsf-admin/src/page/basicInfo/loc/LocEdit.jsx b/rsf-admin/src/page/basicInfo/loc/LocEdit.jsx
index 1e467c5..f1bb4c5 100644
--- a/rsf-admin/src/page/basicInfo/loc/LocEdit.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/LocEdit.jsx
@@ -111,24 +111,21 @@
                                     <NumberInput
                                         label="table.field.loc.length"
                                         source="length"
-                                        validate={required()}
                                     />
 
                                     <NumberInput
                                         label="table.field.loc.width"
                                         source="width"
-                                        validate={required()}
                                     />
 
                                     <NumberInput
                                         label="table.field.loc.height"
                                         source="height"
-                                        validate={required()}
                                     />
                                 </Grid>
                                 <Grid item display="flex" gap={1}>
                                     <ReferenceArrayInput source="typeIds" reference="locType" >
-                                        <SelectArrayInput label="table.field.loc.type" validate={[required()]} />
+                                        <SelectArrayInput label="table.field.loc.type" />
                                     </ReferenceArrayInput>
                                     <TextInput
                                         label="table.field.loc.unit"
diff --git a/rsf-admin/src/page/locItem/LocItemList.jsx b/rsf-admin/src/page/locItem/LocItemList.jsx
index a07bb72..5051b92 100644
--- a/rsf-admin/src/page/locItem/LocItemList.jsx
+++ b/rsf-admin/src/page/locItem/LocItemList.jsx
@@ -107,6 +107,7 @@
             source="useStatus"
             optionValue="value"
             parse={v => v}
+            alwaysOn
         />,
         <TextInput source="code" label="table.field.loc.code" />,
         <AutocompleteInput
diff --git a/rsf-admin/src/page/orders/delivery/DeliveryList.jsx b/rsf-admin/src/page/orders/delivery/DeliveryList.jsx
index 5a4eb4d..da7d327 100644
--- a/rsf-admin/src/page/orders/delivery/DeliveryList.jsx
+++ b/rsf-admin/src/page/orders/delivery/DeliveryList.jsx
@@ -39,6 +39,7 @@
 import EmptyData from "../../components/EmptyData";
 import MyCreateButton from "../../components/MyCreateButton";
 import MyExportButton from '../../components/MyExportButton';
+import ImportButton from "../../components/ImportButton";
 import PageDrawer from "../../components/PageDrawer";
 import MyField from "../../components/MyField";
 import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
@@ -60,8 +61,8 @@
 
 const filters = [
     <SearchInput source="condition" alwaysOn />,
-    <DateInput label='common.time.after' source="timeStart"  />,
-    <DateInput label='common.time.before' source="timeEnd"  />,
+    <DateInput label='common.time.after' source="timeStart" />,
+    <DateInput label='common.time.before' source="timeEnd" />,
     <TextInput source="code" label="table.field.delivery.code" />,
     <TextInput source="platId" label="table.field.delivery.platId" />,
     <TextInput source="type" label="table.field.delivery.type" />,
@@ -110,7 +111,8 @@
                         <FilterButton />
                         <MyCreateButton onClick={() => { setCreateDialog(true) }} />
                         <SelectColumnsButton preferenceKey='delivery' />
-                        <MyExportButton />
+                        <ImportButton value={'delivery'} />
+                        {/* <MyExportButton /> */}
                     </TopToolbar>
                 )}
                 perPage={DEFAULT_PAGE_SIZE}
@@ -121,7 +123,7 @@
                     rowClick={(id, resource, record) => false}
                     expand={false}
                     expandSingle={true}
-                    omit={['id', 'createTime', 'createBy','platId', 'memo', 'workQty', 'startTime', 'endTime', 'updateBy','createTime']}
+                    omit={['id', 'createTime', 'createBy', 'platId', 'memo', 'workQty', 'startTime', 'endTime', 'updateBy', 'createTime']}
                 >
                     <NumberField source="id" />
                     <TextField source="code" label="table.field.delivery.code" />
@@ -135,7 +137,7 @@
                     <TextField source="platCode" label="table.field.delivery.platCode" />
                     <DateField source="startTime" label="table.field.delivery.startTime" showTime />
                     <DateField source="endTime" label="table.field.delivery.endTime" showTime />
-                    <TextField source="updateBy$" label="common.field.updateBy"  />
+                    <TextField source="updateBy$" label="common.field.updateBy" />
                     <DateField source="updateTime" label="common.field.updateTime" showTime />
                     <TextField source="createBy$" label="common.field.createBy" />
                     <DateField source="createTime" label="common.field.createTime" showTime />
diff --git a/rsf-admin/src/page/task/TaskList.jsx b/rsf-admin/src/page/task/TaskList.jsx
index 84f1b66..93cd799 100644
--- a/rsf-admin/src/page/task/TaskList.jsx
+++ b/rsf-admin/src/page/task/TaskList.jsx
@@ -63,8 +63,17 @@
 
 const TaskList = (props) => {
     const translate = useTranslate();
+    const refresh = useRefresh();
     const [drawerVal, setDrawerVal] = useState(false);
     const dict = JSON.parse(localStorage.getItem('sys_dicts'))?.filter(dict => (dict.dictTypeCode == 'sys_warehouse_type')) || [];
+
+    // useEffect(() => {
+    //     const interval = setInterval(() => {
+    //         refresh();
+    //     }, 5000); // 姣�5绉掑埛鏂颁竴娆�
+
+    //     return () => clearInterval(interval); // 娓呴櫎瀹氭椂鍣�
+    // }, [refresh])
 
     const filters = [
         <SearchInput source="condition" alwaysOn />,
@@ -103,6 +112,7 @@
     return (
         <Box display="flex">
             <List
+                queryOptions={{ refetchInterval: 5000 }}
                 sx={{
                     flexGrow: 1,
                     transition: (theme) =>
@@ -179,7 +189,10 @@
 
 export default TaskList;
 
-
+/**
+ * 鐩樼偣
+ * @returns te
+ */
 const CheckButton = () => {
     const record = useRecordContext();
     const notify = useNotify();
@@ -195,7 +208,7 @@
         }
     }
 
-    return (record?.taskStatus == 198 && record?.taskType == 107 ? <ConfirmButton label={"toolbar.check"} startIcon={<GradingOutlinedIcon />} onConfirm={checkClick} /> : <></>)
+    return (record?.taskStatus == 199 && record?.taskType == 107 ? <ConfirmButton label={"toolbar.check"} startIcon={<GradingOutlinedIcon />} onConfirm={checkClick} /> : <></>)
 }
 
 /**
@@ -273,7 +286,7 @@
         }
     }
     return (
-        (record.taskStatus == 1 || record.taskStatus  < 101) && (record.taskType == 1 || record.taskType == 101 || record.taskType == 10 || record.taskType == 104) ?  
+        (record.taskStatus == 1 || record.taskStatus == 101) && (record.taskType == 1 || record.taskType == 101 || record.taskType == 10 || record.taskType == 104) ?
             <Button
                 onClick={clickCancel}
                 label="toolbar.cancel">
diff --git a/rsf-admin/src/page/work/checkOutBound/CheckOutBoundList.jsx b/rsf-admin/src/page/work/checkOutBound/CheckOutBoundList.jsx
index 82e94c4..d48c170 100644
--- a/rsf-admin/src/page/work/checkOutBound/CheckOutBoundList.jsx
+++ b/rsf-admin/src/page/work/checkOutBound/CheckOutBoundList.jsx
@@ -182,7 +182,7 @@
         http(sta, data);
     }
     const http = async (sta, items) => {
-        const { data: { code, data, msg } } = await request.post(`/locItem/generate/task`, { siteNo: sta, items: items, type: 'check' });
+        const { data: { code, data, msg } } = await request.post(`/locItem/check/task`, { siteNo: sta, items: items });
         if (code === 200) {
             notify(msg);
             refresh()
diff --git a/rsf-admin/src/page/work/outBound/OutBoundList.jsx b/rsf-admin/src/page/work/outBound/OutBoundList.jsx
index 4616e6e..391ca1d 100644
--- a/rsf-admin/src/page/work/outBound/OutBoundList.jsx
+++ b/rsf-admin/src/page/work/outBound/OutBoundList.jsx
@@ -189,7 +189,7 @@
             notify(translate('toolbar.request.error.out_stock_qty'))
             return
         }
-        const { data: { code, data, msg } } = await request.post(`/locItem/check/task`, { siteNo: sta, items: items });
+        const { data: { code, data, msg } } = await request.post(`/locItem/generate/task`, { siteNo: sta, items: items });
         if (code === 200) {
             notify(msg);
             refresh()
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/utils/LocUtils.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/utils/LocUtils.java
index cec64a0..db1abfc 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/utils/LocUtils.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/utils/LocUtils.java
@@ -55,7 +55,12 @@
     public static String getShallowLoc(SlaveProperties slaveProperties, String deepLoc) {
         LocService locService = SpringUtils.getBean(LocService.class);
         Loc depLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, deepLoc));
-        int row = depLoc.getRow()-1;
+        int row;
+        if (depLoc.getRow() != 1) {
+            row = depLoc.getRow()-1;
+        } else {
+            row = depLoc.getRow();
+        }
         boolean contains = slaveProperties.getDoubleLocs().contains(row);
         Loc shallowLoc = null;
         if (!contains) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/constant/Constants.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/constant/Constants.java
index 497c35f..5906032 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/constant/Constants.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/constant/Constants.java
@@ -90,4 +90,19 @@
      */
     public static final String TOKEN_TYPE = "Bearer";
 
+    /**
+     * 搴撳瓨鍑哄簱
+     */
+    public static final String TASK_TYPE_OUT_STOCK = "outStock";
+
+    /**
+     * 搴撳瓨鐩樼偣鍑哄簱
+     */
+    public static final String TASK_TYPE_OUT_CHECK = "check";
+
+    /**
+     * 鎷f枡鍑哄簱
+     */
+    public static final String TASK_TYPE_OUT_PICK = "pick";
+
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryController.java
index 04abb82..261413d 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryController.java
@@ -124,4 +124,4 @@
         ExcelUtil.build(ExcelUtil.create(deliveryService.list(), Delivery.class), response);
     }
 
-}
+}
\ No newline at end of file
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java
index 59adfb7..9d1717e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java
@@ -5,12 +5,14 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.server.common.constant.Constants;
 import com.vincent.rsf.server.common.utils.ExcelUtil;
 import com.vincent.rsf.server.common.annotation.OperationLog;
 import com.vincent.rsf.server.common.domain.BaseParam;
 import com.vincent.rsf.server.common.domain.KeyValVo;
 import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.common.utils.FieldsUtils;
+import com.vincent.rsf.server.manager.controller.params.LocToTaskParams;
 import com.vincent.rsf.server.manager.entity.LocItem;
 import com.vincent.rsf.server.manager.service.LocItemService;
 import com.vincent.rsf.server.manager.service.LocService;
@@ -82,17 +84,19 @@
 
     /**
      * 鐢熸垚搴撳瓨鍑哄簱浠诲姟
-     * @param map
+     * @param param
      * @return
      */
     @PreAuthorize("hasAuthority('manager:locItem:list')")
     @ApiOperation("鐢熸垚搴撳瓨鍑哄簱浠诲姟")
     @PostMapping("/locItem/generate/task")
-    public R generateTask(@RequestBody Map<String, Object> map) {
-        if (Objects.isNull(map)) {
+    public R generateTask(@RequestBody LocToTaskParams param) {
+        if (Objects.isNull(param)) {
             return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
-        return locItemService.generateTask(map);
+        param.setType(Constants.TASK_TYPE_OUT_STOCK);
+
+        return locItemService.generateTask(param);
     }
 
     /**
@@ -103,11 +107,11 @@
     @PreAuthorize("hasAuthority('manager:locItem:list')")
     @ApiOperation("鐢熸垚绉诲簱浠诲姟")
     @PostMapping("/locItem/move/task")
-    public R genMoveTask(@RequestBody Map<String, Object> map) {
+    public R genMoveTask(@RequestBody LocToTaskParams map) {
         if (Objects.isNull(map)) {
             return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
-        return locItemService.genMoveTask(map);
+        return R.ok("浠诲姟鐢熸垚鎴愬姛").add(locItemService.genMoveTask(map));
     }
 
     /**
@@ -118,11 +122,12 @@
     @PreAuthorize("hasAuthority('manager:locItem:list')")
     @ApiOperation("鐢熸垚鐩樼偣鍑哄簱浠诲姟")
     @PostMapping("/locItem/check/task")
-    public R genStatisticalTask(@RequestBody Map<String, Object> map) {
+    public R genStatisticalTask(@RequestBody LocToTaskParams map) {
         if (Objects.isNull(map)) {
             return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
-        return locItemService.generateTask(map);
+        map.setType(Constants.TASK_TYPE_OUT_CHECK);
+        return R.ok("浠诲姟鐢熸垚鎴愬姛").add(locItemService.generateTask(map));
     }
 
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java
index 5c172a4..67dc974 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java
@@ -6,6 +6,7 @@
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.common.constant.Constants;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.enums.*;
 import com.vincent.rsf.server.common.utils.ExcelUtil;
@@ -158,7 +159,7 @@
             throw new CoolException("鑳芥暟涓嶈兘涓虹┖锛侊紒");
         }
         try {
-            return R.ok(taskService.pickOrCheckTask(id, "pick"));
+            return R.ok("鍑哄簱瀹屾垚").add(taskService.pickOrCheckTask(id, Constants.TASK_TYPE_OUT_PICK));
         } catch (Exception e) {
             throw new CoolException(e.getMessage());
         }
@@ -177,7 +178,7 @@
             throw new CoolException("鑳芥暟涓嶈兘涓虹┖锛侊紒");
         }
         try {
-            return R.ok(taskService.pickOrCheckTask(id, "check"));
+            return R.ok(taskService.pickOrCheckTask(id, Constants.TASK_TYPE_OUT_CHECK));
         } catch (Exception e) {
             throw new CoolException(e.getMessage());
         }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/LocToTaskParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/LocToTaskParams.java
new file mode 100644
index 0000000..bfada9a
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/LocToTaskParams.java
@@ -0,0 +1,32 @@
+package com.vincent.rsf.server.manager.controller.params;
+
+
+import com.vincent.rsf.server.manager.entity.LocItem;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "LocToTaskParams", description = "搴撳瓨鍑哄簱鍙傛暟")
+public class LocToTaskParams {
+
+    @ApiModelProperty("绫诲瀷锛� check:鐩樼偣鍑哄簱锛� outStock: 搴撳瓨鍑哄簱")
+    private String type;
+
+    @ApiModelProperty("鐩爣绔欑偣")
+    private String siteNo;
+
+    @ApiModelProperty("搴撲綅鏄庣粏鍒楄〃")
+    private List<LocItem> items;
+
+    @ApiModelProperty("婧愬簱浣�")
+    private String orgLoc;
+
+    @ApiModelProperty("鐩爣搴撲綅")
+    private String tarLoc;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/DeliveryTemplate.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/DeliveryTemplate.java
new file mode 100644
index 0000000..86e8297
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/DeliveryTemplate.java
@@ -0,0 +1,118 @@
+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;
+
+import java.io.Serializable;
+
+@Data
+@ExcelAutoColumnSize
+@Accessors(chain = true)
+public class DeliveryTemplate implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Excel(name = "*DO鍗曞彿")
+    @ApiModelProperty(value= "*PO鍗曞彿")
+    @ExcelComment(value = "poCode", example = "PO25413975")
+    private String poCode;
+
+    @Excel(name = "*琛屽彿")
+    @ApiModelProperty(value= "*琛屽彿")
+    @ExcelComment(value = "platItemId", example = "100068541001")
+    private String platItemId;
+
+
+    @Excel(name = "鍗曟嵁绫诲瀷")
+    @ApiModelProperty(value= "鍗曟嵁绫诲瀷")
+    @ExcelComment(value = "type", example = "鍏ュ簱鍗�")
+    private String type;
+
+    @Excel(name = "鍗曟嵁鏉ユ簮")
+    @ApiModelProperty(value= "鍗曟嵁鏉ユ簮")
+    @ExcelComment(value = "source", example = "ERP鍚屾")
+    private String source;
+
+    @Excel(name = "瀹㈠崟鍙�")
+    @ApiModelProperty(value= "瀹㈠崟鍙�")
+    @ExcelComment(value = "platOrderCode", example = "2052146822")
+    private String platOrderCode;
+
+    @Excel(name = "宸ュ崟鍙�")
+    @ApiModelProperty(value= "宸ュ崟鍙�")
+    @ExcelComment(value = "platWorkCode", example = "64875413")
+    private String platWorkCode;
+
+    @Excel(name = "椤圭洰鍙�")
+    @ApiModelProperty(value= "椤圭洰鍙�")
+    @ExcelComment(value = "projectCode", example = "65413")
+    private String projectCode;
+
+    @Excel(name = "涓氬姟绫诲瀷")
+    @ApiModelProperty(value= "涓氬姟绫诲瀷")
+    @ExcelComment(value = "wkType", example = "閲囪喘鍏ュ簱鍗�")
+    private String wkType;
+
+    @Excel(name = "椤圭洰鍚嶇О")
+    @ApiModelProperty(value= "椤圭洰鍚嶇О")
+    @ExcelComment(value = "project", example = "浜笢鐢靛晢绔嬪簱")
+    private String project;
+
+    /**
+     * 鐗╂枡缂栫爜
+     */
+    @Excel(name = "*鐗╂枡缂栫爜")
+    @ApiModelProperty(value= "*鐗╂枡缂栫爜")
+    @ExcelComment(value = "matnrCode", example = "101000000002")
+    private String matnrCode;
+
+    /**
+     *
+     */
+    @Excel(name = "鐗╂枡鍚嶇О")
+    @ApiModelProperty(value= "鐗╂枡鍚嶇О")
+    @ExcelComment(value = "matnrName", example = "TC-03128瀵歌繛浣撳唴涓婃墭")
+    private String matnrName;
+
+
+    /**
+     * 鏁伴噺
+     */
+    @Excel(name = "鏁伴噺")
+    @ApiModelProperty(value= "鏁伴噺")
+    @ExcelComment(value = "anfme", example = "75")
+    private Double anfme;
+
+    /**
+     * 渚涘簲鍟嗙紪鐮�
+     */
+    @Excel(name = "*渚涘簲鍟嗙紪鐮�")
+    @ApiModelProperty(value= "*渚涘簲鍟嗙紪鐮�")
+    @ExcelComment(value = "splrCode", example = "685947")
+    private String splrCode;
+
+    /**
+     * 渚涘簲鍟嗘壒娆�
+     */
+    @Excel(name = "渚涘簲鍟嗘壒娆�")
+    @ApiModelProperty(value= "渚涘簲鍟嗘壒娆�")
+    @ExcelComment(value = "splrBatch", example = "20250401")
+    private String splrBatch;
+
+
+    @Excel(name = "棰勮閫佽揪鏃堕棿")
+    @ApiModelProperty("棰勮閫佽揪鏃堕棿")
+    @ExcelComment(value = "arrTime", example = "2025-05-21")
+    private String arrTime;
+
+
+    @Excel(name = "澶囨敞")
+    @ApiModelProperty("澶囨敞")
+    @ExcelComment(value = "memo", example = "娉細鏄撶鍝侊紝杞绘嬁鏀�")
+    private String memo;
+
+}
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 75ddce8..4445a74 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
@@ -58,7 +58,6 @@
      * @time 2025/4/2 12:37
      */
     @Scheduled(cron = "0/3 * * * * ?")
-//    @Transactional(rollbackFor = Exception.class)
     public void completeInStock() throws Exception {
         List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id));
         if (tasks.isEmpty()) {
@@ -73,8 +72,7 @@
      * @description: 瀹屾垚鍑哄簱浠诲姟锛屾洿鏂板簱瀛�
      * @version 1.0
      */
-    @Scheduled(cron = "0/30 * * * * ?  ")
-    @Transactional(rollbackFor = Exception.class)
+    @Scheduled(cron = "0/5 * * * * ?  ")
     public void complateOutStock() throws Exception {
         List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id));
         if (tasks.isEmpty()) {
@@ -90,7 +88,7 @@
      * @description 宸插畬鎴愪换鍔″姞鍏ュ巻鍙叉。
      * @time 2025/4/3 12:54
      */
-    @Scheduled(cron = "0 0/05 * * * ?  ")
+    @Scheduled(cron = "0 0/01 * * * ?  ")
     @Transactional(rollbackFor = Exception.class)
     public void taskLogUpdate() {
         LambdaQueryWrapper<Task> queryWrapper = new LambdaQueryWrapper<Task>();
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocItemService.java
index 1aaf06c..ff4c683 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocItemService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocItemService.java
@@ -2,14 +2,16 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.server.manager.controller.params.LocToTaskParams;
 import com.vincent.rsf.server.manager.entity.LocItem;
+import com.vincent.rsf.server.manager.entity.Task;
 
 import java.util.Map;
 
 public interface LocItemService extends IService<LocItem> {
 
-    R generateTask(Map<String, Object> map);
+    R generateTask(LocToTaskParams map);
 
-    R genMoveTask(Map<String, Object> map);
+    Task genMoveTask(LocToTaskParams map);
 
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
index fa79c4c..cac3725 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
@@ -10,6 +10,8 @@
 import com.vincent.rsf.server.api.service.WcsService;
 import com.vincent.rsf.server.api.utils.LocUtils;
 import com.vincent.rsf.server.api.utils.SlaveProperties;
+import com.vincent.rsf.server.common.constant.Constants;
+import com.vincent.rsf.server.manager.controller.params.LocToTaskParams;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.enums.*;
 import com.vincent.rsf.server.manager.enums.LocType;
@@ -58,22 +60,16 @@
     @Override
     @Synchronized
     @Transactional(rollbackFor = Exception.class)
-    public R generateTask(Map<String, Object> map) {
-        String type;
-        if (!Objects.isNull(map.get("type")) && StringUtils.isNotBlank(map.get("type").toString())) {
-            type = map.get("type").toString();
-        } else {
-            type = "stock";
-        }
-        if (Objects.isNull(map.get("siteNo"))) {
+    public R generateTask(LocToTaskParams map) {
+        if (Objects.isNull(map.getSiteNo())) {
             throw new CoolException("绔欑偣涓嶈兘涓虹┖锛�");
         }
-        if (Objects.isNull(map.get("items"))) {
+        if (Objects.isNull(map.getItems()) || map.getItems().isEmpty()) {
             throw new CoolException("鏄庣粏涓嶈兘涓虹┖锛�");
         }
 
-        String siteNo = map.get("siteNo").toString();
-        List<LocItem> items = JSONArray.parseArray(JSONArray.toJSONString(map.get("items")), LocItem.class);
+        String siteNo = map.getSiteNo();
+        List<LocItem> items = map.getItems();
         Map<Long, List<LocItem>> listMap = items.stream().collect(Collectors.groupingBy(LocItem::getLocId));
         listMap.keySet().forEach(key -> {
             Task task = new Task();
@@ -87,13 +83,25 @@
                 throw new CoolException("搴撲綅鐘舵�佹洿鏂板け璐ワ紒锛�");
             }
 
+            Task moveTask = new Task();
             if (!LocUtils.isShallowLoc(slaveProperties, loc.getCode())) {
-                //TODO 鍒ゆ柇鏄惁娣卞簱浣嶏紝濡傛灉涓烘繁搴撲綅锛岄渶鐢熸垚绉诲簱浠诲姟
+                //鑾峰彇娣卞簱浣嶅搴旀祬搴撲綅
+                String shallowLoc = LocUtils.getShallowLoc(slaveProperties, loc.getCode());
+                Loc one = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLoc));
+                if (Objects.isNull(one)) {
+                    throw new CoolException("瀵瑰簲搴撲綅涓嶅瓨鍦紒锛�");
+                }
+                map.setOrgLoc(one.getCode());
+                //浼樺厛鐢熸垚绉诲簱浠诲姟
+                if (!one.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
+                    moveTask = genMoveTask(map);
+                }
             }
 
             String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null);
             task.setOrgLoc(loc.getCode())
                     .setTaskCode(ruleCode)
+                    .setParentId(moveTask.getId())
                     .setTargSite(siteNo)
                     .setTaskStatus(TaskStsType.GENERATE_OUT.id)
                     .setBarcode(loc.getBarcode());
@@ -113,7 +121,7 @@
                 throw new CoolException("鎵樼洏浠诲姟鎵ц涓紝涓嶈兘閲嶅鍒涘缓锛�");
             }
 
-            if (type.equals("stock")) {
+            if (map.getType().equals(Constants.TASK_TYPE_OUT_STOCK)) {
                 Double useQty = Math.round((outQty + workQty) * 10000) / 10000.0;
                 if (orgQty.compareTo(useQty) > 0) {
                     //鎷f枡鍑哄簱
@@ -136,7 +144,7 @@
                         throw new CoolException("绔欑偣涓嶆敮鎸佸叏鏉垮嚭搴擄紒锛�");
                     }
                 }
-            } else if (type.equals("check")) {
+            } else if (map.getType().equals(Constants.TASK_TYPE_OUT_CHECK)) {
                 //鐩樼偣鍑哄簱
                 task.setTaskType(TaskType.TASK_TYPE_CHECK_OUT.type);
                 DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
@@ -144,7 +152,7 @@
                         .eq(DeviceSite::getSite, siteNo)
                         .eq(DeviceSite::getType, TaskType.TASK_TYPE_CHECK_OUT.type));
                 if (Objects.isNull(deviceSite)) {
-                    throw new CoolException("绔欑偣涓嶆敮鎸佺洏鐐瑰嚭搴擄紒锛�");
+                    throw new CoolException("褰撳墠绔欑偣涓嶆敮鎸佺洏鐐瑰嚭搴擄紒锛�");
                 }
             }
 
@@ -199,14 +207,20 @@
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public R genMoveTask(Map<String, Object> map) {
-        if (Objects.isNull(map.get("orgLoc")) || StringUtils.isBlank(map.get("orgLoc").toString())) {
+    public Task genMoveTask(LocToTaskParams map) {
+        if (Objects.isNull(map.getOrgLoc()) || StringUtils.isBlank(map.getOrgLoc())) {
             throw new CoolException("婧愬簱浣嶄笉鑳戒负绌猴紒");
         }
 
-        Loc orgLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, map.get("orgLoc")));
+        Loc orgLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, map.getOrgLoc()));
         if (Objects.isNull(orgLoc)) {
             throw new CoolException("婧愬簱浣嶄笉瀛樺湪锛侊紒");
+        }
+
+        if (orgLoc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_R.type)
+                || orgLoc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_S.type)
+                || orgLoc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_X.type ) ) {
+            throw new CoolException("婧愬簱浣嶆湁浠诲姟姝e湪鎵ц涓�...");
         }
 
         orgLoc.setUseStatus(LocStsType.LOC_STS_TYPE_R.type);
@@ -216,7 +230,7 @@
         }
 
         Loc targetLoc = new Loc();
-        if (Objects.isNull(map.get("tarLoc")) || StringUtils.isBlank(map.get("tarLoc").toString())) {
+        if (Objects.isNull(map.getTarLoc()) || StringUtils.isBlank(map.getTarLoc())) {
             //鐩爣搴撲綅涓虹┖锛岃嚜鍔ㄨ幏鍙栨柊搴撲綅
             DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
                             .eq(DeviceSite::getType, TaskType.TASK_TYPE_LOC_MOVE.type)
@@ -237,7 +251,7 @@
             }
             targetLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, locNo.getLocNo()));
         } else {
-            targetLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, map.get("tarLoc").toString()));
+            targetLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, map.getTarLoc()));
         }
 
         if (Objects.isNull(targetLoc)) {
@@ -264,26 +278,22 @@
         }
 
         List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, orgLoc.getId()));
-        if (locItems.isEmpty()) {
-            throw new CoolException("搴撲綅鏄庣粏涓嶅瓨鍦紒锛�");
+        if (!locItems.isEmpty()) {
+            List<TaskItem> taskItems = new ArrayList<>();
+            for (LocItem item : locItems) {
+                TaskItem taskItem = new TaskItem();
+                BeanUtils.copyProperties(item, taskItem);
+                taskItem.setTaskId(task.getId())
+                        .setAnfme(item.getAnfme())
+                        .setBatch(item.getBatch())
+                        .setOrderType(OrderType.ORDER_IN.type)
+                        .setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type));
+                taskItems.add(taskItem);
+            }
+            if (!taskItemService.saveBatch(taskItems)) {
+                throw new CoolException("浠诲姟鏄庣粏鐢熸垚澶辫触锛侊紒");
+            }
         }
-
-        List<TaskItem> taskItems = new ArrayList<>();
-        for (LocItem item : locItems) {
-            TaskItem taskItem = new TaskItem();
-            BeanUtils.copyProperties(item, taskItem);
-            taskItem.setTaskId(task.getId())
-                    .setAnfme(item.getAnfme())
-                    .setBatch(item.getBatch())
-                    .setOrderType(OrderType.ORDER_IN.type)
-                    .setWkType(Short.parseShort(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type));
-            taskItems.add(taskItem);
-        }
-        if (!taskItemService.saveBatch(taskItems)) {
-            throw new CoolException("浠诲姟鏄庣粏鐢熸垚澶辫触锛侊紒");
-        }
-
-        return R.ok(task);
+        return task;
     }
-
 }
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 311fcbe..f62c67a 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
@@ -6,6 +6,7 @@
 import com.vincent.rsf.server.api.controller.params.TaskInParam;
 import com.vincent.rsf.server.api.entity.dto.InTaskMsgDto;
 import com.vincent.rsf.server.api.service.WcsService;
+import com.vincent.rsf.server.common.constant.Constants;
 import com.vincent.rsf.server.manager.enums.*;
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.framework.exception.CoolException;
@@ -167,7 +168,6 @@
             throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
         /**鑾峰彇缁勬嫋*/
-//        List<Long> ids = pakins.stream().map(WaitPakin::getId).collect(Collectors.toList());
         List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>()
                 .in(WaitPakin::getId, pakins.getId())
                 .eq(WaitPakin::getIoStatus, Short.parseShort(PakinIOStatus.PAKIN_IO_STATUS_DONE.val)));
@@ -645,17 +645,15 @@
             throw new CoolException("褰撳墠浠诲姟涓嶅瓨鍦紒锛�");
         }
         Integer type;
-        if (oType.equals("check")) {
+        if (oType.equals(Constants.TASK_TYPE_OUT_CHECK)) {
             //鐩樼偣鍏ュ簱
             type = TaskType.TASK_TYPE_CHECK_IN.type;
-
             if (!task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)) {
                 throw new CoolException("闈炵洏鐐瑰嚭搴� 锛屼笉鍙墽琛屾鎿嶄綔锛侊紒");
             }
         } else {
             //鎷f枡鍏ュ簱
             type = TaskType.TASK_TYPE_PICK_IN.type;
-
             if (!task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)) {
                 throw new CoolException("闈炴嫞鏂欏嚭搴� 锛屼笉鍙墽琛屾鎿嶄綔锛侊紒");
             }
@@ -674,11 +672,11 @@
                 .setBarcode(task.getBarcode())
                 .setTaskStatus(TaskStsType.GENERATE_IN.id);
 
-        //TODO 鏍规嵁鐗╂枡鐨勫簱浣嶇被鍨嬬敓鎴愭柊鐨勫簱浣�
         TaskInParam param = new TaskInParam();
         param.setSourceStaNo(Integer.parseInt(task.getTargSite()))
                 .setIoType(type)
                 .setLocType1(Integer.parseInt(loc.getType()));
+        //鑾峰彇鏂板簱浣�
         InTaskMsgDto locInfo = wcsService.getLocNo(param);
 
         if (Objects.isNull(locInfo)) {
@@ -746,6 +744,13 @@
         if (Objects.isNull(task)) {
             throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
+        if (StringUtils.isNotBlank(task.getParentId() + "")) {
+            Task task1 = taskService.getById(task.getParentId());
+            if (!Objects.isNull(task1)) {
+                throw new CoolException("鐖朵换鍔★細" + task1.getTaskCode() + "鏈墽琛屽畬鎴愶紒");
+            }
+        }
+
         Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc()));
         if (Objects.isNull(loc)) {
             throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�");

--
Gitblit v1.9.1