skyouc
昨天 d5f16640dc1bf0239beafab721480a64425d9c1e
调拔功能优化
13个文件已修改
380 ■■■■■ 已修改文件
rsf-admin/src/i18n/en.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/i18n/zh.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/transfer/ManualCreate.jsx 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/transfer/TransferItemList.jsx 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/transfer/TransferList.jsx 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/transfer/TransferOrders.jsx 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/common/config/MybatisPlusConfig.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Transfer.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WkOrder.java 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/i18n/en.js
@@ -691,6 +691,16 @@
                projectCode: "projectCode",
            },
            transferOrder: {
                code: 'Order No',
                poCode: 'transfer No',
                type: 'Type',
                wkType: 'Work Type',
                anfme: 'Anfme',
                workQty: 'Work Qty',
                qty: 'Qty',
            },
            checkDiffItem: {
                checkId: "checkId",
                orderCode: "orderCode",
rsf-admin/src/i18n/zh.js
@@ -722,6 +722,15 @@
                projectCode: "项目单号",
            },
            transferOrder: {
                code: '单号',
                poCode: '调拔单',
                type: '单据类型',
                wkType: '调拔类型',
                anfme: '调拔数量',
                workQty: '执行数量',
                qty: '完成数',
            },
            checkDiffItem: {
                checkId: "盘点单ID",
rsf-admin/src/page/orders/asnOrder/AsnOrderList.jsx
@@ -1,5 +1,4 @@
import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
import { useLocation, useNavigate } from 'react-router-dom';
import {
  List,
  DatagridConfigurable,
@@ -37,29 +36,30 @@
  useRedirect,
  useUnselectAll,
} from 'react-admin';
import { Box, Typography, Card, Stack } from '@mui/material';
import { styled } from '@mui/material/styles';
import AsnOrderModal from "./AsnOrderModal";
import AsnOrderPanel from "./AsnOrderPanel";
import EmptyData from "../../components/EmptyData";
import MyCreateButton from "../../components/MyCreateButton";
import MyExportButton from '../../components/MyExportButton';
import BillStatusField from '../../components/BillStatusField';
import ConfirmButton from '../../components/ConfirmButton';
import PageDrawer from "../../components/PageDrawer";
import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
import ConstructionIcon from "@mui/icons-material/Construction";
import EditIcon from '@mui/icons-material/Edit';
import TaskIcon from '@mui/icons-material/Task';
import CloseIcon from '@mui/icons-material/Close';
import request from '@/utils/request';
import CreateNewFolderOutlinedIcon from '@mui/icons-material/CreateNewFolderOutlined';
import PrintOutlinedIcon from '@mui/icons-material/PrintOutlined';
import DictionarySelect from "../../components/DictionarySelect";
import ConstructionIcon from "@mui/icons-material/Construction";
import BillStatusField from '../../components/BillStatusField';
import { Box, Typography, Card, Stack } from '@mui/material';
import MyCreateButton from "../../components/MyCreateButton";
import { useLocation, useNavigate } from 'react-router-dom';
import MyExportButton from '../../components/MyExportButton';
import ConfirmButton from '../../components/ConfirmButton';
import ExitToAppIcon from '@mui/icons-material/ExitToApp';
import ImportButton from "../../components/ImportButton";
import PrintOutlinedIcon from '@mui/icons-material/PrintOutlined';
import OrderPrintPreview from "./OrderPrintPreview";
import CreateNewFolderOutlinedIcon from '@mui/icons-material/CreateNewFolderOutlined';
import AsnCreateByPoModal from "./AsnCreateByPoModal";
import PageDrawer from "../../components/PageDrawer";
import OrderPrintPreview from "./OrderPrintPreview";
import CloseIcon from '@mui/icons-material/Close';
import EditIcon from '@mui/icons-material/Edit';
import TaskIcon from '@mui/icons-material/Task';
import { styled } from '@mui/material/styles';
import AsnOrderModal from "./AsnOrderModal";
import request from '@/utils/request';
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
  '& .css-1vooibu-MuiSvgIcon-root': {
    height: '.9em'
@@ -69,7 +69,7 @@
  },
  '& .column-name': {
  },
  '& .wkType': {
    width: 110
  },
@@ -83,7 +83,7 @@
  },
  '& .opt': {
    width: 220,
  },
}));
@@ -170,7 +170,7 @@
            </>}
          rowClick={false}
          expandSingle={true}
          omit={['id', 'createTime', 'createBy', 'memo', 'logisNo', 'poId', 'rleStatus$','createBy$']}
          omit={['id', 'createTime', 'createBy', 'memo', 'logisNo', 'poId', 'rleStatus$', 'createBy$']}
        >
          <NumberField source="id" />
          <TextField source="code" label="table.field.asnOrder.code" />
