From d97d7346ec794ffa34077160bb13424f2f84bc57 Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期三, 30 四月 2025 10:47:28 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/devlop' into devlop

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java |   16 ++--
 rsf-admin/src/page/orders/wave/WaveList.jsx                                                   |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java     |   15 +++--
 rsf-admin/src/i18n/core/chineseMessages.js                                                    |    2 
 rsf-admin/src/page/orders/outStock/SelectMatnrModal.jsx                                       |    1 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java                  |   23 ++++++-
 rsf-admin/src/page/task/TaskList.jsx                                                          |    2 
 rsf-admin/src/page/orders/wave/ItemToTaskModal.jsx                                            |   32 +++++++---
 rsf-admin/src/i18n/zh.js                                                                      |    6 ++
 rsf-admin/src/page/orders/outStock/OutOrderList.jsx                                           |    6 -
 rsf-admin/src/i18n/en.js                                                                      |    7 ++
 rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx                                          |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaveController.java        |   11 +++
 rsf-admin/src/App.jsx                                                                         |    3 +
 14 files changed, 89 insertions(+), 40 deletions(-)

diff --git a/rsf-admin/src/App.jsx b/rsf-admin/src/App.jsx
index 7ede214..60630eb 100644
--- a/rsf-admin/src/App.jsx
+++ b/rsf-admin/src/App.jsx
@@ -44,6 +44,9 @@
   [
     { locale: "en", name: "English" },
     { locale: "zh", name: "绠�浣撲腑鏂�" },
+    // { locale: "zh", name: "绠�浣撲腑鏂�" },
+    // { locale: "zh", name: "绠�浣撲腑鏂�" },
+    // { locale: "zh", name: "绠�浣撲腑鏂�" },
   ],
   {
     // msg in console
diff --git a/rsf-admin/src/i18n/core/chineseMessages.js b/rsf-admin/src/i18n/core/chineseMessages.js
index 3e683fb..d61dfd5 100644
--- a/rsf-admin/src/i18n/core/chineseMessages.js
+++ b/rsf-admin/src/i18n/core/chineseMessages.js
@@ -95,7 +95,7 @@
       delete_title: "鍒犻櫎 %{name} #%{id}",
       details: "Details",
       error: "A client error occurred and your request couldn't be completed.",
-
+      
       invalid_form: "琛ㄥ崟鏃犳晥 璇锋鏌ユ槸鍚︽湁閿欒!",
       loading: "Please wait",
       no: "No",
diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js
index c5127a8..199d83f 100644
--- a/rsf-admin/src/i18n/en.js
+++ b/rsf-admin/src/i18n/en.js
@@ -1028,6 +1028,13 @@
         order: 'Orders',
 
     },
+    request: {
+        error: {
+            stock: "Insufficient inventory to deliver 锛侊紒"
+        }
+
+    }
+
 };
 
 export default customEnglishMessages;
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index 12b7024..f229ecc 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -1042,6 +1042,12 @@
         createWave: "鐢熸垚娉㈡",
         recover: "缁х画鏀惰揣",
     },
+    request: {
+        error: {
+            stock: "搴撳瓨涓嶈冻锛屾棤娉曟彁浜わ紒锛�"
+        }
+
+    }
 };
 
 export default customChineseMessages;
diff --git a/rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx b/rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx
index 6c2dc38..1b9a2f1 100644
--- a/rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx
+++ b/rsf-admin/src/page/orders/asnOrder/AsnOrderModal.jsx
@@ -66,9 +66,7 @@
     const notify = useNotify();
     const refresh = useRefresh();
     const [disabled, setDisabled] = useState(false)
-
     const [createDialog, setCreateDialog] = useState(false);
