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