rsf-admin/src/page/orders/outStock/OutOrderList.jsx
@@ -134,12 +134,12 @@ console.log('=====>'); console.log(value); console.log(selectIds); // const res = await request.post(`/outStock/generate/wave`, { ids: selectIds }); // if (res?.data?.code === 200) { // notify(res.data.msg); // } else { // notify(res.data.msg); // } const res = await request.post(`/outStock/generate/wave`, { ids: selectIds, waveRuleId: value.id }); if (res?.data?.code === 200) { notify(res.data.msg); } else { notify(res.data.msg); } } return ( rsf-admin/src/page/orders/wave/WaveList.jsx
@@ -8,34 +8,26 @@ SelectColumnsButton, EditButton, FilterButton, CreateButton, ExportButton, BulkDeleteButton, WrapperField, useRecordContext, useTranslate, useNotify, useListContext, FunctionField, TextField, NumberField, DateField, BooleanField, ReferenceField, TextInput, DateTimeInput, DateInput, SelectInput, NumberInput, ReferenceInput, ReferenceArrayInput, AutocompleteInput, DeleteButton, useRefresh, useRedirect, Button, } from 'react-admin'; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; import PlayArrowOutlinedIcon from '@mui/icons-material/PlayArrowOutlined'; import PauseCircleOutlineIcon from '@mui/icons-material/PauseCircleOutline'; import { Box, Typography, Card, Stack } from '@mui/material'; import ConfirmButton from "../../components/ConfirmButton"; import PageDrawer from "../../components/PageDrawer"; @@ -118,6 +110,8 @@ sort={{ field: "create_time", order: "desc" }} actions={( <TopToolbar> <BulkStartButton /> <BulkPauseButton /> <FilterButton /> <SelectColumnsButton preferenceKey='wave' /> </TopToolbar> @@ -187,3 +181,25 @@ record?.exceStatus == 0 ? <ConfirmButton label={"toolbar.createTask"} startIcon={<PublicIcon />} onConfirm={pubClick} size='small' /> : <></> ); } const BulkStartButton = () => { const { data, selectedIds, onUnselectItems } = useListContext(); const startClick = () => { onUnselectItems() } return ( <Button label="toolbar.start" onClick={startClick} startIcon={<PlayArrowOutlinedIcon />} /> ) } const BulkPauseButton = () => { const { data, selectedIds, onUnselectItems } = useListContext(); const pauseClick = () => { onUnselectItems() } return ( <Button label="toolbar.pause" onClick={pauseClick} startIcon={<PauseCircleOutlineIcon />} /> ) } rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java
@@ -9,6 +9,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.manager.controller.params.GenWaveParams; import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam; import com.vincent.rsf.server.manager.controller.params.OutStockToTaskParams; import com.vincent.rsf.server.manager.entity.DeliveryItem; @@ -239,12 +240,11 @@ @PreAuthorize("hasAuthority('manager:outStock:update')") @ApiOperation("出库单生成波次") @PostMapping("/outStock/generate/wave") public R generateWave(@RequestBody Map<String, Object> params) { public R generateWave(@RequestBody GenWaveParams params) { if (Objects.isNull(params)) { return R.error("参数不能为空!!"); } List<Long> ids = (List<Long>) params.get("ids"); return outStockService.generateWaves(ids); return outStockService.generateWaves(params); } @PostMapping("/outStock/items/save") rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/GenWaveParams.java
New file @@ -0,0 +1,20 @@ package com.vincent.rsf.server.manager.controller.params; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; import java.io.Serializable; import java.util.List; @Data @Accessors(chain = true) @ApiModel(value = "GenWaveParams", description = "生成波次参数") public class GenWaveParams implements Serializable { @ApiModelProperty("出库单ID") private List<Long> ids; @ApiModelProperty("波次策略ID") private Long waveRuleId; } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams; import com.vincent.rsf.server.manager.controller.params.GenWaveParams; import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam; import com.vincent.rsf.server.manager.controller.params.OutStockToTaskParams; import com.vincent.rsf.server.manager.entity.AsnOrder; @@ -17,7 +18,7 @@ R genOutStock(List<DeliveryItem> ids, Long loginUserId); R generateWaves(List<Long> ids); R generateWaves(GenWaveParams ids); R saveOutStock(AsnOrderAndItemsParams params, Long loginUserId); rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -10,11 +10,8 @@ import com.vincent.rsf.server.common.constant.Constants; import com.vincent.rsf.server.manager.controller.dto.ExistDto; import com.vincent.rsf.server.manager.controller.dto.OrderOutItemDto; import com.vincent.rsf.server.manager.controller.params.LocToTaskParams; import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam; import com.vincent.rsf.server.manager.controller.params.OutStockToTaskParams; import com.vincent.rsf.server.manager.controller.params.*; import com.vincent.rsf.server.manager.enums.*; import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams; import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.mapper.AsnOrderMapper; import com.vincent.rsf.server.manager.service.*; @@ -32,7 +29,6 @@ import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; import com.vincent.rsf.server.manager.enums.WaveRuleType; @@ -275,11 +271,11 @@ */ @Override @Transactional(rollbackFor = Exception.class) public R generateWaves(List<Long> ids) { if (Objects.isNull(ids) || ids.isEmpty()) { public R generateWaves(GenWaveParams params) { if (Objects.isNull(params.getIds()) || params.getIds().isEmpty()) { throw new CoolException("参数不能为空!!"); } List<AsnOrder> orders = this.list(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, ids)); List<AsnOrder> orders = this.list(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, params.getIds())); if (orders.isEmpty()) { throw new CoolException("当前单据状态不能执行波次生成操作!!"); } @@ -288,10 +284,10 @@ Double anfme = Math.round((sum - workQty) * 10000) / 10000.0; Wave wave = new Wave(); String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_WAVE_TYPE, null); if (Objects.isNull(ruleCode) || StringUtils.isBlank(ruleCode)) { if (StringUtils.isBlank(ruleCode)) { throw new CoolException("编码规则错误:请要查看「SYS_WAVE_TYPE」是否设置成功!!"); } wave.setOrderNum(ids.size()) wave.setOrderNum(params.getIds().size()) .setType(Short.parseShort("1")) .setCode(ruleCode) .setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_INIT.val) @@ -316,22 +312,19 @@ if (!waveService.saveOrUpdate(wave)) { throw new CoolException("主单修改失败!!"); } for (int i = 0; i < orderItems.size(); i++) { orderItems.get(i).setWorkQty(orderItems.get(i).getAnfme()); } if (!asnOrderItemService.saveOrUpdateBatch(orderItems)) { throw new CoolException("出库单执行数量修改失败!!"); } for (AsnOrder order : orders) { Double wkQty = Math.round((order.getWorkQty() + order.getAnfme()) * 10000) / 10000.0; if (!this.update(new LambdaUpdateWrapper<AsnOrder>() .set(AsnOrder::getWaveId, wave.getId()) .set(AsnOrder::getWorkQty, wkQty) .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WAVE.val) .in(AsnOrder::getId, ids))) { .in(AsnOrder::getId, params.getIds()))) { throw new CoolException("执行状态修改修改失败!!"); } }