src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -44,7 +44,7 @@ import java.util.List; @Service @RequiredArgsConstructor //@RequiredArgsConstructor public class ApproveNodeServiceImpl extends ServiceImpl<ApproveNodeMapper, ApproveNode> implements IApproveNodeService { @Autowired @@ -267,10 +267,17 @@ .eq(ApproveProcess::getApproveId, approveNode.getApproveProcessId())).get(0); if (approveProcess.getApproveUserIds().split(",").length > nodeOrder){ String id = approveProcess.getApproveUserIds().split(",")[nodeOrder]; sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()), approveNode.getApproveProcessId()+"流程编号的审批需要您审核!!!!!", Arrays.asList(Long.valueOf(id)), "/collaborativeApproval/approvalProcess?approveType="+approveProcess.getApproveType()+"&approveId="+approveNode.getApproveProcessId()); if (approveProcess.getApproveType()==8){ sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()), approveProcess.getApproveId() + "流程编号的审批需要您审核!!!!!", Arrays.asList(Long.valueOf(id)), "/safeProduction/safeWorkApproval?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId()); }else { sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()), approveProcess.getApproveId() + "流程编号的审批需要您审核!!!!!", Arrays.asList(Long.valueOf(id)), "/collaborativeApproval/approvalProcess?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId()); } } break; case 2: @@ -313,7 +320,9 @@ case 6: return "报价审批"; case 7: return "出库审批"; return "发货审批"; case 8: return "危险作业审批"; } return null; } src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -51,22 +51,30 @@ import java.util.stream.Collectors; @Service @RequiredArgsConstructor //@RequiredArgsConstructor public class ApproveProcessServiceImpl extends ServiceImpl<ApproveProcessMapper, ApproveProcess> implements IApproveProcessService { private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd"); private final StringRedisTemplate redisTemplate; private final DailyRedisCounter dailyRedisCounter; private final SysDeptMapper sysDeptMapper; private final IApproveNodeService approveNodeService; private final SysUserMapper sysUserMapper; private final ApproveProcessMapper approveProcessMapper; private final TempFileServiceImpl tempFileService; private final CommonFileMapper commonFileMapper; private final CommonFileServiceImpl commonFileService; private final ISysNoticeService sysNoticeService; @Autowired private StringRedisTemplate redisTemplate; @Autowired private DailyRedisCounter dailyRedisCounter; @Autowired private SysDeptMapper sysDeptMapper; @Autowired private IApproveNodeService approveNodeService; @Autowired private SysUserMapper sysUserMapper; @Autowired private ApproveProcessMapper approveProcessMapper; @Autowired private TempFileServiceImpl tempFileService; @Autowired private CommonFileMapper commonFileMapper; @Autowired private CommonFileServiceImpl commonFileService; @Autowired private ISysNoticeService sysNoticeService; @Override public void addApprove(ApproveProcessVO approveProcessVO) throws Exception { @@ -126,10 +134,17 @@ tempFileService.migrateTempFilesToFormal(approveProcess.getId(), approveProcessVO.getTempFileIds(), FileNameType.ApproveProcess.getValue()); /*消息通知*/ String id = approveProcessVO.getApproveUserIds().split(",")[0]; sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcessVO.getApproveType()), approveID + "流程编号的审批需要您审核!!!!!", Arrays.asList(Long.valueOf(id)), "/collaborativeApproval/approvalProcess?approveType=" + approveProcessVO.getApproveType() + "&approveId=" + approveID); if (approveProcess.getApproveType()==8){ sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()), approveProcess.getApproveId() + "流程编号的审批需要您审核!!!!!", Arrays.asList(Long.valueOf(id)), "/safeProduction/safeWorkApproval?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId()); }else { sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()), approveProcess.getApproveId() + "流程编号的审批需要您审核!!!!!", Arrays.asList(Long.valueOf(id)), "/collaborativeApproval/approvalProcess?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId()); } } @Override @@ -239,7 +254,8 @@ return one; } private final ApproveNodeMapper approveNodeMapper; @Autowired private ApproveNodeMapper approveNodeMapper; // 报价审批编辑审核人 public void updateApproveUser(ApproveGetAndUpdateVo approveGetAndUpdateVo) { @@ -276,10 +292,17 @@ approveNodeService.initApproveNodes(approveGetAndUpdateVo.getApproveUserIds(), approveProcess.getApproveId(), approveProcess.getTenantId()); /*消息通知*/ String id = approveProcess.getApproveUserIds().split(",")[0]; sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()), approveProcess.getApproveId() + "流程编号的审批需要您审核!!!!!", Arrays.asList(Long.valueOf(id)), "/collaborativeApproval/approvalProcess?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId()); if (approveProcess.getApproveType()==8){ sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()), approveProcess.getApproveId() + "流程编号的审批需要您审核!!!!!", Arrays.asList(Long.valueOf(id)), "/safeProduction/safeWorkApproval?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId()); }else { sysNoticeService.simpleNoticeByUser(approveProcessType(approveProcess.getApproveType()), approveProcess.getApproveId() + "流程编号的审批需要您审核!!!!!", Arrays.asList(Long.valueOf(id)), "/collaborativeApproval/approvalProcess?approveType=" + approveProcess.getApproveType() + "&approveId=" + approveProcess.getApproveId()); } } src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -55,6 +55,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; @@ -84,52 +85,71 @@ * @date 2025-05-09 */ @Service @RequiredArgsConstructor @Slf4j public class PurchaseLedgerServiceImpl extends ServiceImpl<PurchaseLedgerMapper, PurchaseLedger> implements IPurchaseLedgerService { private final AccountExpenseService accountExpenseService; private final PurchaseLedgerMapper purchaseLedgerMapper; @Autowired private AccountExpenseService accountExpenseService; @Autowired private PurchaseLedgerMapper purchaseLedgerMapper; private final SalesLedgerMapper salesLedgerMapper; private final SalesLedgerProductMapper salesLedgerProductMapper; @Autowired private SalesLedgerMapper salesLedgerMapper; @Autowired private SalesLedgerProductMapper salesLedgerProductMapper; private final SysUserMapper userMapper; @Autowired private SysUserMapper userMapper; private final TempFileMapper tempFileMapper; @Autowired private TempFileMapper tempFileMapper; private final CommonFileMapper commonFileMapper; @Autowired private CommonFileMapper commonFileMapper; private final SupplierManageMapper supplierManageMapper; @Autowired private SupplierManageMapper supplierManageMapper; private final ProductMapper productMapper; @Autowired private ProductMapper productMapper; private final ProductModelMapper productModelMapper; @Autowired private ProductModelMapper productModelMapper; private final SysUserMapper sysUserMapper; @Autowired private SysUserMapper sysUserMapper; private final TicketRegistrationMapper ticketRegistrationMapper; @Autowired private TicketRegistrationMapper ticketRegistrationMapper; private final ProductRecordMapper productRecordMapper; @Autowired private ProductRecordMapper productRecordMapper; private final PaymentRegistrationMapper paymentRegistrationMapper; private final InvoiceRegistrationProductMapper invoiceRegistrationProductMapper; private final StringRedisTemplate redisTemplate; private final QualityInspectMapper qualityInspectMapper; private final CommonFileServiceImpl commonFileService; private final QualityTestStandardBindingMapper qualityTestStandardBindingMapper; private final QualityTestStandardParamMapper qualityTestStandardParamMapper; private final QualityTestStandardMapper qualityTestStandardMapper; private final QualityInspectParamMapper qualityInspectParamMapper; private final ApproveProcessServiceImpl approveProcessService; private final ProcurementRecordMapper procurementRecordStorageMapper; private final PurchaseLedgerTemplateMapper purchaseLedgerTemplateMapper; private final SalesLedgerProductTemplateMapper salesLedgerProductTemplateMapper; @Autowired private PaymentRegistrationMapper paymentRegistrationMapper; @Autowired private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper; @Autowired private StringRedisTemplate redisTemplate; @Autowired private QualityInspectMapper qualityInspectMapper; @Autowired private CommonFileServiceImpl commonFileService; @Autowired private QualityTestStandardBindingMapper qualityTestStandardBindingMapper; @Autowired private QualityTestStandardParamMapper qualityTestStandardParamMapper; @Autowired private QualityTestStandardMapper qualityTestStandardMapper; @Autowired private QualityInspectParamMapper qualityInspectParamMapper; @Autowired private ApproveProcessServiceImpl approveProcessService; @Autowired private ProcurementRecordMapper procurementRecordStorageMapper; @Autowired private PurchaseLedgerTemplateMapper purchaseLedgerTemplateMapper; @Autowired private SalesLedgerProductTemplateMapper salesLedgerProductTemplateMapper; @Value("${file.upload-dir}") private String uploadDir; src/main/java/com/ruoyi/quality/controller/QualityUnqualifiedController.java
@@ -29,6 +29,7 @@ */ @PostMapping("/add") public AjaxResult add(@RequestBody QualityUnqualified qualityUnqualified) { qualityUnqualified.setInspectState(0); return AjaxResult.success(qualityUnqualifiedService.save(qualityUnqualified)); } src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -63,82 +63,84 @@ public int deal(QualityUnqualified qualityUnqualified) { QualityUnqualified unqualified = qualityUnqualifiedMapper.selectById(qualityUnqualified.getId()); QualityInspect qualityInspect = qualityInspectService.getById(unqualified.getInspectId()); switch (qualityUnqualified.getDealResult()) { case "返修": case "返工": //判断质检表是否有相关的报工id,如果有报工id,那么返工需要重新创建生产订单重新生产 if (ObjectUtils.isNotNull(qualityInspect.getProductMainId())) { //返工需要重新创建生产订单重新生产 ProductOrder productOrder = productionProductMainMapper.getOrderByMainId(qualityInspect.getProductMainId()); ProductOrder order = new ProductOrder(); BeanUtils.copyProperties(productOrder, order); order.setId(null); order.setQuantity(unqualified.getQuantity()); order.setCompleteQuantity(BigDecimal.ZERO); order.setStartTime(null); order.setEndTime(null); productOrderService.save(order); //新增生产订单下的工艺路线主表 ProductProcessRoute productProcessRoute = productProcessRouteMapper.selectList(Wrappers.<ProductProcessRoute>lambdaQuery().eq(ProductProcessRoute::getProductOrderId, productOrder.getId()).orderByDesc(ProductProcessRoute::getId)).get(0); ProductProcessRoute newProcessRoute = new ProductProcessRoute(); BeanUtils.copyProperties(productProcessRoute, newProcessRoute); newProcessRoute.setId(null); newProcessRoute.setProductOrderId(order.getId()); productProcessRouteMapper.insert(newProcessRoute); //新增生产订单下的工艺路线子表 List<ProductProcessRouteItem> processRouteItems = productProcessRouteItemMapper.selectList(new QueryWrapper<ProductProcessRouteItem>().lambda().eq(ProductProcessRouteItem::getProductRouteId, productProcessRoute.getId())); // 生成当前日期的前缀:年月日 String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); for (ProductProcessRouteItem processRouteItem : processRouteItems) { ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem(); BeanUtils.copyProperties(processRouteItem, productProcessRouteItem); productProcessRouteItem.setId(null); productProcessRouteItem.setProductRouteId(newProcessRoute.getId()); int insert = productProcessRouteItemMapper.insert(productProcessRouteItem); if (insert > 0) { // 查询今日已存在的最大工单号 QueryWrapper<ProductWorkOrder> queryWrapper = new QueryWrapper<>(); queryWrapper.likeRight("work_order_no", datePrefix) .orderByDesc("work_order_no") .last("LIMIT 1"); ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectOne(queryWrapper); int sequenceNumber = 1; // 默认序号 if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) { String lastNo = lastWorkOrder.getWorkOrderNo().toString(); if (lastNo.startsWith(datePrefix)) { String seqStr = lastNo.substring(datePrefix.length()); try { sequenceNumber = Integer.parseInt(seqStr) + 1; } catch (NumberFormatException e) { sequenceNumber = 1; if (ObjectUtils.isNotNull(qualityInspect) && qualityInspect.getInspectType()!=0) { switch (qualityUnqualified.getDealResult()) { case "返修": case "返工": //判断质检表是否有相关的报工id,如果有报工id,那么返工需要重新创建生产订单重新生产 if (ObjectUtils.isNotNull(qualityInspect.getProductMainId())) { //返工需要重新创建生产订单重新生产 ProductOrder productOrder = productionProductMainMapper.getOrderByMainId(qualityInspect.getProductMainId()); ProductOrder order = new ProductOrder(); BeanUtils.copyProperties(productOrder, order); order.setId(null); order.setQuantity(unqualified.getQuantity()); order.setCompleteQuantity(BigDecimal.ZERO); order.setStartTime(null); order.setEndTime(null); productOrderService.save(order); //新增生产订单下的工艺路线主表 ProductProcessRoute productProcessRoute = productProcessRouteMapper.selectList(Wrappers.<ProductProcessRoute>lambdaQuery().eq(ProductProcessRoute::getProductOrderId, productOrder.getId()).orderByDesc(ProductProcessRoute::getId)).get(0); ProductProcessRoute newProcessRoute = new ProductProcessRoute(); BeanUtils.copyProperties(productProcessRoute, newProcessRoute); newProcessRoute.setId(null); newProcessRoute.setProductOrderId(order.getId()); productProcessRouteMapper.insert(newProcessRoute); //新增生产订单下的工艺路线子表 List<ProductProcessRouteItem> processRouteItems = productProcessRouteItemMapper.selectList(new QueryWrapper<ProductProcessRouteItem>().lambda().eq(ProductProcessRouteItem::getProductRouteId, productProcessRoute.getId())); // 生成当前日期的前缀:年月日 String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); for (ProductProcessRouteItem processRouteItem : processRouteItems) { ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem(); BeanUtils.copyProperties(processRouteItem, productProcessRouteItem); productProcessRouteItem.setId(null); productProcessRouteItem.setProductRouteId(newProcessRoute.getId()); int insert = productProcessRouteItemMapper.insert(productProcessRouteItem); if (insert > 0) { // 查询今日已存在的最大工单号 QueryWrapper<ProductWorkOrder> queryWrapper = new QueryWrapper<>(); queryWrapper.likeRight("work_order_no", datePrefix) .orderByDesc("work_order_no") .last("LIMIT 1"); ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectOne(queryWrapper); int sequenceNumber = 1; // 默认序号 if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) { String lastNo = lastWorkOrder.getWorkOrderNo().toString(); if (lastNo.startsWith(datePrefix)) { String seqStr = lastNo.substring(datePrefix.length()); try { sequenceNumber = Integer.parseInt(seqStr) + 1; } catch (NumberFormatException e) { sequenceNumber = 1; } } } // 生成完整的工单号 String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber); ProductWorkOrder productWorkOrder = new ProductWorkOrder(); productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId()); productWorkOrder.setProductOrderId(order.getId()); productWorkOrder.setPlanQuantity(order.getQuantity()); productWorkOrder.setWorkOrderNo(workOrderNoStr); productWorkOrder.setStatus(1); productWorkOrderMapper.insert(productWorkOrder); } // 生成完整的工单号 String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber); ProductWorkOrder productWorkOrder = new ProductWorkOrder(); productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId()); productWorkOrder.setProductOrderId(order.getId()); productWorkOrder.setPlanQuantity(order.getQuantity()); productWorkOrder.setWorkOrderNo(workOrderNoStr); productWorkOrder.setStatus(1); productWorkOrderMapper.insert(productWorkOrder); } } } break; case "报废": //调用不合格库存接口 入不合格库 stockUtils.addUnStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockUnQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(),unqualified.getId()); break; case "让步放行": //调用提交合格的接口 stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(),unqualified.getId()); qualityInspect.setCheckResult("合格"); qualityInspectService.submit(qualityInspect); break; default: break; break; case "报废": //调用不合格库存接口 入不合格库 stockUtils.addUnStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockUnQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId()); break; case "让步放行": //调用提交合格的接口 stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId()); qualityInspect.setCheckResult("合格"); qualityInspectService.submit(qualityInspect); break; default: break; } } qualityUnqualified.setInspectState(1);//已处理 return qualityUnqualifiedMapper.updateById(qualityUnqualified); src/main/resources/mapper/safe/SafeAccidentMapper.xml
@@ -27,7 +27,7 @@ </resultMap> <select id="pageSafeAccident" resultType="com.ruoyi.safe.pojo.SafeAccident"> select sa.*, su.nick_name createUserName, su.nick_name createUserName from safe_accident sa left join sys_user su on sa.create_user = su.user_id where 1=1