Sfoglia il codice sorgente

1.结算新逻辑调整3.0

wuhp 2 anni fa
parent
commit
a45431585c

+ 6 - 0
src/main/java/com/ydtech/modules/fnc/dto/InsuranceHandlingSettlementMonthDto.java

@@ -23,6 +23,9 @@ public class InsuranceHandlingSettlementMonthDto implements Serializable {
     @ApiModelProperty("结算金额")
     private BigDecimal settlementAmount;
 
+    @ApiModelProperty("结算金额(表中)")
+    private BigDecimal insuraSettlementAmount;
+
     @ApiModelProperty("开票金额")
     private BigDecimal totalAmount;
 
@@ -49,4 +52,7 @@ public class InsuranceHandlingSettlementMonthDto implements Serializable {
 
     @ApiModelProperty("是否手续费")
     private String isNotDocumentary;
+
+    @ApiModelProperty("是否非车")
+    private String isNotCar;
 }

+ 4 - 0
src/main/java/com/ydtech/modules/fnc/entity/InsuranceHandlingSettlementMonthEntity.java

@@ -67,4 +67,8 @@ public class InsuranceHandlingSettlementMonthEntity implements Serializable {
     @ApiModelProperty("签单日期")
     @TableField(exist = false)
     private String incomeSigningTime;
+
+    @ApiModelProperty("是否非车")
+    @TableField("is_not_car")
+    private String isNotCar;
 }

+ 3 - 0
src/main/java/com/ydtech/modules/fnc/service/InsuranceHandlingSettlementMonthService.java

@@ -28,4 +28,7 @@ public interface InsuranceHandlingSettlementMonthService  extends IService<Insur
      */
     HttpResult<InsuranceHandlingSettlementMonthDto> insertByEntity(InsuranceHandlingSettlementMonthEntity insuranceHandlingSettlementMonthVo);
 
+    List<InsuranceHandlingSettlementMonthDto> getQueryLists(InsuranceHandlingSettlementMonthVo insuranceHandlingSettlementMonthVo);
+
+
 }

+ 50 - 31
src/main/java/com/ydtech/modules/fnc/service/impl/InsPlyIncomeServiceImpl.java

@@ -78,6 +78,7 @@ import java.time.LocalTime;
 import java.time.YearMonth;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.function.BinaryOperator;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -2073,37 +2074,6 @@ public class InsPlyIncomeServiceImpl extends ServiceImpl<InsPlyIncomeMapper, Ins
                 }
             }
         }
-//      分批结算
-        List<InsuranceHandlingSettlementMonthEntity> insuranceHandlingList = insPlyIncomeVo.getInsuranceHandlingList();
-        BigDecimal allsettlementAmount = BigDecimal.ZERO;
-        for(InsuranceHandlingSettlementMonthEntity item :  insuranceHandlingList){
-            String incomeSigningTime = item.getIncomeSigningTime();
-
-            DateTimeFormatter yearMonthFormatter = DateTimeFormatter.ofPattern("yyyy-MM");
-
-            // 尝试解析为LocalDate(这里实际上解析为YearMonth,但使用LocalDate的parse方法,因为它会接受只有年和月的TemporalQuery)
-            // 注意:这里直接解析为LocalDate可能会引发异常,因为DateTimeFormatter应该与要解析的Temporal类型精确匹配。
-            // 但由于Java的灵活性,以及默认行为(假设日为1),这通常可以工作。
-            LocalDate date = YearMonth.parse(incomeSigningTime, yearMonthFormatter).atDay(1);
-
-            // 将LocalDate转换为LocalDateTime,时间为00:00:00
-            LocalDateTime localDateTime = date.atStartOfDay();
-
-
-            BigDecimal totalAmount = item.getTotalAmount();  //开票金额
-            BigDecimal settlementAmount = item.getSettlementAmount();  //结算金额
-
-            if(settlementAmount.compareTo(BigDecimal.ZERO) > 0){
-                allsettlementAmount =    this.calculateTotal(settlementAmount,allsettlementAmount,null);
-                BigDecimal subtract = totalAmount.subtract(settlementAmount);
-                item.setRemainingAmount(subtract);
-                item.setCreateTime(LocalDateTime.now());
-                item.setPartnerCompaniesId(insPlyIncomeVo.getPartnerCompaniesId());
-                item.setSigningTime(localDateTime);
-                item.setTotalAmount(item.getRemainingAmount());
-            }
-        }
-        insuranceHandlingSettlementMonthService.saveBatch(insuranceHandlingList);
 
         SettlementDocumentaryFeesVo settlementDocumentaryFeesVo = new SettlementDocumentaryFeesVo();
         settlementDocumentaryFeesVo.setInvoiceId(insPlyIncomeVo.getInvoicId());   //开票号
@@ -2139,6 +2109,55 @@ public class InsPlyIncomeServiceImpl extends ServiceImpl<InsPlyIncomeMapper, Ins
 
         settlementDocumentaryFeesService.inertSettle(settlementDocumentaryFeesVo);
 
