skyouc
2025-05-12 7977627e83ce88cb34dfd6e3243ef790b493bd70
质检单功能优化
新增配置自动收货功能
13个文件已修改
2个文件已添加
319 ■■■■ 已修改文件
rsf-admin/src/page/orders/qlyInspect/QlyInspectList.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/qlyInspect/QlyIsptItemList.jsx 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/qlyInspect/QlyIsptItemResult.jsx 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/QlyIsptItemController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/WarehouseAreasType.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/QlyIsptItemService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyIsptItemServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/qlyInspect/QlyInspectList.jsx
@@ -172,6 +172,10 @@
export default QlyInspectList;
const PrintLabelButton = () => {
    const record = useRecordContext();
}
const InspectionButton = () => {
    const record = useRecordContext();
    const notify = useNotify();
rsf-admin/src/page/orders/qlyInspect/QlyIsptItemList.jsx
@@ -43,6 +43,8 @@
import MyExportButton from '../../components/MyExportButton';
import PageDrawer from "../../components/PageDrawer";
import request from '@/utils/request';
import MyField from "@/page/components/MyField";
import QlyIsptItemResult from "./QlyIsptItemResult";
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_ITEM_PAGE_SIZE } from '@/config/setting';
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
@@ -89,6 +91,7 @@
    const translate = useTranslate();
    const [createDialog, setCreateDialog] = useState(false);
    const [drawerVal, setDrawerVal] = useState(false);
    const [itemInfo, setItemInfo] = useState({})
    const isptId = useGetRecordId();
    const { data: dicts, isPending, error } = useGetOne('qlyInspect', { id: isptId });
    if (dicts == null) { return }
@@ -96,6 +99,7 @@
    return (
        <Box display="flex">
            <List
                storeKey="qlyIsptItem"
                resource="qlyIsptItem"
                filter={{ ispectId: isptId }}
                sx={{
@@ -119,19 +123,24 @@
                )}
                perPage={DEFAULT_ITEM_PAGE_SIZE}
            >
               <DynamicFields />
                <DynamicFields
                    drawerVal={drawerVal}
                    setDrawerVal={setDrawerVal}
                    itemInfo={itemInfo}
                    setItemInfo={setItemInfo} />
            </List>
            <QlyIsptItemCreate
                open={createDialog}
                record={dicts}
                setOpen={setCreateDialog}
            />
            <PageDrawer
                title='QlyIsptItem Detail'
            <QlyIsptItemResult
                record={itemInfo}
                drawerVal={drawerVal}
                setDrawerVal={setDrawerVal}
            >
            </PageDrawer>
            </QlyIsptItemResult>
        </Box>
    )
}
@@ -141,6 +150,7 @@
const DynamicFields = (props) => {
    const { drawerVal, setDrawerVal, itemInfo, setItemInfo } = props
    const translate = useTranslate();
    const notify = useNotify();
    const [columns, setColumns] = useState([]);
@@ -163,7 +173,13 @@
                <TextField source="stockBatch" label="table.field.qlyIsptItem.stockBatch" />,
                <NumberField source="rcptQty" label="table.field.qlyIsptItem.rcptQty" />,
                <NumberField source="dlyQty" label="table.field.qlyIsptItem.dlyQty" />,
                <NumberField source="anfme" label="table.field.qlyIsptItem.anfme" />,
                <MyField source="anfme" label="table.field.qlyIsptItem.anfme"
                    onClick={(event, record, val) => {
                        event.stopPropagation();
                        setItemInfo(record)
                        setDrawerVal(!!drawerVal && drawerVal === val ? null : val);
                    }}
                />,
                <TextField source="splrName" label="table.field.qlyIsptItem.splrName" />,
                <NumberField source="isptResult$" label="table.field.qlyIsptItem.isptResult" />,
            ]
