| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- 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;
- /**
- * <p>
- * 保险手续费结算关联表
- * </p>
- *
- * @author whp
- * @since 2024-08-16
- */
- @Slf4j
- @Service
- public class InsuranceHandlingSettlementMonthServiceImpl extends ServiceImpl<InsuranceHandlingSettlementMonthMapper, InsuranceHandlingSettlementMonthEntity> implements InsuranceHandlingSettlementMonthService {
- @Autowired
- private InsPlyIncomeService insPlyIncomeService;
- @Override
- public List<InsuranceHandlingSettlementMonthDto> queryList(InsuranceHandlingSettlementMonthVo insuranceHandlingSettlementMonthVo) {
- List<InsuranceHandlingSettlementMonthDto> resultList = baseMapper.queryList(insuranceHandlingSettlementMonthVo);
- 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);
- }
- }
- }
- 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());
- 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<InsuranceHandlingSettlementMonthDto> insertByEntity(InsuranceHandlingSettlementMonthEntity insuranceHandlingSettlementMonthVo) {
- baseMapper.insert(insuranceHandlingSettlementMonthVo);
- return HttpResult.ok("结算成功");
- }
- @Override
- public List<InsuranceHandlingSettlementMonthDto> getQueryLists(InsuranceHandlingSettlementMonthVo insuranceHandlingSettlementMonthVo) {
- List<InsuranceHandlingSettlementMonthDto> resultList = baseMapper.queryList(insuranceHandlingSettlementMonthVo);
- return resultList;
- }
- /**
- *
- * @param insuranceHandlingSettlementMonthDto
- * @return 返回结算金额 未结算 开票金额
- */
- @Override
- public HashMap<String, BigDecimal> getSumAmount(InsuranceHandlingSettlementMonthDto insuranceHandlingSettlementMonthDto) {
- return baseMapper.getSumAmount(insuranceHandlingSettlementMonthDto);
- }
- }
|