gongchunyi
8 小时以前 6c95c2f6a3602fe6f92898dd322c20bbe955e69d
src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -11,7 +11,12 @@
import com.deepoove.poi.config.Configure;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.approve.pojo.ApproveProcess;
import com.ruoyi.approve.service.IApproveProcessService;
import com.ruoyi.approve.vo.ApproveProcessVO;
import com.ruoyi.common.enums.ApproveTypeEnum;
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.quality.dto.QualityInspectDto;
@@ -27,6 +32,7 @@
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.framework.security.LoginUser;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@@ -61,6 +67,7 @@
    private PurchaseLedgerMapper purchaseLedgerMapper;
    private ProcurementRecordService procurementRecordService;
    private IApproveProcessService approveProcessService;
    @Override
    public int add(QualityInspectDto qualityInspectDto) {
@@ -104,15 +111,111 @@
            qualityUnqualified.setInspectId(qualityInspect.getId());
            qualityUnqualifiedMapper.insert(qualityUnqualified);
        } else {
            //合格直接入库
            stockUtils.addStock(qualityInspect.getProductModelId(), qualityInspect.getQuantity(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode(), qualityInspect.getId());
            // 采购原材料检验:合格入库后同步到采购产品“已入库数量”,与扫码入库共用一份数据口径
            // 原材料检验合格后,先发起“入库审批”,审批通过后再入库
            if (Objects.equals(qualityInspect.getInspectType(), 0)) {
                submitQualifiedInboundApprove(qualityInspect);
            } else {
                //  直接入库
                stockUtils.addStock(
                        qualityInspect.getPurchaseLedgerId() == null ? null : qualityInspect.getPurchaseLedgerId().longValue(),
                        null,
                        qualityInspect.getProductModelId(),
                        qualityInspect.getQuantity(),
                        StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode(),
                        qualityInspect.getId()
                );
            syncQualifiedInboundToPurchaseProducts(qualityInspect);
            }
        }
        qualityInspect.setInspectState(1);//已提交
        int updated = qualityInspectMapper.updateById(qualityInspect);
        refreshPurchaseLedgerStockStatusByInspect(qualityInspect.getPurchaseLedgerId());
        return updated;
    }
    private void submitQualifiedInboundApprove(QualityInspect qualityInspect) {
        PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(qualityInspect.getPurchaseLedgerId());
        if (purchaseLedger == null) {
            throw new RuntimeException("提交失败,采购台账不存在");
        }
        String approveUserIds = ObjectUtils.isNotEmpty(qualityInspect.getApproveUserIds())
                ? qualityInspect.getApproveUserIds()
                : purchaseLedger.getApproveUserIds();
        if (ObjectUtils.isEmpty(approveUserIds)) {
            throw new RuntimeException("提交失败,请先维护质检单审批人(或采购台账审批人)");
        }
        String approveReason = "原材料质检入库审批:" + purchaseLedger.getPurchaseContractNumber();
        String approveRemark = "qualityQualifiedInbound:" + qualityInspect.getId() + ":" + purchaseLedger.getId();
        ApproveProcess exist = approveProcessService.getOne(new LambdaQueryWrapper<ApproveProcess>()
                .eq(ApproveProcess::getApproveType, ApproveTypeEnum.STOCK_IN.getCode())
                .eq(ApproveProcess::getApproveRemark, approveRemark)
                .eq(ApproveProcess::getApproveDelete, 0)
                .orderByDesc(ApproveProcess::getCreateTime)
                .last("limit 1"));
        if (exist != null && !Objects.equals(exist.getApproveStatus(), 3)) {
            throw new RuntimeException("提交失败,该质检单已发起入库审批,审批完成前不能重复提交");
        }
        LoginUser loginUser = SecurityUtils.getLoginUser();
        ApproveProcessVO approveProcessVO = new ApproveProcessVO();
        approveProcessVO.setApproveType(ApproveTypeEnum.STOCK_IN.getCode());
        approveProcessVO.setApproveDeptId(loginUser.getCurrentDeptId());
        approveProcessVO.setApproveReason(approveReason);
        approveProcessVO.setApproveRemark(approveRemark);
        approveProcessVO.setApproveUserIds(approveUserIds);
        approveProcessVO.setApproveUser(loginUser.getUserId());
        approveProcessVO.setApproveTime(java.time.LocalDate.now().toString());
        try {
            approveProcessService.addApprove(approveProcessVO);
        } catch (Exception e) {
            throw new RuntimeException("提交失败,入库审批发起异常:" + e.getMessage());
        }
        qualityInspect.setApprovalStatus(2);
        qualityInspect.setApproveUserIds(approveUserIds);
        qualityInspectMapper.updateById(qualityInspect);
    }
    @Override
    public void executeQualifiedInboundApproval(Integer inspectId) {
        if (inspectId == null) {
            throw new RuntimeException("审批失败,质检单ID不能为空");
        }
        QualityInspect qualityInspect = qualityInspectMapper.selectById(inspectId);
        if (qualityInspect == null) {
            throw new RuntimeException("审批失败,质检单不存在");
        }
        if (!Objects.equals(qualityInspect.getInspectType(), 0)) {
            throw new RuntimeException("审批失败,仅原材料检验支持入库审批");
        }
        if (!Objects.equals(qualityInspect.getInspectState(), 1) || !"合格".equals(qualityInspect.getCheckResult())) {
            throw new RuntimeException("审批失败,当前质检单状态不允许入库");
        }
        stockUtils.addStock(
                qualityInspect.getPurchaseLedgerId() == null ? null : qualityInspect.getPurchaseLedgerId().longValue(),
                null,
                qualityInspect.getProductModelId(),
                qualityInspect.getQuantity(),
                StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode(),
                qualityInspect.getId()
        );
        syncQualifiedInboundToPurchaseProducts(qualityInspect);
        refreshPurchaseLedgerStockStatusByInspect(qualityInspect.getPurchaseLedgerId());
        qualityInspect.setApprovalStatus(3);
        qualityInspectMapper.updateById(qualityInspect);
    }
    @Override
    public void markQualifiedInboundApprovalStatus(Integer inspectId, Integer approvalStatus) {
        if (inspectId == null || approvalStatus == null) {
            return;
        }
        QualityInspect qualityInspect = qualityInspectMapper.selectById(inspectId);
        if (qualityInspect == null) {
            return;
        }
        qualityInspect.setApprovalStatus(approvalStatus);
        qualityInspectMapper.updateById(qualityInspect);
    }
    /*生成检验报告*/
@@ -182,7 +285,7 @@
    }
    @Override
    public IPage<QualityInspect> qualityInspectListPage(Page page, QualityInspect qualityInspect) {
    public IPage<QualityInspect> qualityInspectListPage(Page<?> page, QualityInspect qualityInspect) {
        return qualityInspectMapper.qualityInspectListPage(page, qualityInspect);
    }