rsf-admin/src/page/orders/qlyInspect/QlyIsptItemResult.jsx
New file
@@ -0,0 +1,130 @@
import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
import { useNavigate } from 'react-router-dom';
import {
    List,
    DatagridConfigurable,
    SearchInput,
    TopToolbar,
    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,
    useGetOne,
    Button,
    useRefresh,
    useGetRecordId,
} from 'react-admin';
import { Box, Typography, Card, Stack, LinearProgress, Dialog, DialogActions, DialogContent, DialogTitle, } from '@mui/material';
import { styled } from '@mui/material/styles';
import QlyIsptItemCreate from "./QlyIsptItemCreate";
import EmptyData from "../../components/EmptyData";
import MyCreateButton from "../../components/MyCreateButton";
import MyExportButton from '../../components/MyExportButton';
import PageDrawer from "../../components/PageDrawer";
import DialogCloseButton from "../../components/DialogCloseButton";
import request from '@/utils/request';
import MyField from "@/page/components/MyField";
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_ITEM_PAGE_SIZE } from '@/config/setting';
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
    '& .css-1vooibu-MuiSvgIcon-root': {
        height: '.9em'
    },
    '& .RaDatagrid-row': {
        cursor: 'auto'
    },
    '& .column-name': {
    },
    '& .opt': {
        width: 200
    },
}));
const QlyIsptItemResult = (props) => {
    const { record, drawerVal, setDrawerVal } = props
    const translate = useTranslate();
    const [createDialog, setCreateDialog] = useState(false);
    const handleClose = (event, reason) => {
        if (reason !== "backdropClick") {
            setDrawerVal(false);
        }
    };
    return (
        <Dialog
            open={drawerVal}
            onClose={handleClose}
            aria-labelledby="form-dialog-title"
            fullWidth
            disableRestoreFocus
            maxWidth="lg"
        >
            <DialogTitle id="form-dialog-title" sx={{
                position: 'sticky',
                top: 0,
                backgroundColor: 'background.paper',
                zIndex: 1000
            }}>
                <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}>
                    <DialogCloseButton onClose={handleClose} />
                </Box>
            </DialogTitle>
            <DialogContent sx={{ mt: 2 }}>
                <List
                    storeKey="IsptItem"
                    resource="qlyIsptItem/ispt/result"
                    filter={{ id: record?.id }}
                    empty={false}
                    filters={false}
                    sort={{ field: "create_time", order: "desc" }}
                    actions={false}
                    perPage={DEFAULT_ITEM_PAGE_SIZE}
                >
                    <StyledDatagrid
                        preferenceKey='IsptItem'
                        bulkActionButtons={false}
                        rowClick={false}
                        omit={['id', 'memo', 'dlyQty', 'label', 'stockBatch', 'picPath', 'ispectId']}
                    >
                        <NumberField source="id" />
                        <NumberField source="ispectId" label="table.field.qlyIsptItem.ispectId" />
                        <TextField source="matnrCode" label="table.field.qlyIsptItem.matnrCode" />
                        <TextField source="maktx" label="table.field.qlyIsptItem.maktx" />
                        <TextField source="label" label="table.field.qlyIsptItem.label" />
                        <TextField source="splrBatch" label="table.field.qlyIsptItem.splrBatch" />
                        <NumberField source="dlyQty" label="table.field.qlyIsptItem.dlyQty" />
                        <NumberField source="anfme" label="table.field.qlyIsptItem.anfme" />
                        <TextField source="splrName" label="table.field.qlyIsptItem.splrName" />
                        <NumberField source="isptResult$" label="table.field.qlyIsptItem.isptResult" />
                    </StyledDatagrid>
                </List>
            </DialogContent>
        </Dialog>
    )
}
export default QlyIsptItemResult;
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -694,7 +694,8 @@
        /**获取平库订单*/
        AsnOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>()
                .eq(AsnOrder::getId, OrderId)
                .eq(AsnOrder::getType, OrderType.ORDER_PLAT_IN.type));
                        .eq(AsnOrder::getWkType, OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type)
                .eq(AsnOrder::getType, OrderType.ORDER_IN.type));
        if (Objects.isNull(order)) {
            throw new CoolException("非平库单据不可执行人工上架!!");
        }
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
@@ -54,7 +54,7 @@
            BeanUtils.copyProperties(ors, purchase);
            String wkVal = SerialRuleUtils.generateRuleCode(SerialRuleCode.PURCHASE_CODE, purchase);
            purchase.setCode(wkVal)
                    .setType(OrderType.ORDER_PURCHASE_IN.type);
                    .setType(OrderType.ORDER_IN.type);
            if (!purchaseService.save(purchase)) {
                throw new CoolException("采购单据保存失败");
            }
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
@@ -186,7 +186,7 @@
            BeanUtils.copyProperties(item, taskItem);
            return taskItem.setTaskId(taskId)
                    .setOrderType(OrderType.ORDER_RECEIPT.type)
                    .setOrderType(OrderType.ORDER_IN.type)
                    .setSource(item.getId())
                    .setTrackCode(item.getTrackCode())
                    .setCreateBy(loginUserId)
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/QlyIsptItemController.java
@@ -76,8 +76,26 @@
        page.setRecords(records);
        return R.ok(page);
    }
    @PreAuthorize("hasAuthority('manager:qlyIsptItem:list')")
    @PostMapping("/qlyIsptItem/ispt/result/page")
    public R getIsptResultList(@RequestBody Map<String, Object> map) {
        BaseParam baseParam = buildParam(map, BaseParam.class);
        PageParam<QlyIsptItem, BaseParam> pageParam = new PageParam<>(baseParam, QlyIsptItem.class);
        QueryWrapper<QlyIsptItem> queryWrapper = pageParam.buildWrapper(true);
        IPage<QlyIsptItem> page = qlyIsptItemService.pageByIsptResult(pageParam, queryWrapper);
        List<QlyIsptItem> records = page.getRecords();
        for (QlyIsptItem record : records) {
            if (!Objects.isNull(record.getFieldsIndex())) {
                Map<String, String> fields = FieldsUtils.getFields(record.getFieldsIndex());
                record.setExtendFields(fields);
            }
        }
        page.setRecords(records);
        return R.ok(page);
    }
    @PreAuthorize("hasAuthority('manager:qlyIsptItem:list')")
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/AsnOrderTemplate.java
@@ -60,7 +60,7 @@
     */
    @Excel(name = "*单据类型")
    @ApiModelProperty(value = "*单据类型")
    @ExcelComment(value = "type", example = "采购入库单")
    @ExcelComment(value = "type", example = "入库单")
    private String type;
    /**
@@ -68,7 +68,7 @@
     */
    @Excel(name = "*业务类型")
    @ApiModelProperty(value = "*业务类型")
    @ExcelComment(value = "wkType", example = "完工入库单")
    @ExcelComment(value = "wkType", example = "采购入库单")
    private String wkType;
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java
@@ -9,12 +9,8 @@
 */
