| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- 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<SysChannelCostMapper, SysChannelCost>
- 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<SysChannelCost> queryPage(Page page, SysChannelCostPageVo sysChannelCostPageVo) {
- LambdaQueryWrapper<SysChannelCost> 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<SysChannelCost> 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<SysChannelCost> 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<SysChannelCost> queryList(SysChannelCostPageVo sysChannelCostPageVo) {
- LambdaQueryWrapper<SysChannelCost> 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<SysChannelCost> list = list(wrapper);
- return list;
- }
- @Override
- public HttpResult exportData(SysChannelCostPageVo sysChannelCostPageVo) {
- List<SysChannelCost> costList = this.queryList(sysChannelCostPageVo);
- AssertionUtils.isFail(costList.size() <= 0,"无数据导出!");
- List<SysChannelCostExportWriteHead> 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<SysChannelCost> costList = this.baseMapper.selectBatchIds(channelSettleVo.getIds());
- if(CollUtil.isEmpty(costList)){
- return false;
- }
- // 查询子订单
- List<String> orderNos = costList.stream().map(SysChannelCost::getOrderNo).collect(Collectors.toList());
- LambdaQueryWrapper<InsAreaCompany> wrapper = new LambdaQueryWrapper<>();
- wrapper.select(InsAreaCompany::getId,InsAreaCompany::getSigningTime,InsAreaCompany::getPayDate)
- .in(InsAreaCompany::getId, orderNos);
- Map<String, InsAreaCompany> 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<SysChannelCostDto> queryStaticPage(SysChannelCostPageVo sysChannelCostPageVo) {
- Page<SysChannelCostDto> page = new Page<>(sysChannelCostPageVo.getPageNum(),
- sysChannelCostPageVo.getPageSize());
- Page<SysChannelCostDto> result = this.baseMapper.queryPage(page, sysChannelCostPageVo);
- return new BasePageResult<>(sysChannelCostPageVo.getPageNum(), page.getSize(), result.getTotal(), page.getPages(),
- result.getRecords());
- }
- @Override
- public void importSettle(List<SysChannelCostExcelReadHead> heads, String voucherNumber) {
- heads.forEach(head -> {
- LambdaQueryWrapper<SysChannelCost> 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<SysChannelCost> 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<String> orderNos = costList.stream().map(SysChannelCost::getOrderNo).collect(Collectors.toList());
- LambdaQueryWrapper<InsAreaCompany> orderWrapper = new LambdaQueryWrapper<>();
- orderWrapper.select(InsAreaCompany::getId,InsAreaCompany::getSigningTime,InsAreaCompany::getPayDate)
- .eq(InsAreaCompany::getId, sysChannelCost.getOrderNo());
- InsAreaCompany insAreaCompany = insAreaCompanyService.getOne(orderWrapper);
- LambdaUpdateWrapper<SysChannelCost> 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);
- }
- }
- });
- }
- }
|