InsuranceHandlingSettlementMonthServiceImpl.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package com.ydtech.modules.fnc.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import com.ydtech.core.page.HttpResult;
  4. import com.ydtech.modules.fnc.dao.InsuranceHandlingSettlementMonthMapper;
  5. import com.ydtech.modules.fnc.dto.InsuranceHandlingSettlementMonthDto;
  6. import com.ydtech.modules.fnc.entity.InsPlyIncome;
  7. import com.ydtech.modules.fnc.entity.InsuranceHandlingSettlementMonthEntity;
  8. import com.ydtech.modules.fnc.service.InsPlyIncomeService;
  9. import com.ydtech.modules.fnc.service.InsuranceHandlingSettlementMonthService;
  10. import com.ydtech.modules.fnc.vo.InsuranceHandlingSettlementMonthVo;
  11. import com.ydtech.utils.StringUtils;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.springframework.beans.BeanUtils;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import org.springframework.util.CollectionUtils;
  17. import org.springframework.util.ObjectUtils;
  18. import java.math.BigDecimal;
  19. import java.text.ParseException;
  20. import java.text.SimpleDateFormat;
  21. import java.util.*;
  22. import java.util.function.BinaryOperator;
  23. import java.util.function.Function;
  24. import java.util.stream.Collectors;
  25. /**
  26. * <p>
  27. * 保险手续费结算关联表
  28. * </p>
  29. *
  30. * @author whp
  31. * @since 2024-08-16
  32. */
  33. @Slf4j
  34. @Service
  35. public class InsuranceHandlingSettlementMonthServiceImpl extends ServiceImpl<InsuranceHandlingSettlementMonthMapper, InsuranceHandlingSettlementMonthEntity> implements InsuranceHandlingSettlementMonthService {
  36. @Autowired
  37. private InsPlyIncomeService insPlyIncomeService;
  38. @Override
  39. public List<InsuranceHandlingSettlementMonthDto> queryList(InsuranceHandlingSettlementMonthVo insuranceHandlingSettlementMonthVo) {
  40. List<InsuranceHandlingSettlementMonthDto> resultList = baseMapper.queryList(insuranceHandlingSettlementMonthVo);
  41. if (resultList.size() > 0) {
  42. return resultList;
  43. } else {
  44. List<InsuranceHandlingSettlementMonthDto> invociAmount = insPlyIncomeService.getInvociAmount(insuranceHandlingSettlementMonthVo);
  45. Map<String, InsuranceHandlingSettlementMonthDto> latestByTaskId = invociAmount.stream()
  46. .collect(Collectors.toMap(
  47. InsuranceHandlingSettlementMonthDto::getIncomeSigningTime, // 用于生成Map的键
  48. Function.identity(),// 值是Stream中的元素本身
  49. // 如果两个元素有相同的key(即相同的taskId),则选择createTime更晚的那个
  50. BinaryOperator.maxBy(Comparator.comparing(InsuranceHandlingSettlementMonthDto::getCreateTime))
  51. ));
  52. for (InsuranceHandlingSettlementMonthDto item : invociAmount) {
  53. if (item.getTotalAmount() != null && item.getTotalAmount().compareTo(BigDecimal.ZERO) < 0) {
  54. String formattedDateString = formatDateMinusOneMonth(item.getIncomeSigningTime());
  55. if (StringUtils.isNotEmpty(formattedDateString)) {
  56. InsuranceHandlingSettlementMonthDto insuranceHandlingSettlementMonthDto = latestByTaskId.get(formattedDateString);
  57. insuranceHandlingSettlementMonthDto.setTotalAmount(insuranceHandlingSettlementMonthDto.getTotalAmount().add(item.getTotalAmount()));
  58. latestByTaskId.remove(item.getIncomeSigningTime());
  59. latestByTaskId.put(formattedDateString, insuranceHandlingSettlementMonthDto);
  60. }
  61. }
  62. }
  63. List<InsuranceHandlingSettlementMonthDto> list = new ArrayList<>(latestByTaskId.values());
  64. list.stream().forEach(item -> {
  65. if (item.getRemainingAmount() == null || item.getRemainingAmount().compareTo(BigDecimal.ZERO) == 0) {
  66. item.setRemainingAmount(item.getTotalAmount());
  67. item.setSettlementAmount(BigDecimal.ZERO);
  68. }
  69. });
  70. return list;
  71. }
  72. }
  73. public static String formatDateMinusOneMonth(String originalDateString) {
  74. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
  75. try {
  76. Date date = sdf.parse(originalDateString);
  77. Calendar calendar = Calendar.getInstance();
  78. calendar.setTime(date);
  79. calendar.add(Calendar.MONTH, -1); // 月份减一
  80. // 注意:如果原始月份是1月,这里将变成12月,而不是0或1
  81. // 如果你需要特别处理这种情况(比如保持为1月或循环到前一年的12月),你需要添加逻辑来检查
  82. return sdf.format(calendar.getTime());
  83. } catch (ParseException e) {
  84. e.printStackTrace();
  85. return null; // 或者返回原始字符串,或者抛出一个自定义异常
  86. }
  87. }
  88. /**
  89. * 结算新增
  90. *
  91. * @param insuranceHandlingSettlementMonthVo
  92. * @return
  93. */
  94. @Override
  95. public HttpResult<InsuranceHandlingSettlementMonthDto> insertByEntity(InsuranceHandlingSettlementMonthEntity insuranceHandlingSettlementMonthVo) {
  96. baseMapper.insert(insuranceHandlingSettlementMonthVo);
  97. return HttpResult.ok("结算成功");
  98. }
  99. @Override
  100. public List<InsuranceHandlingSettlementMonthDto> getQueryLists(InsuranceHandlingSettlementMonthVo insuranceHandlingSettlementMonthVo) {
  101. List<InsuranceHandlingSettlementMonthDto> resultList = baseMapper.queryList(insuranceHandlingSettlementMonthVo);
  102. return resultList;
  103. }
  104. /**
  105. *
  106. * @param insuranceHandlingSettlementMonthDto
  107. * @return 返回结算金额 未结算 开票金额
  108. */
  109. @Override
  110. public HashMap<String, BigDecimal> getSumAmount(InsuranceHandlingSettlementMonthDto insuranceHandlingSettlementMonthDto) {
  111. return baseMapper.getSumAmount(insuranceHandlingSettlementMonthDto);
  112. }
  113. }