skyouc
14 小时以前 474103da0c9793ec9cd7559f109491ece282e269
调拔单功能优化
9个文件已修改
1 文件已重命名
172 ■■■■ 已修改文件
rsf-admin/src/page/orders/transfer/TransferList.jsx 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/transfer/TransferOrders.jsx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckExceStatus.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java 7 ●●●● 补丁 | 查看 | 原始文档 | 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 80 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/transfer/TransferList.jsx
@@ -20,9 +20,11 @@
    TextField,
    NumberField,
    DateField,
    useRefresh,
    BooleanField,
    ReferenceField,
    TextInput,
    Button,
    DateTimeInput,
    DateInput,
    SelectInput,
@@ -33,18 +35,22 @@
    DeleteButton,
} 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 PageEditDrawer from "../../components/PageEditDrawer";
import { Box, Typography, Card, Stack } from '@mui/material';
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 { styled } from '@mui/material/styles';
import TransferPanel from "./TransferPanel.jsx";
import * as Common from '@/utils/common.js';
import ManualCreate from "./ManualCreate.jsx";
import { styled } from '@mui/material/styles';
import * as Common from '@/utils/common.js';
import request from '@/utils/request';
const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
    '& .css-1vooibu-MuiSvgIcon-root': {
@@ -105,6 +111,7 @@
    const translate = useTranslate();
    const [createDialog, setCreateDialog] = useState(false);
    const [drawerVal, setDrawerVal] = useState(false);
    const [select, setSelect] = useState({});
    return (
        <Box display="flex">
@@ -135,7 +142,7 @@
                    preferenceKey='transfer'
                    bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
                    rowClick={(id, resource, record) => false}
                    expand={() => <TransferPanel />}
                    expand={() => <TransferOrders />}
                    expandSingle={true}
                    omit={['id', 'createTime', 'createBy$', 'memo', 'orgWareId', 'tarWareId', 'orgAreaId', 'tarAreaId']}
                >
@@ -160,6 +167,7 @@
                    <WrapperField cellClassName="opt" label="common.field.opt">
                        <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
                        <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
                        <PublicButton setDrawerVal={setDrawerVal} drawerVal={drawerVal} setSelect={setSelect} />
                    </WrapperField>
                </StyledDatagrid>
            </List>
@@ -175,3 +183,23 @@
}
export default TransferList;
//下发执行
const PublicButton = ({ setDrawerVal, setSelect }) => {
    const record = useRecordContext();
    const refresh = useRefresh();
    const taskEvent = async () => {
        const { data: { code, data, msg } } = await request.post(`/transfer/pub/outStock`, record);
        if (code === 200) {
            notify(msg);
            refresh()
        } else {
            notify(msg);
        }
        refresh();
    }
    return (
        <ConfirmButton label={"toolbar.publicWorking"} startIcon={<AddTaskIcon />} onConfirm={taskEvent} size={"small"} />
    )
}
rsf-admin/src/page/orders/transfer/TransferOrders.jsx
File was renamed from rsf-admin/src/page/orders/transfer/TransferPanel.jsx
@@ -39,7 +39,7 @@
    },
}));
const TransferPanel = () => {
const TransferOrders = () => {
    const record = useRecordContext();
    if (!record) return null;
    const translate = useTranslate();
@@ -95,4 +95,4 @@
    );
};
export default TransferPanel;
export default TransferOrders;
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java
@@ -58,7 +58,7 @@
        BaseParam baseParam = buildParam(map, BaseParam.class);
        PageParam<WkOrder, BaseParam> pageParam = new PageParam<>(baseParam, WkOrder.class);
        QueryWrapper<WkOrder> queryWrapper = pageParam.buildWrapper(true);
        List<String> list = Arrays.asList(OrderType.ORDER_OUT.type);
        List<String> list = Arrays.asList(OrderType.ORDER_OUT.type, OrderType.ORDER_TRANSFER.type);
        queryWrapper.in("type", list);
        return R.ok().add(outStockService.page(pageParam, queryWrapper));
    }
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TransferController.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.common.utils.ExcelUtil;
import com.vincent.rsf.server.common.annotation.OperationLog;
import com.vincent.rsf.server.common.domain.BaseParam;
@@ -41,6 +42,7 @@
        return R.ok().add(transferService.page(pageParam, pageParam.buildWrapper(true)));
    }
    @ApiOperation("获取调拔单关联订单")
    @PreAuthorize("hasAuthority('manager:transfer:list')")
    @PostMapping("/transfer/orders/page")
    public R getTransferInfo(@RequestBody Map<String, Object> map) {
@@ -49,6 +51,16 @@
        return R.ok().add(transferService.transfersPage(pageParam, pageParam.buildWrapper(true)));
    }
    @ApiOperation("调拔单生成出库单")
    @PreAuthorize("hasAuthority('manager:transfer:list')")
    @PostMapping("/transfer/pub/outStock")
    public R genOutstock(@RequestBody Transfer transfer) {
        if (Objects.isNull(transfer)) {
            throw new CoolException("参数不能为空!!");
        }
        return R.ok(transferService.genOutStock(transfer, getLoginUserId()));
    }
    @PreAuthorize("hasAuthority('manager:transfer:list')")
    @PostMapping("/transfer/list")
    public R list(@RequestBody Map<String, Object> map) {
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TransferItem.java
@@ -5,6 +5,7 @@
import java.text.SimpleDateFormat;
import java.util.Date;
import com.vincent.rsf.server.manager.service.CompanysService;
import lombok.experimental.Accessors;
import org.checkerframework.checker.units.qual.A;
import org.springframework.format.annotation.DateTimeFormat;
@@ -21,6 +22,7 @@
import com.vincent.rsf.server.system.entity.User;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;
@Data
@Accessors(chain = true)
@@ -264,6 +266,28 @@
//            null    // 备注
//    );
    public String getSplrName() {
        if (null == this.splrId) { return null; }
        CompanysService companysService = SpringUtils.getBean(CompanysService.class);
        Companys companys = companysService.getById(this.splrId);
        if (Objects.isNull(companys)) {
            return null;
        } else {
            return companys.getName();
        }
    }
    public String getSplrCode() {
        if (null == this.splrId) { return null; }
        CompanysService companysService = SpringUtils.getBean(CompanysService.class);
        Companys companys = companysService.getById(this.splrId);
        if (Objects.isNull(companys)) {
            return null;
        } else {
            return companys.getCode();
        }
    }
    public String getStatus$(){
        if (null == this.status){ return null; }
        switch (this.status){
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckExceStatus.java
@@ -2,7 +2,7 @@
public enum CheckExceStatus {
    //盘点单执行状态
    //盘点单执行状态 /调拔单执行状态
    CHECK_ORDER_STATUS_UN_EXCE("0", "未执行"),
    CHECK_ORDER_STATUS_INIT("1", "初始化"),
    CHECK_ORDER_STATUS_EXCE_ING("2", "执行中"),
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderType.java
@@ -11,6 +11,7 @@
    //订单类型
    ORDER_OUT("out", "出库单"),
    ORDER_IN("in", "入库单"),
    ORDER_TRANSFER("transfer", "调拔单"),
    ORDER_CHECK("check", "盘点单");
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/OrderWorkType.java
@@ -14,12 +14,13 @@
    ORDER_WORK_TYPE_PURCHASE("3", "领料退回入库单"),
    ORDER_WORK_TYPE_SALE("4", "销售退回入库单"),
    ORDER_WORK_TYPE_OTHER_IN("5", "其它入库单"),
    ORDER_WORK_TYPE_OTHER_TERANSFER("6", "调拔入库单"),
    ORDER_WORK_TYPE_SUPPLIER("11", "销售出库单"),
    ORDER_WORK_TYPE_RETURN_ORDER("12", "领料出库单"),
    ORDER_WORK_TYPE_PURCHASE_RETURN("13", "采购退回出库单"),
    ORDER_WORK_TYPE_STOCK_OUT("15", "库存出库"),
    ORDER_WORK_TYPE_STOCK_CHECK("16", "盘点出库"),
    ORDER_WORK_TYPE_STOCK_TERANSFER("17", "调拔出库单"),
    ORDER_WORK_TYPE_OTHER("14", "其它出库单");
@@ -54,6 +55,8 @@
            return OrderWorkType.ORDER_WORK_TYPE_STOCK_OUT.type;
        } else if (desc.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.desc)) {
            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;
        }
        return null;
    }
@@ -81,6 +84,8 @@
            return OrderWorkType.ORDER_WORK_TYPE_STOCK_OUT.desc;
        } else if (type.equals(OrderWorkType.ORDER_WORK_TYPE_STOCK_CHECK.type)) {
            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;
        }
        return null;
    }
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TransferService.java
@@ -19,5 +19,7 @@
    R updateTransfer(TransferItemParams params, Long loginUserId);
    IPage<WkOrder> transfersPage(PageParam<Transfer, BaseParam> pageParam, QueryWrapper<Transfer> transferQueryWrapper);
    Transfer genOutStock(Transfer transfer, Long loginUserId);
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TransferServiceImpl.java
@@ -10,23 +10,19 @@
import com.vincent.rsf.server.common.domain.PageResult;
import com.vincent.rsf.server.manager.controller.params.TransferItemParams;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.enums.AsnExceStatus;
import com.vincent.rsf.server.manager.enums.CheckExceStatus;
import com.vincent.rsf.server.manager.enums.OrderSourceType;
import com.vincent.rsf.server.manager.enums.OrderType;
import com.vincent.rsf.server.manager.enums.*;
import com.vincent.rsf.server.manager.mapper.TransferMapper;
import com.vincent.rsf.server.manager.service.AsnOrderItemService;
import com.vincent.rsf.server.manager.service.TransferItemService;
import com.vincent.rsf.server.manager.service.TransferService;
import com.vincent.rsf.server.manager.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vincent.rsf.server.manager.service.WarehouseAreasService;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
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;
@@ -36,9 +32,12 @@
    @Autowired
    private TransferItemService transferItemService;
    @Autowired
    private WarehouseAreasService warehouseAreasService;
    @Autowired
    private OutStockService outStockService;
    @Autowired
    private OutStockItemService outStockItemService;
    /**
     * @author Ryan
@@ -171,4 +170,67 @@
        }
        return this.baseMapper.transfersPage(pageParam, one.getId());
    }
    /**
     * @author Ryan
     * @date 2025/7/28
     * @description: 调拔单生成出库单
     * @version 1.0
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Transfer genOutStock(Transfer param, Long loginUserId) {
        Transfer transfer = this.getById(param.getId());
        if (Objects.isNull(transfer)) {
            throw new CoolException("数据错误:单据不存在!!");
        }
        List<TransferItem> items = transferItemService.list(new LambdaQueryWrapper<TransferItem>().eq(TransferItem::getTransferId, transfer.getId()));
        if (items.isEmpty()) {
            throw new CoolException("数据错误:调拔单明细不存在!!");
        }
        WkOrder wkOrder = new WkOrder();
        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TRANSFER_ORDER_CODE, transfer);
        if (StringUtils.isBlank(ruleCode)) {
            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)
                .setWkType(OrderWorkType.ORDER_WORK_TYPE_STOCK_TERANSFER.type)
                .setCreateBy(loginUserId)
                .setUpdateBy(loginUserId)
                .setCreateTime(new Date())
                .setUpdateTime(new Date())
                .setPoCode(transfer.getCode())
                .setPoId(transfer.getId());
        if (!outStockService.saveOrUpdate(wkOrder)) {
            throw new CoolException("出库单保存失败!!");
        }
        List<WkOrderItem> orderItems = new ArrayList<>();
        items.forEach(item -> {
            WkOrderItem orderItem = new WkOrderItem();
            BeanUtils.copyProperties(item, orderItem);
            orderItem.setOrderCode(wkOrder.getCode())
                    .setSplrBatch(item.getBatch())
                    .setSplrCode(item.getSplrCode())
                    .setSplrName(item.getSplrName())
                    .setOrderId(wkOrder.getId());
            orderItems.add(orderItem);
        });
        if (!outStockItemService.saveBatch(orderItems)) {
            throw new CoolException("出库单明细保存失败!!");
        }
        transfer.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val);
        if (!this.updateById(transfer)) {
            throw new CoolException("调拔单更新失败!!");
        }
        return transfer;
    }
}