| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | private PurchaseLedgerMapper purchaseLedgerMapper; |
| | | |
| | | private ProcurementRecordService procurementRecordService; |
| | | private IApproveProcessService approveProcessService; |
| | | |
| | | @Override |
| | | public int add(QualityInspectDto qualityInspectDto) { |
| | |
| | | qualityUnqualified.setInspectId(qualityInspect.getId()); |
| | | qualityUnqualifiedMapper.insert(qualityUnqualified); |
| | | } else { |
| | | //合格直接入库 |
| | | stockUtils.addStock(qualityInspect.getProductModelId(), qualityInspect.getQuantity(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode(), qualityInspect.getId()); |
| | | // 采购原材料检验:合格入库后同步到采购产品“已入库数量”,与扫码入库共用一份数据口径 |
| | | syncQualifiedInboundToPurchaseProducts(qualityInspect); |
| | | // 原材料检验合格后,先发起“入库审批”,审批通过后再入库 |
| | | 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); |
| | | } |
| | | |
| | | /*生成检验报告*/ |
| | |
| | | } |
| | | |
| | | @Override |
| | | public IPage<QualityInspect> qualityInspectListPage(Page page, QualityInspect qualityInspect) { |
| | | public IPage<QualityInspect> qualityInspectListPage(Page<?> page, QualityInspect qualityInspect) { |
| | | return qualityInspectMapper.qualityInspectListPage(page, qualityInspect); |
| | | } |
| | | |