package com.ydtech.modules.admin.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ydtech.core.page.HttpResult; import com.ydtech.exception.SystemException; import com.ydtech.modules.admin.constants.UserConstants; import com.ydtech.modules.admin.dao.SysChannelCostMapper; import com.ydtech.modules.admin.model.dto.SysChannelCostDto; import com.ydtech.modules.admin.model.excel.read.SysChannelCostExcelReadHead; import com.ydtech.modules.admin.model.excel.wirte.SysChannelCostExportWriteHead; import com.ydtech.modules.admin.model.po.SysChannelCost; import com.ydtech.modules.admin.model.po.SysCostOperateLog; import com.ydtech.modules.admin.model.vo.ChannelAuditVo; import com.ydtech.modules.admin.model.vo.ChannelSettleVo; import com.ydtech.modules.admin.model.vo.SysChannelCostPageVo; import com.ydtech.modules.admin.service.SysChannelCostService; import com.ydtech.modules.admin.service.SysCostOperateLogService; import com.ydtech.modules.base.controller.BaseController; import com.ydtech.modules.inv.utils.EasyExcelUtils; import com.ydtech.modules.order.entity.BasePageResult; import com.ydtech.modules.order.entity.InsAreaCompany; import com.ydtech.modules.order.service.InsAreaCompanyService; import com.ydtech.modules.protocol.utils.AssertionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.IOException; import java.math.BigDecimal; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.time.LocalDateTime; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; /** * @author dongxin * @description 针对表【sys_channel_cost(分组计算结果表)】的数据库操作Service实现 * @createDate 2024-09-11 10:16:44 */ @Service public class SysChannelCostServiceImpl extends ServiceImpl implements SysChannelCostService { @Value("${upload.file.path}") private String uploadPath; @Value("${upload.file.url}") private String uploadUrl; @Autowired private SysCostOperateLogService sysCostOperateLogService; @Autowired private InsAreaCompanyService insAreaCompanyService; @Override public Page queryPage(Page page, SysChannelCostPageVo sysChannelCostPageVo) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getOrderNo()), SysChannelCost::getOrderNo, sysChannelCostPageVo.getOrderNo()) .eq(SysChannelCost::getStatus, 1) .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getCompanyId()),SysChannelCost::getCompanyId, sysChannelCostPageVo.getCompanyId()) .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getUserName()),SysChannelCost::getUserName, sysChannelCostPageVo.getUserName()) .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getUserId()),SysChannelCost::getUserId, sysChannelCostPageVo.getUserId()) .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getLicenseNo()),SysChannelCost::getLicenseNo, sysChannelCostPageVo.getLicenseNo()) ; Page costPage = page(page, wrapper); return costPage; } @Override public SysChannelCost queryById(Long id) { return getById(id); } @Override public void edit(SysChannelCost sysChannelCost) { SysChannelCost cost = getByIdExist(sysChannelCost.getId(), "查询加投结算信息不存在"); AssertionUtils.isFail(cost.getDeleted().equals(1),"已删除的数据不允许修改"); AssertionUtils.isFail(cost.getStatus().equals(1),"审核通过的数据不允许修改"); if(!StringUtils.isBlank(sysChannelCost.getJqCostsProportion())){ BigDecimal jq = new BigDecimal(sysChannelCost.getJqCostsProportion()); if(jq.compareTo(new BigDecimal("1")) > 0){ throw new SystemException("交强加投比例不能大于1"); } } if(!StringUtils.isBlank(sysChannelCost.getSyCostsProportion())){ BigDecimal sy = new BigDecimal(sysChannelCost.getSyCostsProportion()); if(sy.compareTo(new BigDecimal("1")) > 0){ throw new SystemException("商业加投比例不能大于1"); } } if(!StringUtils.isBlank(sysChannelCost.getNoCostsProportion())){ BigDecimal no = new BigDecimal(sysChannelCost.getNoCostsProportion()); if(no.compareTo(new BigDecimal("1")) > 0){ throw new SystemException("非车加投比例不能大于1"); } } // 重新计算加投金额 BigDecimal jq = cost.getJqPremium().multiply( new BigDecimal(StringUtils.isBlank(sysChannelCost.getJqCostsProportion())? "0":sysChannelCost.getJqCostsProportion())) .setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal sy = cost.getSyPremium().multiply( new BigDecimal(StringUtils.isBlank(sysChannelCost.getSyCostsProportion())? "0":sysChannelCost.getSyCostsProportion())) .setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal no = cost.getJyPremium().multiply( new BigDecimal(StringUtils.isBlank(sysChannelCost.getNoCostsProportion())? "0":sysChannelCost.getNoCostsProportion())) .setScale(2, BigDecimal.ROUND_HALF_UP); LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.set(SysChannelCost::getJqCostsProportion,sysChannelCost.getJqCostsProportion()); updateWrapper.set(SysChannelCost::getSyCostsProportion,sysChannelCost.getSyCostsProportion()); updateWrapper.set(SysChannelCost::getNoCostsProportion,sysChannelCost.getNoCostsProportion()); updateWrapper.set(SysChannelCost::getJqJtPremium,jq); updateWrapper.set(SysChannelCost::getSyJtPremium,sy); updateWrapper.set(SysChannelCost::getJyJtPremium,no); updateWrapper.set(SysChannelCost::getTotalPremium,jq.add(sy).add(no)); updateWrapper.set(SysChannelCost::getUpdateBy,sysChannelCost.getUpdateBy()); updateWrapper.set(SysChannelCost::getUpdateTime,sysChannelCost.getUpdateTime()); updateWrapper.eq(SysChannelCost::getId,sysChannelCost.getId()); this.baseMapper.update(cost, updateWrapper); // 日志新增 SysChannelCost logEntity = new SysChannelCost(); logEntity.setId(sysChannelCost.getId()); logEntity.setJqCostsProportion(sysChannelCost.getJqCostsProportion()); logEntity.setSyCostsProportion(sysChannelCost.getSyCostsProportion()); logEntity.setNoCostsProportion(sysChannelCost.getNoCostsProportion()); logEntity.setJqJtPremium(sysChannelCost.getJqJtPremium()); logEntity.setSyJtPremium(sysChannelCost.getSyJtPremium()); logEntity.setJyJtPremium(sysChannelCost.getJyJtPremium()); SysCostOperateLog sysCostOperateLog = new SysCostOperateLog(); sysCostOperateLog.setOptId(sysChannelCost.getId()); sysCostOperateLog.setOptType(UserConstants.OPT_TYPE_1); sysCostOperateLog.setOptContent(JSON.toJSONString(logEntity)); sysCostOperateLog.setCreateBy(sysChannelCost.getUpdateBy()); sysCostOperateLog.setCreateTime(sysChannelCost.getUpdateTime()); sysCostOperateLogService.save(sysCostOperateLog); } @Override public void delete(Long id) { SysChannelCost sysChannelCost = getByIdExist(id, "查询加投结算信息不存在"); Integer delFlag = sysChannelCost.getDeleted(); Integer i = Objects.equals(UserConstants.NOT_DEL, delFlag) ? UserConstants.NOT_DEL : UserConstants.DEL; boolean b = updateDel(i); sysChannelCost.setDeleted(i); boolean b1 = updateById(sysChannelCost); AssertionUtils.isSucceed(b1 && b, "成功"); } @Override public List queryList(SysChannelCostPageVo sysChannelCostPageVo) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getOrderNo()), SysChannelCost::getOrderNo, sysChannelCostPageVo.getOrderNo()) .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getStatus()),SysChannelCost::getStatus, sysChannelCostPageVo.getStatus()) .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getCompanyId()),SysChannelCost::getCompanyId, sysChannelCostPageVo.getCompanyId()) .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getUserName()),SysChannelCost::getUserName, sysChannelCostPageVo.getUserName()) .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getUserId()),SysChannelCost::getUserId, sysChannelCostPageVo.getUserId()) .eq(!ObjectUtils.isEmpty(sysChannelCostPageVo.getLicenseNo()),SysChannelCost::getLicenseNo, sysChannelCostPageVo.getLicenseNo()) ; List list = list(wrapper); return list; } @Override public HttpResult exportData(SysChannelCostPageVo sysChannelCostPageVo) { List costList = this.queryList(sysChannelCostPageVo); AssertionUtils.isFail(costList.size() <= 0,"无数据导出!"); List headList = new ArrayList<>(); costList.stream().forEach(cost -> { SysChannelCostExportWriteHead head = new SysChannelCostExportWriteHead(); BeanUtils.copyProperties(cost, head); headList.add(head); }); String uploadPath = this.uploadPath + "/excel/"; Path path = Paths.get(uploadPath); if (!Files.exists(path)) { try { Files.createDirectories(path); } catch (IOException e) { e.printStackTrace(); } } String fileName = EasyExcelUtils.downExcel(uploadPath, "加投结算表", SysChannelCostExportWriteHead.class, headList); return HttpResult.ok("", uploadUrl + "excel/" + fileName); } @Override public boolean audit(ChannelAuditVo channelAuditVo) { SysChannelCost sysChannelCost = getByIdExist(channelAuditVo.getId(), "查询加投结算信息不存在"); sysChannelCost.setStatus(channelAuditVo.getIsAudit()); return baseMapper.updateById(sysChannelCost) > 0; } @Override public boolean settle(ChannelSettleVo channelSettleVo) { // 获取子订单信息 List costList = this.baseMapper.selectBatchIds(channelSettleVo.getIds()); if(CollUtil.isEmpty(costList)){ return false; } // 查询子订单 List orderNos = costList.stream().map(SysChannelCost::getOrderNo).collect(Collectors.toList()); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.select(InsAreaCompany::getId,InsAreaCompany::getSigningTime,InsAreaCompany::getPayDate) .in(InsAreaCompany::getId, orderNos); Map orderMap = insAreaCompanyService.list(wrapper).stream() .collect(Collectors.toMap(InsAreaCompany::getId, Function.identity())); for (SysChannelCost sysChannelCost : costList) { if (sysChannelCost.getStatus().equals(0) || sysChannelCost.getSettleStatus().equals(1)) { throw new SystemException("未审核通过的单据和已结算的单据不允许再次上传!"); } sysChannelCost.setSettleStatus(1); // 已经结算状态 sysChannelCost.setVoucherNumber(channelSettleVo.getVoucherNumber()); if(orderMap.containsKey(sysChannelCost.getOrderNo())){ sysChannelCost.setPayDate(orderMap.get(sysChannelCost.getOrderNo()).getPayDate()); sysChannelCost.setSigningTime(orderMap.get(sysChannelCost.getOrderNo()).getSigningTime()); } sysChannelCost.setUpdateTime(LocalDateTime.now()); sysChannelCost.setUpdateBy(BaseController.getUser().getName()); } return updateBatchById(costList); } @Override public BasePageResult queryStaticPage(SysChannelCostPageVo sysChannelCostPageVo) { Page page = new Page<>(sysChannelCostPageVo.getPageNum(), sysChannelCostPageVo.getPageSize()); Page result = this.baseMapper.queryPage(page, sysChannelCostPageVo); return new BasePageResult<>(sysChannelCostPageVo.getPageNum(), page.getSize(), result.getTotal(), page.getPages(), result.getRecords()); } @Override public void importSettle(List heads, String voucherNumber) { heads.forEach(head -> { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SysChannelCost::getStatus,1) .eq(SysChannelCost::getSettleStatus,0) .eq(!StringUtils.isBlank(head.getUserId()),SysChannelCost::getUserId,head.getUserId()) .eq(!StringUtils.isBlank(head.getUserName()),SysChannelCost::getUserName,head.getUserName()); List costList = list(wrapper); if (CollUtil.isNotEmpty(costList)) { for (SysChannelCost sysChannelCost : costList) { sysChannelCost.setJqPolicyNo(StrUtil.nullToEmpty(sysChannelCost.getJqPolicyNo())); sysChannelCost.setSyPolicyNo(StrUtil.nullToEmpty(sysChannelCost.getSyPolicyNo())); sysChannelCost.setNoPolicyNo(StrUtil.nullToEmpty(sysChannelCost.getNoPolicyNo())); sysChannelCost.setJqPremium(Objects.isNull(sysChannelCost.getJqPremium()) ? new BigDecimal(0) : sysChannelCost.getJqPremium()); sysChannelCost.setSyPremium(Objects.isNull(sysChannelCost.getSyPremium()) ? new BigDecimal(0) : sysChannelCost.getSyPremium()); sysChannelCost.setJyPremium(Objects.isNull(sysChannelCost.getJyPremium()) ? new BigDecimal(0) : sysChannelCost.getJyPremium()); sysChannelCost.setTaxAmount(Objects.isNull(sysChannelCost.getTaxAmount()) ? new BigDecimal(0) : sysChannelCost.getTaxAmount()); sysChannelCost.setJqCostsProportion(StringUtils.isBlank(sysChannelCost.getJqCostsProportion()) ? "0" : sysChannelCost.getJqCostsProportion()); sysChannelCost.setSyCostsProportion(StringUtils.isBlank(sysChannelCost.getSyCostsProportion()) ? "0" : sysChannelCost.getSyCostsProportion()); sysChannelCost.setNoCostsProportion(StringUtils.isBlank(sysChannelCost.getNoCostsProportion()) ? "0" : sysChannelCost.getNoCostsProportion()); sysChannelCost.setTotalPremium(Objects.isNull(sysChannelCost.getTotalPremium()) ? new BigDecimal(0) : sysChannelCost.getTotalPremium()); if (!sysChannelCost.getJqPolicyNo().equals(StrUtil.nullToEmpty(head.getJqPolicyNo())) || !sysChannelCost.getSyPolicyNo().equals(StrUtil.nullToEmpty(head.getSyPolicyNo())) || !sysChannelCost.getNoPolicyNo().equals(StrUtil.nullToEmpty(head.getNoPolicyNo())) || sysChannelCost.getJqPremium().compareTo(head.getJqPremium()) != 0 || sysChannelCost.getSyPremium().compareTo(head.getSyPremium()) != 0 || sysChannelCost.getJyPremium().compareTo(head.getJyPremium()) != 0 || sysChannelCost.getTaxAmount().compareTo(head.getTaxAmount()) != 0 || sysChannelCost.getTotalPremium().compareTo(head.getTotalPremium()) != 0 || !sysChannelCost.getJqCostsProportion().equals(head.getJqCostsProportion()) || !sysChannelCost.getSyCostsProportion().equals(head.getSyCostsProportion()) || !sysChannelCost.getNoCostsProportion().equals(head.getNoCostsProportion()) || !sysChannelCost.getLicenseNo().equals(head.getLicenseNo()) ){ continue; } // 查询子订单 List orderNos = costList.stream().map(SysChannelCost::getOrderNo).collect(Collectors.toList()); LambdaQueryWrapper orderWrapper = new LambdaQueryWrapper<>(); orderWrapper.select(InsAreaCompany::getId,InsAreaCompany::getSigningTime,InsAreaCompany::getPayDate) .eq(InsAreaCompany::getId, sysChannelCost.getOrderNo()); InsAreaCompany insAreaCompany = insAreaCompanyService.getOne(orderWrapper); LambdaUpdateWrapper costWrapper = new LambdaUpdateWrapper<>(); costWrapper.eq(SysChannelCost::getId,sysChannelCost.getId()) .set(SysChannelCost::getSettleStatus,1) .set(SysChannelCost::getVoucherNumber,voucherNumber) .set(!Objects.isNull(insAreaCompany.getSigningTime()),SysChannelCost::getSigningTime,insAreaCompany.getSigningTime()) .set(!Objects.isNull(insAreaCompany.getPayDate()),SysChannelCost::getPayDate,insAreaCompany.getPayDate()) .set(SysChannelCost::getUpdateBy,BaseController.getUser().getName()) .set(SysChannelCost::getUpdateTime,LocalDateTime.now()); this.baseMapper.update(sysChannelCost, costWrapper); } } }); } }