rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx
@@ -107,12 +107,7 @@ if (res?.data?.code === 200) { const {data} = res.data; setTableData(data?.records); setRowCount(data?.total) console.log(rowCount); console.log(data); setRowCount(data?.total); } else { notify(res.data.msg); } @@ -120,7 +115,7 @@ useEffect(() => { getData(); }, [open]); }, [open, page]); const handleSearch = () => { getData() @@ -215,7 +210,6 @@ const SelectMatsTableView = ({ tableData, page, pageSize,setPage, setPageSize, rowCount, setTableData, selectedRows, setSelectedRows, dyFields, setDyFields }) => { const translate = useTranslate(); const notify = useNotify(); const [extendColumns, setExtendColumns] = useState([]); @@ -239,6 +233,11 @@ }; useEffect(() => { console.log('------->'); console.log(page); }, [page]) useEffect(() => { if (extendColumns == undefined || extendColumns.length < 1) { getDynamicFields(); } rsf-admin/src/page/orders/transfer/ManualCreate.jsx
@@ -47,6 +47,7 @@ import { minHeight, padding } from "@mui/system"; import SaveIcon from '@mui/icons-material/Save'; import request from '@/utils/request'; import _, { set } from 'lodash'; const ManualCreate = (props) => { const { open, setOpen, orderId } = props; @@ -374,7 +375,7 @@ headerClassName: "custom", }, { field: 'splrBatch', field: 'batch', headerName: translate('table.field.outStockItem.splrBatch'), minWidth: 100, flex: 1, rsf-admin/src/page/orders/transfer/TransferList.jsx
@@ -138,7 +138,7 @@ > <StyledDatagrid preferenceKey='transfer' bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} bulkActionButtons={false} rowClick={(id, resource, record) => false} expand={() => <TransferOrders />} expandSingle={true} @@ -163,7 +163,7 @@ <DateField source="createTime" label="common.field.createTime" showTime /> <TextField source="memo" label="common.field.memo" sortable={false} /> <WrapperField cellClassName="opt" label="common.field.opt"> <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} label="toolbar.detail"/> <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> <PublicButton setDrawerVal={setDrawerVal} drawerVal={drawerVal} setSelect={setSelect} /> </WrapperField> rsf-admin/src/page/task/TaskEdit.jsx
@@ -40,7 +40,7 @@ <SimpleForm shouldUnregister warnWhenUnsavedChanges toolbar={<FormToolbar />} toolbar={false} mode="onTouched" defaultValues={{}} sx={{ @@ -113,6 +113,7 @@ <NumberInput label="table.field.task.sort" source="sort" readOnly /> </Stack> </Grid> rsf-admin/src/page/task/TaskItemList.jsx
@@ -22,11 +22,11 @@ NumberInput, useGetRecordId, } from 'react-admin'; import { Box, Typography, Card, Stack, LinearProgress } from '@mui/material'; import { styled } from '@mui/material/styles'; import PageDrawer from "../components/PageDrawer"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; import { Box, Typography, Card, Stack, LinearProgress } from '@mui/material'; import MyCreateButton from "../components/MyCreateButton"; import PageDrawer from "../components/PageDrawer"; import { styled } from '@mui/material/styles'; import TaskItemCreate from "./TaskItemCreate"; import request from '@/utils/request'; @@ -103,7 +103,7 @@ actions={( <TopToolbar> <FilterButton /> <MyCreateButton onClick={() => { setCreateDialog(true) }} /> {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */} <SelectColumnsButton preferenceKey='taskItem' /> {/* <MyExportButton /> */} </TopToolbar> rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java
@@ -99,10 +99,6 @@ if (!transferService.save(transfer)) { return R.error("Save Fail"); } /***保存成功,自动生成出库单*/ transferService.genOutStock(transfer, getLoginUserId()); return R.ok("Save Success").add(transfer); } rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -2,15 +2,16 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.service.WcsService; import com.vincent.rsf.server.api.utils.LocUtils; import com.vincent.rsf.server.common.constant.Constants; import com.vincent.rsf.server.manager.controller.params.LocToTaskParams; import com.vincent.rsf.server.manager.enums.LocStsType; import com.vincent.rsf.server.manager.enums.TaskStsType; import com.vincent.rsf.server.manager.enums.*; import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.enums.TaskType; import com.vincent.rsf.server.manager.service.*; import com.vincent.rsf.server.manager.service.impl.LocServiceImpl; 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.entity.Config; import com.vincent.rsf.server.system.service.ConfigService; @@ -53,6 +54,18 @@ private List<Integer> rows; @Autowired private LocItemService locItemService; @Autowired private OutStockService outStockService; @Autowired private OutStockItemService outStockItemService; @Autowired private AsnOrderItemService asnOrderItemService; @Autowired private AsnOrderService asnOrderService; @Autowired private TransferOrderService transferOrderService; @Autowired private TransferService transferService; /** * @param @@ -89,6 +102,88 @@ List<Long> longSet = tasks.stream().map(Task::getId).collect(Collectors.toList()); List<Task> vaildTasks = taskService.list(new LambdaQueryWrapper<Task>().in(Task::getId, longSet)); taskService.completeTask(vaildTasks); List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>() .eq(TaskItem::getWkType, OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type) .in(TaskItem::getTaskId, longSet)); if (!taskItems.isEmpty()) { genInStock(taskItems); } } /** * @author Ryan * @date 2025/7/29 * @description: 生成入库单 * @version 1.0 */ @Transactional(rollbackFor = Exception.class) public void genInStock(List<TaskItem> taskItems) { 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 -> { List<WkOrderItem> orderItems = outStockItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, wkOrder.getId())); if (!orderItems.isEmpty()) { WkOrder order = new WkOrder(); BeanUtils.copyProperties(wkOrder, order); order.setWkType(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER.type) .setId(null) .setType(OrderType.ORDER_IN.type) .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_RECEIPT_DONE.val); if (!asnOrderService.save(order)) { throw new CoolException("入库单生成失败!!"); } orderItems.forEach(orderItem -> { orderItem.setOrderId(order.getId()).setOrderCode(order.getCode()).setId(null); if (!asnOrderItemService.save(orderItem)) { 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("入库任务明细保存失败!!"); } }); }); } } /** rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -488,7 +488,7 @@ WkOrderItem orderItem = outStockItemService.getOne(new LambdaQueryWrapper<WkOrderItem>() .eq(WkOrderItem::getOrderId, outId) .eq(StringUtils.isNotBlank(locItem.getBatch()), WkOrderItem::getSplrBatch, locItem.getBatch()) .eq(StringUtils.isNotBlank(locItem.getFieldsIndex()), WkOrderItem::getFieldsIndex, locItem.getFieldsIndex()) // .eq(StringUtils.isNotBlank(locItem.getFieldsIndex()), WkOrderItem::getFieldsIndex, locItem.getFieldsIndex()) .eq(WkOrderItem::getMatnrId, locItem.getMatnrId())); if (Objects.isNull(orderItem)) { rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -1150,7 +1150,8 @@ } catch (Exception e) { throw new CoolException(e.getMessage()); } } else if (task.getResource().equals(TaskResouceType.TASK_RESOUCE_ORDER_TYPE.val) || task.getResource().equals(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val)) { } else if (task.getResource().equals(TaskResouceType.TASK_RESOUCE_ORDER_TYPE.val) || task.getResource().equals(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val)) { WkOrderItem orderItem = new WkOrderItem(); if (task.getResource().equals(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val)) { CheckDiffItem diffItem = checkDiffItemService.getById(key); @@ -1279,7 +1280,6 @@ if (!stockItemService.saveBatch(stockItems)) { throw new CoolException("库存修改架失败!!"); } } /** rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java
@@ -100,6 +100,10 @@ } catch (Exception e) { throw new CoolException(e.getMessage()); } /***保存成功,自动生成出库单*/ genOutStock(transfer, loginUserId); return R.ok(); } @@ -199,7 +203,7 @@ Double anfmes = items.stream().mapToDouble(TransferItem::getAnfme).sum(); wkOrder.setCode(ruleCode) .setAnfme(anfmes) .setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val) .setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val) .setType(OrderType.ORDER_OUT.type) .setWkType(OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type) .setCreateBy(loginUserId) @@ -258,7 +262,7 @@ Set<Long> longs = wkOrders.stream().map(WkOrder::getId).collect(Collectors.toSet()); if (!outStockService.remove(new LambdaQueryWrapper<WkOrder>() .in(WkOrder::getId, longs) .ne(WkOrder::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_INIT.val))) { .eq(WkOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val))) { throw new CoolException("当前出库单已执行,不支持删除!!"); } outStockItemService.remove(new LambdaQueryWrapper<WkOrderItem>().in(WkOrderItem::getOrderId, longs)); rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java
@@ -29,7 +29,6 @@ public static String getTargetLoc(Long areaId) { //TODO 库位策略后续排期 LocService locService = SpringUtils.getBean(LocService.class); Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>() .eq(Loc::getAreaId, areaId) .orderByAsc(Loc::getLev)