From 474103da0c9793ec9cd7559f109491ece282e269 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期一, 28 七月 2025 17:03:16 +0800 Subject: [PATCH] 调拔单功能优化 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java | 80 +++++++++++++++++++++++--- rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java | 12 ++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java | 2 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java | 24 ++++++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckExceStatus.java | 2 rsf-admin/src/page/orders/transfer/TransferList.jsx | 38 +++++++++++- rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java | 1 rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java | 7 ++ rsf-admin/src/page/orders/transfer/TransferOrders.jsx | 4 10 files changed, 153 insertions(+), 19 deletions(-) diff --git a/rsf-admin/src/page/orders/transfer/TransferList.jsx b/rsf-admin/src/page/orders/transfer/TransferList.jsx index 8bce57d..46a80ea 100644 --- a/rsf-admin/src/page/orders/transfer/TransferList.jsx +++ b/rsf-admin/src/page/orders/transfer/TransferList.jsx @@ -20,9 +20,11 @@ TextField, NumberField, DateField, + useRefresh, BooleanField, ReferenceField, TextInput, + Button, DateTimeInput, DateInput, SelectInput, @@ -33,18 +35,22 @@ DeleteButton, } from 'react-admin'; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting.js'; +import { Box, Typography, Card, Stack, } from '@mui/material'; import MyCreateButton from "../../components/MyCreateButton.jsx"; import MyExportButton from '../../components/MyExportButton.jsx'; import PageEditDrawer from "../../components/PageEditDrawer"; -import { Box, Typography, Card, Stack } from '@mui/material'; +import ConfirmButton from '../../components/ConfirmButton'; import PageDrawer from "../../components/PageDrawer.jsx"; import EmptyData from "../../components/EmptyData.jsx"; +import AddTaskIcon from '@mui/icons-material/AddTask'; import MyField from "../../components/MyField.jsx"; +import TransferOrders from "./TransferOrders.jsx"; import TransferCreate from "./TransferCreate.jsx"; -import { styled } from '@mui/material/styles'; -import TransferPanel from "./TransferPanel.jsx"; -import * as Common from '@/utils/common.js'; import ManualCreate from "./ManualCreate.jsx"; +import { styled } from '@mui/material/styles'; +import * as Common from '@/utils/common.js'; +import request from '@/utils/request'; + const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -105,6 +111,7 @@ const translate = useTranslate(); const [createDialog, setCreateDialog] = useState(false); const [drawerVal, setDrawerVal] = useState(false); + const [select, setSelect] = useState({}); return ( <Box display="flex"> @@ -135,7 +142,7 @@ preferenceKey='transfer' bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} rowClick={(id, resource, record) => false} - expand={() => <TransferPanel />} + expand={() => <TransferOrders />} expandSingle={true} omit={['id', 'createTime', 'createBy$', 'memo', 'orgWareId', 'tarWareId', 'orgAreaId', 'tarAreaId']} > @@ -160,6 +167,7 @@ <WrapperField cellClassName="opt" label="common.field.opt"> <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> + <PublicButton setDrawerVal={setDrawerVal} drawerVal={drawerVal} setSelect={setSelect} /> </WrapperField> </StyledDatagrid> </List> @@ -175,3 +183,23 @@ } export default TransferList; + +//涓嬪彂鎵ц +const PublicButton = ({ setDrawerVal, setSelect }) => { + const record = useRecordContext(); + const refresh = useRefresh(); + const taskEvent = async () => { + const { data: { code, data, msg } } = await request.post(`/transfer/pub/outStock`, record); + if (code === 200) { + notify(msg); + refresh() + } else { + notify(msg); + } + refresh(); + } + + return ( + <ConfirmButton label={"toolbar.publicWorking"} startIcon={<AddTaskIcon />} onConfirm={taskEvent} size={"small"} /> + ) +} diff --git a/rsf-admin/src/page/orders/transfer/TransferPanel.jsx b/rsf-admin/src/page/orders/transfer/TransferOrders.jsx similarity index 98% rename from rsf-admin/src/page/orders/transfer/TransferPanel.jsx rename to rsf-admin/src/page/orders/transfer/TransferOrders.jsx index 5d3abe4..8d58600 100644 --- a/rsf-admin/src/page/orders/transfer/TransferPanel.jsx +++ b/rsf-admin/src/page/orders/transfer/TransferOrders.jsx @@ -39,7 +39,7 @@ }, })); -const TransferPanel = () => { +const TransferOrders = () => { const record = useRecordContext(); if (!record) return null; const translate = useTranslate(); @@ -95,4 +95,4 @@ ); }; -export default TransferPanel; +export default TransferOrders; diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java index 138a4f0..8e6ff49 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java @@ -58,7 +58,7 @@ BaseParam baseParam = buildParam(map, BaseParam.class); PageParam<WkOrder, BaseParam> pageParam = new PageParam<>(baseParam, WkOrder.class); QueryWrapper<WkOrder> queryWrapper = pageParam.buildWrapper(true); - List<String> list = Arrays.asList(OrderType.ORDER_OUT.type); + List<String> list = Arrays.asList(OrderType.ORDER_OUT.type, OrderType.ORDER_TRANSFER.type); queryWrapper.in("type", list); return R.ok().add(outStockService.page(pageParam, queryWrapper)); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java index fd23a4e..dcc9f81 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.common.utils.ExcelUtil; import com.vincent.rsf.server.common.annotation.OperationLog; import com.vincent.rsf.server.common.domain.BaseParam; @@ -41,6 +42,7 @@ return R.ok().add(transferService.page(pageParam, pageParam.buildWrapper(true))); } + @ApiOperation("鑾峰彇璋冩嫈鍗曞叧鑱旇鍗�") @PreAuthorize("hasAuthority('manager:transfer:list')") @PostMapping("/transfer/orders/page") public R getTransferInfo(@RequestBody Map<String, Object> map) { @@ -49,6 +51,16 @@ return R.ok().add(transferService.transfersPage(pageParam, pageParam.buildWrapper(true))); } + @ApiOperation("璋冩嫈鍗曠敓鎴愬嚭搴撳崟") + @PreAuthorize("hasAuthority('manager:transfer:list')") + @PostMapping("/transfer/pub/outStock") + public R genOutstock(@RequestBody Transfer transfer) { + if (Objects.isNull(transfer)) { + throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); + } + return R.ok(transferService.genOutStock(transfer, getLoginUserId())); + } + @PreAuthorize("hasAuthority('manager:transfer:list')") @PostMapping("/transfer/list") public R list(@RequestBody Map<String, Object> map) { diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java index c81c788..25985bd 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java @@ -5,6 +5,7 @@ import java.text.SimpleDateFormat; import java.util.Date; +import com.vincent.rsf.server.manager.service.CompanysService; import lombok.experimental.Accessors; import org.checkerframework.checker.units.qual.A; import org.springframework.format.annotation.DateTimeFormat; @@ -21,6 +22,7 @@ import com.vincent.rsf.server.system.entity.User; import java.io.Serializable; import java.util.Date; +import java.util.Objects; @Data @Accessors(chain = true) @@ -264,6 +266,28 @@ // null // 澶囨敞 // ); + public String getSplrName() { + if (null == this.splrId) { return null; } + CompanysService companysService = SpringUtils.getBean(CompanysService.class); + Companys companys = companysService.getById(this.splrId); + if (Objects.isNull(companys)) { + return null; + } else { + return companys.getName(); + } + } + + public String getSplrCode() { + if (null == this.splrId) { return null; } + CompanysService companysService = SpringUtils.getBean(CompanysService.class); + Companys companys = companysService.getById(this.splrId); + if (Objects.isNull(companys)) { + return null; + } else { + return companys.getCode(); + } + } + public String getStatus$(){ if (null == this.status){ return null; } switch (this.status){ diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckExceStatus.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckExceStatus.java index e9f3519..7093ef6 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckExceStatus.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckExceStatus.java @@ -2,7 +2,7 @@ public enum CheckExceStatus { - //鐩樼偣鍗曟墽琛岀姸鎬� + //鐩樼偣鍗曟墽琛岀姸鎬� /璋冩嫈鍗曟墽琛岀姸鎬� CHECK_ORDER_STATUS_UN_EXCE("0", "鏈墽琛�"), CHECK_ORDER_STATUS_INIT("1", "鍒濆鍖�"), CHECK_ORDER_STATUS_EXCE_ING("2", "鎵ц涓�"), diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java index 15a0a35..b3e6b75 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java @@ -11,6 +11,7 @@ //璁㈠崟绫诲瀷 ORDER_OUT("out", "鍑哄簱鍗�"), ORDER_IN("in", "鍏ュ簱鍗�"), + ORDER_TRANSFER("transfer", "璋冩嫈鍗�"), ORDER_CHECK("check", "鐩樼偣鍗�"); diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java index d131121..8f8efb7 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java @@ -14,12 +14,13 @@ ORDER_WORK_TYPE_PURCHASE("3", "棰嗘枡閫�鍥炲叆搴撳崟"), ORDER_WORK_TYPE_SALE("4", "閿�鍞��鍥炲叆搴撳崟"), ORDER_WORK_TYPE_OTHER_IN("5", "鍏跺畠鍏ュ簱鍗�"), + ORDER_WORK_TYPE_OTHER_TERANSFER("6", "璋冩嫈鍏ュ簱鍗�"), ORDER_WORK_TYPE_SUPPLIER("11", "閿�鍞嚭搴撳崟"), ORDER_WORK_TYPE_RETURN_ORDER("12", "棰嗘枡鍑哄簱鍗�"), ORDER_WORK_TYPE_PURCHASE_RETURN("13", "閲囪喘閫�鍥炲嚭搴撳崟"), ORDER_WORK_TYPE_STOCK_OUT("15", "搴撳瓨鍑哄簱"), ORDER_WORK_TYPE_STOCK_CHECK("16", "鐩樼偣鍑哄簱"), - + ORDER_WORK_TYPE_STOCK_TERANSFER("17", "璋冩嫈鍑哄簱鍗�"), ORDER_WORK_TYPE_OTHER("14", "鍏跺畠鍑哄簱鍗�"); @@ -54,6 +55,8 @@ return OrderWorkType.ORDER_WORK_TYPE_STOCK_OUT.type; } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.desc)) { return OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.type; + } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.desc)) { + return OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type; } return null; } @@ -81,6 +84,8 @@ return OrderWorkType.ORDER_WORK_TYPE_STOCK_OUT.desc; } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.type)) { return OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.desc; + } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type)) { + return OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.desc; } return null; } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java index 07d37f4..4757941 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java @@ -19,5 +19,7 @@ R updateTransfer(TransferItemParams params, Long loginUserId); IPage<WkOrder> transfersPage(PageParam<Transfer, BaseParam> pageParam, QueryWrapper<Transfer> transferQueryWrapper); + + Transfer genOutStock(Transfer transfer, Long loginUserId); } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java index e31cddf..29d4a58 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java @@ -10,23 +10,19 @@ import com.vincent.rsf.server.common.domain.PageResult; import com.vincent.rsf.server.manager.controller.params.TransferItemParams; import com.vincent.rsf.server.manager.entity.*; -import com.vincent.rsf.server.manager.enums.AsnExceStatus; -import com.vincent.rsf.server.manager.enums.CheckExceStatus; -import com.vincent.rsf.server.manager.enums.OrderSourceType; -import com.vincent.rsf.server.manager.enums.OrderType; +import com.vincent.rsf.server.manager.enums.*; import com.vincent.rsf.server.manager.mapper.TransferMapper; -import com.vincent.rsf.server.manager.service.AsnOrderItemService; -import com.vincent.rsf.server.manager.service.TransferItemService; -import com.vincent.rsf.server.manager.service.TransferService; +import com.vincent.rsf.server.manager.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.vincent.rsf.server.manager.service.WarehouseAreasService; import com.vincent.rsf.server.system.constant.SerialRuleCode; import com.vincent.rsf.server.system.utils.SerialRuleUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; @@ -36,9 +32,12 @@ @Autowired private TransferItemService transferItemService; - @Autowired private WarehouseAreasService warehouseAreasService; + @Autowired + private OutStockService outStockService; + @Autowired + private OutStockItemService outStockItemService; /** * @author Ryan @@ -171,4 +170,67 @@ } return this.baseMapper.transfersPage(pageParam, one.getId()); } + + /** + * @author Ryan + * @date 2025/7/28 + * @description: 璋冩嫈鍗曠敓鎴愬嚭搴撳崟 + * @version 1.0 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Transfer genOutStock(Transfer param, Long loginUserId) { + Transfer transfer = this.getById(param.getId()); + if (Objects.isNull(transfer)) { + throw new CoolException("鏁版嵁閿欒锛氬崟鎹笉瀛樺湪锛侊紒"); + } + List<TransferItem> items = transferItemService.list(new LambdaQueryWrapper<TransferItem>().eq(TransferItem::getTransferId, transfer.getId())); + if (items.isEmpty()) { + throw new CoolException("鏁版嵁閿欒锛氳皟鎷斿崟鏄庣粏涓嶅瓨鍦紒锛�"); + } + WkOrder wkOrder = new WkOrder(); + String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TRANSFER_ORDER_CODE, transfer); + if (StringUtils.isBlank(ruleCode)) { + throw new CoolException("璋冩嫈鍗曞彿鐢熸垚澶辫触锛侊紒"); + } + + Double anfmes = items.stream().mapToDouble(TransferItem::getAnfme).sum(); + wkOrder.setCode(ruleCode) + .setAnfme(anfmes) + .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val) + .setType(OrderType.ORDER_TRANSFER.type) + .setWkType(OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type) + .setCreateBy(loginUserId) + .setUpdateBy(loginUserId) + .setCreateTime(new Date()) + .setUpdateTime(new Date()) + .setPoCode(transfer.getCode()) + .setPoId(transfer.getId()); + if (!outStockService.saveOrUpdate(wkOrder)) { + throw new CoolException("鍑哄簱鍗曚繚瀛樺け璐ワ紒锛�"); + } + + List<WkOrderItem> orderItems = new ArrayList<>(); + items.forEach(item -> { + WkOrderItem orderItem = new WkOrderItem(); + BeanUtils.copyProperties(item, orderItem); + orderItem.setOrderCode(wkOrder.getCode()) + .setSplrBatch(item.getBatch()) + .setSplrCode(item.getSplrCode()) + .setSplrName(item.getSplrName()) + .setOrderId(wkOrder.getId()); + orderItems.add(orderItem); + }); + + if (!outStockItemService.saveBatch(orderItems)) { + throw new CoolException("鍑哄簱鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�"); + } + + transfer.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val); + + if (!this.updateById(transfer)) { + throw new CoolException("璋冩嫈鍗曟洿鏂板け璐ワ紒锛�"); + } + return transfer; + } } -- Gitblit v1.9.1