From 422a5676c2d96dd37c1be62935a314d70fef79b5 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期三, 15 七月 2026 15:28:04 +0800
Subject: [PATCH] 修改不合格管理
---
src/main/java/com/ruoyi/production/bean/dto/ProductionAccountDetailExportDto.java | 6
src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java | 31 +++
src/main/java/com/ruoyi/production/service/impl/ProductionAccountServiceImpl.java | 10
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 5
src/main/java/com/ruoyi/quality/dto/QualityPersonGroupRateDto.java | 44 ++++
src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml | 14 +
src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java | 6
src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java | 4
src/main/java/com/ruoyi/production/controller/ProductionAccountController.java | 2
src/main/resources/mapper/quality/QualityInspectMapper.xml | 66 ++++++
src/main/java/com/ruoyi/quality/controller/QualityUnqualifiedController.java | 61 ++++-
src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java | 201 ++++++++-----------
src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java | 8
src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java | 4
src/main/resources/mapper/production/ProductionProductMainMapper.xml | 21 +
src/main/java/com/ruoyi/quality/dto/QualityPersonGroupRateWrapperDto.java | 21 ++
src/main/java/com/ruoyi/quality/service/QualityReportService.java | 3
src/main/resources/mapper/production/ProductionAccountMapper.xml | 42 +++
src/main/java/com/ruoyi/quality/controller/QualityReportController.java | 10 +
19 files changed, 406 insertions(+), 153 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/bean/dto/ProductionAccountDetailExportDto.java b/src/main/java/com/ruoyi/production/bean/dto/ProductionAccountDetailExportDto.java
index e20edee..37cf2b7 100644
--- a/src/main/java/com/ruoyi/production/bean/dto/ProductionAccountDetailExportDto.java
+++ b/src/main/java/com/ruoyi/production/bean/dto/ProductionAccountDetailExportDto.java
@@ -53,6 +53,12 @@
@Excel(name = "宸ユ椂瀹氶")
private BigDecimal workHours;
+ @Excel(name = "鍘熷伐璧�")
+ private BigDecimal originalWages;
+
+ @Excel(name = "淇宸ヨ祫")
+ private BigDecimal adjustAmount;
+
@Excel(name = "宸ヨ祫")
private BigDecimal wages;
}
diff --git a/src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java b/src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java
index eb6d6b3..848e69e 100644
--- a/src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java
+++ b/src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java
@@ -87,6 +87,12 @@
@Schema(description = "宸ヨ祫")
private BigDecimal wages;
+ @Schema(description = "鍘熷伐璧�")
+ private BigDecimal originalWages;
+
+ @Schema(description = "琛ヤ慨鐞嗗伐鏃�")
+ private BigDecimal repairWorkHour;
+
@Schema(description = "宸ヨ祫淇閲戦")
private BigDecimal adjustAmount;
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionAccountController.java b/src/main/java/com/ruoyi/production/controller/ProductionAccountController.java
index b401446..d3ec36f 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductionAccountController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductionAccountController.java
@@ -86,6 +86,8 @@
exportDto.setWorkHour(item.getWorkHour());
exportDto.setQuantity(item.getQuantity());
exportDto.setWorkHours(item.getWorkHours());
+ exportDto.setOriginalWages(item.getOriginalWages());
+ exportDto.setAdjustAmount(item.getAdjustAmount());
exportDto.setWages(item.getWages());
return exportDto;
})
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java b/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
index c485cd0..8679dfb 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
@@ -72,4 +72,8 @@
@Schema(description = "宸ユ椂")
private BigDecimal workHour;
+ @Schema(description = "琛ヤ慨鐞嗗伐鏃�")
+ @TableField("repair_work_hour")
+ private BigDecimal repairWorkHour;
+
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionAccountServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionAccountServiceImpl.java
index 50fa2d4..2b6cb27 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionAccountServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionAccountServiceImpl.java
@@ -34,6 +34,7 @@
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeParseException;
+import java.util.Arrays;
import java.util.List;
@Service
@@ -63,9 +64,6 @@
if (queryDto.getAuditStatus() == null) {
queryDto.setAuditStatus(1);
}
- if (queryDto.getReportType() == null) {
- queryDto.setReportType(0);
- }
return productionProductMainMapper.listProductionDetails(queryDto, page);
}
@@ -75,7 +73,7 @@
ProductionAccountDto queryDto = normalizeDateQuery(dto);
LambdaQueryWrapper<ProductionProductMain> queryWrapper = Wrappers.<ProductionProductMain>lambdaQuery()
.eq(ProductionProductMain::getAuditStatus, 1)
- .eq(ProductionProductMain::getReportType, 0);
+ .in(ProductionProductMain::getReportType, Arrays.asList(0, 1));
if (queryDto.getSchedulingUserId() != null) {
queryWrapper.eq(ProductionProductMain::getUserId, queryDto.getSchedulingUserId());
}
@@ -148,7 +146,9 @@
productionAccountDelete(productionProductMainId);
return Boolean.FALSE;
}
- if (productionProductMain.getReportType() == null || productionProductMain.getReportType() != 0) {
+ if (productionProductMain.getReportType() == null
+ || (!Integer.valueOf(0).equals(productionProductMain.getReportType())
+ && !Integer.valueOf(1).equals(productionProductMain.getReportType()))) {
productionAccountDelete(productionProductMainId);
return Boolean.FALSE;
}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index 63069a7..b6230aa 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -811,13 +811,14 @@
&& productionProductMain.getAuditStatus() != null
&& productionProductMain.getAuditStatus() == 1
&& productionProductMain.getReportType() != null
- && productionProductMain.getReportType() == 0;
+ && (productionProductMain.getReportType() == 0 || productionProductMain.getReportType() == 1);
}
private boolean isExcludedFromWage(ProductionProductMain productionProductMain) {
return productionProductMain != null
&& productionProductMain.getReportType() != null
- && productionProductMain.getReportType() != 0;
+ && productionProductMain.getReportType() != 0
+ && productionProductMain.getReportType() != 1;
}
@Override
diff --git a/src/main/java/com/ruoyi/quality/controller/QualityReportController.java b/src/main/java/com/ruoyi/quality/controller/QualityReportController.java
index 370e8f0..632be9e 100644
--- a/src/main/java/com/ruoyi/quality/controller/QualityReportController.java
+++ b/src/main/java/com/ruoyi/quality/controller/QualityReportController.java
@@ -87,4 +87,14 @@
return R.ok(qualityReportService.getTopParameters(modelType));
}
+ /**
+ * 鑾峰彇鎸変汉鍛�/鐝粍缁熻璐ㄩ噺鏁版嵁
+ */
+ @Operation(summary = "鑾峰彇鎸変汉鍛�/鐝粍缁熻璐ㄩ噺鏁版嵁")
+ @GetMapping("/getPersonGroupRateStatistics")
+ @Log(title = "鑾峰彇鎸変汉鍛�/鐝粍缁熻璐ㄩ噺鏁版嵁", businessType = BusinessType.OTHER)
+ public R<?> getPersonGroupRateStatistics() {
+ return R.ok(qualityReportService.getPersonGroupRateStatistics());
+ }
+
}
diff --git a/src/main/java/com/ruoyi/quality/controller/QualityUnqualifiedController.java b/src/main/java/com/ruoyi/quality/controller/QualityUnqualifiedController.java
index 02c979a..bdc4a9b 100644
--- a/src/main/java/com/ruoyi/quality/controller/QualityUnqualifiedController.java
+++ b/src/main/java/com/ruoyi/quality/controller/QualityUnqualifiedController.java
@@ -38,9 +38,8 @@
@Log(title = "鏂板涓嶅悎鏍肩鐞�", businessType = BusinessType.INSERT)
public R<?> add(@RequestBody QualityUnqualified qualityUnqualified) {
qualityUnqualified.setInspectState(0);
- if (qualityUnqualified.getDealType() != null) {
- qualityUnqualified.setDealResult(resolveDealResult(qualityUnqualified.getDealType()));
- }
+ normalizeDealDecision(qualityUnqualified);
+ applyRegenerateNewOrderDefault(qualityUnqualified);
normalizeRepairWorkHour(qualityUnqualified);
return R.ok(qualityUnqualifiedService.save(qualityUnqualified));
}
@@ -83,9 +82,8 @@
@Operation(summary = "涓嶅悎鏍肩鐞嗕慨鏀�")
@Log(title = "涓嶅悎鏍肩鐞嗕慨鏀�", businessType = BusinessType.UPDATE)
public R<?> update(@RequestBody QualityUnqualified qualityUnqualified) {
- if (qualityUnqualified.getDealType() != null) {
- qualityUnqualified.setDealResult(resolveDealResult(qualityUnqualified.getDealType()));
- }
+ normalizeDealDecision(qualityUnqualified);
+ applyRegenerateNewOrderDefault(qualityUnqualified);
normalizeRepairWorkHour(qualityUnqualified);
return R.ok(qualityUnqualifiedService.updateById(qualityUnqualified));
}
@@ -124,23 +122,50 @@
@Operation(summary = "涓嶅悎鏍肩鐞嗗鐞�")
@Log(title = "涓嶅悎鏍肩鐞嗗鐞�", businessType = BusinessType.OTHER)
public R<?> deal(@RequestBody QualityUnqualified qualityUnqualified) {
- if (qualityUnqualified.getDealType() != null) {
- qualityUnqualified.setDealResult(resolveDealResult(qualityUnqualified.getDealType()));
- }
+ normalizeDealDecision(qualityUnqualified);
+ applyRegenerateNewOrderDefault(qualityUnqualified);
normalizeRepairWorkHour(qualityUnqualified);
return R.ok(qualityUnqualifiedService.deal(qualityUnqualified));
}
- private String resolveDealResult(Integer dealType) {
- if (dealType == null) {
- return null;
+ private void normalizeDealDecision(QualityUnqualified qualityUnqualified) {
+ if (qualityUnqualified == null) {
+ return;
}
- return switch (dealType) {
- case 0 -> "杞诲井杩斿伐";
- case 1 -> "涓ラ噸杩斿伐";
- case 2 -> "鎶ュ簾";
- default -> null;
- };
+ String dealResult = qualityUnqualified.getDealResult();
+ Integer dealType = qualityUnqualified.getDealType();
+ if ("鎶ュ簾".equals(dealResult)) {
+ qualityUnqualified.setDealType(2);
+ return;
+ }
+ if ("鎶ュ伐".equals(dealResult)) {
+ if (dealType == null) {
+ throw new ServiceException("鎶ュ伐鏃跺繀椤婚�夋嫨涓嶅悎鏍肩被鍨�");
+ }
+ if (dealType == 2) {
+ qualityUnqualified.setDealResult("鎶ュ簾");
+ }
+ return;
+ }
+ if (dealType == null) {
+ return;
+ }
+ if (dealType == 2) {
+ qualityUnqualified.setDealResult("鎶ュ簾");
+ } else if (dealType == 0 || dealType == 1) {
+ qualityUnqualified.setDealResult("鎶ュ伐");
+ }
+ }
+
+ private void applyRegenerateNewOrderDefault(QualityUnqualified qualityUnqualified) {
+ if (qualityUnqualified == null || qualityUnqualified.getDealType() == null) {
+ return;
+ }
+ if (qualityUnqualified.getDealType() == 0) {
+ qualityUnqualified.setRegenerateNewOrder(0);
+ } else if (qualityUnqualified.getDealType() == 1 || qualityUnqualified.getDealType() == 2) {
+ qualityUnqualified.setRegenerateNewOrder(1);
+ }
}
private void normalizeRepairWorkHour(QualityUnqualified qualityUnqualified) {
diff --git a/src/main/java/com/ruoyi/quality/dto/QualityPersonGroupRateDto.java b/src/main/java/com/ruoyi/quality/dto/QualityPersonGroupRateDto.java
new file mode 100644
index 0000000..062ac4c
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/dto/QualityPersonGroupRateDto.java
@@ -0,0 +1,44 @@
+package com.ruoyi.quality.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+@Schema(name = "QualityPersonGroupRateDto", description = "鎸変汉鍛�/鐝粍缁熻璐ㄩ噺姣旂巼DTO")
+public class QualityPersonGroupRateDto implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "缁村害ID")
+ private Long dimensionId;
+
+ @Schema(description = "缁村害鍚嶇О")
+ private String dimensionName;
+
+ @Schema(description = "鎬绘暟閲�")
+ private BigDecimal totalCount;
+
+ @Schema(description = "鍚堟牸鏁伴噺")
+ private BigDecimal qualifiedCount;
+
+ @Schema(description = "涓嶅悎鏍兼暟閲�")
+ private BigDecimal unqualifiedCount;
+
+ @Schema(description = "杩斿伐鏁伴噺")
+ private BigDecimal reworkCount;
+
+ @Schema(description = "鎶ュ簾鏁伴噺")
+ private BigDecimal scrapCount;
+
+ @Schema(description = "鍚堟牸鐜�")
+ private BigDecimal passRate;
+
+ @Schema(description = "杩斿伐鐜�")
+ private BigDecimal reworkRate;
+
+ @Schema(description = "鎶ュ簾鐜�")
+ private BigDecimal scrapRate;
+}
diff --git a/src/main/java/com/ruoyi/quality/dto/QualityPersonGroupRateWrapperDto.java b/src/main/java/com/ruoyi/quality/dto/QualityPersonGroupRateWrapperDto.java
new file mode 100644
index 0000000..4af5242
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/dto/QualityPersonGroupRateWrapperDto.java
@@ -0,0 +1,21 @@
+package com.ruoyi.quality.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+@Schema(name = "QualityPersonGroupRateWrapperDto", description = "鎸変汉鍛�/鐝粍缁熻璐ㄩ噺姣旂巼鍖呰DTO")
+public class QualityPersonGroupRateWrapperDto implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "鎸変汉鍛樼粺璁�")
+ private List<QualityPersonGroupRateDto> personList = new ArrayList<>();
+
+ @Schema(description = "鎸夌彮缁勭粺璁�")
+ private List<QualityPersonGroupRateDto> groupList = new ArrayList<>();
+}
diff --git a/src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java b/src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java
index 2b87d5e..9d1ad39 100644
--- a/src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java
+++ b/src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java
@@ -52,4 +52,8 @@
* 鑾峰彇鐑偣妫�娴嬫寚鏍� Top 4 + 鍏朵粬
*/
List<QualityParameterStatDto> getTopParameters(@Param("modelType") Integer modelType);
+
+ List<QualityPersonGroupRateDto> getPersonRateStatistics();
+
+ List<QualityPersonGroupRateDto> getGroupRateStatistics();
}
diff --git a/src/main/java/com/ruoyi/quality/service/QualityReportService.java b/src/main/java/com/ruoyi/quality/service/QualityReportService.java
index 053359a..dfa4ae1 100644
--- a/src/main/java/com/ruoyi/quality/service/QualityReportService.java
+++ b/src/main/java/com/ruoyi/quality/service/QualityReportService.java
@@ -5,6 +5,7 @@
import com.ruoyi.quality.dto.QualityMonthlyDetailDto;
import com.ruoyi.quality.dto.QualityParameterStatDto;
import com.ruoyi.quality.dto.QualityMonthlyPassRateWrapperDto;
+import com.ruoyi.quality.dto.QualityPersonGroupRateWrapperDto;
import com.ruoyi.quality.dto.QualityTopParameterDto;
import java.util.List;
@@ -30,4 +31,6 @@
List<QualityMonthlyDetailDto> getMonthlyCompletionDetails(String year);
QualityTopParameterDto getTopParameters(Integer inspectType);
+
+ QualityPersonGroupRateWrapperDto getPersonGroupRateStatistics();
}
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
index 328c358..fef8ef1 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -17,6 +17,8 @@
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
import com.ruoyi.procurementrecord.utils.StockUtils;
+import com.ruoyi.production.mapper.ProductionProductMainMapper;
+import com.ruoyi.production.pojo.ProductionProductMain;
import com.ruoyi.quality.dto.QualityInspectDto;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.mapper.QualityTestStandardMapper;
@@ -67,6 +69,8 @@
private SalesLedgerProductMapper salesLedgerProductMapper;
private ProcurementRecordService procurementRecordService;
+
+ private ProductionProductMainMapper productionProductMainMapper;
@Override
public int add(QualityInspectDto qualityInspectDto) {
@@ -148,6 +152,7 @@
qualityUnqualified.setInspectState(0);//寰呭鐞�
qualityUnqualified.setQuantity(qualityInspect.getUnqualifiedQuantity());
qualityUnqualified.setProductModelId(qualityInspect.getProductModelId());
+ applyDealTypeByReportType(qualityInspect, qualityUnqualified);
List<QualityInspectParam> inspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, inspect.getId()));
String text = inspectParams.stream().map(QualityInspectParam::getParameterItem).collect(Collectors.joining(","));
qualityUnqualified.setDefectivePhenomena(text + "杩欎簺鎸囨爣涓瓨鍦ㄤ笉鍚堟牸");//涓嶅悎鏍肩幇璞�
@@ -159,6 +164,32 @@
return qualityInspectMapper.updateById(qualityInspect);
}
+ private void applyDealTypeByReportType(QualityInspect qualityInspect, QualityUnqualified qualityUnqualified) {
+ if (qualityInspect == null || qualityUnqualified == null || qualityInspect.getProductMainId() == null) {
+ return;
+ }
+ ProductionProductMain productMain = productionProductMainMapper.selectById(qualityInspect.getProductMainId());
+ if (productMain == null || productMain.getReportType() == null) {
+ return;
+ }
+ switch (productMain.getReportType()) {
+ case 1:
+ qualityUnqualified.setDealType(0);
+ qualityUnqualified.setDealResult("鎶ュ伐");
+ break;
+ case 2:
+ qualityUnqualified.setDealType(1);
+ qualityUnqualified.setDealResult("鎶ュ伐");
+ break;
+ case 3:
+ qualityUnqualified.setDealType(2);
+ qualityUnqualified.setDealResult("鎶ュ簾");
+ break;
+ default:
+ break;
+ }
+ }
+
@Override
public R autoSubmit(Long id) {
if (id == null) {
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java
index d59b610..c162614 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityReportServiceImpl.java
@@ -100,4 +100,12 @@
return result;
}
+
+ @Override
+ public QualityPersonGroupRateWrapperDto getPersonGroupRateStatistics() {
+ QualityPersonGroupRateWrapperDto result = new QualityPersonGroupRateWrapperDto();
+ result.setPersonList(qualityInspectMapper.getPersonRateStatistics());
+ result.setGroupList(qualityInspectMapper.getGroupRateStatistics());
+ return result;
+ }
}
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
index 303826a..ffd12d9 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -11,14 +11,9 @@
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.production.mapper.ProductionOperationTaskMapper;
-import com.ruoyi.production.mapper.ProductionOrderMapper;
-import com.ruoyi.production.mapper.ProductionOrderRoutingMapper;
-import com.ruoyi.production.mapper.ProductionOrderRoutingOperationMapper;
import com.ruoyi.production.mapper.ProductionProductMainMapper;
+import com.ruoyi.production.service.ProductionAccountService;
import com.ruoyi.production.pojo.ProductionOperationTask;
-import com.ruoyi.production.pojo.ProductionOrder;
-import com.ruoyi.production.pojo.ProductionOrderRouting;
-import com.ruoyi.production.pojo.ProductionOrderRoutingOperation;
import com.ruoyi.production.pojo.ProductionProductMain;
import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
import com.ruoyi.quality.pojo.QualityInspect;
@@ -30,15 +25,14 @@
import com.ruoyi.stock.service.StockUninventoryService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import jakarta.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
@AllArgsConstructor
@Service
@@ -48,12 +42,10 @@
private final QualityUnqualifiedMapper qualityUnqualifiedMapper;
private final IQualityInspectService qualityInspectService;
private final ProductionProductMainMapper productionProductMainMapper;
- private final ProductionOrderMapper productionOrderMapper;
- private final ProductionOrderRoutingMapper productionOrderRoutingMapper;
- private final ProductionOrderRoutingOperationMapper productionOrderRoutingOperationMapper;
private final ProductionOperationTaskMapper productionOperationTaskMapper;
private final StockUninventoryService stockUninventoryService;
private final StockInRecordService stockInRecordService;
+ private final ProductionAccountService productionAccountService;
@Override
public IPage<QualityUnqualified> qualityUnqualifiedListPage(Page page, QualityUnqualified qualityUnqualified) {
@@ -68,42 +60,23 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public int deal(QualityUnqualified qualityUnqualified) {
QualityUnqualified unqualified = qualityUnqualifiedMapper.selectById(qualityUnqualified.getId());
QualityInspect qualityInspect = qualityInspectService.getById(unqualified.getInspectId());
String batchNo = qualityInspect == null ? null
: resolveProductionBatchNo(qualityInspect.getProductMainId(), qualityInspect.getId(), qualityInspect.getProductModelId());
- if (qualityUnqualified.getDealType() != null) {
- switch (qualityUnqualified.getDealType()) {
- case 0:
- qualityUnqualified.setDealResult("杞诲井杩斿伐");
- break;
- case 1:
- qualityUnqualified.setDealResult("涓ラ噸杩斿伐");
- break;
- case 2:
- qualityUnqualified.setDealResult("鎶ュ簾");
- break;
- default:
- break;
- }
- }
if (ObjectUtils.isNotNull(qualityInspect) && qualityInspect.getInspectType() != 0) {
+ ProductionProductMain sourceMain = null;
+ if (ObjectUtils.isNotNull(qualityInspect.getProductMainId())) {
+ sourceMain = productionProductMainMapper.selectById(qualityInspect.getProductMainId());
+ }
switch (qualityUnqualified.getDealResult()) {
- case "涓ラ噸杩斿伐":
- case "杞诲井杩斿伐":
- if (ObjectUtils.isNotNull(qualityInspect.getProductMainId())) {
- ProductionProductMain sourceMain = productionProductMainMapper.selectById(qualityInspect.getProductMainId());
- if (sourceMain == null || sourceMain.getProductionOperationTaskId() == null) {
- throw new ServiceException("鍘嗗彶鎶ュ伐鏈粦瀹氱敓浜у伐鍗曪紝鏃犳硶鎸夋柊妯″瀷杩斿伐");
- }
- createReworkProductionByNewModel(sourceMain, unqualified.getQuantity());
- }
+ case "鎶ュ伐":
+ handleProductionReportResult(qualityUnqualified, unqualified, sourceMain);
break;
case "鎶ュ簾":
- stockUtils.addUnStockWithBatchNo(qualityInspect.getProductModelId(), unqualified.getQuantity(),
- StockInQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId(), batchNo);
- qualityUnqualified.setRegenerateNewOrder(1);
+ handleProductionScrapResult(qualityInspect, qualityUnqualified, unqualified, sourceMain, batchNo);
break;
case "璁╂鏀捐":
stockUtils.addStockWithBatchNo(qualityInspect.getProductModelId(), unqualified.getQuantity(),
@@ -136,87 +109,87 @@
return qualityUnqualifiedMapper.getUnqualified(id);
}
+ private void handleProductionReportResult(QualityUnqualified qualityUnqualified,
+ QualityUnqualified sourceUnqualified,
+ ProductionProductMain sourceMain) {
+ Integer dealType = qualityUnqualified.getDealType();
+ if (dealType == null) {
+ throw new ServiceException("鎶ュ伐鏃跺繀椤婚�夋嫨涓嶅悎鏍肩被鍨�");
+ }
+ if (sourceMain == null || sourceMain.getProductionOperationTaskId() == null) {
+ throw new ServiceException("鍘嗗彶鎶ュ伐鏈粦瀹氱敓浜у伐鍗曪紝鏃犳硶鎵ц鎶ュ伐澶勭悊");
+ }
+ if (Integer.valueOf(0).equals(dealType)) {
+ applyLightRework(sourceMain, qualityUnqualified);
+ return;
+ }
+ if (Integer.valueOf(1).equals(dealType)) {
+ markSourceMainAsUnpaid(sourceMain, 2);
+ createReworkProductionByNewModel(sourceMain, sourceUnqualified.getQuantity());
+ qualityUnqualified.setRegenerateNewOrder(1);
+ productionAccountService.rebuildByProductionProductMainId(sourceMain.getId());
+ return;
+ }
+ throw new ServiceException("鎶ュ伐澶勭悊浠呮敮鎸佽交寰繑宸ユ垨涓ラ噸杩斿伐");
+ }
+
+ private void handleProductionScrapResult(QualityInspect qualityInspect,
+ QualityUnqualified qualityUnqualified,
+ QualityUnqualified sourceUnqualified,
+ ProductionProductMain sourceMain,
+ String batchNo) {
+ if (sourceMain == null || sourceMain.getProductionOperationTaskId() == null) {
+ throw new ServiceException("鍘嗗彶鎶ュ伐鏈粦瀹氱敓浜у伐鍗曪紝鏃犳硶鎵ц鎶ュ簾澶勭悊");
+ }
+ markSourceMainAsUnpaid(sourceMain, 3);
+ createReworkProductionByNewModel(sourceMain, sourceUnqualified.getQuantity());
+ qualityUnqualified.setRegenerateNewOrder(1);
+ productionAccountService.rebuildByProductionProductMainId(sourceMain.getId());
+ // 鍘熸湁鎶ュ簾搴撳瓨澶勭悊閫昏緫鍏堟寜鏂拌鍒欐敞閲婏紝涓嶅啀鐩存帴鎸変笉鍚堟牸鍗曟墽琛屾姤搴熷嚭搴撱��
+ // stockUtils.addUnStockWithBatchNo(qualityInspect.getProductModelId(), sourceUnqualified.getQuantity(),
+ // StockInQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), sourceUnqualified.getId(), batchNo);
+ }
+
+ private void applyLightRework(ProductionProductMain sourceMain, QualityUnqualified qualityUnqualified) {
+ if (qualityUnqualified.getRepairWorkHour() == null
+ || qualityUnqualified.getRepairWorkHour().compareTo(BigDecimal.ZERO) <= 0) {
+ throw new ServiceException("杞诲井杩斿伐蹇呴』濉啓澶т簬0鐨勪慨鐞嗗伐鏃�");
+ }
+ ProductionProductMain update = new ProductionProductMain();
+ update.setId(sourceMain.getId());
+ update.setReportType(1);
+ update.setRepairWorkHour(defaultDecimal(sourceMain.getRepairWorkHour()).add(defaultDecimal(qualityUnqualified.getRepairWorkHour())));
+ productionProductMainMapper.updateById(update);
+ qualityUnqualified.setRegenerateNewOrder(0);
+ productionAccountService.rebuildByProductionProductMainId(sourceMain.getId());
+ }
+
+ private void markSourceMainAsUnpaid(ProductionProductMain sourceMain, int reportType) {
+ ProductionProductMain update = new ProductionProductMain();
+ update.setId(sourceMain.getId());
+ update.setReportType(reportType);
+ productionProductMainMapper.updateById(update);
+ }
+
private void createReworkProductionByNewModel(ProductionProductMain sourceMain, BigDecimal quantity) {
ProductionOperationTask sourceTask = productionOperationTaskMapper.selectById(sourceMain.getProductionOperationTaskId());
if (sourceTask == null) {
throw new ServiceException("鍏宠仈鐨勭敓浜у伐鍗曚笉瀛樺湪");
}
- ProductionOrder sourceOrder = productionOrderMapper.selectById(sourceTask.getProductionOrderId());
- if (sourceOrder == null) {
- throw new ServiceException("鍏宠仈鐨勭敓浜ц鍗曚笉瀛樺湪");
- }
-
- ProductionOrder newOrder = new ProductionOrder();
- BeanUtils.copyProperties(sourceOrder, newOrder);
- newOrder.setId(null);
- newOrder.setNpsNo(generateNextProductionOrderNo("FG"));
- newOrder.setQuantity(defaultDecimal(quantity));
- newOrder.setCompleteQuantity(BigDecimal.ZERO);
- newOrder.setStartTime(null);
- newOrder.setEndTime(null);
- newOrder.setCreateTime(null);
- newOrder.setUpdateTime(null);
- productionOrderMapper.insert(newOrder);
-
- Map<Long, Long> routingIdMap = new HashMap<>();
- List<ProductionOrderRouting> sourceRoutings = productionOrderRoutingMapper.selectList(
- Wrappers.<ProductionOrderRouting>lambdaQuery()
- .eq(ProductionOrderRouting::getProductionOrderId, sourceOrder.getId())
- .orderByAsc(ProductionOrderRouting::getId));
- for (ProductionOrderRouting sourceRouting : sourceRoutings) {
- ProductionOrderRouting newRouting = new ProductionOrderRouting();
- BeanUtils.copyProperties(sourceRouting, newRouting);
- newRouting.setId(null);
- newRouting.setProductionOrderId(newOrder.getId());
- newRouting.setCreateTime(null);
- newRouting.setUpdateTime(null);
- productionOrderRoutingMapper.insert(newRouting);
- routingIdMap.put(sourceRouting.getId(), newRouting.getId());
- }
-
- List<ProductionOrderRoutingOperation> sourceOperations = productionOrderRoutingOperationMapper.selectList(
- Wrappers.<ProductionOrderRoutingOperation>lambdaQuery()
- .eq(ProductionOrderRoutingOperation::getProductionOrderId, sourceOrder.getId())
- .orderByAsc(ProductionOrderRoutingOperation::getDragSort)
- .orderByAsc(ProductionOrderRoutingOperation::getId));
- for (ProductionOrderRoutingOperation sourceOperation : sourceOperations) {
- ProductionOrderRoutingOperation newOperation = new ProductionOrderRoutingOperation();
- BeanUtils.copyProperties(sourceOperation, newOperation);
- newOperation.setId(null);
- newOperation.setProductionOrderId(newOrder.getId());
- newOperation.setOrderRoutingId(routingIdMap.get(sourceOperation.getOrderRoutingId()));
- newOperation.setCreateTime(null);
- newOperation.setUpdateTime(null);
- productionOrderRoutingOperationMapper.insert(newOperation);
-
- ProductionOperationTask newTask = new ProductionOperationTask();
- newTask.setProductionOrderRoutingOperationId(newOperation.getId());
- newTask.setProductionOrderId(newOrder.getId());
- newTask.setPlanQuantity(newOrder.getQuantity());
- newTask.setCompleteQuantity(BigDecimal.ZERO);
- newTask.setWorkOrderNo(generateNextTaskNo("FG"));
- newTask.setStatus(1);
- productionOperationTaskMapper.insert(newTask);
- }
- }
-
- private String generateNextProductionOrderNo(String prefix) {
- String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
- String orderPrefix = prefix + datePrefix;
- ProductionOrder latestOrder = productionOrderMapper.selectOne(
- Wrappers.<ProductionOrder>lambdaQuery()
- .likeRight(ProductionOrder::getNpsNo, orderPrefix)
- .orderByDesc(ProductionOrder::getNpsNo)
- .last("limit 1"));
- int sequence = 1;
- if (latestOrder != null && latestOrder.getNpsNo() != null && latestOrder.getNpsNo().startsWith(orderPrefix)) {
- try {
- sequence = Integer.parseInt(latestOrder.getNpsNo().substring(orderPrefix.length())) + 1;
- } catch (NumberFormatException ignored) {
- sequence = 1;
- }
- }
- return orderPrefix + String.format("%04d", sequence);
+ ProductionOperationTask newTask = new ProductionOperationTask();
+ BeanUtils.copyProperties(sourceTask, newTask);
+ newTask.setId(null);
+ newTask.setWorkOrderNo(generateNextTaskNo("FG"));
+ newTask.setPlanQuantity(defaultDecimal(quantity));
+ newTask.setCompleteQuantity(BigDecimal.ZERO);
+ newTask.setPlanStartTime(null);
+ newTask.setPlanEndTime(null);
+ newTask.setActualStartTime(null);
+ newTask.setActualEndTime(null);
+ newTask.setStatus(1);
+ newTask.setCreateTime(null);
+ newTask.setUpdateTime(null);
+ productionOperationTaskMapper.insert(newTask);
}
private String generateNextTaskNo(String prefix) {
diff --git a/src/main/resources/mapper/production/ProductionAccountMapper.xml b/src/main/resources/mapper/production/ProductionAccountMapper.xml
index fd439de..b7e27b0 100644
--- a/src/main/resources/mapper/production/ProductionAccountMapper.xml
+++ b/src/main/resources/mapper/production/ProductionAccountMapper.xml
@@ -49,7 +49,7 @@
cast(sum(
case
when pa.adjust_amount is not null then ifnull(pa.adjust_amount, 0)
- when poro.type = 0 then ifnull(pa.work_hours, 0) * ifnull(ppm.work_hour, 0)
+ when poro.type = 0 then ifnull(pa.work_hours, 0) * (ifnull(ppm.work_hour, 0) + ifnull(ppm.repair_work_hour, 0))
else ifnull(pa.work_hours, 0) * ifnull(pa.finished_num, 0) *
case
when substring_index(pm.model, '*', -1) regexp '^[0-9]+(\\.[0-9]+)?$'
@@ -101,7 +101,7 @@
) ppo on ppo.production_product_main_id = ppm.id
<where>
and ppm.audit_status = 1
- and ppm.report_type = 0
+ and ppm.report_type in (0, 1)
<if test="c != null">
<if test="c.productCategory != null and c.productCategory != ''">
and p_parent.product_name like concat('%', #{c.productCategory}, '%')
@@ -136,14 +136,40 @@
</select>
<select id="selectUserAccount" resultType="com.ruoyi.production.bean.dto.UserAccountDto">
- select ifnull(sum(finished_num), 0) as accountBalance,
- ifnull(sum(work_hours), 0) as account
+ select cast(ifnull(sum(
+ case
+ when pa.adjust_amount is not null then 0
+ when poro.type = 0 then 0
+ else ifnull(pa.work_hours, 0) * ifnull(pa.finished_num, 0) *
+ case
+ when substring_index(pm.model, '*', -1) regexp '^[0-9]+(\\.[0-9]+)?$'
+ then cast(substring_index(pm.model, '*', -1) as decimal(18,4))
+ else 1
+ end
+ end
+ ), 0) as decimal(18,2)) as accountBalance,
+ cast(ifnull(sum(
+ case
+ when pa.adjust_amount is not null then ifnull(pa.adjust_amount, 0)
+ when poro.type = 0 then ifnull(pa.work_hours, 0) * (ifnull(ppm.work_hour, 0) + ifnull(ppm.repair_work_hour, 0))
+ else 0
+ end
+ ), 0) as decimal(18,2)) as account
from production_account pa
- inner join production_product_main ppm on ppm.id = pa.production_product_main_id
+ left join production_product_main ppm on ppm.id = pa.production_product_main_id
+ left join production_operation_task pot on ppm.production_operation_task_id = pot.id
+ left join production_order po on pot.production_order_id = po.id
+ left join production_order_routing_operation poro on pot.production_order_routing_operation_id = poro.id
+ left join product_model pm on pm.id = ifnull(poro.product_model_id, po.product_model_id)
where pa.scheduling_user_id = #{userId}
and date_format(pa.scheduling_date, '%Y-%m') = #{date}
- and ppm.audit_status = 1
- and ppm.report_type = 0
+ and (
+ pa.production_product_main_id is null
+ or (
+ ppm.audit_status = 1
+ and ppm.report_type in (0, 1)
+ )
+ )
</select>
<select id="selectDailyWagesStats" resultType="java.util.Map">
@@ -156,7 +182,7 @@
where pa.scheduling_date >= #{startDate}
and pa.scheduling_date <= #{endDate}
and ppm.audit_status = 1
- and ppm.report_type = 0
+ and ppm.report_type in (0, 1)
group by date_format(scheduling_date, '%m-%d')
order by date_format(scheduling_date, '%m-%d')
</select>
diff --git a/src/main/resources/mapper/production/ProductionProductMainMapper.xml b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
index 77d6495..e00e0da 100644
--- a/src/main/resources/mapper/production/ProductionProductMainMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -51,7 +51,8 @@
date(ppm.create_time) as schedulingDate,
su.nick_name as schedulingUserName,
po_sales.customerName,
- poro.operation_name as process
+ poro.operation_name as process,
+ ppm.repair_work_hour as repairWorkHour
from production_product_main ppm
left join production_operation_task pot on ppm.production_operation_task_id = pot.id
left join production_order po on pot.production_order_id = po.id
@@ -138,14 +139,27 @@
date(pa.scheduling_date) as schedulingDate,
pa.scheduling_user_id as schedulingUserId,
pa.scheduling_user_name as schedulingUserName,
+ ppm.repair_work_hour as repairWorkHour,
cast(ifnull(ppm.work_hour, 0) as decimal(18,4)) as workHour,
cast(ifnull(pa.work_hours, 0) as decimal(18,4)) as workHours,
cast(ifnull(pa.adjust_amount, 0) as decimal(18,4)) as adjustAmount,
pa.adjust_remark as adjustRemark,
cast(
case
+ when poro.type = 0 then ifnull(pa.work_hours, 0) * (ifnull(ppm.work_hour, 0) + ifnull(ppm.repair_work_hour, 0))
+ else ifnull(pa.work_hours, 0) * ifnull(pa.finished_num, 0) *
+ case
+ when substring_index(pm.model, '*', -1) regexp '^[0-9]+(\\.[0-9]+)?$'
+ then cast(substring_index(pm.model, '*', -1) as decimal(18,4))
+ else 1
+ end
+ end
+ as decimal(18,4)
+ ) as originalWages,
+ cast(
+ case
when pa.adjust_amount is not null then ifnull(pa.adjust_amount, 0)
- when poro.type = 0 then ifnull(pa.work_hours, 0) * ifnull(ppm.work_hour, 0)
+ when poro.type = 0 then ifnull(pa.work_hours, 0) * (ifnull(ppm.work_hour, 0) + ifnull(ppm.repair_work_hour, 0))
else ifnull(pa.work_hours, 0) * ifnull(pa.finished_num, 0) *
case
when substring_index(pm.model, '*', -1) regexp '^[0-9]+(\\.[0-9]+)?$'
@@ -172,6 +186,9 @@
<if test="c.reportType != null">
and ppm.report_type = #{c.reportType}
</if>
+ <if test="c.reportType == null">
+ and ppm.report_type in (0, 1)
+ </if>
<if test="c.productCategory != null and c.productCategory != ''">
and p_parent.product_name like concat('%', #{c.productCategory}, '%')
</if>
diff --git a/src/main/resources/mapper/quality/QualityInspectMapper.xml b/src/main/resources/mapper/quality/QualityInspectMapper.xml
index ed01cad..7e0bd51 100644
--- a/src/main/resources/mapper/quality/QualityInspectMapper.xml
+++ b/src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -469,5 +469,71 @@
</select>
+ <sql id="personGroupRateJoin">
+ FROM quality_inspect qi
+ INNER JOIN production_product_main ppm ON qi.product_main_id = ppm.id
+ LEFT JOIN (
+ SELECT production_product_main_id,
+ CAST(SUM(IFNULL(scrap_qty, 0)) AS DECIMAL(18,4)) AS scrapCount
+ FROM production_product_output
+ GROUP BY production_product_main_id
+ ) ppo ON ppo.production_product_main_id = ppm.id
+ LEFT JOIN (
+ SELECT inspect_id,
+ CAST(SUM(CASE WHEN deal_type IN (0, 1) THEN IFNULL(quantity, 0) ELSE 0 END) AS DECIMAL(18,4)) AS reworkCount
+ FROM quality_unqualified
+ WHERE inspect_state = 1
+ GROUP BY inspect_id
+ ) qu ON qu.inspect_id = qi.id
+ </sql>
+
+ <sql id="personGroupRateWhere">
+ WHERE qi.inspect_type IN (1, 2)
+ AND qi.inspect_state = 1
+ AND qi.product_main_id IS NOT NULL
+ </sql>
+
+ <select id="getPersonRateStatistics" resultType="com.ruoyi.quality.dto.QualityPersonGroupRateDto">
+ SELECT ppm.user_id AS dimensionId,
+ COALESCE(NULLIF(ppm.user_name, ''), su.nick_name, CONCAT('鐢ㄦ埛', ppm.user_id)) AS dimensionName,
+ CAST(SUM(IFNULL(qi.quantity, 0)) AS DECIMAL(18,4)) AS totalCount,
+ CAST(SUM(IFNULL(qi.qualified_quantity, 0)) AS DECIMAL(18,4)) AS qualifiedCount,
+ CAST(SUM(IFNULL(qi.unqualified_quantity, 0)) AS DECIMAL(18,4)) AS unqualifiedCount,
+ CAST(SUM(IFNULL(qu.reworkCount, 0)) AS DECIMAL(18,4)) AS reworkCount,
+ CAST(SUM(IFNULL(ppo.scrapCount, 0)) AS DECIMAL(18,4)) AS scrapCount,
+ CAST(IF(SUM(IFNULL(qi.quantity, 0)) = 0, 0,
+ ROUND(SUM(IFNULL(qi.qualified_quantity, 0)) / SUM(IFNULL(qi.quantity, 0)) * 100, 2)) AS DECIMAL(18,2)) AS passRate,
+ CAST(IF(SUM(IFNULL(qi.quantity, 0)) = 0, 0,
+ ROUND(SUM(IFNULL(qu.reworkCount, 0)) / SUM(IFNULL(qi.quantity, 0)) * 100, 2)) AS DECIMAL(18,2)) AS reworkRate,
+ CAST(IF(SUM(IFNULL(qi.quantity, 0)) + SUM(IFNULL(ppo.scrapCount, 0)) = 0, 0,
+ ROUND(SUM(IFNULL(ppo.scrapCount, 0)) / (SUM(IFNULL(qi.quantity, 0)) + SUM(IFNULL(ppo.scrapCount, 0))) * 100, 2)) AS DECIMAL(18,2)) AS scrapRate
+ <include refid="personGroupRateJoin"/>
+ LEFT JOIN sys_user su ON su.user_id = ppm.user_id
+ <include refid="personGroupRateWhere"/>
+ GROUP BY ppm.user_id, COALESCE(NULLIF(ppm.user_name, ''), su.nick_name, CONCAT('鐢ㄦ埛', ppm.user_id))
+ ORDER BY passRate DESC, totalCount DESC, dimensionId ASC
+ </select>
+
+ <select id="getGroupRateStatistics" resultType="com.ruoyi.quality.dto.QualityPersonGroupRateDto">
+ SELECT ppm.user_id AS dimensionId,
+ COALESCE(NULLIF(ppm.user_name, ''), su.nick_name, CONCAT('鐝粍浜哄憳', ppm.user_id)) AS dimensionName,
+ CAST(SUM(IFNULL(qi.quantity, 0)) AS DECIMAL(18,4)) AS totalCount,
+ CAST(SUM(IFNULL(qi.qualified_quantity, 0)) AS DECIMAL(18,4)) AS qualifiedCount,
+ CAST(SUM(IFNULL(qi.unqualified_quantity, 0)) AS DECIMAL(18,4)) AS unqualifiedCount,
+ CAST(SUM(IFNULL(qu.reworkCount, 0)) AS DECIMAL(18,4)) AS reworkCount,
+ CAST(SUM(IFNULL(ppo.scrapCount, 0)) AS DECIMAL(18,4)) AS scrapCount,
+ CAST(IF(SUM(IFNULL(qi.quantity, 0)) = 0, 0,
+ ROUND(SUM(IFNULL(qi.qualified_quantity, 0)) / SUM(IFNULL(qi.quantity, 0)) * 100, 2)) AS DECIMAL(18,2)) AS passRate,
+ CAST(IF(SUM(IFNULL(qi.quantity, 0)) = 0, 0,
+ ROUND(SUM(IFNULL(qu.reworkCount, 0)) / SUM(IFNULL(qi.quantity, 0)) * 100, 2)) AS DECIMAL(18,2)) AS reworkRate,
+ CAST(IF(SUM(IFNULL(qi.quantity, 0)) + SUM(IFNULL(ppo.scrapCount, 0)) = 0, 0,
+ ROUND(SUM(IFNULL(ppo.scrapCount, 0)) / (SUM(IFNULL(qi.quantity, 0)) + SUM(IFNULL(ppo.scrapCount, 0))) * 100, 2)) AS DECIMAL(18,2)) AS scrapRate
+ <include refid="personGroupRateJoin"/>
+ LEFT JOIN sys_user su ON su.user_id = ppm.user_id
+ <include refid="personGroupRateWhere"/>
+ GROUP BY ppm.user_id, COALESCE(NULLIF(ppm.user_name, ''), su.nick_name, CONCAT('鐝粍浜哄憳', ppm.user_id))
+ ORDER BY passRate DESC, totalCount DESC, dimensionId ASC
+ </select>
+
</mapper>
diff --git a/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml b/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
index 2892921..b8015b5 100644
--- a/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
+++ b/src/main/resources/mapper/quality/QualityUnqualifiedMapper.xml
@@ -13,7 +13,10 @@
qu.unit,
qu.quantity,
qu.defective_phenomena,
+ qu.deal_type,
qu.deal_result,
+ qu.repair_work_hour,
+ qu.regenerate_new_order,
qu.photo_urls,
qu.deal_name,
qu.deal_time,
@@ -73,10 +76,13 @@
qu.product_name,
qu.unit,
qu.quantity,
- qu.defective_phenomena,
- qu.deal_result,
- qu.photo_urls,
- qu.deal_name,
+ qu.defective_phenomena,
+ qu.deal_type,
+ qu.deal_result,
+ qu.repair_work_hour,
+ qu.regenerate_new_order,
+ qu.photo_urls,
+ qu.deal_name,
qu.deal_time,
CASE
WHEN qu.model = pm.id THEN pm.model
--
Gitblit v1.9.3