skyouc
2025-06-05 b011b1368c2f8813ef2684a4a63914e6e59b5e15
DO单优化
出库单优化
6个文件已修改
1个文件已添加
229 ■■■■■ 已修改文件
rsf-admin/src/page/orders/outStock/OutOrderList.jsx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/outStock/OutOrderModal.jsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/OutStockTemplate.java 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/POExceStatus.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockItemServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-admin/src/page/orders/outStock/OutOrderList.jsx
@@ -142,7 +142,7 @@
            <CreateByOrderButton setCreateDialog={setCreateDialog} />
            <MyCreateButton onClick={() => { setManualDialog(true); setmodalType(0) }} />
            <SelectColumnsButton preferenceKey='outStock' />
            <ImportButton value={'asnOrderItem'} />
            <ImportButton value={'outStock'} />
            {/* <MyExportButton /> */}
          </TopToolbar>
        )}
rsf-admin/src/page/orders/outStock/OutOrderModal.jsx
@@ -269,6 +269,7 @@
    const { setOpen } = props;
    const { selectedIds, onUnselectItems } = useListContext();
    const notify = useNotify();
    const refresh = useRefresh();
    const confirm = async (event) => {
        const res = await request.post(`/outStock/generate/orders`, { ids: selectedIds });
        if (res?.data?.code === 200) {
@@ -276,6 +277,7 @@
        } else {
            notify(res.data.msg);
        }
        refresh();
        onUnselectItems();
        setOpen(false);
    }
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.R;
@@ -47,7 +48,9 @@
    public R page(@RequestBody Map<String, Object> map) {
        BaseParam baseParam = buildParam(map, BaseParam.class);
        PageParam<DeliveryItem, BaseParam> pageParam = new PageParam<>(baseParam, DeliveryItem.class);
        return R.ok().add(deliveryItemService.page(pageParam, pageParam.buildWrapper(true)));
        QueryWrapper<DeliveryItem> wrapper = pageParam.buildWrapper(true);
        wrapper.apply("anfme > work_qty + qty ");
        return R.ok().add(deliveryItemService.page(pageParam, wrapper));
    }
    @PreAuthorize("hasAuthority('manager:deliveryItem:list')")
rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/OutStockTemplate.java
New file
@@ -0,0 +1,195 @@
package com.vincent.rsf.server.manager.entity.excel;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelAutoColumnSize;
import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelComment;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
/**
 * @author Ryan
 * @version 1.0
 * @title AsnOrderTemplate
 * @description
 * @create 2025/3/12 13:49
 */