public enum OrderType {
    //订单类型
    ORDER_PURCHASE_IN("purchase", "采购入库单"),
    ORDER_OUT("out", "出库单"),
    ORDER_IN("in", "入库单"),
    ORDER_RECEIPT("receipt", "收货单"),
    ORDER_PLAT_IN("plat in", "平库入库单"),
    ;
    OrderType(String type, String desc) {
@@ -30,12 +26,6 @@
            return OrderType.ORDER_IN.type;
        } else if (desc.equals(OrderType.ORDER_OUT.desc)) {
            return OrderType.ORDER_OUT.type;
        } else if (desc.equals(OrderType.ORDER_PLAT_IN.desc)) {
            return OrderType.ORDER_PLAT_IN.type;
        } else if (desc.equals(OrderType.ORDER_RECEIPT.desc)) {
            return OrderType.ORDER_RECEIPT.type;
        } else if (desc.equals(OrderType.ORDER_PURCHASE_IN.desc)) {
            return OrderType.ORDER_PURCHASE_IN.type;
        }
        return null;
    }
@@ -45,12 +35,12 @@
            return OrderType.ORDER_IN.desc;
        } else if (type.equals(OrderType.ORDER_OUT.type)) {
            return OrderType.ORDER_OUT.desc;
        } else if (type.equals(OrderType.ORDER_PLAT_IN.type)) {
            return OrderType.ORDER_PLAT_IN.desc;
        } else if (type.equals(OrderType.ORDER_RECEIPT.type)) {
            return OrderType.ORDER_RECEIPT.desc;
        } else if (type.equals(OrderType.ORDER_PURCHASE_IN.type)) {
            return OrderType.ORDER_PURCHASE_IN.desc;
//        } else if (type.equals(OrderType.ORDER_PLAT_IN.type)) {
//            return OrderType.ORDER_PLAT_IN.desc;
//        } else if (type.equals(OrderType.ORDER_RECEIPT.type)) {
//            return OrderType.ORDER_RECEIPT.desc;
//        } else if (type.equals(OrderType.ORDER_PURCHASE_IN.type)) {
//            return OrderType.ORDER_PURCHASE_IN.desc;
        }
        return null;
    }
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java
@@ -13,7 +13,7 @@
    ORDER_WORK_TYPE_PROD("2", "生产入库单"),
    ORDER_WORK_TYPE_PURCHASE("3", "领料退回入库单"),
    ORDER_WORK_TYPE_SALE("4", "销售退回入库单"),
    ORDER_WORK_TYPE_RETURN("5", "其它入库单"),
    ORDER_WORK_TYPE_OTHER_IN("5", "其它入库单"),
    ORDER_WORK_TYPE_SUPPLIER("11", "销售出库单"),
    ORDER_WORK_TYPE_RETURN_ORDER("12", "领料出库单"),
    ORDER_WORK_TYPE_PURCHASE_RETURN("13", "采购退回出库单"),
