huminmin
3 天以前 013e3902f7fccde30531b64d7b39a4ee64663732
采购审批显示审核时的采购产品数据
已修改2个文件
99 ■■■■■ 文件已修改
src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
@@ -33,6 +33,11 @@
    private Long id;
    /**
     * 审批实例ID
     */
    private Long approvalInstanceId;
    /**
     * 采购合同号
     */
    @Excel(name = "采购合同号")
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.approve.bean.dto.ApprovalInstanceDto;
import com.ruoyi.approve.mapper.ApprovalTemplateMapper;
import com.ruoyi.approve.pojo.ApprovalInstance;
@@ -194,7 +195,7 @@
                .last("limit 1")
        );
        if(Objects.isNull(oldApprovalInstance)){
            addApproveByPurchase(loginUser, purchaseLedger);
            addApproveByPurchase(loginUser, purchaseLedger, productList);
        }
        // 5. 迁移临时文件到正式目录
        fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.PURCHASE_LEDGER, purchaseLedger.getId(), purchaseLedgerDto.getStorageBlobDTOS());
@@ -1016,7 +1017,12 @@
                    salesLedgerProductMapper.insert(salesLedgerProduct);
                }
                // 采购审核
                addApproveByPurchase(loginUser,salesLedger);
                List<SalesLedgerProduct> snapshotProducts = salesLedgerProductMapper.selectList(
                        new LambdaQueryWrapper<SalesLedgerProduct>()
                                .eq(SalesLedgerProduct::getSalesLedgerId, salesLedger.getId())
                                .eq(SalesLedgerProduct::getType, 2)
                );
                addApproveByPurchase(loginUser, salesLedger, snapshotProducts);
            }
            return AjaxResult.success("导入成功");
@@ -1028,21 +1034,91 @@
    @Override
    public PurchaseLedgerDto getPurchaseByCode(PurchaseLedgerDto purchaseLedgerDto) {
        // 1. 查询主表
        PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()
        PurchaseLedger purchaseLedger = null;
        ApprovalInstance approvalSnapshotInstance = null;
        // 1. 优先按当前审批实例查询快照
        if (purchaseLedgerDto.getApprovalInstanceId() != null) {
            approvalSnapshotInstance = approvalInstanceService.getById(purchaseLedgerDto.getApprovalInstanceId());
            if (approvalSnapshotInstance != null && approvalSnapshotInstance.getBusinessId() != null) {
                purchaseLedger = purchaseLedgerMapper.selectById(approvalSnapshotInstance.getBusinessId());
            }
        }
        // 2. 没传审批实例ID时,退回到按采购合同号查询
        if (purchaseLedger == null) {
            purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()
                .eq(PurchaseLedger::getPurchaseContractNumber, purchaseLedgerDto.getPurchaseContractNumber())
                .last("LIMIT 1"));
        if (purchaseLedger == null) {
            throw new BaseException("采购台账不存在");
        }
        }
        // 2. 查询子表
        // 3. 查询当前采购单对应的审批快照
        if (approvalSnapshotInstance == null) {
            approvalSnapshotInstance = approvalInstanceService.getOne(new LambdaQueryWrapper<ApprovalInstance>()
                    .eq(ApprovalInstance::getBusinessId, purchaseLedger.getId())
                    .eq(ApprovalInstance::getBusinessType, 5L)
                    .eq(ApprovalInstance::getDeleted, 0)
                    .orderByDesc(ApprovalInstance::getId)
                    .last("LIMIT 1"));
        }
        if (approvalSnapshotInstance != null && StringUtils.hasText(approvalSnapshotInstance.getFormConfig())) {
            try {
                PurchaseLedgerDto snapshot = JSON.parseObject(approvalSnapshotInstance.getFormConfig(), PurchaseLedgerDto.class);
                if (snapshot != null) {
                    snapshot.setId(purchaseLedger.getId());
                    if (snapshot.getPurchaseContractNumber() == null) {
                        snapshot.setPurchaseContractNumber(purchaseLedger.getPurchaseContractNumber());
                    }
                    if (snapshot.getSupplierId() == null) {
                        snapshot.setSupplierId(purchaseLedger.getSupplierId());
                    }
                    if (snapshot.getSupplierName() == null) {
                        snapshot.setSupplierName(purchaseLedger.getSupplierName());
                    }
                    if (snapshot.getSalesContractNo() == null) {
                        snapshot.setSalesContractNo(purchaseLedger.getSalesContractNo());
                    }
                    if (snapshot.getSalesContractNoId() == null) {
                        snapshot.setSalesContractNoId(purchaseLedger.getSalesLedgerId());
                    }
                    if (snapshot.getProjectName() == null) {
                        snapshot.setProjectName(purchaseLedger.getProjectName());
                    }
                    if (snapshot.getEntryDate() == null) {
                        snapshot.setEntryDate(purchaseLedger.getEntryDate());
                    }
                    if (snapshot.getExecutionDate() == null) {
                        snapshot.setExecutionDate(purchaseLedger.getExecutionDate());
                    }
                    if (snapshot.getRemarks() == null) {
                        snapshot.setRemarks(purchaseLedger.getRemarks());
                    }
                    if (snapshot.getRecorderId() == null) {
                        snapshot.setRecorderId(purchaseLedger.getRecorderId());
                    }
                    if (snapshot.getRecorderName() == null) {
                        snapshot.setRecorderName(purchaseLedger.getRecorderName());
                    }
                    snapshot.setProductData(snapshot.getProductData() == null ? Collections.emptyList() : snapshot.getProductData());
                    snapshot.setHasChildren(CollectionUtils.isNotEmpty(snapshot.getProductData()));
                    return snapshot;
                }
            } catch (Exception e) {
                log.warn("解析采购审批快照失败: {}", e.getMessage());
            }
        }
        // 4. 查询子表
        LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>();
        productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId())
                .eq(SalesLedgerProduct::getType, 2);
        List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper);
        // 4. 转换 DTO
        // 5. 转换 DTO
        PurchaseLedgerDto resultDto = new PurchaseLedgerDto();
        BeanUtils.copyProperties(purchaseLedger, resultDto);
        if (!products.isEmpty()) {
@@ -1052,7 +1128,7 @@
        return resultDto;
    }
    public void addApproveByPurchase(LoginUser loginUser,PurchaseLedger purchaseLedger) {
    public void addApproveByPurchase(LoginUser loginUser, PurchaseLedger purchaseLedger, List<SalesLedgerProduct> productList) {
        if (loginUser == null) {
            return;
        }
@@ -1077,6 +1153,10 @@
        approvalInstance.setTitle(purchaseLedger.getPurchaseContractNumber()+"审批");
        approvalInstance.setApplicantName(loginUser.getNickName());
        approvalInstance.setApplyTime(LocalDateTime.now());
        PurchaseLedgerDto snapshot = new PurchaseLedgerDto();
        BeanUtils.copyProperties(purchaseLedger, snapshot);
        snapshot.setProductData(productList == null ? Collections.emptyList() : new ArrayList<>(productList));
        approvalInstance.setFormConfig(JSON.toJSONString(snapshot));
        approvalInstanceService.add(approvalInstance);
    }