| 2026-02-02 | zss | ![]() |
| 2026-02-02 | zss | ![]() |
| 2026-02-02 | gongchunyi | ![]() |
| 2026-02-02 | gongchunyi | ![]() |
| 2026-02-02 | zss | ![]() |
| 2026-02-02 | zss | ![]() |
| 2026-02-02 | gongchunyi | ![]() |
| 2026-02-02 | gongchunyi | ![]() |
| 2026-02-02 | liyong | ![]() |
| 2026-02-02 | liyong | ![]() |
src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java
@@ -182,4 +182,14 @@ ExcelUtil<ApproveProcess> util = new ExcelUtil<ApproveProcess>(ApproveProcess.class); util.exportExcel(response, accountExpenses, "åå审æ¹å¯¼åº"); } @ApiOperation(value = "å±é©ä½ä¸å®¡æ¹å¯¼åº") @PostMapping("/exportEight") public void exportEight(HttpServletResponse response) { List<ApproveProcess> accountExpenses = approveProcessService.list(new LambdaQueryWrapper<ApproveProcess>() .eq(ApproveProcess::getApproveDelete, 0) .eq(ApproveProcess::getApproveType, 8)); ExcelUtil<ApproveProcess> util = new ExcelUtil<ApproveProcess>(ApproveProcess.class); util.exportExcel(response, accountExpenses, "å±é©ä½ä¸å®¡æ¹å¯¼åº"); } } src/main/java/com/ruoyi/collaborativeApproval/controller/SealApplicationManagementController.java
@@ -43,7 +43,7 @@ sealApplicationManagementService.save(sealApplicationManagement); //æ¶æ¯éç¥ sysNoticeService.simpleNoticeByUser("ç¨å°å®¡æ¹", "ç³è¯·ç¼å·ï¼"+sealApplicationManagement.getApplicationNum()+"\n" "ç³è¯·ç¼å·ï¼"+sealApplicationManagement.getApplicationNum()+"\t" +"ç³è¯·æ é¢ï¼"+sealApplicationManagement.getTitle(), Arrays.asList(sealApplicationManagement.getApproveUserId()), "/collaborativeApproval/sealManagement?applicationNum="+sealApplicationManagement.getApplicationNum()); src/main/java/com/ruoyi/collaborativeApproval/service/impl/MeetingServiceImpl.java
@@ -182,8 +182,8 @@ if (!userIds.isEmpty()) { sysNoticeService.simpleNoticeByUser( "ä¼è®®éç¥", "ä¼è®®ä¸»é¢ï¼" + application.getTitle() + "\n" + "ä¼è®®æ¶é´ï¼" + application.getStartTime() + "-" + application.getEndTime() + "\n" + "ä¼è®®ä¸»é¢ï¼" + application.getTitle() + "\t" + "ä¼è®®æ¶é´ï¼" + application.getStartTime() + "-" + application.getEndTime() + "\t" + "å起人ï¼" + application.getApplicant(), userIds, "" src/main/java/com/ruoyi/home/controller/HomeController.java
@@ -192,7 +192,7 @@ @GetMapping("/productionAccountingAnalysis") @ApiOperation("çäº§æ ¸ç®åæ") public AjaxResult productionAccountingAnalysis(@RequestParam(value = "type", defaultValue = "1") Integer type){ List<MapDto> list = homeService.productionAccountingAnalysis(type); List<ProductionAccountingDto> list = homeService.productionAccountingAnalysis(type); return AjaxResult.success(list); } src/main/java/com/ruoyi/home/dto/ProductionAccountingDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,30 @@ package com.ruoyi.home.dto; import java.math.BigDecimal; import lombok.Data; @Data public class ProductionAccountingDto { /** * æ¥æ */ private String dateStr; /** * 宿æ°é */ private Integer numberOfCompleted; /** * éé¢ */ private BigDecimal amount; /** * åæ ¼ç */ private BigDecimal passRate; } src/main/java/com/ruoyi/home/service/HomeService.java
@@ -71,7 +71,7 @@ List<WorkOrderEfficiencyDto> workOrderEfficiencyAnalysis(Integer type); List<MapDto> productionAccountingAnalysis(Integer type); List<ProductionAccountingDto> productionAccountingAnalysis(Integer type); List<MapDto> orderCount(); } src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -35,6 +35,7 @@ import com.ruoyi.production.mapper.ProductWorkOrderMapper; import com.ruoyi.production.mapper.ProductionProductInputMapper; import com.ruoyi.production.mapper.ProductionProductOutputMapper; import com.ruoyi.production.mapper.SalesLedgerProductionAccountingMapper; import com.ruoyi.production.pojo.ProductWorkOrder; import com.ruoyi.project.system.domain.SysDept; import com.ruoyi.project.system.domain.SysUser; @@ -128,11 +129,6 @@ private CustomerMapper customerMapper; @Autowired private SupplierManageMapper supplierManageMapper; @Autowired private SysUserMapper sysUserMapper; @Autowired private SysUserDeptMapper sysUserDeptMapper; @Autowired private HomeMapper homeMapper; @@ -263,8 +259,8 @@ .filter(Objects::nonNull) .reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal subtract1 = todayContractAmount.subtract(lastYearYesterdayContractAmount); // ä¿®æ¹ï¼ä½¿ç¨ // todayContractAmount è䏿¯ // yesterdayContractAmount // todayContractAmount è䏿¯ // yesterdayContractAmount // æ¥ç¯æ¯ String chain = ""; if (subtract1.compareTo(BigDecimal.ZERO) == 0 @@ -458,8 +454,8 @@ } // åºæ¶ List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>() // .ge(SalesLedger::getEntryDate, startDate) // .lt(SalesLedger::getEntryDate, endDate) // .ge(SalesLedger::getEntryDate, startDate) // .lt(SalesLedger::getEntryDate, endDate) ); // BigDecimal receivableMoney = // salesLedgers.stream().map(SalesLedger::getContractAmount).reduce(BigDecimal.ZERO, @@ -468,8 +464,8 @@ // åºä» List<PurchaseLedger> procurementRecords = purchaseLedgerMapper .selectList(new LambdaQueryWrapper<PurchaseLedger>() // .ge(PurchaseLedger::getEntryDate, startDate) // .lt(PurchaseLedger::getEntryDate, endDate) // .ge(PurchaseLedger::getEntryDate, startDate) // .lt(PurchaseLedger::getEntryDate, endDate) ); // BigDecimal payableMoney = // procurementRecords.stream().map(PurchaseLedger::getContractAmount).reduce(BigDecimal.ZERO, @@ -477,8 +473,8 @@ BigDecimal payableMoney = sumAmount(procurementRecords, PurchaseLedger::getContractAmount); // 颿¶ List<ReceiptPayment> receiptPayments = receiptPaymentMapper.selectList(new LambdaQueryWrapper<ReceiptPayment>() // .ge(ReceiptPayment::getReceiptPaymentDate, startDate) // .lt(ReceiptPayment::getReceiptPaymentDate, endDate) // .ge(ReceiptPayment::getReceiptPaymentDate, startDate) // .lt(ReceiptPayment::getReceiptPaymentDate, endDate) ); // BigDecimal advanceMoney = // receiptPayments.stream().map(ReceiptPayment::getReceiptPaymentAmount).reduce(BigDecimal.ZERO, @@ -487,8 +483,8 @@ // é¢ä» List<PaymentRegistration> paymentRegistrations = paymentRegistrationMapper .selectList(new LambdaQueryWrapper<PaymentRegistration>() // .ge(PaymentRegistration::getPaymentDate, startDate) // .lt(PaymentRegistration::getPaymentDate, endDate) // .ge(PaymentRegistration::getPaymentDate, startDate) // .lt(PaymentRegistration::getPaymentDate, endDate) ); // BigDecimal prepayMoney = // paymentRegistrations.stream().map(PaymentRegistration::getCurrentPaymentAmount).reduce(BigDecimal.ZERO, @@ -552,7 +548,7 @@ productionProgressDto.setCompletedOrderDetails(productOrderDtos); long totalCount = productOrderDtos.size(); long count = productOrderDtos.stream().filter( productOrderDto -> productOrderDto.getCompleteQuantity().compareTo(productOrderDto.getQuantity()) >= 0) productOrderDto -> productOrderDto.getCompleteQuantity().compareTo(productOrderDto.getQuantity()) >= 0) .count(); long count2 = productOrderDtos.stream() .filter(productOrderDto -> productOrderDto.getCompleteQuantity().compareTo(BigDecimal.ZERO) == 0) @@ -1787,10 +1783,10 @@ } @Autowired private com.ruoyi.production.mapper.SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper; private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper; @Override public List<MapDto> productionAccountingAnalysis(Integer type) { public List<ProductionAccountingDto> productionAccountingAnalysis(Integer type) { LocalDate today = LocalDate.now(); LocalDate startDate; LocalDate endDate = today; @@ -1812,26 +1808,27 @@ break; } String startStr = startDate.atStartOfDay().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); String endStr = endDate.atTime(LocalTime.MAX).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); String startStr = startDate.atStartOfDay().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); List<Map<String, Object>> wagesList = salesLedgerProductionAccountingMapper.selectDailyWagesStats(startStr, endStr); String endStr = endDate.plusDays(1).atStartOfDay().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); List<Map<String, Object>> wagesList = salesLedgerProductionAccountingMapper.selectDailyWagesStats(startStr, endStr); if (CollectionUtils.isEmpty(wagesList)) { return new ArrayList<>(); } List<MapDto> result = new ArrayList<>(); List<ProductionAccountingDto> result = new ArrayList<>(); for (Map<String, Object> map : wagesList) { MapDto dto = new MapDto(); dto.setName((String) map.get("date")); BigDecimal wages = (BigDecimal) map.get("wages"); dto.setValue(wages != null ? wages.toString() : "0"); ProductionAccountingDto dto = new ProductionAccountingDto(); dto.setDateStr(map.get("dateStr").toString()); dto.setNumberOfCompleted(((BigDecimal) map.get("numberOfCompleted")).intValue()); dto.setAmount(map.get("amount") != null ? (BigDecimal) map.get("amount") : BigDecimal.ZERO); dto.setPassRate(map.get("passRate") != null ? (BigDecimal) map.get("passRate") : BigDecimal.ZERO); result.add(dto); } result.sort(Comparator.comparing(MapDto::getName)); result.sort(Comparator.comparing(ProductionAccountingDto::getDateStr)); return result; } src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerRecordController.java
@@ -25,7 +25,7 @@ */ @RestController @Api(tags = "计éå¨å ·å°è´¦è®°å½") @RequestMapping("Record") @RequestMapping("/measuringInstrumentLedgerRecord") public class MeasuringInstrumentLedgerRecordController extends BaseController { @Autowired src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
@@ -50,7 +50,8 @@ @DeleteMapping("/delete") @Transactional(rollbackFor = Exception.class) public R delete(@RequestBody ProductionProductMainDto productionProductMainDto) { return R.ok(productionProductMainService.removeProductMain(productionProductMainDto)); return R.ok(productionProductMainService.removeProductMain(productionProductMainDto.getId())); } src/main/java/com/ruoyi/production/dto/ProductProcessRouteItemDto.java
@@ -24,4 +24,6 @@ private String productName; private String model; private Boolean isComplete; } src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
@@ -40,4 +40,7 @@ @ApiModelProperty(value = "æ¥åºæ°é") private BigDecimal scrapQty; @ApiModelProperty(value = "å·¥åç±»å æ£å¸¸ /è¿å·¥è¿ä¿®") private String workOrderType; } src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
@@ -3,17 +3,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.production.dto.ProcessRouteItemDto; import com.ruoyi.production.dto.ProductOrderDto; import com.ruoyi.production.dto.ProductionProductMainDto; import com.ruoyi.production.pojo.ProductionProductMain; import java.util.List; public interface ProductionProductMainService extends IService<ProductionProductMain> { IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, ProductionProductMainDto productionProductMainDto); Boolean addProductMain(ProductionProductMainDto productionProductMainDto); Boolean removeProductMain(ProductionProductMainDto productionProductMainDto); Boolean removeProductMain(Long id); } src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
@@ -6,9 +6,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.framework.web.domain.R; import com.ruoyi.production.dto.ProductProcessRouteItemDto; import com.ruoyi.production.dto.ProductionProductMainDto; import com.ruoyi.production.mapper.*; import com.ruoyi.production.pojo.*; import com.ruoyi.production.service.ProductProcessRouteItemService; import com.ruoyi.production.service.ProductionProductMainService; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.pojo.QualityInspect; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; @@ -20,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -34,6 +37,7 @@ public class ProductProcessRouteItemServiceImpl extends ServiceImpl<ProductProcessRouteItemMapper, ProductProcessRouteItem> implements ProductProcessRouteItemService { private ProductionProductMainService productionProductMainService; private ProductProcessRouteItemMapper productProcessRouteItemMapper; private ProductionProductMainMapper productionProductMainMapper; @@ -73,6 +77,9 @@ if (productWorkOrder == null) { throw new RuntimeException("å é¤å¤±è´¥ï¼æªæ¾å°å ³èçç产工å"); } if (BigDecimal.ZERO.compareTo(productWorkOrder.getCompleteQuantity()) < 0) { throw new RuntimeException("å é¤å¤±è´¥ï¼è¯¥å·¥åå·²å¼å§ç产ï¼è¯·å å é¤ç产æ¥å·¥"); } Long workOrderId = productWorkOrder.getId(); Long productOrderId = productWorkOrder.getProductOrderId(); // æ¥è¯¢ç产主表 @@ -83,21 +90,19 @@ if (!productionProductMains.isEmpty()) { // æ¹éå é¤å表 for (ProductionProductMain main : productionProductMains) { Long mainId = main.getId(); // å é¤æå ¥ productionProductInputMapper.delete(new LambdaQueryWrapper<ProductionProductInput>() .eq(ProductionProductInput::getProductMainId, mainId)); // å é¤äº§åº productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>() .eq(ProductionProductOutput::getProductMainId, mainId)); // å é¤è´¨æ£ qualityInspectMapper.delete(new LambdaQueryWrapper<QualityInspect>() .eq(QualityInspect::getProductMainId, mainId)); productionProductMainService.removeProductMain(main.getId()); // Long mainId = main.getId(); // // å é¤æå ¥ // productionProductInputMapper.delete(new LambdaQueryWrapper<ProductionProductInput>() // .eq(ProductionProductInput::getProductMainId, mainId)); // // å é¤äº§åº // productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>() // .eq(ProductionProductOutput::getProductMainId, mainId)); // // å é¤è´¨æ£ // qualityInspectMapper.delete(new LambdaQueryWrapper<QualityInspect>() // .eq(QualityInspect::getProductMainId, mainId)); } } // å 餿¥å·¥ï¼çäº§ä¸»è¡¨ï¼ productionProductMainMapper.delete(new LambdaQueryWrapper<ProductionProductMain>() .eq(ProductionProductMain::getWorkOrderId, workOrderId)); // æ¥è¯¢è®¢å + å 餿 ¸ç® ProductOrder productOrder = productOrderMapper.selectById(productOrderId); if (productOrder != null && productOrder.getSalesLedgerId() != null) { src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -248,8 +248,8 @@ } @Override public Boolean removeProductMain(ProductionProductMainDto dto) { ProductionProductMain productionProductMain = productionProductMainMapper.selectById(dto.getId()); public Boolean removeProductMain(Long id) { ProductionProductMain productionProductMain = productionProductMainMapper.selectById(id); //该æ¥å·¥å¯¹åºçå·¥èºè·¯çº¿è¯¦æ ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(productionProductMain.getProductProcessRouteItemId()); ProductionProductOutput productionProductOutput = productionProductOutputMapper.selectList(Wrappers.<ProductionProductOutput>lambdaQuery().eq(ProductionProductOutput::getProductMainId, productionProductMain.getId())).get(0); @@ -271,7 +271,6 @@ productOrder.setEndTime(null); productOrderMapper.updateById(productOrder); } /*å é¤äº§åº*/ //å é¤è´¨æ£ qualityInspectMapper.selectList( new LambdaQueryWrapper<QualityInspect>() src/main/java/com/ruoyi/quality/controller/QualityReportController.java
@@ -74,8 +74,8 @@ */ @ApiOperation("è·åçç¹æ£æµææ ç»è®¡") @GetMapping("/getTopParameters") public AjaxResult getTopParameters(@RequestParam("inspectType") Integer inspectType) { return AjaxResult.success(qualityReportService.getTopParameters(inspectType)); public AjaxResult getTopParameters(@RequestParam("modelType") Integer modelType) { return AjaxResult.success(qualityReportService.getTopParameters(modelType)); } } src/main/java/com/ruoyi/quality/dto/QualityInspectStatDto.java
@@ -13,8 +13,8 @@ private static final long serialVersionUID = 1L; @ApiModelProperty(value = "ç±»å«(0:åæææ£éª;1:è¿ç¨æ£éª;2:åºåæ£éª)") private Integer inspectType; @ApiModelProperty(value = "ç±»å«(0:åææ;1:åæå;2:æå)") private Integer modelType; @ApiModelProperty(value = "æ»æ°é") private BigDecimal totalCount; src/main/java/com/ruoyi/quality/dto/QualityMonthlyDetailDto.java
@@ -18,12 +18,12 @@ @ApiModelProperty(value = "æä»½") private String month; @ApiModelProperty(value = "åæææ£éªå®ææ°") @ApiModelProperty(value = "åææ") private BigDecimal rawMaterialCount; @ApiModelProperty(value = "è¿ç¨æ£éªå®ææ°") @ApiModelProperty(value = "åæå") private BigDecimal processCount; @ApiModelProperty(value = "åºåæ£éªå®ææ°") @ApiModelProperty(value = "æå") private BigDecimal outgoingCount; } src/main/java/com/ruoyi/quality/dto/QualityMonthlyPassRateDto.java
@@ -18,8 +18,8 @@ @ApiModelProperty(value = "æä»½(䏿, äºæ...)") private String month; @ApiModelProperty(value = "ç±»å«(0:åæææ£éª;1:è¿ç¨æ£éª;2:åºåæ£éª)") private Integer inspectType; @ApiModelProperty(value = "ç±»å«(0:åææ;1:åæå;2:æå)") private Integer modelType; @ApiModelProperty(value = "æ»æ°é") private BigDecimal totalCount; src/main/java/com/ruoyi/quality/dto/QualityMonthlyPassRateWrapperDto.java
@@ -17,12 +17,12 @@ @ApiModelProperty(value = "æä»½") private String month; @ApiModelProperty(value = "åæææ£éªæ°æ®") @ApiModelProperty(value = "åææ") private QualityPassRateDto rawMaterial; @ApiModelProperty(value = "è¿ç¨æ£éªæ°æ®") @ApiModelProperty(value = "åæå") private QualityPassRateDto process; @ApiModelProperty(value = "åºåæ£éªæ°æ®") @ApiModelProperty(value = "æå") private QualityPassRateDto outgoing; } src/main/java/com/ruoyi/quality/dto/QualityPassRateDto.java
@@ -16,8 +16,8 @@ private static final long serialVersionUID = 1L; @ApiModelProperty(value = "ç±»å«(0:åæææ£éª;1:è¿ç¨æ£éª;2:åºåæ£éª)") private Integer inspectType; @ApiModelProperty(value = "ç±»å«(0:åææ;1:åæå;2:æå)") private Integer modelType; @ApiModelProperty(value = "æ»æ°é") private BigDecimal totalCount; src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java
@@ -3,15 +3,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.quality.dto.*; import com.ruoyi.quality.pojo.QualityInspect; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import com.ruoyi.quality.dto.QualityInspectStatDto; import com.ruoyi.quality.dto.QualityPassRateDto; import com.ruoyi.quality.dto.QualityMonthlyPassRateDto; import com.ruoyi.quality.dto.QualityMonthlyDetailDto; import com.ruoyi.quality.dto.QualityParameterStatDto; import java.util.List; @@ -56,5 +51,5 @@ /** * è·åçç¹æ£æµææ Top 4 + å ¶ä» */ List<QualityParameterStatDto> getTopParameters(@Param("inspectType") Integer inspectType); List<QualityParameterStatDto> getTopParameters(@Param("modelType") Integer modelType); } src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java
@@ -1,13 +1,10 @@ package com.ruoyi.quality.service.impl; import com.ruoyi.basic.service.IProductModelService; import com.ruoyi.basic.service.IProductService; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.quality.dto.QualityPassRateDto; import com.ruoyi.quality.dto.QualityInspectStatDto; import com.ruoyi.quality.dto.QualityMonthlyPassRateDto; import com.ruoyi.quality.dto.QualityMonthlyDetailDto; import com.ruoyi.quality.dto.QualityParameterStatDto; import com.ruoyi.quality.dto.QualityMonthlyPassRateWrapperDto; import com.ruoyi.quality.dto.QualityTopParameterDto; import com.ruoyi.production.service.ProductOrderService; import com.ruoyi.quality.dto.*; import com.ruoyi.quality.mapper.QualityInspectMapper; import com.ruoyi.quality.service.QualityReportService; import org.springframework.beans.BeanUtils; @@ -59,11 +56,11 @@ QualityPassRateDto passRateDto = new QualityPassRateDto(); BeanUtils.copyProperties(dto, passRateDto); if (dto.getInspectType() == 0) { if (dto.getModelType() == 0) { wrapper.setRawMaterial(passRateDto); } else if (dto.getInspectType() == 1) { } else if (dto.getModelType() == 1) { wrapper.setProcess(passRateDto); } else if (dto.getInspectType() == 2) { } else if (dto.getModelType() == 2) { wrapper.setOutgoing(passRateDto); } } @@ -90,11 +87,11 @@ } @Override public QualityTopParameterDto getTopParameters(Integer inspectType) { if (inspectType == null) { public QualityTopParameterDto getTopParameters(Integer modelType) { if (modelType == null) { return new QualityTopParameterDto(); } List<QualityParameterStatDto> list = qualityInspectMapper.getTopParameters(inspectType); List<QualityParameterStatDto> list = qualityInspectMapper.getTopParameters(modelType); BigDecimal total = list.stream() .map(QualityParameterStatDto::getCount) src/main/java/com/ruoyi/safe/controller/SafeHazardController.java
@@ -50,7 +50,7 @@ @ApiOperation("å é¤å±é©æºå°è´¦") @DeleteMapping("/{ids}") public R delSafeHazard(@RequestBody List<Integer> ids) { return R.ok(safeHazardService.removeBatchByIds(ids)); return R.ok(safeHazardService.delSafeHazard(ids)); } } src/main/java/com/ruoyi/safe/service/SafeHazardService.java
@@ -5,6 +5,8 @@ import com.ruoyi.safe.pojo.SafeHazard; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; /** * <p> * å®å ¨ç产--å±é©æºå°è´¦ æå¡ç±» @@ -16,4 +18,6 @@ public interface SafeHazardService extends IService<SafeHazard> { IPage<SafeHazard> pageSafeHazard(Page page, SafeHazard safeHazard); int delSafeHazard(List<Integer> ids); } src/main/java/com/ruoyi/safe/service/impl/SafeHazardServiceImpl.java
@@ -1,13 +1,18 @@ package com.ruoyi.safe.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.safe.mapper.SafeHazardRecordMapper; import com.ruoyi.safe.pojo.SafeHazard; import com.ruoyi.safe.mapper.SafeHazardMapper; import com.ruoyi.safe.pojo.SafeHazardRecord; import com.ruoyi.safe.service.SafeHazardService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * <p> @@ -23,8 +28,24 @@ @Autowired private SafeHazardMapper safeHazardMapper; @Autowired private SafeHazardRecordMapper safeHazardRecordMapper; @Override public IPage<SafeHazard> pageSafeHazard(Page page, SafeHazard safeHazard) { return safeHazardMapper.pageSafeHazard(page, safeHazard); } @Override public int delSafeHazard(List<Integer> ids) { //夿æ¯å¦ææ£å¨é¢ç¨çå±é©æº List<SafeHazardRecord> safeHazardRecords = safeHazardRecordMapper.selectList(Wrappers.<SafeHazardRecord>lambdaQuery() .in(SafeHazardRecord::getSafeHazardId, ids) .isNull(SafeHazardRecord::getReturnUserId)); if (safeHazardRecords.size()>0){ throw new RuntimeException("该å±é©æºå·²ç»é¢ç¨,æ æ³å é¤,çå½è¿ä¹ååè¿è¡å é¤!"); } safeHazardMapper.deleteBatchIds(ids); return 0; } } src/main/java/com/ruoyi/safe/service/impl/SafeHiddenServiceImpl.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.project.system.domain.SysNotice; import com.ruoyi.project.system.mapper.SysNoticeMapper; import com.ruoyi.project.system.service.ISysDictDataService; import com.ruoyi.project.system.service.ISysNoticeService; import com.ruoyi.project.system.service.impl.SysNoticeServiceImpl; import com.ruoyi.safe.dto.SafeHiddenDto; @@ -38,6 +39,9 @@ @Autowired private ISysNoticeService sysNoticeService; @Autowired private ISysDictDataService sysDictDataService; @Override public IPage<SafeHiddenDto> pageSafeHidden(Page page, SafeHiddenDto safeHiddenDto) { @@ -51,12 +55,14 @@ String no = "YH" + String.format("%s%03d", datePrefix, safeHidden.getId()); safeHidden.setHiddenCode(no); safeHiddenMapper.updateById(safeHidden); //è·åéæ£ç±»åçåå ¸ String type = sysDictDataService.selectDictLabel("hidden_danger_type", safeHidden.getType()); //æ¶æ¯éç¥ sysNoticeService.simpleNoticeByUser("éæ£ææ¥ä¸æ¥æ´æ¹", "éæ£ç±»åï¼"+safeHidden.getType()+"\n"+ "鿣é£é©ç级ï¼"+safeHidden.getRiskLevel()+"\n"+ "éæ£å ·ä½ä½ç½®ï¼"+safeHidden.getLocation()+"\n"+ "鿣æè¿°ï¼"+safeHidden.getHiddenDesc()+"\n"+ "éæ£ç±»åï¼"+type+"\t"+ "鿣é£é©ç级ï¼"+safeHidden.getRiskLevel()+"\t"+ "éæ£å ·ä½ä½ç½®ï¼"+safeHidden.getLocation()+"\t"+ "鿣æè¿°ï¼"+safeHidden.getHiddenDesc()+"\t"+ "æ´æ¹å®ææé(æ¥æ)ï¼"+safeHidden.getRectifyTime(), Arrays.asList(Long.valueOf(safeHidden.getRectifyUserId())), "/safeProduction/dangerInvestigation?id=" + safeHidden.getId()); src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml
@@ -15,11 +15,13 @@ pp.name as process_name, pm.model, pm.unit, p.product_name p.product_name, case when pwo.complete_quantity>0 then true else false end as is_complete from product_process_route_item ppri left join product_model pm on ppri.product_model_id = pm.id left join product p on pm.product_id = p.id left join product_process pp on pp.id = ppri.process_id left join product_work_order pwo on pwo.product_process_route_item_id = ppri.id where ppri.product_order_id = #{orderId} order by ppri.drag_sort </select> src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -26,7 +26,11 @@ pm.unit, p.product_name AS productName, po.nps_no AS productOrderNpsNo, ROUND(pwo.complete_quantity / pwo.plan_quantity * 100, 2) AS completionStatus ROUND(pwo.complete_quantity / pwo.plan_quantity * 100, 2) AS completionStatus, CASE WHEN pwo.work_order_no LIKE 'FG%' THEN 'è¿å·¥è¿ä¿®' ELSE 'æ£å¸¸' END AS work_order_type FROM product_work_order pwo LEFT JOIN product_process_route_item ppri ON ppri.id = pwo.product_process_route_item_id src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml
@@ -88,18 +88,23 @@ </select> <select id="selectDailyWagesStats" resultType="java.util.Map"> SELECT DATE_FORMAT(scheduling_date, '%Y-%m-%d') as date, SUM(finished_num * work_hours) as wages FROM sales_ledger_production_accounting WHERE scheduling_date >= #{startDate} AND scheduling_date <= #{endDate} GROUP BY scheduling_date SELECT DATE(ppout.create_time) AS dateStr, SUM(ppout.quantity - IFNULL(ppout.scrap_qty, 0)) AS numberOfCompleted, SUM((ppout.quantity - IFNULL(ppout.scrap_qty, 0)) * IFNULL(pp.salary_quota, 0)) AS amount, ROUND( SUM(ppout.quantity - IFNULL(ppout.scrap_qty, 0)) * 100 / NULLIF(SUM(ppout.quantity), 0), 2 ) AS passRate FROM production_product_output ppout LEFT JOIN production_product_main ppm ON ppm.id = ppout.product_main_id LEFT JOIN product_process_route_item ppri ON ppri.id = ppm.product_process_route_item_id LEFT JOIN product_process pp ON pp.id = ppri.process_id WHERE ppout.create_time >= #{startDate} AND ppout.create_time < #{endDate} GROUP BY DATE(ppout.create_time) ORDER BY DATE(ppout.create_time); </select> </mapper> src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -56,84 +56,123 @@ </delete> <select id="getInspectStatistics" resultType="com.ruoyi.quality.dto.QualityInspectStatDto"> SELECT 0 AS inspectType, COALESCE((SELECT SUM(inbound_num) FROM procurement_record_storage WHERE type = 1), 0) + COALESCE((SELECT SUM(quantity) FROM quality_unqualified WHERE inspect_type = 0), 0) AS totalCount, COALESCE((SELECT SUM(inbound_num) FROM procurement_record_storage WHERE type = 1 AND quality_inspect_id != 0 AND quality_inspect_id IS NOT NULL), 0) + COALESCE((SELECT SUM(quantity) FROM quality_unqualified WHERE inspect_type = 0), 0) AS completedCount UNION ALL SELECT 1 AS inspectType, COALESCE((SELECT SUM(inbound_num) FROM procurement_record_storage WHERE type = 2 AND sales_ledger_product_id = 0), 0) AS totalCount, COALESCE((SELECT SUM(inbound_num) FROM procurement_record_storage WHERE type = 2 AND sales_ledger_product_id = 0 AND quality_inspect_id != 0 AND quality_inspect_id IS NOT NULL), 0) AS completedCount UNION ALL SELECT 2 AS inspectType, COALESCE((SELECT SUM(inbound_num) FROM procurement_record_storage WHERE type = 2 AND sales_ledger_product_id != 0), 0) AS totalCount, COALESCE((SELECT SUM(inbound_num) FROM procurement_record_storage WHERE type = 2 AND sales_ledger_product_id != 0 AND quality_inspect_id != 0 AND quality_inspect_id IS NOT NULL), 0) AS completedCount SELECT CASE pp.product_name WHEN 'åææ' THEN 0 WHEN 'åæå' THEN 1 WHEN 'æå' THEN 2 END AS modelType, IFNULL(SUM(qi.quantity), 0) AS totalCount, IFNULL(SUM(CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END), 0) AS completedCount FROM product p INNER JOIN product pp ON p.parent_id = pp.id LEFT JOIN product_model pm ON pm.product_id = p.id LEFT JOIN quality_inspect qi ON qi.product_model_id = pm.id WHERE pp.product_name IN ('åææ', 'åæå', 'æå') GROUP BY pp.product_name </select> <select id="getPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto"> SELECT t.inspectType, COALESCE(prs.totalCount, 0) AS totalCount, COALESCE(qi.completedCount, 0) AS completedCount, COALESCE(qi.qualifiedCount, 0) AS qualifiedCount, COALESCE(qi.unqualifiedCount, 0) AS unqualifiedCount, IF(COALESCE(prs.totalCount, 0) = 0, 0, ROUND(COALESCE(qi.completedCount, 0) / prs.totalCount * 100, 2)) AS completionRate, IF(COALESCE(qi.completedCount, 0) = 0, 0, ROUND(COALESCE(qi.qualifiedCount, 0) / qi.completedCount * 100, 2)) AS passRate FROM (SELECT 0 AS inspectType SELECT t.modelType, COALESCE(SUM(qi.quantity), 0) AS totalCount, COALESCE(SUM( CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END ), 0) AS completedCount, COALESCE(SUM( CASE WHEN qi.inspect_state = 1 AND qi.check_result = 'åæ ¼' THEN qi.quantity ELSE 0 END ), 0) AS qualifiedCount, COALESCE(SUM( CASE WHEN qi.inspect_state = 1 AND qi.check_result = 'ä¸åæ ¼' THEN qi.quantity ELSE 0 END ), 0) AS unqualifiedCount, /* 宿ç */ IF(COALESCE(SUM(qi.quantity), 0) = 0, 0, ROUND( COALESCE(SUM( CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END ), 0) / SUM(qi.quantity) * 100, 2) ) AS completionRate, /* åæ ¼ç */ IF(COALESCE(SUM( CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END ), 0) = 0, 0, ROUND( COALESCE(SUM( CASE WHEN qi.inspect_state = 1 AND qi.check_result = 'åæ ¼' THEN qi.quantity ELSE 0 END ), 0) / COALESCE(SUM( CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END ), 0) * 100, 2) ) AS passRate FROM (SELECT 0 AS modelType UNION ALL SELECT 1 UNION ALL SELECT 2) t LEFT JOIN (SELECT inspect_type, SUM(quantity) AS completedCount, SUM(IF(check_result = 'åæ ¼', quantity, 0)) AS qualifiedCount, SUM(IF(check_result = 'ä¸åæ ¼', quantity, 0)) AS unqualifiedCount FROM quality_inspect WHERE inspect_state = 1 GROUP BY inspect_type) qi ON t.inspectType = qi.inspect_type LEFT JOIN (SELECT 0 AS inspectType, COALESCE((SELECT SUM(inbound_num) FROM procurement_record_storage WHERE type = 1), 0) + COALESCE((SELECT SUM(quantity) FROM quality_unqualified WHERE inspect_type = 0), 0) AS totalCount UNION ALL SELECT 1 AS inspectType, COALESCE((SELECT SUM(inbound_num) FROM procurement_record_storage WHERE type = 2 AND sales_ledger_product_id = 0), 0) AS totalCount UNION ALL SELECT 2 AS inspectType, COALESCE((SELECT SUM(inbound_num) FROM procurement_record_storage WHERE type = 2 AND sales_ledger_product_id != 0), 0) AS totalCount) prs ON t.inspectType = prs.inspectType ORDER BY t.inspectType; LEFT JOIN product p ON 1 = 1 LEFT JOIN product pp ON p.parent_id = pp.id LEFT JOIN product_model pm ON pm.product_id = p.id LEFT JOIN quality_inspect qi ON qi.product_model_id = pm.id AND ( (pp.product_name = 'åææ' AND t.modelType = 0) OR (pp.product_name = 'åæå' AND t.modelType = 1) OR (pp.product_name = 'æå' AND t.modelType = 2) ) GROUP BY t.modelType ORDER BY t.modelType; </select> <select id="getMonthlyPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityMonthlyPassRateDto"> WITH RECURSIVE @@ -142,50 +181,15 @@ SELECT month_num + 1 FROM months WHERE month_num < 12), types AS (SELECT 0 AS inspectType types AS (SELECT 0 AS modelType UNION ALL SELECT 1 UNION ALL SELECT 2), base AS (SELECT m.month_num, t.inspectType FROM months m, types t), qi_data AS (SELECT MONTH(check_time) AS month_num, inspect_type, SUM(quantity) AS completedCount, SUM(CASE WHEN check_result = 'åæ ¼' THEN quantity ELSE 0 END) AS qualifiedCount, SUM(CASE WHEN check_result = 'ä¸åæ ¼' THEN quantity ELSE 0 END) AS unqualifiedCount FROM quality_inspect WHERE YEAR(check_time) = #{year} AND inspect_state = 1 GROUP BY MONTH(check_time), inspect_type), prs_data AS (SELECT month_num, inspectType, SUM(totalCount) AS totalCount FROM (SELECT MONTH(create_time) AS month_num, 0 AS inspectType, inbound_num AS totalCount FROM procurement_record_storage WHERE type = 1 AND YEAR(create_time) = #{year} UNION ALL SELECT MONTH(check_time) AS month_num, 0 AS inspectType, quantity AS totalCount FROM quality_unqualified WHERE inspect_type = 0 AND YEAR(check_time) = #{year} UNION ALL SELECT MONTH(create_time) AS month_num, CASE WHEN sales_ledger_product_id = 0 THEN 1 ELSE 2 END AS inspectType, inbound_num AS totalCount FROM procurement_record_storage WHERE type = 2 AND YEAR(create_time) = #{year}) sub GROUP BY month_num, inspectType) base AS (SELECT m.month_num, t.modelType FROM months m CROSS JOIN types t) SELECT CASE b.month_num WHEN 1 THEN '䏿' WHEN 2 THEN 'äºæ' @@ -199,96 +203,121 @@ WHEN 10 THEN 'åæ' WHEN 11 THEN 'å䏿' WHEN 12 THEN 'åäºæ' END AS month, b.inspectType, COALESCE(p.totalCount, 0) AS totalCount, COALESCE(q.completedCount, 0) AS completedCount, COALESCE(q.qualifiedCount, 0) AS qualifiedCount, COALESCE(q.unqualifiedCount, 0) AS unqualifiedCount, CASE WHEN COALESCE(p.totalCount, 0) = 0 THEN 0 ELSE ROUND(COALESCE(q.completedCount, 0) / p.totalCount * 100, 2) END AS completionRate, CASE WHEN COALESCE(q.completedCount, 0) = 0 THEN 0 ELSE ROUND(COALESCE(q.qualifiedCount, 0) / q.completedCount * 100, 2) END AS passRate END AS month, b.modelType, /* æ»æ°é */ COALESCE(SUM(qi.quantity), 0) AS totalCount, /* 已宿 */ COALESCE(SUM( CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END ), 0) AS completedCount, /* åæ ¼ */ COALESCE(SUM( CASE WHEN qi.inspect_state = 1 AND qi.check_result = 'åæ ¼' THEN qi.quantity ELSE 0 END ), 0) AS qualifiedCount, /* ä¸åæ ¼ */ COALESCE(SUM( CASE WHEN qi.inspect_state = 1 AND qi.check_result = 'ä¸åæ ¼' THEN qi.quantity ELSE 0 END ), 0) AS unqualifiedCount, /* 宿ç */ IF(COALESCE(SUM(qi.quantity), 0) = 0, 0, ROUND( COALESCE(SUM( CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END ), 0) / SUM(qi.quantity) * 100, 2 ) ) AS completionRate, /* åæ ¼ç */ IF(COALESCE(SUM( CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END ), 0) = 0, 0, ROUND( COALESCE(SUM( CASE WHEN qi.inspect_state = 1 AND qi.check_result = 'åæ ¼' THEN qi.quantity ELSE 0 END ), 0) / COALESCE(SUM( CASE WHEN qi.inspect_state = 1 THEN qi.quantity ELSE 0 END ), 0) * 100, 2 ) ) AS passRate FROM base b LEFT JOIN qi_data q ON b.month_num = q.month_num AND b.inspectType = q.inspect_type LEFT JOIN prs_data p ON b.month_num = p.month_num AND b.inspectType = p.inspectType ORDER BY b.month_num, b.inspectType LEFT JOIN product p ON 1 = 1 LEFT JOIN product pp ON p.parent_id = pp.id LEFT JOIN product_model pm ON pm.product_id = p.id LEFT JOIN quality_inspect qi ON qi.product_model_id = pm.id AND YEAR(qi.check_time) = #{year} AND MONTH(qi.check_time) = b.month_num AND ( (pp.product_name = 'åææ' AND b.modelType = 0) OR (pp.product_name = 'åæå' AND b.modelType = 1) OR (pp.product_name = 'æå' AND b.modelType = 2) ) GROUP BY b.month_num, b.modelType ORDER BY b.month_num, b.modelType; </select> <select id="getYearlyPassRateStatistics" resultType="com.ruoyi.quality.dto.QualityPassRateDto"> SELECT t.inspectType, COALESCE(prs.totalCount, 0) AS totalCount, COALESCE(qi.completedCount, 0) AS completedCount, COALESCE(qi.qualifiedCount, 0) AS qualifiedCount, COALESCE(qi.unqualifiedCount, 0) AS unqualifiedCount, CASE WHEN COALESCE(prs.totalCount, 0) = 0 THEN 0 ELSE ROUND(COALESCE(qi.completedCount, 0) / prs.totalCount * 100, 2) END AS completionRate, CASE WHEN COALESCE(qi.completedCount, 0) = 0 THEN 0 ELSE ROUND(COALESCE(qi.qualifiedCount, 0) / qi.completedCount * 100, 2) END AS passRate FROM (SELECT 0 AS inspectType SELECT t.modelType, COALESCE(SUM( CASE WHEN pp.product_name = 'åææ' AND t.modelType = 0 THEN qi.quantity WHEN pp.product_name = 'åæå' AND t.modelType = 1 THEN qi.quantity WHEN pp.product_name = 'æå' AND t.modelType = 2 THEN qi.quantity ELSE 0 END ), 0) AS totalCount FROM (SELECT 0 AS modelType UNION ALL SELECT 1 UNION ALL SELECT 2) t LEFT JOIN (SELECT inspect_type, SUM(quantity) AS completedCount, SUM(CASE WHEN check_result = 'åæ ¼' THEN quantity ELSE 0 END) AS qualifiedCount, SUM(CASE WHEN check_result = 'ä¸åæ ¼' THEN quantity ELSE 0 END) AS unqualifiedCount FROM quality_inspect WHERE YEAR(check_time) = #{year} AND inspect_state = 1 GROUP BY inspect_type) qi ON t.inspectType = qi.inspect_type LEFT JOIN (SELECT 0 AS inspectType, COALESCE((SELECT SUM(inbound_num) FROM procurement_record_storage WHERE type = 1 AND YEAR(create_time) = #{year}), 0) + COALESCE((SELECT SUM(quantity) FROM quality_unqualified WHERE inspect_type = 0 AND YEAR(check_time) = #{year}), 0) AS totalCount UNION ALL SELECT 1 AS inspectType, COALESCE((SELECT SUM(inbound_num) FROM procurement_record_storage WHERE type = 2 AND sales_ledger_product_id = 0 AND YEAR(create_time) = #{year}), 0) AS totalCount UNION ALL SELECT 2 AS inspectType, COALESCE((SELECT SUM(inbound_num) FROM procurement_record_storage WHERE type = 2 AND sales_ledger_product_id != 0 AND YEAR(create_time) = #{year}), 0) AS totalCount) prs ON t.inspectType = prs.inspectType ORDER BY t.inspectType LEFT JOIN product p ON 1 = 1 LEFT JOIN product pp ON p.parent_id = pp.id LEFT JOIN product_model pm ON pm.product_id = p.id LEFT JOIN quality_inspect qi ON qi.product_model_id = pm.id AND YEAR(qi.check_time) = #{year} AND qi.inspect_state = 1 AND qi.check_result = 'åæ ¼' GROUP BY t.modelType ORDER BY t.modelType; </select> <select id="getMonthlyCompletionDetails" resultType="com.ruoyi.quality.dto.QualityMonthlyDetailDto"> WITH RECURSIVE months AS (SELECT 1 AS month_num UNION ALL SELECT month_num + 1 FROM months WHERE month_num < 12), qi_data AS (SELECT MONTH(check_time) AS month_num, SUM(CASE WHEN inspect_type = 0 THEN quantity ELSE 0 END) AS rawMaterialCount, SUM(CASE WHEN inspect_type = 1 THEN quantity ELSE 0 END) AS processCount, SUM(CASE WHEN inspect_type = 2 THEN quantity ELSE 0 END) AS outgoingCount FROM quality_inspect WHERE YEAR(check_time) = #{year} AND inspect_state = 1 GROUP BY MONTH(check_time)) WITH RECURSIVE months AS (SELECT 1 AS month_num UNION ALL SELECT month_num + 1 FROM months WHERE month_num < 12) SELECT CASE m.month_num WHEN 1 THEN '䏿' WHEN 2 THEN 'äºæ' @@ -302,21 +331,66 @@ WHEN 10 THEN 'åæ' WHEN 11 THEN 'å䏿' WHEN 12 THEN 'åäºæ' END AS month, COALESCE(d.rawMaterialCount, 0) AS rawMaterialCount, COALESCE(d.processCount, 0) AS processCount, COALESCE(d.outgoingCount, 0) AS outgoingCount END AS month, /* åææ */ COALESCE(SUM( CASE WHEN pp.product_name = 'åææ' THEN qi.quantity ELSE 0 END ), 0) AS rawMaterialCount, /* åæå */ COALESCE(SUM( CASE WHEN pp.product_name = 'åæå' THEN qi.quantity ELSE 0 END ), 0) AS processCount, /* æå */ COALESCE(SUM( CASE WHEN pp.product_name = 'æå' THEN qi.quantity ELSE 0 END ), 0) AS outgoingCount FROM months m LEFT JOIN qi_data d ON m.month_num = d.month_num ORDER BY m.month_num LEFT JOIN product p ON 1 = 1 LEFT JOIN product pp ON p.parent_id = pp.id LEFT JOIN product_model pm ON pm.product_id = p.id LEFT JOIN quality_inspect qi ON qi.product_model_id = pm.id AND qi.inspect_state = 1 AND YEAR(qi.check_time) = #{year} AND MONTH(qi.check_time) = m.month_num GROUP BY m.month_num ORDER BY m.month_num; </select> <select id="getTopParameters" resultType="com.ruoyi.quality.dto.QualityParameterStatDto"> WITH parameter_counts AS (SELECT qip.parameter_item AS name, SUM(COALESCE(qi.quantity, 0)) AS count FROM quality_inspect qi JOIN quality_inspect_param qip ON qip.inspect_id = qi.id WHERE qi.inspect_type = #{inspectType} WITH parameter_counts AS (SELECT qip.parameter_item AS name, COUNT(*) AS count FROM quality_inspect_param qip JOIN quality_inspect qi ON qip.inspect_id = qi.id JOIN product p ON qi.product_id = p.id JOIN product pp ON p.parent_id = pp.id WHERE qi.inspect_state = 1 AND ( (#{modelType} = 1 AND pp.product_name = 'åææ') OR (#{modelType} = 2 AND pp.product_name = 'åæå') OR (#{modelType} = 3 AND pp.product_name = 'æå') ) GROUP BY qip.parameter_item), ranked AS (SELECT name, count, @@ -324,6 +398,7 @@ FROM parameter_counts), total AS (SELECT SUM(count) AS total_count FROM parameter_counts) SELECT name, count, CASE @@ -333,14 +408,18 @@ FROM (SELECT name, count, rn FROM ranked WHERE rn <= 4 UNION ALL SELECT 'å ¶ä»æ£æµ' AS name, SUM(count) AS count, 5 AS rn FROM ranked WHERE rn > 4 HAVING SUM(count) > 0) t ORDER BY rn WHERE rn > 4 HAVING SUM(count) > 0) t ORDER BY rn; </select> </mapper>