@@ -37,8 +37,8 @@
            return OrderWorkType.ORDER_WORK_TYPE_PURCHASE.type;
        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_SALE.desc)) {
            return OrderWorkType.ORDER_WORK_TYPE_SALE.type;
        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_RETURN.desc)) {
            return OrderWorkType.ORDER_WORK_TYPE_RETURN.type;
        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.desc)) {
            return OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type;
        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_SUPPLIER.desc)) {
            return OrderWorkType.ORDER_WORK_TYPE_SUPPLIER.type;
        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_RETURN_ORDER.desc)) {
@@ -60,8 +60,8 @@
            return OrderWorkType.ORDER_WORK_TYPE_PURCHASE.desc;
        } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_SALE.type)) {
            return OrderWorkType.ORDER_WORK_TYPE_SALE.desc;
        } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_RETURN.type)) {
            return OrderWorkType.ORDER_WORK_TYPE_RETURN.desc;
        } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type)) {
            return OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.desc;
        } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_SUPPLIER.type)) {
            return OrderWorkType.ORDER_WORK_TYPE_SUPPLIER.desc;
        } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_RETURN_ORDER.type)) {
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/WarehouseAreasType.java
New file
@@ -0,0 +1,19 @@
package com.vincent.rsf.server.manager.enums;
public enum WarehouseAreasType {
    WAREHOUSE_AREAS_TYPE_RECEIPT("receipt", "收货区"),
    WAREHOUSE_AREAS_TYPE_DELIVERY("delivery", "待发区"),
    ORDER_WORK_TYPE_COLLECTION("collection", "集货区"),
    ORDER_WORK_TYPE_CTU("CTU", "CTU库区"),
    ORDER_WORK_TYPE_CRN("CRN", "堆垛机")
    ;
    WarehouseAreasType(String type, String desc) {
        this.type = type;
        this.desc = desc;
    }
    public String type;
    public String desc;
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
@@ -1,14 +1,18 @@
package com.vincent.rsf.server.manager.schedules;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.common.config.SysStockProperties;
import com.vincent.rsf.server.common.utils.CommonUtil;
import com.vincent.rsf.server.common.utils.DateUtils;
import com.vincent.rsf.server.manager.controller.params.WarehouseAreaParam;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.enums.AsnExceStatus;
import com.vincent.rsf.server.manager.enums.PakinIOStatus;
import com.vincent.rsf.server.manager.enums.WarehouseAreasType;
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.manager.service.impl.WarehouseAreasItemServiceImpl;
import com.vincent.rsf.server.system.constant.GlobalConfigCode;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.entity.Config;
@@ -60,6 +64,10 @@
    private WaitPakinItemLogService waitPakinItemLogService;
    @Autowired
    private ConfigService configService;
    @Autowired
    private WarehouseAreasService warehouseAreasService;
    @Autowired
    private WarehouseAreasItemServiceImpl warehouseAreasItemService;
    /**
@@ -68,32 +76,64 @@
     * @description: 直接组托开关为true,将收货单直接加入临时库存
     * @version 1.0
     */
//    @Scheduled(cron = "0 0/05 * * * ?  ")
    @Scheduled(cron = "0/25 * * * * ?")
    @Transactional(rollbackFor = Exception.class)
    public synchronized void IgnoreReceipt() {
        Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.DIRECT_WAIT_PAKIN));
        if (Objects.isNull(config)) {
            return;
        }
        if (!Boolean.getBoolean(config.getVal())) {
        if (!Boolean.parseBoolean(config.getVal())) {
            return;
        }
        List<AsnOrder> orders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_UN_EXCE.val));
        if (orders.isEmpty()) {
        if (!orders.isEmpty()) {
            for (AsnOrder order : orders) {
                List<AsnOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, order.getId()));
                if (orderItems.isEmpty()) {
                    return;
                }
                List<WarehouseAreasItem> items = new ArrayList<>();
                for (AsnOrderItem item : orderItems) {
                    WarehouseAreas one = warehouseAreasService.getOne(new LambdaQueryWrapper<WarehouseAreas>()
                            .eq(WarehouseAreas::getType, WarehouseAreasType.WAREHOUSE_AREAS_TYPE_RECEIPT.type), false);
                    Long areaId = Objects.isNull(one) ? null : one.getId();
                    String areaName = Objects.isNull(one) ? null : one.getName();
                    WarehouseAreasItem param = new WarehouseAreasItem();
                    BeanUtils.copyProperties(item, param);
                    param.setAreaId(one.getId())
                            .setAsnCode(order.getCode())
                            .setAreaId(areaId)
                            .setAreaName(areaName)
                            .setAsnId(order.getId());
                    items.add(param);
                    if (!asnOrderItemService.update(new LambdaUpdateWrapper<AsnOrderItem>().set(AsnOrderItem::getQty, item.getAnfme()).eq(AsnOrderItem::getId, item.getId()))) {
                        throw new CoolException("收货单明细完成数量修改失败!!");
                    }
                }
                if (!warehouseAreasItemService.saveBatch(items)) {
                    throw new CoolException("收货单保存至收货区执行失败!!");
                }
                if (!asnOrderService.update(new LambdaUpdateWrapper<AsnOrder>()
                        .set(AsnOrder::getQty, order.getQty())
                        .set(AsnOrder::getExceStatus, AsnExceStatus.ASN_EXCE_STATUS_RECEIPT_DONE.val)
                        .eq(AsnOrder::getId, order.getId()))) {
                    throw new CoolException("收货单状态修改失败!!");
                }
            }
        }
    }
    /**
     * @author Ryan
     * @description  根据PO单据生成ASN单,自动生成ASN单为全量生成
     * @throws
     * @return
     * @throws
     * @author Ryan
     * @description 根据PO单据生成ASN单, 自动生成ASN单为全量生成
     * @time 2025/3/3 15:44
     */
    @Scheduled(cron = "0 0/05 * * * ?  ")
