Browse Source

修改
1、日常费用导入如果存在有失败的记录,那么全部数据导入不成功
2、批量生成账单,遇到离住长者账单生成时不再终止批量生成

liangwenxuan 1 week ago
parent
commit
dbd3d5a8ae

+ 15 - 4
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/DailyExpensesServiceImpl.java

@@ -24,6 +24,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.validation.annotation.Validated;
 
 import java.math.BigDecimal;
@@ -292,7 +293,7 @@ public class DailyExpensesServiceImpl implements DailyExpensesService {
     public Map<String, Object> importDailyExpensesExcel(List<DailyExpensesExcelVO> list) {
         Date currentTime = new Date();
         List<DailyExpensesExcelVO> errorList = new ArrayList<>();
-        int successCount = 0;
+        int validCount = 0;
 
         for (DailyExpensesExcelVO excelVO : list) {
             try {
@@ -338,7 +339,7 @@ public class DailyExpensesServiceImpl implements DailyExpensesService {
                     }
                 }
 
-                successCount++;
+                validCount++;
             } catch (Exception e) {
                 log.error("导入异常: " + excelVO.getElderName(), e);
                 excelVO.setErrorMsg("导入异常: " + e.getMessage());
@@ -346,9 +347,19 @@ public class DailyExpensesServiceImpl implements DailyExpensesService {
             }
         }
 
+        boolean rollback = CollectionUtil.isNotEmpty(errorList);
+        if (rollback) {
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+        }
+
         Map<String, Object> result = new HashMap<>();
-        result.put("successCount", successCount);
+        result.put("successCount", rollback ? 0 : validCount);
+        result.put("validCount", validCount);
         result.put("failCount", errorList.size());
+        result.put("rollback", rollback);
+        if (rollback) {
+            result.put("message", "存在失败记录,已回滚,本次未写入数据");
+        }
         result.put("errorList", errorList);
         return result;
     }
@@ -714,4 +725,4 @@ public class DailyExpensesServiceImpl implements DailyExpensesService {
             refundSettlementOrderMapper.updateById(refundSettlementOrderDO);
         }
     }
-}
+}

+ 29 - 15
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ExpenseOrderServiceImpl.java

@@ -2134,6 +2134,7 @@ public class ExpenseOrderServiceImpl implements ExpenseOrderService {
 //    }
 
     @Override
+    @Transactional
     public void batchGenerateExpenseBill(ExpenseOrderSaveVO saveVO, String taskId) {
         Long tenantId = saveVO.getTenantId();
         String billingMonth = saveVO.getBillingMonth();
@@ -2308,27 +2309,40 @@ public class ExpenseOrderServiceImpl implements ExpenseOrderService {
 
             // 账单不存在
             if (expenseOrder == null) {
-                handleNewExpenseOrder(elderlyInfo, elderId, tenantId, billingMonth, billYearMonth, expireYearMonth, expireTime);
-                if (!checkContractNearlyExpire(elderId, billingMonth)) {
+                try{
+                    handleNewExpenseOrder(elderlyInfo, elderId, tenantId, billingMonth, billYearMonth, expireYearMonth, expireTime);
+                    if (!checkContractNearlyExpire(elderId, billingMonth)) {
+                        if (taskId != null) {
+                            taskStatusManager.addProcessDetail(taskId, elderlyInfo.getId(), elderlyInfo.getElderName(), "CONFIRM", "合同即将过期,请确认");
+                        }
+                        continue;
+                    }
                     if (taskId != null) {
-                        taskStatusManager.addProcessDetail(taskId, elderlyInfo.getId(), elderlyInfo.getElderName(), "CONFIRM", "合同即将过期,请确认");
+                        taskStatusManager.addProcessDetail(taskId, elderlyInfo.getId(), elderlyInfo.getElderName(), "SUCCESS", "新账单生成成功");
+                    }
+                }catch (Exception e){
+                    if (taskId != null) {
+                        taskStatusManager.addProcessDetail(taskId, elderlyInfo.getId(), elderlyInfo.getElderName(), "SKIPPED", e.getMessage());
                     }
-                    continue;
-                }
-                if (taskId != null) {
-                    taskStatusManager.addProcessDetail(taskId, elderlyInfo.getId(), elderlyInfo.getElderName(), "SUCCESS", "新账单生成成功");
                 }
+
             } else {
-                // 账单存在,添加未缴费的日常费用
-                handleExistingExpenseOrder(expenseOrder, elderId, tenantId, billingMonth, true);
-                if (!checkContractNearlyExpire(elderId, billingMonth)) {
+                try{
+                    // 账单存在,添加未缴费的日常费用
+                    handleExistingExpenseOrder(expenseOrder, elderId, tenantId, billingMonth, true);
+                    if (!checkContractNearlyExpire(elderId, billingMonth)) {
+                        if (taskId != null) {
+                            taskStatusManager.addProcessDetail(taskId, elderlyInfo.getId(), elderlyInfo.getElderName(), "CONFIRM", "合同即将过期,请确认");
+                        }
+                        continue;
+                    }
                     if (taskId != null) {
-                        taskStatusManager.addProcessDetail(taskId, elderlyInfo.getId(), elderlyInfo.getElderName(), "CONFIRM", "合同即将过期,请确认");
+                        taskStatusManager.addProcessDetail(taskId, elderlyInfo.getId(), elderlyInfo.getElderName(), "SUCCESS", "现有账单更新成功");
+                    }
+                }catch (Exception e){
+                    if (taskId != null) {
+                        taskStatusManager.addProcessDetail(taskId, elderlyInfo.getId(), elderlyInfo.getElderName(), "SKIPPED", e.getMessage());
                     }
-                    continue;
-                }
-                if (taskId != null) {
-                    taskStatusManager.addProcessDetail(taskId, elderlyInfo.getId(), elderlyInfo.getElderName(), "SUCCESS", "现有账单更新成功");
                 }
             }
         }