@@ -351,15 +351,16 @@
const BtnBulkExport = () => {
  const { filter, selectedIds, filterValues, resource, sort, total } = useListContext();
  const refresh = useRefresh();
  const dataProvider = useDataProvider();
  const notify = useNotify();
  const unSelect = useUnselectAll(resource);
  const dataProvider = useDataProvider();
  const refresh = useRefresh();
  const notify = useNotify();
  const bulkExport = () => {
    getExport()
    unSelect();
  }
  const getExport = () => {
    dataProvider
      .export(resource, {
rsf-admin/src/page/orders/transfer/ManualCreate.jsx
@@ -18,6 +18,7 @@
    Form,
    useCreateController,
    SimpleForm,
    useRefresh,
} from 'react-admin';
import {
    Dialog,
@@ -51,6 +52,7 @@
    const { open, setOpen, orderId } = props;
    const tableRef = useRef();
    const notify = useNotify();
    const refresh = useRefresh();
    const translate = useTranslate();
    const [tabelData, setTableData] = useState([]);
    const [disabled, setDisabled] = useState(false);
@@ -84,12 +86,10 @@
                "transfer": formData,
                "items": tabelData,
            }
            const res = await request.post(`/transfer/items/save`, parmas);
            if (res?.data?.code === 200) {
                setOpen(false);
                refresh();
                resetData()
            } else {
                notify(res.data.msg);
            }
@@ -101,13 +101,13 @@
            const res = await request.post(`/transfer/items/update`, parmas);
            if (res?.data?.code === 200) {
                setOpen(false);
                refresh();
                resetData()
            } else {
                notify(res.data.msg);
            }
        }
        setDisabled(false)
        refresh();
    };
    const handleSuccess = async (data) => {
@@ -140,15 +140,10 @@
    const handleChange = (value, name) => {
        console.log(name);
        console.log(value);
        setFormData((prevData) => ({
            ...prevData,
            [name]: value
        }));
        console.log(formData);
    };
    return (
rsf-admin/src/page/orders/transfer/TransferItemList.jsx
@@ -31,6 +31,7 @@
    ReferenceArrayInput,
    AutocompleteInput,
    DeleteButton,
    useGetRecordId,
} from 'react-admin';
import { Box, Typography, Card, Stack } from '@mui/material';
import { styled } from '@mui/material/styles';
@@ -91,6 +92,7 @@
const TransferItemList = () => {
    const translate = useTranslate();
    const orderId = useGetRecordId();
    const [drawerVal, setDrawerVal] = useState(false);
    const [createDialog, setCreateDialog] = useState(false);
@@ -108,6 +110,7 @@
                title={false}
                empty={false}
                filters={filters}
                filter={{transferId: orderId}}
                sort={{ field: "create_time", order: "desc" }}
                actions={(
                    <TopToolbar>
rsf-admin/src/page/orders/transfer/TransferList.jsx
@@ -33,19 +33,17 @@
    ReferenceArrayInput,
    AutocompleteInput,
    DeleteButton,
    useRedirect,
} 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 BillStatusField from '../../components/BillStatusField';
import { Box, Typography, Card, Stack, } from '@mui/material';
import PageEditDrawer from "../../components/PageEditDrawer";
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 ManualCreate from "./ManualCreate.jsx";
import { styled } from '@mui/material/styles';
import * as Common from '@/utils/common.js';
@@ -158,7 +156,7 @@
                    <TextField source="orgAreaName" label="table.field.transfer.orgAreaName" />
                    <NumberField source="tarAreaId" label="table.field.transfer.tarAreaId" />
                    <TextField source="tarAreaName" label="table.field.transfer.tarAreaName" />
                    <TextField source="exceStatus$" label="table.field.transfer.exceStatus" sortable={false} />
                    <BillStatusField source="exceStatus$" cellClassName="status" label="table.field.transfer.exceStatus" sortable={false} />
                    <TextField source="updateBy$" label="common.field.updateBy" />
                    <DateField source="updateTime" label="common.field.updateTime" showTime />
                    <TextField source="createBy$" label="common.field.createBy" />
@@ -188,10 +186,12 @@
const PublicButton = ({ setDrawerVal, setSelect }) => {
    const record = useRecordContext();
    const refresh = useRefresh();
    const redirct = useRedirect();
    const taskEvent = async () => {
        const { data: { code, data, msg } } = await request.post(`/transfer/pub/outStock`, record);
        if (code === 200) {
            notify(msg);
            redirct("/outStock");
            refresh()
        } else {
            notify(msg);
@@ -200,6 +200,6 @@
    }
    return (
        <ConfirmButton label={"toolbar.publicWorking"} startIcon={<AddTaskIcon />} onConfirm={taskEvent} size={"small"} />
        record?.exceStatus == 0 ? <ConfirmButton label={"toolbar.publicWorking"} startIcon={<AddTaskIcon />} onConfirm={taskEvent} size={"small"} /> : <></>
    )
}
rsf-admin/src/page/orders/transfer/TransferOrders.jsx
@@ -70,18 +70,16 @@
                        bulkActionButtons={false}
                        rowClick={false}
                        expandSingle={true}
                        omit={['id', 'createTime', 'createBy$', 'memo', 'rleStatus$']}
                        omit={['id', 'createTime', 'createBy$', 'memo']}
                    >
                        <NumberField source="id" />
                        <TextField source="code" label="table.field.outStock.code" />
                        <TextField source="poCode" label="table.field.outStock.poCode" />
                        <TextField source="type$" label="table.field.outStock.type" />
                        <TextField cellClassName="wkType" source="wkType$" label="table.field.outStock.wkType" />
                        <NumberField source="anfme" label="table.field.outStock.anfme" />
                        <NumberField source="workQty" label="table.field.outStock.workQty" />
                        <NumberField source="qty" label="table.field.outStock.qty" />
                        <TextField source="logisNo" label="table.field.outStock.logisNo" />
                        <TextField source="rleStatus$" label="table.field.outStock.rleStatus" sortable={false} />
                        <TextField source="code" label="table.field.transferOrder.code" />
                        <TextField source="poCode" label="table.field.transferOrder.poCode" />
                        <TextField source="type$" label="table.field.transferOrder.type" />
                        <TextField cellClassName="wkType" source="wkType$" label="table.field.transferOrder.wkType" />
                        <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" />
rsf-server/src/main/java/com/vincent/rsf/server/common/config/MybatisPlusConfig.java
@@ -51,6 +51,7 @@
                        "man_loc_type_rela",
                        "man_qly_inspect_result",
                        "view_stock_manage",
                        "man_transfer_order",
                        "man_wave_order_rela"
                ).contains(tableName);
            }
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java
@@ -14,6 +14,7 @@
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;
import com.vincent.rsf.server.manager.service.OutStockService;
import com.vincent.rsf.server.manager.service.TransferService;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.controller.BaseController;
@@ -33,6 +34,8 @@
    @Autowired
    private TransferService transferService;
    @Autowired
    private OutStockService outStockService;
    @PreAuthorize("hasAuthority('manager:transfer:list')")
    @PostMapping("/transfer/page")
@@ -96,6 +99,10 @@
        if (!transferService.save(transfer)) {
            return R.error("Save Fail");
        }
        /***保存成功,自动生成出库单*/
        transferService.genOutStock(transfer, getLoginUserId());
        return R.ok("Save Success").add(transfer);
    }
@@ -115,8 +122,12 @@
    @OperationLog("Delete 调拔单")
    @PostMapping("/transfer/remove/{ids}")
    public R remove(@PathVariable Long[] ids) {
        if (!transferService.removeByIds(Arrays.asList(ids))) {
            return R.error("Delete Fail");
        List<Long> list = Arrays.asList(ids);
        if (list.isEmpty()) {
            return R.error("参数不能为空!!");
        }
        if (!transferService.removeTransfer(list)) {
            throw new CoolException("调拔单移除失败!!");
        }
        return R.ok("Delete Success").add(ids);
    }
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Transfer.java
@@ -248,7 +248,7 @@
        }
        DictDataService dictDataService = SpringUtils.getBean(DictDataService.class);
        DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>()
                .eq(DictData::getDictTypeCode, DictTypeCode.SYS_WAVE_EXCE_STATUS)
                .eq(DictData::getDictTypeCode, DictTypeCode.SYS_CHECK_EXCE_STATUS)
                .eq(DictData::getValue, this.exceStatus));
        if (Objects.isNull(dictData)) {
            return null;
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WkOrder.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.vincent.rsf.server.manager.enums.OrderType;
import com.vincent.rsf.server.manager.enums.OrderWorkType;
import com.vincent.rsf.server.system.constant.DictTypeCode;
import com.vincent.rsf.server.system.entity.DictData;
import com.vincent.rsf.server.system.service.DictDataService;
@@ -25,6 +26,7 @@
import com.vincent.rsf.framework.common.SpringUtils;
import com.vincent.rsf.server.system.service.UserService;
import com.vincent.rsf.server.system.entity.User;
import java.io.Serializable;
@Data
@@ -37,38 +39,38 @@
    /**
     * ID
     */
    @ApiModelProperty(value= "ID")
    @ApiModelProperty(value = "ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
     * 编号
     */
    @ApiModelProperty(value= "编号")
    @ApiModelProperty(value = "编号")
    private String code;
    /**
     * PO单号
     */
    @ApiModelProperty(value= "PO单号")
    @ApiModelProperty(value = "PO单号")
    private String poCode;
    /**
     * PO单据标识
     */
    @ApiModelProperty(value= "PO单据标识")
    @ApiModelProperty(value = "PO单据标识")
    private Long poId;
    /**
     * 单据类型
     */
    @ApiModelProperty(value= "单据类型")
    @ApiModelProperty(value = "单据类型")
    private String type;
    /**
     * 业务类型
     */
    @ApiModelProperty(value= "业务类型")
    @ApiModelProperty(value = "业务类型")
    private String wkType;
    @ApiModelProperty("盘点类型")
@@ -77,7 +79,7 @@
    /**
     * 送货数量
     */
    @ApiModelProperty(value= "送货数量")
    @ApiModelProperty(value = "送货数量")
    private Double anfme;
    @ApiModelProperty("执行数量")
@@ -86,13 +88,13 @@
    /**
     * 已收数量
     */
    @ApiModelProperty(value= "已收数量")
    @ApiModelProperty(value = "已收数量")
    private Double qty;
    /**
     * 物流单号
     */
    @ApiModelProperty(value= "物流单号")
    @ApiModelProperty(value = "物流单号")
    private String logisNo;
    @ApiModelProperty("波次ID")
@@ -101,8 +103,8 @@
    /**
     * 预计到达时间
     */
    @ApiModelProperty(value= "预计到达时间")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "预计到达时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date arrTime;
    /**
@@ -112,9 +114,9 @@
    private Integer ntyStatus;
    /**
     * 释放状态 0:  正常   1:  已释放
     * 释放状态 0:  正常   1:  已释放
     */
    @ApiModelProperty(value= "释放状态 0:  正常   1:  已释放  ")
    @ApiModelProperty(value = "释放状态 0:  正常   1:  已释放  ")
    private Short rleStatus;
@@ -122,59 +124,60 @@
    private Short exceStatus;
    /**
     * 状态 1: 正常  0: 冻结
     * 状态 1: 正常  0: 冻结
     */
    @ApiModelProperty(value= "状态 1: 正常  0: 冻结  ")
    @ApiModelProperty(value = "状态 1: 正常  0: 冻结  ")
    private Integer status;
    /**
     * 是否删除 1: 是  0: 否
     * 是否删除 1: 是  0: 否
     */
    @ApiModelProperty(value= "是否删除 1: 是  0: 否  ")
    @ApiModelProperty(value = "是否删除 1: 是  0: 否  ")
    @TableLogic
    private Integer deleted;
    /**
     * 租户
     */
    @ApiModelProperty(value= "租户")
    @ApiModelProperty(value = "租户")
    private Integer tenantId;
    /**
     * 添加人员
     */
    @ApiModelProperty(value= "添加人员")
    @ApiModelProperty(value = "添加人员")
    private Long createBy;
    /**
     * 添加时间
     */
    @ApiModelProperty(value= "添加时间")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @ApiModelProperty(value = "添加时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
    /**
     * 修改人员
     */
    @ApiModelProperty(value= "修改人员")
    @ApiModelProperty(value = "修改人员")
    private Long updateBy;
    /**
     * 修改时间
     */
    @ApiModelProperty(value= "修改时间")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @ApiModelProperty(value = "修改时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
    /**
     * 备注
     */
    @ApiModelProperty(value= "备注")
    @ApiModelProperty(value = "备注")
    private String memo;
    public WkOrder() {}
    public WkOrder() {
    }
    public WkOrder(String code, String poCode, Long poId, String type, String wkType, Double anfme, Double qty, String logisNo, Date arrTime, Short rleStatus, Integer status, Integer deleted, Integer tenantId, Long createBy, Date createTime, Long updateBy, Date updateTime, String memo) {
        this.code = code;
@@ -198,7 +201,7 @@
    }
    public String getExceStatus$() {
        if (Cools.isEmpty(this.exceStatus)){
        if (Cools.isEmpty(this.exceStatus)) {
            return "";
        }
        String exceType = DictTypeCode.DICT_ASN_EXCE_STATUS;
@@ -216,42 +219,57 @@
    }
    public String getType$(){
        if (Cools.isEmpty(this.type)){
    public String getType$() {
        return OrderType.getValType(this.type);
//        if (this.type.equals(OrderType.ORDER_TRANSFER.type)) {
//            return OrderType.getValType(this.type);
//        } else {
//            if (Cools.isEmpty(this.type)) {
//                return "";
//            }
//            DictDataService dictDataService = SpringUtils.getBean(DictDataService.class);
//            DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>()
//                    .eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_ORDER_TYPE)
//                    .eq(DictData::getValue, this.type));
//            if (Objects.isNull(dictData)) {
//                return null;
//            }
//            return dictData.getLabel();
//        }
    }
    public String getWkType$() {
//        if (this.type.equals(OrderType.ORDER_TRANSFER.type)) {
            return OrderWorkType.getWorkDesc(this.wkType);
//        } else {
//            String typeCode = DictTypeCode.DICT_SYS_BUSINESS_TYPE;
//            if (type.equals(OrderType.ORDER_CHECK.type)) {
//                typeCode = DictTypeCode.SYS_CHECK_ORDER_TYPE;
//            }
//            if (Cools.isEmpty(this.wkType)) {
//                return "";
//            }
//            DictDataService dictDataService = SpringUtils.getBean(DictDataService.class);
//            DictData dictData = dictDataService
//                    .getOne(new LambdaQueryWrapper<DictData>()
//                    .eq(DictData::getDictTypeCode, typeCode)
//                            .eq(DictData::getValue, this.wkType));
//            if (Objects.isNull(dictData)) {
//                return null;
//            }
//            return dictData.getLabel();
//        }
    }
    public String getCheckType$() {
        if (Cools.isEmpty(this.checkType)) {
            return "";
        }
        DictDataService dictDataService = SpringUtils.getBean(DictDataService.class);
        DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>()
                .eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_ORDER_TYPE)
                .eq(DictData::getValue, this.type));
        if (Objects.isNull(dictData)) {
            return null;
        }
        return dictData.getLabel();
    }
    public String getWkType$(){
        String typeCode = DictTypeCode.DICT_SYS_BUSINESS_TYPE;
        if (type.equals(OrderType.ORDER_CHECK.type)) {
            typeCode = DictTypeCode.SYS_CHECK_ORDER_TYPE;
        }
        if (Cools.isEmpty(this.wkType)){
            return "";
        }
        DictDataService dictDataService = SpringUtils.getBean(DictDataService.class);
        DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>().eq(DictData::getDictTypeCode, typeCode).eq(DictData::getValue, this.wkType));
        if (Objects.isNull(dictData)) {
            return null;
        }
        return dictData.getLabel();
    }
    public String getCheckType$(){
        if (Cools.isEmpty(this.checkType)){
            return "";
        }
        DictDataService dictDataService = SpringUtils.getBean(DictDataService.class);
        DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>().eq(DictData::getDictTypeCode, DictTypeCode.SYS_CHECK_TYPE).eq(DictData::getValue, this.checkType));
                .eq(DictData::getDictTypeCode, DictTypeCode.SYS_CHECK_TYPE)
                .eq(DictData::getValue, this.checkType));
        if (Objects.isNull(dictData)) {
            return null;
        }
@@ -259,28 +277,32 @@
    }
    public String getArrTime$(){
        if (Cools.isEmpty(this.arrTime)){
    public String getArrTime$() {
        if (Cools.isEmpty(this.arrTime)) {
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.arrTime);
    }
    public String getRleStatus$(){
        if (null == this.rleStatus){ return null; }
        switch (this.rleStatus){
    public String getRleStatus$() {
        if (null == this.rleStatus) {
            return null;
        }
        switch (this.rleStatus) {
            case 0:
                return " 正常";
            case  1:
            case 1:
                return " 已释放";
            default:
                return String.valueOf(this.rleStatus);
        }
    }
    public String getStatus$(){
        if (null == this.status){ return null; }
        switch (this.status){
    public String getStatus$() {
        if (null == this.status) {
            return null;
        }
        switch (this.status) {
            case 1:
                return "正常";
            case 0:
@@ -290,43 +312,44 @@
        }
    }
    public String getCreateBy$(){
    public String getCreateBy$() {
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.getById(this.createBy);
        if (!Cools.isEmpty(user)){
        if (!Cools.isEmpty(user)) {
            return String.valueOf(user.getNickname());
        }
        return null;
    }
    public String getCreateTime$(){
        if (Cools.isEmpty(this.createTime)){
    public String getCreateTime$() {
        if (Cools.isEmpty(this.createTime)) {
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
    }
    public String getUpdateBy$(){
    public String getUpdateBy$() {
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.getById(this.updateBy);
        if (!Cools.isEmpty(user)){
        if (!Cools.isEmpty(user)) {
            return String.valueOf(user.getNickname());
        }
        return null;
    }
    public String getUpdateTime$(){
        if (Cools.isEmpty(this.updateTime)){
    public String getUpdateTime$() {
        if (Cools.isEmpty(this.updateTime)) {
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
    }
    public Boolean getStatusBool(){
        if (null == this.status){ return null; }
        switch (this.status){
    public Boolean getStatusBool() {
        if (null == this.status) {
            return null;
        }
        switch (this.status) {
            case 1:
                return true;
            case 0:
@@ -335,9 +358,12 @@
                return null;
        }
    }
    public String getNtyStatus$(){
        if (null == this.ntyStatus){ return "error"; }
        switch (this.ntyStatus){
    public String getNtyStatus$() {
        if (null == this.ntyStatus) {
            return "error";
        }
        switch (this.ntyStatus) {
            case 0:
                return "未上报";
            case 1:
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java
@@ -21,5 +21,7 @@
    IPage<WkOrder> transfersPage(PageParam<Transfer, BaseParam> pageParam, QueryWrapper<Transfer> transferQueryWrapper);
    Transfer genOutStock(Transfer transfer, Long loginUserId);
    boolean removeTransfer(List<Long> list);
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java
@@ -22,10 +22,8 @@
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;
import java.util.*;
import java.util.stream.Collectors;
@Service("transferService")
public class TransferServiceImpl extends ServiceImpl<TransferMapper, Transfer> implements TransferService {
@@ -40,6 +38,8 @@
    private OutStockItemService outStockItemService;
    @Autowired
    private TransferOrderService transferOrderService;
    @Autowired
    private TransferService transferService;
    /**
     * @author Ryan
@@ -191,16 +191,16 @@
            throw new CoolException("数据错误:调拔单明细不存在!!");
        }
        WkOrder wkOrder = new WkOrder();
        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TRANSFER_ORDER_CODE, transfer);
        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_OUT_STOCK_CODE, transfer);
        if (StringUtils.isBlank(ruleCode)) {
            throw new CoolException("调拔单号生成失败!!");
            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)
                .setType(OrderType.ORDER_OUT.type)
                .setWkType(OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type)
                .setCreateBy(loginUserId)
                .setUpdateBy(loginUserId)
@@ -228,14 +228,14 @@
            throw new CoolException("出库单明细保存失败!!");
        }
        transfer.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val);
        transfer.setExceStatus(CheckExceStatus.CHECK_ORDER_STATUS_INIT.val);
        if (!this.updateById(transfer)) {
            throw new CoolException("调拔单更新失败!!");
        }
        TransferOrder transferOrder = new TransferOrder();
        transferOrder.setTransferId(transfer.getId()).setOrderId(wkOrder.getId()).setExceStatus(1);
        transferOrder.setTransferId(transfer.getId()).setOrderId(wkOrder.getId()).setExceStatus((int)CheckExceStatus.CHECK_ORDER_STATUS_INIT.val);
        if (!transferOrderService.save(transferOrder)) {
            throw new CoolException("单据关联失败!!");
@@ -243,4 +243,30 @@
        return transfer;
    }
    /**
     * @author Ryan
     * @date 2025/7/29
     * @description: 删除调拔单
     * @version 1.0
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean removeTransfer(List<Long> list) {
        List<WkOrder> wkOrders = outStockService.list(new LambdaQueryWrapper<WkOrder>().in(WkOrder::getPoId, list));
        if (!wkOrders.isEmpty()) {
            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))) {
                throw new CoolException("当前出库单已执行,不支持删除!!");
            }
            outStockItemService.remove(new LambdaQueryWrapper<WkOrderItem>().in(WkOrderItem::getOrderId, longs));
            transferOrderService.remove(new LambdaQueryWrapper<TransferOrder>().in(TransferOrder::getTransferId, list));
        }
        transferService.removeByIds(list);
        transferItemService.remove(new LambdaQueryWrapper<TransferItem>().in(TransferItem::getTransferId, list));
        return true;
    }
}