package com.ydtech.modules.fnc.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ydtech.core.page.HttpResult; import com.ydtech.modules.fnc.dao.InsuranceHandlingSettlementMonthMapper; import com.ydtech.modules.fnc.dto.InsuranceHandlingSettlementMonthDto; import com.ydtech.modules.fnc.entity.InsPlyIncome; 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; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; import java.math.BigDecimal; 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; /** *

* 保险手续费结算关联表 *

* * @author whp * @since 2024-08-16 */ @Slf4j @Service public class InsuranceHandlingSettlementMonthServiceImpl extends ServiceImpl implements InsuranceHandlingSettlementMonthService { @Autowired private InsPlyIncomeService insPlyIncomeService; @Override public List queryList(InsuranceHandlingSettlementMonthVo insuranceHandlingSettlementMonthVo) { List resultList = baseMapper.queryList(insuranceHandlingSettlementMonthVo); if (resultList.size() > 0) { return resultList; } else { List invociAmount = insPlyIncomeService.getInvociAmount(insuranceHandlingSettlementMonthVo); Map 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); } } } List list = new ArrayList<>(latestByTaskId.values()); list.stream().forEach(item -> { if (item.getRemainingAmount() == null || item.getRemainingAmount().compareTo(BigDecimal.ZERO) == 0) { item.setRemainingAmount(item.getTotalAmount()); item.setSettlementAmount(BigDecimal.ZERO); } }); return list; } } 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; // 或者返回原始字符串,或者抛出一个自定义异常 } } /** * 结算新增 * * @param insuranceHandlingSettlementMonthVo * @return */ @Override public HttpResult insertByEntity(InsuranceHandlingSettlementMonthEntity insuranceHandlingSettlementMonthVo) { baseMapper.insert(insuranceHandlingSettlementMonthVo); return HttpResult.ok("结算成功"); } @Override public List getQueryLists(InsuranceHandlingSettlementMonthVo insuranceHandlingSettlementMonthVo) { List resultList = baseMapper.queryList(insuranceHandlingSettlementMonthVo); return resultList; } /** * * @param insuranceHandlingSettlementMonthDto * @return 返回结算金额 未结算 开票金额 */ @Override public HashMap getSumAmount(InsuranceHandlingSettlementMonthDto insuranceHandlingSettlementMonthDto) { return baseMapper.getSumAmount(insuranceHandlingSettlementMonthDto); } }