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/service/impl/ProductionAccountServiceImpl.java |  107 +++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 82 insertions(+), 25 deletions(-)

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 cd9e476..2b6cb27 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionAccountServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionAccountServiceImpl.java
@@ -33,6 +33,8 @@
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeParseException;
+import java.util.Arrays;
 import java.util.List;
 
 @Service
@@ -62,9 +64,6 @@
         if (queryDto.getAuditStatus() == null) {
             queryDto.setAuditStatus(1);
         }
-        if (queryDto.getReportType() == null) {
-            queryDto.setReportType(0);
-        }
         return productionProductMainMapper.listProductionDetails(queryDto, page);
     }
 
@@ -74,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());
         }
@@ -100,26 +99,60 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean singleAdjust(ProductionAccountDto dto) {
-        if (dto == null || dto.getSchedulingUserId() == null) {
+        if (dto == null || (dto.getProductionProductMainId() == null && dto.getSchedulingUserId() == null)) {
             throw new ServiceException("璇烽�夋嫨闇�瑕佷慨姝g殑浜哄憳");
         }
         BigDecimal adjustAmount = dto.getAdjustAmount();
         if (adjustAmount == null || adjustAmount.compareTo(BigDecimal.ZERO) == 0) {
             throw new ServiceException("淇閲戦涓嶈兘涓虹┖");
         }
-        ProductionAccount account = new ProductionAccount();
-        account.setSchedulingUserId(dto.getSchedulingUserId());
-        account.setSchedulingUserName(dto.getSchedulingUserName());
-        account.setTechnologyOperationName("宸ヨ祫淇");
-        account.setAdjustAmount(adjustAmount);
-        account.setAdjustRemark(dto.getAdjustRemark());
-        account.setAdjustUser(dto.getAdjustUser());
-        account.setAdjustTime(LocalDateTime.now());
-        account.setSchedulingDate(LocalDateTime.now());
-        account.setWorkHours(BigDecimal.ZERO);
-        account.setFinishedNum(BigDecimal.ZERO);
-        account.setAccountingBatchNo("ADJ-" + LocalDate.now());
-        baseMapper.insert(account);
+        if (dto.getProductionProductMainId() != null) {
+            ProductionAccount account = new ProductionAccount();
+            account.setAdjustAmount(adjustAmount);
+            account.setAdjustRemark(dto.getAdjustRemark());
+            account.setAdjustUser(dto.getAdjustUser());
+            account.setAdjustTime(LocalDateTime.now());
+            baseMapper.update(account, new LambdaQueryWrapper<ProductionAccount>()
+                    .eq(ProductionAccount::getProductionProductMainId, dto.getProductionProductMainId()));
+        } else {
+            ProductionAccount account = new ProductionAccount();
+            account.setSchedulingUserId(dto.getSchedulingUserId());
+            account.setSchedulingUserName(dto.getSchedulingUserName());
+            account.setTechnologyOperationName("宸ヨ祫淇");
+            account.setAdjustAmount(adjustAmount);
+            account.setAdjustRemark(dto.getAdjustRemark());
+            account.setAdjustUser(dto.getAdjustUser());
+            account.setAdjustTime(LocalDateTime.now());
+            account.setSchedulingDate(LocalDateTime.now());
+            account.setWorkHours(BigDecimal.ZERO);
+            account.setFinishedNum(BigDecimal.ZERO);
+            account.setAccountingBatchNo("ADJ-" + LocalDate.now());
+            baseMapper.insert(account);
+        }
+        return Boolean.TRUE;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean rebuildByProductionProductMainId(Long productionProductMainId) {
+        if (productionProductMainId == null) {
+            return Boolean.FALSE;
+        }
+        ProductionProductMain productionProductMain = productionProductMainMapper.selectById(productionProductMainId);
+        if (productionProductMain == null) {
+            return Boolean.FALSE;
+        }
+        if (productionProductMain.getAuditStatus() == null || productionProductMain.getAuditStatus() != 1) {
+            productionAccountDelete(productionProductMainId);
+            return Boolean.FALSE;
+        }
+        if (productionProductMain.getReportType() == null
+                || (!Integer.valueOf(0).equals(productionProductMain.getReportType())
+                && !Integer.valueOf(1).equals(productionProductMain.getReportType()))) {
+            productionAccountDelete(productionProductMainId);
+            return Boolean.FALSE;
+        }
+        rebuildAccount(productionProductMain);
         return Boolean.TRUE;
     }
 
@@ -127,6 +160,14 @@
         if (productionProductMain == null || productionProductMain.getId() == null) {
             return;
         }
+        ProductionAccount existedAccount = baseMapper.selectOne(Wrappers.<ProductionAccount>lambdaQuery()
+                .eq(ProductionAccount::getProductionProductMainId, productionProductMain.getId())
+                .last("limit 1"));
+        BigDecimal existedAdjustAmount = existedAccount == null ? null : existedAccount.getAdjustAmount();
+        String existedAdjustRemark = existedAccount == null ? null : existedAccount.getAdjustRemark();
+        Long existedAdjustUser = existedAccount == null ? null : existedAccount.getAdjustUser();
+        LocalDateTime existedAdjustTime = existedAccount == null ? null : existedAccount.getAdjustTime();
+
         productionAccountDelete(productionProductMain.getId());
         ProductionProductOutput output = productionProductOutputMapper.selectOne(
                 Wrappers.<ProductionProductOutput>lambdaQuery()
@@ -157,6 +198,10 @@
         account.setTechnologyOperationName(technologyOperation == null ? null : technologyOperation.getName());
         account.setSchedulingDate(LocalDateTime.now());
         account.setAccountingBatchNo("BATCH-" + LocalDate.now());
+        account.setAdjustAmount(existedAdjustAmount);
+        account.setAdjustRemark(existedAdjustRemark);
+        account.setAdjustUser(existedAdjustUser);
+        account.setAdjustTime(existedAdjustTime);
         baseMapper.insert(account);
     }
 
@@ -173,22 +218,23 @@
         if (dto == null) {
             return new ProductionAccountDto();
         }
-        LocalDate[] dateRange = dto.getDateRange();
         if ((dto.getEntryDateStart() == null || dto.getEntryDateEnd() == null)
-                && dateRange != null
-                && dateRange.length > 0) {
+                && dto.getDateRange() != null
+                && dto.getDateRange().length > 0) {
+            LocalDate rangeStart = parseDate(dto.getDateRange()[0]);
+            LocalDate rangeEnd = dto.getDateRange().length > 1 ? parseDate(dto.getDateRange()[1]) : rangeStart;
             if (dto.getEntryDateStart() == null) {
-                dto.setEntryDateStart(dateRange[0]);
+                dto.setEntryDateStart(rangeStart);
             }
             if (dto.getEntryDateEnd() == null) {
-                dto.setEntryDateEnd(dateRange.length > 1 ? dateRange[1] : dateRange[0]);
+                dto.setEntryDateEnd(rangeEnd);
             }
         }
 
         String dateType = dto.getDateType();
         if ("day".equalsIgnoreCase(dateType)) {
-            if (dto.getEntryDate() == null && dateRange != null && dateRange.length > 0) {
-                dto.setEntryDate(dateRange[0]);
+            if (dto.getEntryDate() == null && dto.getDateRange() != null && dto.getDateRange().length > 0) {
+                dto.setEntryDate(parseDate(dto.getDateRange()[0]));
             }
             if (dto.getEntryDate() == null) {
                 dto.setEntryDate(dto.getEntryDateStart());
@@ -206,4 +252,15 @@
         return dto;
     }
 
+    private LocalDate parseDate(String dateValue) {
+        if (dateValue == null || dateValue.isEmpty()) {
+            return null;
+        }
+        try {
+            return LocalDate.parse(dateValue);
+        } catch (DateTimeParseException e) {
+            throw new ServiceException("鏃ユ湡鏍煎紡閿欒锛岃浣跨敤 yyyy-MM-dd");
+        }
+    }
+
 }

--
Gitblit v1.9.3