From aecc30be4f72119829bf7f607aa6031e15fc3c0c Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期三, 30 七月 2025 08:01:28 +0800 Subject: [PATCH] 调拔单功能优化 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferOrder.java | 7 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java | 90 ++++++++++++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java | 112 +++++++++++------- rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java | 15 ++ rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OrgLocParams.java | 30 +++++ rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java | 4 rsf-admin/src/page/orders/transfer/ManualCreate.jsx | 7 rsf-admin/src/page/components/WarehouseSelect.jsx | 2 rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx | 44 ++---- rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java | 4 rsf-admin/src/page/orders/transfer/TransferOrders.jsx | 18 ++ 11 files changed, 243 insertions(+), 90 deletions(-) diff --git a/rsf-admin/src/page/components/WarehouseSelect.jsx b/rsf-admin/src/page/components/WarehouseSelect.jsx index 54a9613..33ead33 100644 --- a/rsf-admin/src/page/components/WarehouseSelect.jsx +++ b/rsf-admin/src/page/components/WarehouseSelect.jsx @@ -16,7 +16,7 @@ }, [dictTypeCode]); const http = async () => { - const res = await request.post('/warehouseAreas/page', {}); + const res = await request.post('/warehouseAreas/page', {current: 1, pageSize: 100}); if (res?.data?.code === 200) { setList(res.data.data.records.map((item) => { return { diff --git a/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx b/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx index d61da62..78f7014 100644 --- a/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx +++ b/rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx @@ -69,9 +69,8 @@ const reset = () => { setFormData({ - name: '', - code: '', - groupId: 0 + maktx: '', + matnrCode: '', }) } @@ -98,14 +97,14 @@ }; const getData = async () => { - const res = await request.post(`/matnr/page`, { + const res = await request.post(`/transfer/locs/items`, { ...formData, current: page, pageSize: pageSize, orderBy: "create_time desc" }); if (res?.data?.code === 200) { - const {data} = res.data; + const { data } = res.data; setTableData(data?.records); setRowCount(data?.total); } else { @@ -147,8 +146,8 @@ <Grid item md={3}> <TextField label={translate('table.field.matnr.name')} - name="name" - value={formData.name} + name="maktx" + value={formData.maktx} onChange={handleChange} size="small" /> @@ -156,20 +155,10 @@ <Grid item md={3}> <TextField label={translate('table.field.matnr.code')} - name="code" - value={formData.code} + name="matnrCode" + value={formData.matnrCode} onChange={handleChange} size="small" - /> - </Grid> - <Grid item md={3}> - <TreeSelectInput - label="table.field.matnr.groupId" - value={formData.groupId} - resource={'matnrGroup'} - source="groupId" - name="groupId" - onChange={handleChange} /> </Grid> <Grid item md={2} sx={{ margin: 'auto' }}> @@ -208,24 +197,21 @@ export default CreateBySelectMats; -const SelectMatsTableView = ({ tableData, page, pageSize,setPage, setPageSize, rowCount, setTableData, selectedRows, setSelectedRows, dyFields, setDyFields }) => { +const SelectMatsTableView = ({ tableData, page, pageSize, setPage, setPageSize, rowCount, setTableData, selectedRows, setSelectedRows, dyFields, setDyFields }) => { const translate = useTranslate(); const notify = useNotify(); const [extendColumns, setExtendColumns] = useState([]); const [columns, setColumns] = useState([ - { field: 'name', headerName: translate('table.field.matnr.name'), width: 300 }, - { field: 'code', headerName: translate('table.field.matnr.code'), width: 200 }, - { field: 'groupId$', headerName: translate('table.field.matnr.groupId'), width: 100 }, + { field: 'maktx', headerName: translate('table.field.matnr.name'), width: 300 }, + { field: 'matnrCode', headerName: translate('table.field.matnr.code'), width: 200 }, + // { field: 'groupId$', headerName: translate('table.field.matnr.groupId'), width: 100 }, { field: 'spec', headerName: translate('table.field.matnr.spec'), width: 100 }, + { field: 'batch', headerName: translate('table.field.locItem.batch'), width: 100 }, { field: 'model', headerName: translate('table.field.matnr.model'), width: 100 }, - { field: 'weight', headerName: translate('table.field.matnr.weight'), width: 100 }, - { field: 'describle', headerName: translate('table.field.matnr.describle'), width: 100 }, - { field: 'nromNum', headerName: translate('table.field.matnr.nromNum'), width: 100 }, + { field: 'anfme', headerName: translate('table.field.locItem.anfme'), width: 100 }, { field: 'unit', headerName: translate('table.field.matnr.unit'), width: 100 }, - { field: 'purchaseUnit', headerName: translate('table.field.matnr.purUnit'), width: 100 }, - { field: 'stockUnit', headerName: translate('table.field.matnr.stockUnit'), width: 100 }, - { field: 'stockLeval$', headerName: translate('table.field.matnr.stockLevel'), width: 100, sortable: false }, + { field: 'wareArea', headerName: translate('table.field.locItem.wareArea'), width: 100, sortable: false }, ]) const handleSelectionChange = (ids) => { diff --git a/rsf-admin/src/page/orders/transfer/ManualCreate.jsx b/rsf-admin/src/page/orders/transfer/ManualCreate.jsx index a74fe34..f774644 100644 --- a/rsf-admin/src/page/orders/transfer/ManualCreate.jsx +++ b/rsf-admin/src/page/orders/transfer/ManualCreate.jsx @@ -344,24 +344,22 @@ }, { field: 'anfme', - headerName: translate('table.field.outStockItem.anfme') + "*", + headerName: translate('table.field.outStockItem.anfme'), type: 'number', minWidth: 100, flex: 1, editable: true, valueFormatter: (val) => val < 0 ? 0 : val, - headerClassName: "custom", }, { field: 'splrCode', - headerName: translate('table.field.outStockItem.splrCode') + "*", + headerName: translate('table.field.outStockItem.splrCode'), minWidth: 100, flex: 1, editable: true, renderEditCell: (params) => ( <SelectInputSplrCodeEditCell {...params} /> ), - headerClassName: "custom", }, { field: 'splrName', @@ -372,7 +370,6 @@ renderEditCell: (params) => ( <SelectInputSplrNameEditCell {...params} /> ), - headerClassName: "custom", }, { field: 'batch', diff --git a/rsf-admin/src/page/orders/transfer/TransferOrders.jsx b/rsf-admin/src/page/orders/transfer/TransferOrders.jsx index 6ab3f0c..33835a6 100644 --- a/rsf-admin/src/page/orders/transfer/TransferOrders.jsx +++ b/rsf-admin/src/page/orders/transfer/TransferOrders.jsx @@ -11,6 +11,7 @@ WrapperField, useRecordContext, DatagridConfigurable, + useRedirect, } from 'react-admin'; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting.js'; @@ -40,6 +41,7 @@ })); const TransferOrders = () => { + const redirct = useRedirect(); const record = useRecordContext(); if (!record) return null; const translate = useTranslate(); @@ -65,12 +67,18 @@ perPage={DEFAULT_PAGE_SIZE} > <StyledDatagrid - sx={{ width: '100%' }} + sx={{ margin: 'auto', width: '98%' }} preferenceKey='outStock' bulkActionButtons={false} - rowClick={false} + rowClick={(id, resource, record) => { + if (record.type == 'out') { + redirct("/outStock") + } else if (record.type == 'in') { + redirct("/asnOrder") + } + }} expandSingle={true} - omit={['id', 'createTime', 'createBy$', 'memo']} + omit={['id', 'memo']} > <NumberField source="id" /> <TextField source="code" label="table.field.transferOrder.code" /> @@ -80,10 +88,10 @@ <NumberField source="anfme" label="table.field.transferOrder.anfme" /> <NumberField source="workQty" label="table.field.transferOrder.workQty" /> <NumberField source="qty" label="table.field.transferOrder.qty" /> - <TextField source="updateBy$" label="common.field.updateBy" /> - <DateField source="updateTime" label="common.field.updateTime" showTime /> <TextField source="createBy$" label="common.field.createBy" /> + <TextField source="updateBy$" label="common.field.updateBy" /> <DateField source="createTime" label="common.field.createTime" showTime /> + <DateField source="updateTime" label="common.field.updateTime" showTime /> <BillStatusField cellClassName="status" source="exceStatus" label="table.field.outStock.exceStatus" /> <TextField source="memo" label="common.field.memo" sortable={false} /> </StyledDatagrid> 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 3842fd6..526ab46 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 @@ -11,6 +11,7 @@ import com.vincent.rsf.server.common.domain.KeyValVo; import com.vincent.rsf.server.common.domain.PageParam; import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams; +import com.vincent.rsf.server.manager.controller.params.OrgLocParams; import com.vincent.rsf.server.manager.controller.params.TransferItemParams; import com.vincent.rsf.server.manager.entity.Transfer; import com.vincent.rsf.server.manager.entity.excel.CheckOrderTemplate; @@ -154,7 +155,7 @@ @ApiOperation("鍗曟嵁淇℃伅淇敼") @PostMapping("/transfer/items/update") - @PreAuthorize("hasAuthority('manager:outStock:update')") + @PreAuthorize("hasAuthority('manager:transfer:update')") public R orderAndrItemUpdate(@RequestBody TransferItemParams params) throws Exception { if (Objects.isNull(params)) { return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒"); @@ -163,6 +164,18 @@ } + @ApiOperation("鑾峰彇鍘熷簱鍖虹墿鏂欎俊鎭�") + @PostMapping("/transfer/locs/items") + @PreAuthorize("hasAuthority('manager:transfer:list')") + public R locsPage(@RequestBody OrgLocParams params) throws Exception { + if (Objects.isNull(params)) { + return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒"); + } + return R.ok().add(transferService.getLocsItems(params, getLoginUserId())); + } + + + /** * @author Ryan diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OrgLocParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OrgLocParams.java new file mode 100644 index 0000000..8f327e6 --- /dev/null +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/OrgLocParams.java @@ -0,0 +1,30 @@ +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; + +@Data +@Accessors(chain = true) +@ApiModel(value = "OrgLocParams", description = "鍘熷簱鍖虹墿鏂�") +public class OrgLocParams implements Serializable { + + @ApiModelProperty("鍘熷簱鍖篒D") + private Long orgAreaId; + + @ApiModelProperty("褰撳墠椤�") + private Integer current; + + @ApiModelProperty("鐗╂枡缂栫爜") + private String matnrCode; + + @ApiModelProperty("鐗╂枡鍚嶇О") + private String maktx; + + @ApiModelProperty("褰撳墠椤垫暟") + private Integer pageSize; + +} diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferOrder.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferOrder.java index 18eb434..38b9c5f 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferOrder.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferOrder.java @@ -20,13 +20,12 @@ @TableId(value = "id", type = IdType.AUTO) private Long id; + @ApiModelProperty("鍗曟嵁绫诲瀷锛歩n: 鍏ュ簱锛� out:鍑哄簱") + private String type; + @ApiModelProperty("璋冩嫈鍗旾D") private Long transferId; @ApiModelProperty("璁㈠崟ID") private Long orderId; - - @ApiModelProperty("鎵ц鐘舵��") - private Integer exceStatus; - } 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 8f8efb7..405ef34 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 @@ -57,6 +57,8 @@ 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; + } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.desc)) { + return OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type; } return null; } @@ -86,6 +88,8 @@ 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; + } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type)) { + return OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.desc; } return null; } diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java index d74fa92..cba0f0e 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java @@ -13,8 +13,10 @@ import com.vincent.rsf.server.manager.service.impl.TransferOrderServiceImpl; import com.vincent.rsf.server.manager.utils.LocManageUtil; import com.vincent.rsf.server.system.constant.GlobalConfigCode; +import com.vincent.rsf.server.system.constant.SerialRuleCode; import com.vincent.rsf.server.system.entity.Config; import com.vincent.rsf.server.system.service.ConfigService; +import com.vincent.rsf.server.system.utils.SerialRuleUtils; import com.vincent.rsf.server.system.utils.SystemAuthUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -92,6 +94,7 @@ * @version 1.0 */ @Scheduled(cron = "0/5 * * * * ? ") + @Transactional(rollbackFor = Exception.class) public void complateOutStock() throws Exception { List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>() .eq(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id) @@ -118,7 +121,7 @@ * @version 1.0 */ @Transactional(rollbackFor = Exception.class) - public void genInStock(List<TaskItem> taskItems) { + public void genInStock(List<TaskItem> taskItems) throws Exception { Set<Long> orderIds = taskItems.stream().map(TaskItem::getSourceId).collect(Collectors.toSet()); List<WkOrder> wkOrders = outStockService.list(new LambdaQueryWrapper<WkOrder>().in(WkOrder::getId, orderIds)); wkOrders.forEach(wkOrder -> { @@ -126,10 +129,21 @@ if (!orderItems.isEmpty()) { WkOrder order = new WkOrder(); BeanUtils.copyProperties(wkOrder, order); + String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, order); + if (StringUtils.isNotBlank(ruleCode)) { + throw new CoolException("鍏ュ簱鍗曞彿鐢熸垚澶辫触锛侊紒"); + } order.setWkType(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type) .setId(null) - .setType(OrderType.ORDER_IN.type) - .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_RECEIPT_DONE.val); + .setCode(ruleCode) + .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val) + .setType(OrderType.ORDER_IN.type); +// Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.DIRECT_WAIT_PAKIN)); +// if (!Boolean.parseBoolean(config.getVal())) { +// order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val); +// } else { +// order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val); +// } if (!asnOrderService.save(order)) { throw new CoolException("鍏ュ簱鍗曠敓鎴愬け璐ワ紒锛�"); } @@ -140,50 +154,60 @@ throw new CoolException("鍏ュ簱鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�"); } }); + + Transfer transfer = transferService.getById(order.getPoId()); + + TransferOrder transferOrder = new TransferOrder(); + transferOrder.setOrderId(order.getId()) + .setType(OrderType.ORDER_IN.type) + .setTransferId(transfer.getId()); + if (!transferOrderService.save(transferOrder)) { + throw new CoolException("鍏宠仈鍗曚繚瀛樺け璐ワ紒锛�"); + } } }); - Set<Long> taskIds = taskItems.stream().map(TaskItem::getTaskId).collect(Collectors.toSet()); - List<Task> tasks = taskService.listByIds(taskIds); - if (!tasks.isEmpty()) { - tasks.forEach(task -> { - TaskItem one = taskItemService.getOne(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()), false); - if (Objects.isNull(one)) { - throw new CoolException("鏁版嵁閿欒锛氫换鍔℃槑缁嗕涪澶憋紒锛�"); - } - TransferOrder order = transferOrderService.getOne(new LambdaQueryWrapper<TransferOrder>().eq(TransferOrder::getOrderId, one.getOrderId())); - if (Objects.isNull(order)) { - throw new CoolException("鏁版嵁閿欒锛侊紒"); - } - Transfer transfer = transferService.getById(order.getTransferId()); - Task task1 = new Task(); - BeanUtils.copyProperties(task, task1); - String targetLoc = LocManageUtil.getTargetLoc(transfer.getTarAreaId()); - if (Objects.isNull(targetLoc)) { - throw new CoolException("鏈兘鎵惧埌鏈夋晥搴撲綅"); - } - task.setTaskType(TaskType.TASK_TYPE_IN.type) - .setTargLoc(targetLoc) - .setTargSite(null) - .setId(null) - .setTaskStatus(TaskStsType.GENERATE_IN.id); - if (!taskService.save(task1)) { - throw new CoolException("浠诲姟鐢熸垚澶辫触锛侊紒"); - } - List<TaskItem> items = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId())); - if (items.isEmpty()) { - throw new CoolException("鏁版嵁閿欒锛侊紒"); - } - items.forEach(taskItem -> { - TaskItem item = new TaskItem(); - BeanUtils.copyProperties(taskItem, item); - item.setTaskId(task1.getId()).setId(null); - if (!taskItemService.save(item)) { - throw new CoolException("鍏ュ簱浠诲姟鏄庣粏淇濆瓨澶辫触锛侊紒"); - } - }); - }); - } +// Set<Long> taskIds = taskItems.stream().map(TaskItem::getTaskId).collect(Collectors.toSet()); +// List<Task> tasks = taskService.listByIds(taskIds); +// if (!tasks.isEmpty()) { +// tasks.forEach(task -> { +// TaskItem one = taskItemService.getOne(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()), false); +// if (Objects.isNull(one)) { +// throw new CoolException("鏁版嵁閿欒锛氫换鍔℃槑缁嗕涪澶憋紒锛�"); +// } +// TransferOrder order = transferOrderService.getOne(new LambdaQueryWrapper<TransferOrder>().eq(TransferOrder::getOrderId, one.getOrderId())); +// if (Objects.isNull(order)) { +// throw new CoolException("鏁版嵁閿欒锛侊紒"); +// } +// Transfer transfer = transferService.getById(order.getTransferId()); +// Task task1 = new Task(); +// BeanUtils.copyProperties(task, task1); +// String targetLoc = LocManageUtil.getTargetLoc(transfer.getTarAreaId()); +// if (Objects.isNull(targetLoc)) { +// throw new CoolException("鏈兘鎵惧埌鏈夋晥搴撲綅"); +// } +// task.setTaskType(TaskType.TASK_TYPE_IN.type) +// .setTargLoc(targetLoc) +// .setTargSite(null) +// .setId(null) +// .setTaskStatus(TaskStsType.GENERATE_IN.id); +// if (!taskService.save(task1)) { +// throw new CoolException("浠诲姟鐢熸垚澶辫触锛侊紒"); +// } +// List<TaskItem> items = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId())); +// if (items.isEmpty()) { +// throw new CoolException("鏁版嵁閿欒锛侊紒"); +// } +// items.forEach(taskItem -> { +// TaskItem item = new TaskItem(); +// BeanUtils.copyProperties(taskItem, item); +// item.setTaskId(task1.getId()).setId(null); +// if (!taskItemService.save(item)) { +// throw new CoolException("鍏ュ簱浠诲姟鏄庣粏淇濆瓨澶辫触锛侊紒"); +// } +// }); +// }); +// } } /** 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 a1e37d4..8bfb44d 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 @@ -6,7 +6,9 @@ import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.common.domain.BaseParam; import com.vincent.rsf.server.common.domain.PageParam; +import com.vincent.rsf.server.manager.controller.params.OrgLocParams; import com.vincent.rsf.server.manager.controller.params.TransferItemParams; +import com.vincent.rsf.server.manager.entity.LocItem; import com.vincent.rsf.server.manager.entity.Transfer; import com.vincent.rsf.server.manager.entity.WkOrder; @@ -23,5 +25,7 @@ Transfer genOutStock(Transfer transfer, Long loginUserId); boolean removeTransfer(List<Long> list); + + IPage<LocItem> getLocsItems(OrgLocParams params, 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 2a64db5..2749343 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 @@ -3,11 +3,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.common.domain.BaseParam; import com.vincent.rsf.server.common.domain.PageParam; import com.vincent.rsf.server.common.domain.PageResult; +import com.vincent.rsf.server.manager.controller.params.OrgLocParams; import com.vincent.rsf.server.manager.controller.params.TransferItemParams; import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.enums.*; @@ -40,6 +42,14 @@ private TransferOrderService transferOrderService; @Autowired private TransferService transferService; + @Autowired + private AsnOrderService asnOrderService; + @Autowired + private AsnOrderItemService asnOrderItemService; + @Autowired + private LocItemService locItemService; + @Autowired + private LocService locService; /** * @author Ryan @@ -239,13 +249,66 @@ } TransferOrder transferOrder = new TransferOrder(); - transferOrder.setTransferId(transfer.getId()).setOrderId(wkOrder.getId()).setExceStatus((int)CheckExceStatus.CHECK_ORDER_STATUS_INIT.val); + transferOrder.setTransferId(transfer.getId()) + .setOrderId(wkOrder.getId()) + .setType(OrderType.ORDER_OUT.type); if (!transferOrderService.save(transferOrder)) { throw new CoolException("鍗曟嵁鍏宠仈澶辫触锛侊紒"); } + try { + /**鐢熸垚鍏ュ簱鍗曟嵁淇℃伅*/ + genInStock(wkOrder, orderItems); + } catch (Exception e) { + throw new CoolException(e.getMessage()); + } + return transfer; + } + + /** + * @author Ryan + * @date 2025/7/29 + * @description: TODO + * @version 1.0 + */ + @Transactional(rollbackFor = Exception.class) + public void genInStock(WkOrder wkOrder, List<WkOrderItem> orderItems) throws Exception { + WkOrder order = new WkOrder(); + BeanUtils.copyProperties(wkOrder, order); + order.setType(OrderType.ORDER_IN.type) + .setWkType(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type) + .setId(null); + String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, order); + if (StringUtils.isBlank(ruleCode)) { + throw new CoolException("鍏ュ簱鍗曞彿鐢熸垚澶辫触锛侊紒"); + } + order.setCode(ruleCode); + + if (!asnOrderService.save(order)) { + throw new CoolException("鍗曟嵁淇濆瓨澶辫触锛侊紒"); + } + + orderItems.forEach(item -> { + item.setOrderId(order.getId()) + .setOrderCode(order.getCode()) + .setId(null); + + if (!asnOrderItemService.save(item)) { + throw new CoolException("鍏ュ簱鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�"); + } + }); + + TransferOrder transferOrder = new TransferOrder(); + transferOrder.setTransferId(wkOrder.getPoId()) + .setOrderId(order.getId()) + .setType(OrderType.ORDER_IN.type); + + if (!transferOrderService.save(transferOrder)) { + throw new CoolException("鍗曟嵁鍏宠仈澶辫触锛侊紒"); + } + } /** @@ -273,4 +336,29 @@ transferItemService.remove(new LambdaQueryWrapper<TransferItem>().in(TransferItem::getTransferId, list)); return true; } + + /** + * @author Ryan + * @date 2025/7/29 + * @description: 鑾峰彇鍘熷簱鍖虹墿鏂欎俊鎭� + * @version 1.0 + */ + @Override + public IPage<LocItem> getLocsItems(OrgLocParams params, Long loginUserId) { + List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>() + .eq(!Objects.isNull(params.getOrgAreaId()), Loc::getAreaId, params.getOrgAreaId())); + + Page<LocItem> page = new Page<>(params.getCurrent(), params.getPageSize()); + LambdaQueryWrapper<LocItem> wrapper = new LambdaQueryWrapper<>(); + + wrapper.eq(StringUtils.isNotBlank(params.getMatnrCode()), LocItem::getMatnrCode, params.getMatnrCode().trim()) + .like(StringUtils.isNotBlank(params.getMaktx().trim()), LocItem::getMaktx, params.getMaktx().trim()); + if (!locs.isEmpty()) { + Set<Long> locIds = locs.stream().map(Loc::getId).collect(Collectors.toSet()); + wrapper.in(LocItem::getLocId, locIds); + return locItemService.page(page, wrapper); + } else { + return locItemService.page(page, wrapper); + } + } } -- Gitblit v1.9.1