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