+
+
+        List<InsuranceHandlingSettlementMonthEntity> insuranceHandlingList = insPlyIncomeVo.getInsuranceHandlingList();
+
+
+
+
+//        判断是否是第一次结算
+        InsuranceHandlingSettlementMonthVo insuranceHandlingSettlementMonthVo = new InsuranceHandlingSettlementMonthVo();
+        insuranceHandlingSettlementMonthVo.setPartnerCompaniesId(insPlyIncomeVo.getPartnerCompaniesId());
+        insuranceHandlingSettlementMonthVo.setTaskId(insPlyIncomeVo.getTaskId());
+
+        List<InsuranceHandlingSettlementMonthDto> insuranceHandlingSettlementMonthDtos = insuranceHandlingSettlementMonthService.getQueryLists(insuranceHandlingSettlementMonthVo);
+
+
+//      分批结算
+        BigDecimal allsettlementAmount = BigDecimal.ZERO;
+        for(InsuranceHandlingSettlementMonthEntity item :  insuranceHandlingList){
+            String incomeSigningTime = item.getIncomeSigningTime();
+
+            DateTimeFormatter yearMonthFormatter = DateTimeFormatter.ofPattern("yyyy-MM");
+
+            // 尝试解析为LocalDate(这里实际上解析为YearMonth,但使用LocalDate的parse方法,因为它会接受只有年和月的TemporalQuery)
+            // 注意:这里直接解析为LocalDate可能会引发异常,因为DateTimeFormatter应该与要解析的Temporal类型精确匹配。
+            // 但由于Java的灵活性,以及默认行为(假设日为1),这通常可以工作。
+            LocalDate date = YearMonth.parse(incomeSigningTime, yearMonthFormatter).atDay(1);
+
+            // 将LocalDate转换为LocalDateTime,时间为00:00:00
+            LocalDateTime localDateTime = date.atStartOfDay();
+            item.setIsNotCar(insPlyIncomeVo.getIsNotCar());
+
+            BigDecimal totalAmount = item.getRemainingAmount();  //开票金额
+            BigDecimal settlementAmount = item.getSettlementAmount();  //结算金额
+            if(settlementAmount.compareTo(BigDecimal.ZERO) > 0){
+                allsettlementAmount = this.calculateTotal(settlementAmount,allsettlementAmount,null);
+                BigDecimal subtract1 = totalAmount.subtract(settlementAmount);
+                item.setRemainingAmount(subtract1);
+                item.setCreateTime(LocalDateTime.now());
+                item.setPartnerCompaniesId(insPlyIncomeVo.getPartnerCompaniesId());
+                item.setSigningTime(localDateTime);
+                item.setSettlementDocumentaryFeesId(byIdSettlementDocumentaryFeesEntity.getId());
+            }
+        }
+        if(insuranceHandlingSettlementMonthDtos.size()>0){
+            insuranceHandlingSettlementMonthService.updateBatchById(insuranceHandlingList);
+        }else{
+            insuranceHandlingSettlementMonthService.saveBatch(insuranceHandlingList);
+        }
+
         return HttpResult.ok();
     }
 

+ 48 - 29
src/main/java/com/ydtech/modules/fnc/service/impl/InsuranceHandlingSettlementMonthServiceImpl.java

@@ -9,6 +9,7 @@ import com.ydtech.modules.fnc.entity.InsuranceHandlingSettlementMonthEntity;
 import com.ydtech.modules.fnc.service.InsPlyIncomeService;
 import com.ydtech.modules.fnc.service.InsuranceHandlingSettlementMonthService;
 import com.ydtech.modules.fnc.vo.InsuranceHandlingSettlementMonthVo;