@Data
@ExcelAutoColumnSize
@Accessors(chain = true)
public class OutStockTemplate {
    /**
     * 编号
     */
    @Excel(name = "*出库单号")
    @ApiModelProperty(value = "*出库单号")
    @ExcelComment(value = "code", example = "OS5945272236")
    private String code;
    /**
     * PO单号
     */
    @Excel(name = "DO单号")
    @ApiModelProperty(value = "DO单号")
    @ExcelComment(value = "poCode", example = "DO59755695")
    private String poCode;
//    /**
//     * PO单据标识
//     */
//    @Excel(name = "PO单据标识")
//    @ApiModelProperty(value= "PO单据标识")
//    @ExcelComment(value = "poId", example = "123456698")
//    private String poId;
    @Excel(name = "行号")
    @ApiModelProperty("行号")
    @ExcelComment(value = "platItemId", example = "1357564255478")
    private String platItemId;
    @Excel(name = "客户订单号")
    @ApiModelProperty("客户订单号")
    @ExcelComment(value = "platOrderCode", example = "PT202564713301")
    private String platOrderCode;
    @Excel(name = "工单号")
    @ApiModelProperty("工单号")
    @ExcelComment(value = "platWorkCode", example = "PWC2354894211")
    private String platWorkCode;
    @Excel(name = "项目号")
    @ApiModelProperty("项目号")
    @ExcelComment(value = "projectCode", example = "PC2365845636001")
    private String projectCode;
    /**
     * 单据类型
     */
    @Excel(name = "*单据类型")
    @ApiModelProperty(value = "*单据类型")
    @ExcelComment(value = "type", example = "入库单")
    private String type;
    /**
     * 业务类型
     */
    @Excel(name = "*业务类型")
    @ApiModelProperty(value = "*业务类型")
    @ExcelComment(value = "wkType", example = "采购入库单")
    private String wkType;
//    @Excel(name = "执行状态")
//    @ApiModelProperty(value= "执行状态")
//    @ExcelComment(value = "exceStatus", example = "0")
//    private String exceStatus;
    @Excel(name = "*物料编码")
    @ApiModelProperty("*物料编码")
    @ExcelComment(value = "matnrCode", example = "102010101545")
    private String matnrCode;
    @Excel(name = "物料名称")
    @ApiModelProperty("物料名称")
    @ExcelComment(value = "maktx", example = "天瑞019-大A型支架-55飞机轮黑色,三角轮盖喷漆银色 (带攻丝钉)右")
    private String maktx;
    //    @Excel(name = "物料规格")
//    @ApiModelProperty("物料规格")
//    @ExcelComment(value = "maktx",example = "2*3*6")
//    private String spec;
//
//
//    @Excel(name = "物料型号")
//    @ApiModelProperty("物料型号")
//    @ExcelComment(value = "maktx",example = "abc")
//    private String model;
    @Excel(name = "供应商编码")
    @ApiModelProperty("供应商编码")
    @ExcelComment(value = "splrCode", example = "685947")
    private String splrCode;
    @Excel(name = "供应商名称")
    @ApiModelProperty("供应商名称")
    @ExcelComment(value = "splrName", example = "浙江中扬立库技术有限公司")
    private String splrName;
//    @Excel(name = "库存单位")
//    @ApiModelProperty("库存单位")
//    @ExcelComment(value = "stockUnit", example = "个")
//    private String stockUnit;
//    @Excel(name = "采购数量")
//    @ApiModelProperty("采购数量")
//    @ExcelComment(value = "purQty", example = "0")
//    private String purQty;
//
//    @Excel(name = "采购单位")
//    @ApiModelProperty("采购单位")
//    @ExcelComment(value = "purUnit", example = "个")
//    private String purUnit;
//    @Excel(name = "已完成数量")
//    @ApiModelProperty("已完成数量")
//    @ExcelComment(value = "qty", example = "0")
//    private String qty;
    @Excel(name = "供应商批次")
    @ApiModelProperty("供应商批次")
    @ExcelComment(value = "splrBatch", example = "25251212")
    private String splrBatch;
    @Excel(name = "*数量")
    @ApiModelProperty("*数量")
    @ExcelComment(value = "anfme", example = "75")
    private String anfme;
//    @Excel(name = "二维码")
//    @ApiModelProperty("二维码")
//    @ExcelComment(value = "qrcode",example = "")
//    private String qrcode;
    //    @Excel(name = "条形码")
//    @ApiModelProperty("条形码")
//    @ExcelComment(value = "barcode", example = "")
//    private String barcode;
//
//    @Excel(name = "跟踪码")
//    @ApiModelProperty("跟踪码")
//    @ExcelComment(value = "trackCode", example = "")
//    private String trackCode;
    @Excel(name = "物流单号")
    @ApiModelProperty("物流单号")
    @ExcelComment(value = "logicNo", example = "SF100064851")
    private String logicNo;
    @Excel(name = "质检状态")
    @ApiModelProperty("质检状态")
    @ExcelComment(value = "isptResult", example = "合格")
    private String isptResult;
    @Excel(name = "预计送达时间")
    @ApiModelProperty("预计送达时间")
    @ExcelComment(value = "arrTime", example = "2025-05-21")
    private String arrTime;
//    @Excel(name = "包装名称")
//    @ApiModelProperty("包装名称")
//    @ExcelComment(value = "packName", example = "箱")
//    private String packName;
    @Excel(name = "备注")
    @ApiModelProperty("备注")
    @ExcelComment(value = "memo", example = "注:易碎品,轻拿放")
    private String memo;
}
rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/POExceStatus.java
@@ -4,7 +4,7 @@
public enum POExceStatus {
    PO_EXCE_STATUS_UN_EXCE("0", "未执行"),
    PO_EXCE_STATUS_EXCE_ING("1", "执行中"),
    PO_EXCE_STATUS_SECTION_DONE("3", "部分完成"),
    PO_EXCE_STATUS_SECTION_DONE("2", "部分完成"),
    PO_EXCE_STATUS_ALL_DONE("3", "已完成"),
    ;
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockItemServiceImpl.java
@@ -10,6 +10,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.manager.entity.excel.OutStockTemplate;
import com.vincent.rsf.server.manager.enums.OrderType;
import com.vincent.rsf.server.manager.enums.OrderWorkType;
import com.vincent.rsf.server.common.domain.BaseParam;
@@ -98,17 +99,17 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R excelImport(MultipartFile file, HashMap<String, Object> hashMap, Long loginUserId) throws Exception {
        ExcelImportResult result = ExcelImportUtil.importExcelMore(file.getInputStream(), AsnOrderTemplate.class, ExcelUtil.getDefaultImportParams());
        ExcelImportResult result = ExcelImportUtil.importExcelMore(file.getInputStream(), OutStockTemplate.class, ExcelUtil.getDefaultImportParams());
        if (result.getList().isEmpty()) {
            throw new CoolException("物料导入失败!!");
        }
        if (result.getList().isEmpty()) {
            throw new CoolException("表格内容不能为空!!");
        }
        List<AsnOrderTemplate> resultList = result.getList();
        Map<String, List<AsnOrderTemplate>> listMap = resultList.stream().collect(Collectors.groupingBy(AsnOrderTemplate::getCode));
        List<OutStockTemplate> resultList = result.getList();
        Map<String, List<OutStockTemplate>> listMap = resultList.stream().collect(Collectors.groupingBy(OutStockTemplate::getCode));
        for (String key : listMap.keySet()) {
            AsnOrderTemplate template = listMap.get(key).stream().findFirst().get();
            OutStockTemplate template = listMap.get(key).stream().findFirst().get();
            AsnOrder asnOrder = outStockService.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, template.getCode()));
            if (Objects.isNull(asnOrder)) {
                continue;
@@ -125,7 +126,7 @@
                throw new CoolException("单据保存失败!!");
            }
            List<AsnOrderItem> items = new ArrayList<>();
            for (AsnOrderTemplate orderTemplate : listMap.get(key)) {
            for (OutStockTemplate orderTemplate : listMap.get(key)) {
                AsnOrderItem orderItem = new AsnOrderItem();
                Matnr matnr = null;
                if (!Objects.isNull(orderTemplate.getMatnrCode()) || StringUtils.isNotBlank(orderTemplate.getMatnrCode())) {
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -193,12 +193,15 @@
            List<AsnOrderItem> orderItems = new ArrayList<>();
            listMap.get(key).forEach(item -> {
                AsnOrderItem orderItem = new AsnOrderItem();
                Double anfme = Math.round((item.getAnfme() - item.getWorkQty() - item.getQty()) * 10000) / 10000.0;
                BeanUtils.copyProperties(item, orderItem);
                orderItem.setId(null)
                        .setPoCode(order.getPoCode())
                        .setMaktx(item.getMaktx())
                        .setMatnrCode(item.getMatnrCode())
                        .setFieldsIndex(item.getFieldsIndex())
                        .setAnfme(anfme)
                        .setWorkQty(0.0)
                        .setAsnId(order.getId())
                        .setAsnCode(order.getCode())
                        .setStockUnit(item.getUnit())
@@ -221,7 +224,7 @@
            Double sum = orderItems.stream().mapToDouble(AsnOrderItem::getAnfme).sum();
            //修改计划数量
            order.setAnfme(sum);
            order.setAnfme(sum).setWorkQty(0.0);
            if (!this.saveOrUpdate(order)) {
                throw new CoolException("主单数量修改失败!!");
            }
@@ -229,8 +232,13 @@
                throw new CoolException("明细保存失败!!");
            }
            Short exceStatus = POExceStatus.PO_EXCE_STATUS_SECTION_DONE.val;
            if (delivery.getAnfme().compareTo(order.getAnfme()) <= 0) {
                exceStatus = AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val;
            }
            if (!deliveryService.update(new LambdaUpdateWrapper<Delivery>()
                    .set(Delivery::getExceStatus, POExceStatus.PO_EXCE_STATUS_EXCE_ING.val)
                    .set(Delivery::getExceStatus, exceStatus)
                    .set(Delivery::getWorkQty, sum)
                    .eq(Delivery::getId, key))) {
                throw new CoolException("主单修改失败!!");