-
     const tableRef = useRef();
 
     useEffect(() => {
diff --git a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
index 2b181eb..267a114 100644
--- a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
@@ -51,7 +51,7 @@
 import DictionarySelect from "../../components/DictionarySelect";
 import ImportButton from "../../components/ImportButton";
 import DetailsIcon from '@mui/icons-material/Details';
-import CancelIcon from '@mui/icons-material/Cancel';
+import CancelOutlinedIcon from '@mui/icons-material/CancelOutlined';
 import OutOrderCreate from "./OutOrderCreate";
 import AddIcon from '@mui/icons-material/Add';
 import OutOrderModal from "./OutOrderModal";
@@ -266,14 +266,12 @@
   return (
     <Button onClick={createByOrder} label={'toolbar.asnCreate'}> <AddIcon /> </Button>
   )
-
 }
 
 const CancelButton = () => {
   const record = useRecordContext();
   const notify = useNotify();
   const refresh = useRefresh();
-
   const cancelOrder = async () => {
     const { data: { code, data, msg } } = await request.get(`/outStock/cancel/${record?.id}`);
     if (code === 200) {
@@ -285,6 +283,6 @@
   }
 
   return (
-    <ConfirmButton label={"toolbar.cancel"} startIcon={<CancelIcon />} onConfirm={cancelOrder} />
+     record?.exceStatus == 0 ? <ConfirmButton label={"toolbar.cancel"} startIcon={<CancelOutlinedIcon />  } onConfirm={cancelOrder} /> : <></>
   )
 }
diff --git a/rsf-admin/src/page/orders/outStock/SelectMatnrModal.jsx b/rsf-admin/src/page/orders/outStock/SelectMatnrModal.jsx
index 9c9b9be..08a9667 100644
--- a/rsf-admin/src/page/orders/outStock/SelectMatnrModal.jsx
+++ b/rsf-admin/src/page/orders/outStock/SelectMatnrModal.jsx
@@ -133,7 +133,6 @@
                 "orders": formData,
                 "items": tabelData,
             }
-
             const res = await request.post(`/outStock/items/save`, parmas);
             if (res?.data?.code === 200) {
                 setOpen(false);
diff --git a/rsf-admin/src/page/orders/wave/ItemToTaskModal.jsx b/rsf-admin/src/page/orders/wave/ItemToTaskModal.jsx
index d37edc4..281f83e 100644
--- a/rsf-admin/src/page/orders/wave/ItemToTaskModal.jsx
+++ b/rsf-admin/src/page/orders/wave/ItemToTaskModal.jsx
@@ -150,7 +150,7 @@
                 </DialogContent>
                 <DialogActions>
                     <Toolbar sx={{ width: '100%', justifyContent: 'end' }} >
-                        <GenerateTaskButton record={record?.id} dataSource={data} />
+                        <GenerateTaskButton record={record?.id} dataSource={data} setOpen={setOpen}/>
                     </Toolbar>
                 </DialogActions>
             </Dialog>
@@ -160,22 +160,32 @@
 
 export default ItemToTaskModal;
 
-const GenerateTaskButton = (record, dataSource) => {
+const GenerateTaskButton = (record) => {
     const refresh = useRefresh();
     const notify = useNotify();
     const redirect = useRedirect();
+    const translate = useTranslate();
+    const { locs, setLocs } = useState([]);
     const generateTask = async () => {
-        const params = {wave: record, waveItem: dataSource}
-        console.log('---------->');
-        console.log(record);
-        const res = await request.post(`/wave/public/task`, { wave: record?.record, waveItem: record?.dataSource });
-        if (res?.data?.code === 200) {
-            notify(res.data.msg);
-            redirect("/task")
+        record?.dataSource.map(item => {
+            const loc = JSON.parse(item.stockLocs);
+            if (loc != undefined && loc.length > 0) {
+                setLocs(...loc)
+            }
+        })
+        if (locs == undefined || locs.length < 1) {
+            notify(translate('request.error.stock'))
         } else {
-            notify(res.data.msg);
+            const res = await request.post(`/wave/public/task`, { wave: record?.record, waveItem: record?.dataSource });
+            if (res?.data?.code === 200) {
+                record.setOpen(false)
+                notify(res.data.msg);
+                redirect("/task")
+            } else {
+                notify(res.data.msg);
+            }
+            refresh();
         }
-        refresh();
     }
     return (<Button variant="contained" label={"ra.action.save"} onClick={generateTask}></Button>)
 }
diff --git a/rsf-admin/src/page/orders/wave/WaveList.jsx b/rsf-admin/src/page/orders/wave/WaveList.jsx
index c1af1e3..eec93fe 100644
--- a/rsf-admin/src/page/orders/wave/WaveList.jsx
+++ b/rsf-admin/src/page/orders/wave/WaveList.jsx
@@ -184,11 +184,12 @@
     const notify = useNotify();
     const refresh = useRefresh();
     const redirect = useRedirect();
+    
     const pubClick = async (event) => {
         setSelectIds(record);
         setDetailDialog(true);
     }
     return (
-        <ConfirmButton label={"toolbar.createTask"} startIcon={<PublicIcon />} onConfirm={pubClick} />
+        record?.exceStatus == 0 ? <ConfirmButton label={"toolbar.createTask"} startIcon={<PublicIcon /> } onConfirm={pubClick} size='small' /> : <></>
     );
 }
\ No newline at end of file
diff --git a/rsf-admin/src/page/task/TaskList.jsx b/rsf-admin/src/page/task/TaskList.jsx
index 84fd054..0904353 100644
--- a/rsf-admin/src/page/task/TaskList.jsx
+++ b/rsf-admin/src/page/task/TaskList.jsx
@@ -103,7 +103,7 @@
                 title={"menu.task"}
                 empty={false}
                 filters={filters}
-                sort={{ field: "sort", order: "desc" }}
+                sort={{ field: "create_time", order: "desc" }}
                 actions={(
                     <TopToolbar>
                         <FilterButton />
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaveController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaveController.java
index d21aa52..b527b50 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaveController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaveController.java
@@ -12,8 +12,10 @@
 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.manager.entity.TaskItem;
 import com.vincent.rsf.server.manager.entity.Wave;
 import com.vincent.rsf.server.manager.entity.WaveItem;
+import com.vincent.rsf.server.manager.service.TaskItemService;
 import com.vincent.rsf.server.manager.service.WaveService;
 import com.vincent.rsf.server.system.controller.BaseController;
 import io.swagger.annotations.ApiOperation;
@@ -30,6 +32,8 @@
 
     @Autowired
     private WaveService waveService;
+    @Autowired
+    private TaskItemService taskItemService;
 
     @PreAuthorize("hasAuthority('manager:wave:list')")
     @PostMapping("/wave/page")
@@ -85,6 +89,13 @@
     @OperationLog("Delete 娉㈡鍗曟嵁")
     @PostMapping("/wave/remove/{ids}")
     public R remove(@PathVariable Long[] ids) {
+        if (Objects.isNull(ids)) {
+            throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().in(TaskItem::getSourceId, ids));
+        if (taskItems.isEmpty()) {
+            throw new CoolException("鏈夋湭瀹屾垚浠诲姟锛屼笉鍙墽琛屽垹闄ゆ搷浣滐紒锛�");
+        }
         if (!waveService.removeByIds(Arrays.asList(ids))) {
             return R.error("Delete Fail");
         }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java
index 2bb3cf0..976a609 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java
@@ -1,6 +1,5 @@
 package com.vincent.rsf.server.manager.entity;
 
-import com.baomidou.mybatisplus.annotation.TableLogic;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
@@ -10,12 +9,9 @@
 import com.vincent.rsf.server.system.service.DictDataService;
 import lombok.experimental.Accessors;
 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;
@@ -25,7 +21,6 @@
 import com.vincent.rsf.server.system.service.UserService;
 import com.vincent.rsf.server.system.entity.User;
 import java.io.Serializable;
-import java.util.Date;
 import java.util.Objects;
 
 @Data
@@ -60,6 +55,12 @@
 
     @ApiModelProperty("婧愮紪鐮�")
     private Long source;
+
+    @ApiModelProperty("婧愬崟鍙�")
+    private String sourceCode;
+
+    @ApiModelProperty("婧愪富鍗旾D")
+    private Long sourceId;
 
     @ApiModelProperty("鍗曟嵁ID")
     private Long orderId;
@@ -99,6 +100,18 @@
     private Double anfme;
 
     /**
+     * 鎵ц鏁伴噺
+     */
+    @ApiModelProperty("搴撳瓨鏁伴噺")
+    private Double workQty;
+
+    /**
+     * 瀹屾垚鏁伴噺
+     */
+    @ApiModelProperty("瀹屾垚鏁伴噺")
+    private Double qty;
+
+    /**
      * 搴撳瓨鎵规
      */
     @ApiModelProperty(value= "搴撳瓨鎵规")
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 464ab07..4b139ae 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
@@ -301,7 +301,7 @@
         double sum2 = orderItems.stream().mapToDouble(AsnOrderItem::getWorkQty).sum();
         if (!this.update(new LambdaUpdateWrapper<AsnOrder>()
                 .set(AsnOrder::getWaveId, wave.getId())
-                        .set(AsnOrder::getWorkQty, sum2)
+                .set(AsnOrder::getWorkQty, sum2)
                 .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WAVE.val)
                 .in(AsnOrder::getId, ids))) {
             throw new CoolException("鎵ц鐘舵�佷慨鏀逛慨鏀瑰け璐ワ紒锛�");
@@ -310,10 +310,10 @@
     }
 
     /**
-     * @author Ryan
-     * @description 淇濆瓨鍑哄簱涓诲崟鍙婃槑缁�
      * @param
      * @return
+     * @author Ryan
+     * @description 淇濆瓨鍑哄簱涓诲崟鍙婃槑缁�
      * @time 2025/4/29 13:47
      */
     @Override
@@ -334,9 +334,9 @@
         if (Objects.isNull(ruleCode) || StringUtils.isBlank(ruleCode)) {
             throw new CoolException("缂栫爜瑙勫垯閿欒锛氳妫�鏌ャ�孲YS_OUT_STOCK_CODE銆嶆槸鍚﹁缃纭紒锛�");
         }
-
         orders.setCode(ruleCode)
                 .setType(OrderType.ORDER_OUT.type)
+                .setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val)
                 .setUpdateBy(loginUserId)
                 .setCreateBy(loginUserId);
         if (!this.save(orders)) {
@@ -347,7 +347,7 @@
         }
         params.setOrders(orders);
         try {
-            svaeOrUpdateOrderItem(params,loginUserId);
+            svaeOrUpdateOrderItem(params, loginUserId);
         } catch (Exception e) {
             throw new CoolException(e.getMessage());
         }
@@ -357,10 +357,10 @@
 
 
     /**
-     * @author Ryan
-     * @description 淇敼涓诲崟鍙婃槑缁�
      * @param
      * @return
+     * @author Ryan
+     * @description 淇敼涓诲崟鍙婃槑缁�
      * @time 2025/4/29 13:47
      */
     @Override
@@ -380,7 +380,7 @@
         }
 
         try {
-            svaeOrUpdateOrderItem(params,loginUserId);
+            svaeOrUpdateOrderItem(params, loginUserId);
         } catch (Exception e) {
             throw new CoolException(e.getMessage());
         }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java
index 73b2acd..f347e0b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java
@@ -68,7 +68,6 @@
         if (Objects.isNull(waves)) {
             throw new CoolException("娉㈡鏁版嵁涓嶅瓨鍦紒锛�");
         }
-//        List<Long> list = itemParams.stream().map(WaveItem::getWaveId).collect(Collectors.toList());
         List<WaveItem> waveItems = waveItemService.list(new LambdaQueryWrapper<WaveItem>().eq(WaveItem::getWaveId, waves.getId()));
         if (waveItems.isEmpty()) {
             throw new CoolException("娉㈡鏄庣粏涓嶅瓨鍦紒锛�");
@@ -85,17 +84,12 @@
         // 3. 淇敼涓诲崟銆佹尝娆℃墽琛屾暟閲�
         // 4. 鍒ゆ柇鍏ㄤ粨鍑哄簱鎴栨嫞鏂欏嚭搴�
         List<Long> orderIds = waveItems.stream().map(WaveItem::getOrderId).collect(Collectors.toList());
-//        List<AsnOrder> orders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, orderIds));
         /**淇敼鍑哄簱鍗曠姸鎬�*/
         if (!asnOrderService.update(new LambdaUpdateWrapper<AsnOrder>()
                 .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WORKING.val)
                 .in(AsnOrder::getId, orderIds))) {
             throw new CoolException("鍑哄簱鍗曟嵁鐘舵�佷慨鏀瑰け璐ワ紒锛�");
         }
-//        /**淇敼娉㈡鍗曟嵁鎵ц鐘舵��*/
-//        if (!this.update(new LambdaUpdateWrapper<Wave>().set(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_TASK).eq(Wave::getId, waves.getId()))) {
-//            throw new CoolException("娉㈡鐘舵�佷慨鏀瑰け璐ワ紒锛�");
-//        }
         return R.ok();
     }
 
@@ -160,6 +154,12 @@
             if (Objects.isNull(loc)) {
                 throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�");
             }
+
+            List<TaskItem> items = taskItemService.list(new LambdaQueryWrapper<TaskItem>().in(TaskItem::getSourceId, wave.getId()));
+            if (items.isEmpty()) {
+                throw new CoolException("娉㈡浠诲姟宸茬敓鎴愶紝涓嶈兘閲嶅鐢熸垚锛侊紒");
+            }
+
             task.setTaskCode(ruleCode)
                     .setTaskType(TaskType.TASK_TYPE_OUT.type)
                     .setTaskStatus(TaskStsType.GENERATE_OUT.id)
@@ -178,7 +178,10 @@
                 TaskItem taskItem = new TaskItem();
                 BeanUtils.copyProperties(item, taskItem);
                 taskItem.setTaskId(task.getId())
+                        .setAnfme(waveItem.getAnfme())
                         .setId(null)
+                        .setSourceCode(wave.getCode())
+                        .setSourceId(wave.getId())
                         .setSource(item.getWaveItemId());
                 taskItems.add(taskItem);
             }

--
Gitblit v1.9.1