From f2833c7f3e01c997e94a66bd5dd9be738b5c6cc7 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期四, 26 六月 2025 13:31:08 +0800 Subject: [PATCH] 波次任务下发功能优化 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaveItem.java | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaveItemController.java | 6 +- rsf-admin/src/page/orders/wave/WaveItemList.jsx | 19 +++-- rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java | 7 ++ rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java | 62 +++++++++++--------- rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/WaveItemExceStatus.java | 6 +- rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/WaveExceStatus.java | 6 +- rsf-server/src/main/resources/application.yml | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Wave.java | 27 +++++---- rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/WaveSchedules.java | 38 +++++++----- 10 files changed, 100 insertions(+), 75 deletions(-) diff --git a/rsf-admin/src/page/orders/wave/WaveItemList.jsx b/rsf-admin/src/page/orders/wave/WaveItemList.jsx index 7dfda50..0439bed 100644 --- a/rsf-admin/src/page/orders/wave/WaveItemList.jsx +++ b/rsf-admin/src/page/orders/wave/WaveItemList.jsx @@ -37,6 +37,7 @@ } from 'react-admin'; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; import PauseCircleOutlineIcon from '@mui/icons-material/PauseCircleOutline'; +import StopCircleOutlinedIcon from '@mui/icons-material/StopCircleOutlined'; import PlayArrowOutlinedIcon from '@mui/icons-material/PlayArrowOutlined'; import { Box, Typography, Card, Stack } from '@mui/material'; import ContentCreate from '@mui/icons-material/Create'; @@ -150,7 +151,7 @@ <TextField source="memo" label="common.field.memo" sortable={false} /> <TextField source="exceStatus$" label="table.field.waveItem.exceStatus" /> <WrapperField cellClassName="opt" label="common.field.opt"> - <BulkPauseButton /> + <PauseButton /> <ContinueButton /> </WrapperField> </StyledDatagrid> @@ -209,36 +210,38 @@ ) } -const BulkPauseButton = () => { - const { data, selectedIds, onUnselectItems } = useListContext(); +const PauseButton = () => { const notify = useNotify() + const refresh = useRefresh(); const record = useRecordContext(); const pauseClick = async () => { - const { data: { code, data, msg } } = await request.post('/waveItem/pause/pub', { wave: waveId, waveItem: selectedIds }); + const { data: { code, data, msg } } = await request.post('/waveItem/pause/pub/' + record?.id); if (code === 200) { notify(msg); } else { notify(msg); } + refresh() } return ( - record?.exceStatus == 1 ? <Button label="toolbar.pause" onClick={pauseClick} startIcon={<PauseCircleOutlineIcon />} /> : <></> + record?.exceStatus == 1 ? <Button label="toolbar.pause" onClick={pauseClick} startIcon={<StopCircleOutlinedIcon />} /> : <></> ) } const ContinueButton = () => { - const { data, selectedIds, onUnselectItems } = useListContext(); const notify = useNotify() + const refresh = useRefresh(); const record = useRecordContext(); const continueClick = async () => { - const { data: { code, data, msg } } = await request.post('/waveItem/continue/pub', { wave: waveId, waveItem: selectedIds }); + const { data: { code, data, msg } } = await request.post('/waveItem/continue/pub/' + record?.id); if (code === 200) { notify(msg); } else { notify(msg); } + refresh() } return ( - record?.exceStatus == 4 ? <Button label="toolbar.continuePub" onClick={continueClick} startIcon={<PauseCircleOutlineIcon />} /> : <></> + record?.exceStatus == 2 ? <Button label="toolbar.continuePub" onClick={continueClick} startIcon={<PauseCircleOutlineIcon />} /> : <></> ) } \ No newline at end of file diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaveItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaveItemController.java index e99ef55..79ecc2a 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaveItemController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaveItemController.java @@ -113,7 +113,7 @@ @PreAuthorize("hasAuthority('manager:waveItem:update')") @ApiOperation("鏆傚仠涓嬪彂浠诲姟") - @PostMapping("/waveItem/pause/pub") + @PostMapping("/waveItem/pause/pub/{id}") public R pausePublicTask(@PathVariable Long id) { waveItemService.update(new LambdaUpdateWrapper<WaveItem>() .eq(WaveItem::getId, id) @@ -123,11 +123,11 @@ @PreAuthorize("hasAuthority('manager:waveItem:update')") @ApiOperation("缁х画涓嬪彂浠诲姟") - @PostMapping("/waveItem/continue/pub") + @PostMapping("/waveItem/continue/pub/{id}") public R continuePublicTask(@PathVariable Long id) { waveItemService.update(new LambdaUpdateWrapper<WaveItem>() .eq(WaveItem::getId, id) - .set(WaveItem::getExceStatus, WaveItemExceStatus.WAVE_ITEM_EXCE_STATUS_UN.val)); + .set(WaveItem::getExceStatus, WaveItemExceStatus.WAVE_EXCE_STATUS_ING.val)); return R.ok(); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Wave.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Wave.java index cfd4a73..0572776 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Wave.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Wave.java @@ -3,7 +3,11 @@ import java.text.SimpleDateFormat; import java.util.Date; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fasterxml.jackson.annotation.JsonFormat; +import com.vincent.rsf.server.system.constant.DictTypeCode; +import com.vincent.rsf.server.system.entity.DictData; +import com.vincent.rsf.server.system.service.DictDataService; import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; import java.text.SimpleDateFormat; @@ -23,6 +27,7 @@ import com.vincent.rsf.server.system.entity.User; import java.io.Serializable; import java.util.Date; +import java.util.Objects; @Data @TableName("man_wave") @@ -185,19 +190,17 @@ } public String getExceStatus$(){ - if (null == this.exceStatus){ return null; } - switch (this.exceStatus){ - case 0: - return "鍒濆鍖�"; - case 1: - return "鐢熸垚浠诲姟"; - case 2: - return "浠诲姟鎾"; - case 3: - return "瀹屾垚"; - default: - return String.valueOf(this.exceStatus); + if (Cools.isEmpty(this.exceStatus)) { + return null; } + DictDataService dictDataService = SpringUtils.getBean(DictDataService.class); + DictData dictDatas = dictDataService.getOne(new LambdaQueryWrapper<DictData>() + .eq(DictData::getDictTypeCode, DictTypeCode.SYS_WAVE_EXCE_STATUS) + .eq(DictData::getValue, this.exceStatus)); + if (Objects.isNull(dictDatas) || Objects.isNull(dictDatas.getLabel())) { + return null; + } + return dictDatas.getValue() + "." + dictDatas.getLabel(); } public String getStatus$(){ diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaveItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaveItem.java index 971ec72..23c85fb 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaveItem.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaveItem.java @@ -270,7 +270,7 @@ } DictDataService dictDataService = SpringUtils.getBean(DictDataService.class); DictData dictDatas = dictDataService.getOne(new LambdaQueryWrapper<DictData>() - .eq(DictData::getDictTypeCode, DictTypeCode.SYS_WAVE_EXCE_STATUS) + .eq(DictData::getDictTypeCode, DictTypeCode.SYS_WAVE_ITEM_EXCE_STATUS) .eq(DictData::getValue, this.exceStatus)); if (Objects.isNull(dictDatas) || Objects.isNull(dictDatas.getLabel())) { return null; diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/WaveExceStatus.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/WaveExceStatus.java index a590c90..eb60648 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/WaveExceStatus.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/WaveExceStatus.java @@ -11,9 +11,9 @@ //娉㈡鎵ц鐘舵�� WAVE_EXCE_STATUS_INIT("0", "鍒濆鍖�"), - WAVE_EXCE_STATUS_TASK("1", "鐢熸垚浠诲姟"), - WAVE_EXCE_STATUS_SPEED("2", "鎾浠诲姟"), - WAVE_EXCE_STATUS_DONE("3", "瀹屾垚"), + WAVE_EXCE_STATUS_EXCING("1", "鎵ц涓�"), + WAVE_EXCE_STATUS_TASK("2", "鐢熸垚浠诲姟"), + WAVE_EXCE_STATUS_DONE("3", "浠诲姟瀹屾垚"), ; WaveExceStatus(String val, String desc) { diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/WaveItemExceStatus.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/WaveItemExceStatus.java index 328b013..98d7303 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/WaveItemExceStatus.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/WaveItemExceStatus.java @@ -13,9 +13,9 @@ //娉㈡鎵ц鐘舵�� WAVE_ITEM_EXCE_STATUS_UN("0", "鏈墽琛�"), WAVE_EXCE_STATUS_ING("1", "鎵ц涓�"), - WAVE_EXCE_STATUS_SEED("2", "宸蹭笅鍙�"), - WAVE_ITEM_EXCE_PAUSE("4", "鏆傚仠"), - WAVE_EXCE_STATUS_DONE("3", "涓嬪彂瀹屾垚"), + WAVE_ITEM_EXCE_PAUSE("2", "鏆傚仠"), + WAVE_EXCE_STATUS_PUBD("3", "宸蹭笅鍙�"), + WAVE_EXCE_STATUS_DONE("4", "浠诲姟瀹屾垚"), ; WaveItemExceStatus(String val, String desc) { diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/WaveSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/WaveSchedules.java index 165262d..a571ee6 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/WaveSchedules.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/WaveSchedules.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.common.constant.Constants; import com.vincent.rsf.server.manager.entity.Wave; @@ -10,6 +11,7 @@ import com.vincent.rsf.server.manager.enums.WaveItemExceStatus; import com.vincent.rsf.server.manager.service.WaveItemService; import com.vincent.rsf.server.manager.service.WaveService; +import com.vincent.rsf.server.manager.service.impl.TaskItemServiceImpl; import com.vincent.rsf.server.system.constant.GlobalConfigCode; import com.vincent.rsf.server.system.entity.Config; import com.vincent.rsf.server.system.service.ConfigService; @@ -19,10 +21,7 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -44,7 +43,8 @@ @Autowired private ConfigService configService; - + @Autowired + private TaskItemServiceImpl taskItemService; /** @@ -55,23 +55,30 @@ * @time 2025/6/23 13:52 */ @Scheduled(cron = "0/15 * * * * ?") - @Transactional(rollbackFor = Exception.class) +// @Transactional(rollbackFor = Exception.class) public void autoGenerateTask() { Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.WAVE_AUTO_EXCE_TASK)); if (Objects.isNull(config) || !Boolean.parseBoolean(config.getVal())) { return; } - List<Wave> list = waveService.list(new LambdaQueryWrapper<Wave>() - .select(Wave::getId) - .eq(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_INIT.val)); - if (list.isEmpty()) { - return; - } - List<Long> longs = list.stream().map(Wave::getId).collect(Collectors.toList()); +// List<Wave> list = waveService.list(new LambdaQueryWrapper<Wave>() +// .select(Wave::getId) +// .in(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_INIT.val +// , WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val)); +// if (list.isEmpty()) { +// return; +// } +// List<Long> longs = list.stream().map(Wave::getId).collect(Collectors.toList()); List<WaveItem> waveItems = waveItemService.list(new LambdaQueryWrapper<WaveItem>() - .in(WaveItem::getWaveId, longs) - .eq(WaveItem::getExceStatus, WaveItemExceStatus.WAVE_ITEM_EXCE_STATUS_UN.val)); + .in(WaveItem::getExceStatus, Arrays.asList(WaveItemExceStatus.WAVE_ITEM_EXCE_STATUS_UN.val + , WaveItemExceStatus.WAVE_EXCE_STATUS_ING.val))); + + waveItemService.update(new LambdaUpdateWrapper<WaveItem>() + .set(WaveItem::getExceStatus, WaveItemExceStatus.WAVE_EXCE_STATUS_ING.val) + .apply("anfme > work_qty") + ); + if (waveItems.isEmpty()) { return; } @@ -85,4 +92,5 @@ waveService.waveToTask(params, loginUserId); }); } + } 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 e73c78f..96dcb4b 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 @@ -138,6 +138,12 @@ throw new CoolException("娉㈡鏄庣粏涓嶅瓨鍦紒锛�"); } + if (!waveItemService.update(new LambdaUpdateWrapper<WaveItem>() + .set(WaveItem::getExceStatus, WaveItemExceStatus.WAVE_EXCE_STATUS_ING.val) + .in(WaveItem::getId, waveItems))) { + throw new CoolException("鎵ц鐘舵�佷慨鏀瑰け璐ワ紒锛�"); + } + WaveRule waveRule = waveRuleService.getOne(new LambdaQueryWrapper<WaveRule>() .eq(WaveRule::getType, WaveRuleType.First_In_First_Out.type)); if (Cools.isEmpty(waveRule)) { @@ -154,7 +160,14 @@ params.add(locParams); } List<OrderOutItemDto> results = LocManageUtil.getOutOrderList(params, waveRule); - + if (results.isEmpty()) { + waveService.update(new LambdaUpdateWrapper<Wave>() + .set(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val) + .set(Wave::getUpdateBy, loginUserId) + .set(Wave::getUpdateTime, new Date()) + .eq(Wave::getId, waveId)); + return R.ok(); + } /**鐢熸垚鍑哄簱浠诲姟*/ try { generateOutTask(results, loginUserId, waves); @@ -163,21 +176,36 @@ throw new CoolException(e.getMessage()); } - List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().in(TaskItem::getSource, waveItems)); + List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>() + .in(TaskItem::getSource, waveItems)); if (Cools.isEmpty(taskItems)) { - throw new CoolException("鏁版嵁閿欒锛氭尝娆℃槑缁嗗凡涓嶅瓨鍦紒锛�"); + throw new CoolException("鏆傛棤鍚堥�傚簱瀛樹俊鎭紒锛�"); } for (TaskItem item : taskItems) { + WaveItem waveItem = waveItemService.getById(item.getSource()); + + Double workQty = Math.round((waveItem.getWorkQty() + item.getAnfme()) * 10000) / 10000.0; + waveItem.setWorkQty(workQty); + if (workQty.compareTo(waveItem.getAnfme()) < 0) { + waveItem.setExceStatus(WaveItemExceStatus.WAVE_EXCE_STATUS_ING.val); + } else { + waveItem.setExceStatus(WaveItemExceStatus.WAVE_EXCE_STATUS_PUBD.val); + } + if (!waveItemService.update(new LambdaUpdateWrapper<WaveItem>() - .set(WaveItem::getExceStatus, WaveItemExceStatus.WAVE_EXCE_STATUS_ING.val) - .set(WaveItem::getWorkQty, item.getAnfme()) - .in(WaveItem::getId, waveItems))) { + .set(WaveItem::getExceStatus, WaveItemExceStatus.WAVE_EXCE_STATUS_PUBD.val) + .setSql("work_qty = work_qty + " + item.getAnfme()) + .set(WaveItem::getUpdateBy, loginUserId) + .set(WaveItem::getUpdateTime, new Date()) + .eq(WaveItem::getId, item.getSource()))) { throw new CoolException("涓嬪彂鎵ц寮傚父锛岃绋嶅�欓噸璇曪紒"); } } if (!waveService.update(new LambdaUpdateWrapper<Wave>() .set(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_TASK.val) .set(Wave::getWorkQty, taskItems.stream().mapToDouble(TaskItem::getAnfme).sum()) + .set(Wave::getUpdateBy, loginUserId) + .set(Wave::getUpdateTime, new Date()) .eq(Wave::getId, waveId))) { throw new CoolException("娉㈡鐘舵�佷慨鏀瑰け璐ワ紒锛�"); } @@ -196,7 +224,6 @@ @Synchronized @Transactional(rollbackFor = Exception.class) public void generateOutTask(List<OrderOutItemDto> itemParams, Long loginUserId, Wave wave) throws Exception { - for (OrderOutItemDto itemDto : itemParams) { LocToTaskParams taskParams = new LocToTaskParams(); Loc loc = locService.getById(itemDto.getLocId()); @@ -210,27 +237,6 @@ .setTarLoc(loc.getCode()); locItemService.generateTask(TaskResouceType.TASK_RESOUCE_WAVE_TYPE.val, taskParams, loginUserId); } - -// /**淇敼娉㈡鎵ц鏁伴噺*/ -// taskItems.forEach(item -> { -// boolean update = waveItemService.update(new LambdaUpdateWrapper<WaveItem>() -// .eq(WaveItem::getId, item.getSource()) -// .set(WaveItem::getExceStatus, WaveItemExceStatus.WAVE_EXCE_STATUS_SEED.val) -// .set(WaveItem::getWorkQty, item.getAnfme())); -// if (!update) { -// throw new CoolException("娉㈡鎵ц鏁伴噺淇敼澶辫触锛侊紒"); -// } -// }); -// -// List<WaveItem> waveItems = waveItemService.list(new LambdaQueryWrapper<WaveItem>().eq(WaveItem::getWaveId, wave.getId())); -// double sum = waveItems.stream().mapToDouble(WaveItem::getWorkQty).sum(); -// /**娉㈡涓诲崟淇℃伅淇敼*/ -// if (!this.update(new LambdaUpdateWrapper<Wave>() -// .eq(Wave::getId, wave.getId()) -// .set(Wave::getWorkQty, sum) -// .set(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_TASK.val))) { -// throw new CoolException("娉㈡涓诲崟淇℃伅淇敼澶辫触锛侊紒"); -// } } /** diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java index 135674c..e7b98cb 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java @@ -71,8 +71,13 @@ public final static String SYS_WAVE_RULE_CODE = "sys_wave_rule_code"; /** + * 娉㈡鏄庣粏涓嬪彂鎵ц鐘舵�� + */ + public final static String SYS_WAVE_ITEM_EXCE_STATUS = "sys_wave_item_exce_status"; + + + /** * 娉㈡涓嬪彂鎵ц鐘舵�� */ public final static String SYS_WAVE_EXCE_STATUS = "sys_wave_exce_status"; - } diff --git a/rsf-server/src/main/resources/application.yml b/rsf-server/src/main/resources/application.yml index db51329..ac31a5b 100644 --- a/rsf-server/src/main/resources/application.yml +++ b/rsf-server/src/main/resources/application.yml @@ -25,7 +25,7 @@ # global-config: # field-strategy: 0 configuration: - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl +# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true cache-enabled: true call-setters-on-nulls: true -- Gitblit v1.9.1