@@ -176,17 +216,17 @@
    }
    /**
     * @author Ryan
     * @description 生成物料标签
     * @param
     * @return
     * @author Ryan
     * @description 生成物料标签
     * @time 2025/3/29 12:35
     */
    @Scheduled(cron = "0 0/05 * * * ?  ")
    @Transactional(rollbackFor = Exception.class)
    public void generateMatnrLabel() {
        List<AsnOrderItem> list = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>()
                        .isNull(AsnOrderItem::getTrackCode)
                .isNull(AsnOrderItem::getTrackCode)
                .select(AsnOrderItem::getId));
        if (Objects.isNull(list) || list.isEmpty()) {
            return;
@@ -208,16 +248,16 @@
    }
    /**
     * @author Ryan
     * @description 组拖历史档
     * @param
     * @return
     * @author Ryan
     * @description 组拖历史档
     * @time 2025/3/29 12:36
     */
    @Scheduled(cron = "0/25 * * * * ?")
    @Transactional(rollbackFor = Exception.class)
    public void pakinLog() {
        List<WaitPakin>  pakinIds = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>()
        List<WaitPakin> pakinIds = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>()
                .eq(WaitPakin::getIoStatus, Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_TASK_DONE.val))
                .select(WaitPakin::getId));
        if (pakinIds.isEmpty()) {
@@ -229,7 +269,7 @@
            throw new CoolException("组拖单为空!!");
        }
        List<WaitPakinLog> pakinLogs = new ArrayList<>();
        pakins.forEach(pakin ->{
        pakins.forEach(pakin -> {
            WaitPakinLog log = new WaitPakinLog();
            BeanUtils.copyProperties(pakin, log);
            log.setPakinId(pakin.getId()).setIoStatus(Short.parseShort("2"));
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/QlyIsptItemService.java
@@ -13,4 +13,6 @@
    boolean batchUpdate(IsptItemsParams params, Long loginUserId);
    IPage<QlyIsptItem> pageByWrapper(PageParam<QlyIsptItem, BaseParam> pageParam, QueryWrapper<QlyIsptItem> queryWrapper);
    IPage<QlyIsptItem> pageByIsptResult(PageParam<QlyIsptItem, BaseParam> pageParam, QueryWrapper<QlyIsptItem> queryWrapper);
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyIsptItemServiceImpl.java
@@ -149,4 +149,9 @@
        }
        return page;
    }
    @Override
    public IPage<QlyIsptItem> pageByIsptResult(PageParam<QlyIsptItem, BaseParam> pageParam, QueryWrapper<QlyIsptItem> queryWrapper) {
        return this.baseMapper.pageByWrapper(pageParam, queryWrapper);
    }
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -116,7 +116,7 @@
                TaskItem taskItem = new TaskItem();
                BeanUtils.copyProperties(item, taskItem);
                taskItem.setTaskId(task.getId())
                        .setOrderType(OrderType.ORDER_RECEIPT.type)
                        .setOrderType(OrderType.ORDER_IN.type)
                        .setSource(item.getId())
                        .setTrackCode(item.getTrackCode())
                        .setCreateBy(loginUserId)
@@ -244,7 +244,7 @@
//                    throw new CoolException("数据错误: 单据不存在!!");
//                }
                taskItem.setTaskId(task.getId())
                        .setOrderType(OrderType.ORDER_RECEIPT.type)
                        .setOrderType(OrderType.ORDER_IN.type)
                        .setSource(item.getId())
                        .setTrackCode(item.getTrackCode())
                        .setCreateBy(loginUserId)