skyouc
4 天以前 c229a84e0a8eb68c974e6d23fa1296e064025d76
调拔单功能优化
11个文件已修改
153 ■■■■ 已修改文件
rsf-admin/src/page/orders/transfer/CreateBySelectMats.jsx 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/transfer/ManualCreate.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/transfer/TransferList.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/task/TaskEdit.jsx 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/task/TaskItemList.jsx 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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)