| | |
| | | import com.ruoyi.production.service.ProductionProductMainService; |
| | | import com.ruoyi.project.system.domain.SysUser; |
| | | import com.ruoyi.project.system.mapper.SysUserMapper; |
| | | import com.ruoyi.project.system.service.ISysNoticeService; |
| | | import com.ruoyi.quality.mapper.*; |
| | | import com.ruoyi.quality.pojo.*; |
| | | import com.ruoyi.quality.service.IQualityInspectService; |
| | |
| | | import com.ruoyi.production.mapper.ProductionProductMainMapper; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Service |
| | |
| | | |
| | | private StockUtils stockUtils; |
| | | |
| | | private ISysNoticeService sysNoticeService; |
| | | |
| | | @Override |
| | | public IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, ProductionProductMainDto productionProductMainDto) { |
| | |
| | | ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(dto.getProductProcessRouteItemId()); |
| | | if (productProcessRouteItem == null) { |
| | | throw new RuntimeException("工艺路线项不存在"); |
| | | } |
| | | //检查上一个工序是否已报工 |
| | | Integer currentDragSort = productProcessRouteItem.getDragSort(); |
| | | if (currentDragSort != null && currentDragSort > 1) { |
| | | ProductProcessRouteItem previousItem = productProcessRouteItemMapper.selectOne( |
| | | Wrappers.<ProductProcessRouteItem>lambdaQuery() |
| | | .eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()) |
| | | .eq(ProductProcessRouteItem::getDragSort, currentDragSort - 1) |
| | | ); |
| | | |
| | | if (previousItem != null) { |
| | | //检查上一个工序是否有报工记录 |
| | | Long count = productionProductMainMapper.selectCount( |
| | | Wrappers.<ProductionProductMain>lambdaQuery() |
| | | .eq(ProductionProductMain::getProductProcessRouteItemId, previousItem.getId()) |
| | | ); |
| | | |
| | | if (count == 0) { |
| | | throw new RuntimeException("上一个工序尚未报工,不能进行当前工序报工"); |
| | | } |
| | | } |
| | | } |
| | | //当前具体工序 |
| | | ProductProcess productProcess = productProcessMapper.selectById(productProcessRouteItem.getProcessId()); |
| | |
| | | productionProductOutput.setScrapQty(dto.getScrapQty() != null ? dto.getScrapQty() : BigDecimal.ZERO); |
| | | productionProductOutput.setOtherData(dto.getOtherData() != null ? dto.getOtherData() : ""); |
| | | productionProductOutputMapper.insert(productionProductOutput); |
| | | |
| | | ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId()); |
| | | ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId()); |
| | | |
| | | //合格数量=报工数量-报废数量 |
| | | BigDecimal productQty = productionProductOutput.getQuantity().subtract(productionProductOutput.getScrapQty()); |
| | | // 合格率=合格数量/报工数量 |
| | | BigDecimal productQtyRate = productQty.divide(productionProductOutput.getQuantity(), 2, RoundingMode.HALF_UP) |
| | | .multiply(new BigDecimal("100")); |
| | | // 该工序的合格率 < 合格率 |
| | | if (productQtyRate.compareTo(productProcess.getQualifiedRate()) < 0) { |
| | | // 发送通知给管理员 |
| | | sysNoticeService.simpleNoticeByUser("报工提示", |
| | | String.format("%s生产订单,%s工序合格率%.2f%%低于标准%.2f%%", productOrder.getNpsNo(), productProcess.getName(), productQtyRate, productProcess.getQualifiedRate()), |
| | | Arrays.asList(Long.valueOf(1L)), |
| | | "/productionManagement/productionReporting"); |
| | | } |
| | | |
| | | List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId())); |
| | | //只有合格数量>0才能增加相应数据 |
| | | if (productQty.compareTo(BigDecimal.ZERO) > 0) { |
| | |
| | | qualityInspect.setProcess(process); |
| | | qualityInspect.setInspectState(0); |
| | | qualityInspect.setInspectType(inspectType); |
| | | qualityInspect.setDefectiveQuantity(productionProductOutput.getScrapQty()); |
| | | qualityInspect.setProductMainId(productionProductMain.getId()); |
| | | qualityInspect.setProductModelId(productModel.getId()); |
| | | qualityInspectMapper.insert(qualityInspect); |
| | |
| | | } |
| | | } |
| | | /*更新工单和生产订单*/ |
| | | ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId()); |
| | | productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(productQty)); |
| | | if (ObjectUtils.isNull(productWorkOrder.getActualStartTime())) { |
| | | productWorkOrder.setActualStartTime(LocalDate.now());//实际开始时间 |
| | |
| | | } |
| | | productWorkOrderMapper.updateById(productWorkOrder); |
| | | //生产订单 |
| | | ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId()); |
| | | if (ObjectUtils.isNull(productOrder.getStartTime())) { |
| | | productOrder.setStartTime(LocalDateTime.now());//开始时间 |
| | | } |
| | |
| | | public ArrayList<Long> listMain(List<Long> idList) { |
| | | return productionProductMainMapper.listMain(idList); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public List<ProductionProductMainDto> getByProductWorkOrderId(Long productWorkOrderId) { |
| | | List<ProductionProductMainDto> productionProductMainDtos = productionProductMainMapper.getByProductWorkOrderId(productWorkOrderId); |
| | | |
| | | if (productionProductMainDtos == null || productionProductMainDtos.isEmpty()) { |
| | | return productionProductMainDtos; |
| | | } |
| | | |
| | | // 收集所有产品主记录ID |
| | | List<Long> productMainIds = productionProductMainDtos.stream() |
| | | .map(ProductionProductMainDto::getId) |
| | | .collect(Collectors.toList()); |
| | | |
| | | // 批量查询所有相关的质检记录 |
| | | List<QualityInspect> qualityInspects = qualityInspectMapper.selectList( |
| | | Wrappers.<QualityInspect>lambdaQuery() |
| | | .in(QualityInspect::getProductMainId, productMainIds) |
| | | ); |
| | | |
| | | if (!qualityInspects.isEmpty()) { |
| | | // 收集所有质检记录ID |
| | | List<Long> inspectIds = qualityInspects.stream() |
| | | .map(QualityInspect::getId) |
| | | .collect(Collectors.toList()); |
| | | |
| | | // 批量查询所有相关的不合格处理记录 |
| | | List<QualityUnqualified> qualityUnqualifieds = qualityUnqualifiedMapper.selectList( |
| | | Wrappers.<QualityUnqualified>lambdaQuery() |
| | | .in(QualityUnqualified::getInspectId, inspectIds) |
| | | ); |
| | | |
| | | // 构建质检ID到不合格处理记录的映射 |
| | | Map<Long, QualityUnqualified> inspectIdToUnqualifiedMap = qualityUnqualifieds.stream() |
| | | .collect(Collectors.toMap(QualityUnqualified::getInspectId, q -> q, (q1, q2) -> q1)); |
| | | |
| | | // 构建产品主ID到质检记录的映射 |
| | | Map<Long, QualityInspect> productMainIdToInspectMap = qualityInspects.stream() |
| | | .collect(Collectors.toMap(QualityInspect::getProductMainId, q -> q, (q1, q2) -> q1)); |
| | | |
| | | // 关联处理结果到产品主记录 |
| | | productionProductMainDtos.forEach(p -> { |
| | | QualityInspect qualityInspect = productMainIdToInspectMap.get(p.getId()); |
| | | if (qualityInspect != null) { |
| | | QualityUnqualified qualityUnqualified = inspectIdToUnqualifiedMap.get(qualityInspect.getId()); |
| | | if (qualityUnqualified != null) { |
| | | p.setDealResult(qualityUnqualified.getDealResult() == null ? "" : qualityUnqualified.getDealResult()); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | return productionProductMainDtos; |
| | | } |
| | | } |