+import com.ydtech.utils.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -17,9 +18,9 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.util.ObjectUtils;
 
 import java.math.BigDecimal;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
 import java.util.function.BinaryOperator;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -40,45 +41,57 @@ public class InsuranceHandlingSettlementMonthServiceImpl extends ServiceImpl<Ins
 
     @Override
     public List<InsuranceHandlingSettlementMonthDto> queryList(InsuranceHandlingSettlementMonthVo insuranceHandlingSettlementMonthVo) {
-        List<InsuranceHandlingSettlementMonthDto> incomeList = insPlyIncomeService.getInvociAmount(insuranceHandlingSettlementMonthVo);
         List<InsuranceHandlingSettlementMonthDto> resultList = baseMapper.queryList(insuranceHandlingSettlementMonthVo);
-        if (!resultList.isEmpty()) {
-            Map<String, InsuranceHandlingSettlementMonthDto> latestByTaskId = resultList.stream()
+        if (resultList.size() > 0) {
+            return resultList;
+        } else {
+            List<InsuranceHandlingSettlementMonthDto> invociAmount = insPlyIncomeService.getInvociAmount(insuranceHandlingSettlementMonthVo);
+
+            Map<String, InsuranceHandlingSettlementMonthDto> latestByTaskId = invociAmount.stream()
                     .collect(Collectors.toMap(
                             InsuranceHandlingSettlementMonthDto::getIncomeSigningTime, // 用于生成Map的键
                             Function.identity(),// 值是Stream中的元素本身
                             // 如果两个元素有相同的key(即相同的taskId),则选择createTime更晚的那个
                             BinaryOperator.maxBy(Comparator.comparing(InsuranceHandlingSettlementMonthDto::getCreateTime))
                     ));
+            for (InsuranceHandlingSettlementMonthDto item : invociAmount) {
+                if (item.getTotalAmount() != null && item.getTotalAmount().compareTo(BigDecimal.ZERO) < 0) {
+                    String formattedDateString = formatDateMinusOneMonth(item.getIncomeSigningTime());
+                    if (StringUtils.isNotEmpty(formattedDateString)) {
+                        InsuranceHandlingSettlementMonthDto insuranceHandlingSettlementMonthDto = latestByTaskId.get(formattedDateString);
+                        insuranceHandlingSettlementMonthDto.setTotalAmount(insuranceHandlingSettlementMonthDto.getTotalAmount().add(item.getTotalAmount()));
+                        latestByTaskId.remove(item.getIncomeSigningTime());
+                        latestByTaskId.put(formattedDateString, insuranceHandlingSettlementMonthDto);
 
-            for (InsuranceHandlingSettlementMonthDto   incomeItem   : incomeList){
-                String incomeSigningTime = incomeItem.getIncomeSigningTime();
-                InsuranceHandlingSettlementMonthDto insuranceHandlingSettlementMonthDto = latestByTaskId.get(incomeSigningTime);
-                if(ObjectUtils.isEmpty(insuranceHandlingSettlementMonthDto)){
-                    incomeItem.setRemainingAmount(incomeItem.getTotalAmount());
-                    incomeItem.setTotalAmount(incomeItem.getTotalAmount());
-                }else {
-                    incomeItem.setRemainingAmount(insuranceHandlingSettlementMonthDto.getRemainingAmount());
-                    incomeItem.setTotalAmount(insuranceHandlingSettlementMonthDto.getTotalAmount());
-                }
-                incomeItem.setCreateTime(null);
-
-                if( incomeItem.getSettlementAmount() ==null || incomeItem.getSettlementAmount().compareTo(BigDecimal.ZERO)==0){
-                    incomeItem.setSettlementAmount(new BigDecimal("0.00"));
-
+                    }
                 }
             }
-        }else {
-            for (InsuranceHandlingSettlementMonthDto   incomeItem   : incomeList){
-                    incomeItem.setRemainingAmount(incomeItem.getTotalAmount());
+            List<InsuranceHandlingSettlementMonthDto> list = new ArrayList<>(latestByTaskId.values());
+            list.stream().forEach(item -> {
+                if (item.getRemainingAmount() == null || item.getRemainingAmount().compareTo(BigDecimal.ZERO) == 0) {
+                    item.setRemainingAmount(item.getTotalAmount());
+                }
+            });
+            return list;
+        }
+    }
 
-                if( incomeItem.getSettlementAmount() ==null || incomeItem.getSettlementAmount().compareTo(BigDecimal.ZERO)==0){
-                    incomeItem.setSettlementAmount(new BigDecimal("0.00"));
+    public static String formatDateMinusOneMonth(String originalDateString) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+        try {
+            Date date = sdf.parse(originalDateString);
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(date);
+            calendar.add(Calendar.MONTH, -1); // 月份减一
 
-                }
-            }
+            // 注意:如果原始月份是1月,这里将变成12月,而不是0或1
+            // 如果你需要特别处理这种情况(比如保持为1月或循环到前一年的12月),你需要添加逻辑来检查
+
+            return sdf.format(calendar.getTime());
+        } catch (ParseException e) {
+            e.printStackTrace();
+            return null; // 或者返回原始字符串,或者抛出一个自定义异常
         }
-        return incomeList;
     }
 
     /**
@@ -92,4 +105,10 @@ public class InsuranceHandlingSettlementMonthServiceImpl extends ServiceImpl<Ins
         baseMapper.insert(insuranceHandlingSettlementMonthVo);
         return HttpResult.ok("结算成功");
     }
+
+    @Override
+    public List<InsuranceHandlingSettlementMonthDto> getQueryLists(InsuranceHandlingSettlementMonthVo insuranceHandlingSettlementMonthVo) {
+        List<InsuranceHandlingSettlementMonthDto> resultList = baseMapper.queryList(insuranceHandlingSettlementMonthVo);
+        return resultList;
+    }
 }

+ 1 - 1
src/main/resources/mapper/modules/insuranceHandlingSettlementMonth/InsuranceHandlingSettlementMonthMapper.xml

@@ -7,7 +7,7 @@
                 a.task_id  as  "taskId",
                 a.settlement_documentary_fees_id  as  "settlementDocumentaryFeesId",
                 a.partner_companies_id  as  "partnerCompaniesId",
-                IFNULL(a.settlement_amount,0)  as  "settlementAmount",
+                IFNULL(a.settlement_amount,0)  as  "insuraSettlementAmount",
                 a.total_amount  as  "totalAmount",
                 a.remaining_amount  as  "remainingAmount",
                 a.create_time  as  "createTime",