package com.doumee.service.business.impl; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.Utils; import com.doumee.dao.business.CompanyMapper; import com.doumee.dao.business.CompanySolutionMapper; import com.doumee.dao.business.MultifileMapper; import com.doumee.dao.business.SolutionsMapper; import com.doumee.dao.business.join.CompanySolutionJoinMapper; import com.doumee.dao.business.model.*; import com.doumee.dao.system.model.SystemUser; import com.doumee.service.business.CompanySolutionService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.doumee.service.business.third.SignService; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import oshi.driver.linux.Sysfs; import java.util.Date; import java.util.List; import java.util.Objects; /** * 企业可用保险方案关联表Service实现 * @author 江蹄蹄 * @date 2024/01/16 10:03 */ @Service public class CompanySolutionServiceImpl implements CompanySolutionService { @Autowired private CompanySolutionJoinMapper companySolutionJoinMapper; @Autowired private CompanySolutionMapper companySolutionMapper; @Autowired private CompanyMapper companyMapper; @Autowired private MultifileMapper multifileMapper; @Autowired private SolutionsMapper solutionsMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @Autowired private SignService signService; @Override public Integer create(CompanySolution companySolution) { companySolutionMapper.insert(companySolution); return companySolution.getId(); } @Override public void deleteById(Integer id) { companySolutionMapper.deleteById(id); } @Override public void delete(CompanySolution companySolution) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(companySolution); companySolutionMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } companySolutionMapper.deleteBatchIds(ids); } @Override public void updateById(CompanySolution companySolution) { companySolutionMapper.updateById(companySolution); } @Override public void updateByIdInBatch(List companySolutions) { if (CollectionUtils.isEmpty(companySolutions)) { return; } for (CompanySolution companySolution: companySolutions) { this.updateById(companySolution); } } @Override public CompanySolution findById(Integer id) { return companySolutionMapper.selectById(id); } @Override public CompanySolution findOne(CompanySolution companySolution) { QueryWrapper wrapper = new QueryWrapper<>(companySolution); return companySolutionMapper.selectOne(wrapper); } @Override public List findListForCompany(CompanySolution companySolution) { MPJLambdaWrapper csWrapper = new MPJLambdaWrapper<>(); csWrapper.selectAll(CompanySolution.class); csWrapper.selectAs(Solutions::getType,CompanySolution::getSolutionType); csWrapper.selectAs(Solutions::getName,CompanySolution::getSolutionName); csWrapper.selectAs(Company::getName,CompanySolution::getCompanyName); csWrapper.selectAs(SystemUser::getRealname,CompanySolution::getSignUserName); csWrapper.select(" t4.name as shopName "); csWrapper.leftJoin(Solutions.class,Solutions::getId,CompanySolution::getSolutionBaseId); csWrapper.leftJoin(Company.class, Company::getId,CompanySolution::getCompanyId); csWrapper.leftJoin(SystemUser.class, SystemUser::getId,CompanySolution::getSignUserId); csWrapper.leftJoin(" company t4 on t4.id = t.shop_id "); csWrapper.eq(Objects.nonNull(companySolution.getCompanyId()),CompanySolution::getCompanyId,companySolution.getCompanyId()); csWrapper.eq(Objects.nonNull(companySolution.getSolutionId()),CompanySolution::getSolutionBaseId,companySolution.getSolutionId()); csWrapper.eq(CompanySolution::getIsdeleted, Constants.ZERO); csWrapper.eq(Solutions::getIsdeleted, Constants.ZERO); csWrapper.orderByAsc(CompanySolution::getCreateDate); csWrapper.orderByAsc(CompanySolution::getSortnum); List companySolutionList = companySolutionJoinMapper.selectJoinList(CompanySolution.class,csWrapper); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(companySolutionList)){ String url = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+ systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode(); for (CompanySolution c:companySolutionList) { if(StringUtils.isNotBlank(c.getFileSignUrl())){ c.setFileSignUrl(url + c.getFileSignUrl()); } } } return companySolutionList; } @Override public List findList(CompanySolution companySolution) { QueryWrapper wrapper = new QueryWrapper<>(companySolution); return companySolutionMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper queryWrapper = new QueryWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); if (pageWrap.getModel().getId() != null) { queryWrapper.lambda().eq(CompanySolution::getId, pageWrap.getModel().getId()); } if (pageWrap.getModel().getCreator() != null) { queryWrapper.lambda().eq(CompanySolution::getCreator, pageWrap.getModel().getCreator()); } if (pageWrap.getModel().getCreateDate() != null) { queryWrapper.lambda().ge(CompanySolution::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); queryWrapper.lambda().le(CompanySolution::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); } if (pageWrap.getModel().getEditor() != null) { queryWrapper.lambda().eq(CompanySolution::getEditor, pageWrap.getModel().getEditor()); } if (pageWrap.getModel().getEditDate() != null) { queryWrapper.lambda().ge(CompanySolution::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); queryWrapper.lambda().le(CompanySolution::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); } if (pageWrap.getModel().getIsdeleted() != null) { queryWrapper.lambda().eq(CompanySolution::getIsdeleted, pageWrap.getModel().getIsdeleted()); } if (pageWrap.getModel().getRemark() != null) { queryWrapper.lambda().eq(CompanySolution::getRemark, pageWrap.getModel().getRemark()); } if (pageWrap.getModel().getCompanyId() != null) { queryWrapper.lambda().eq(CompanySolution::getCompanyId, pageWrap.getModel().getCompanyId()); } if (pageWrap.getModel().getStatus() != null) { queryWrapper.lambda().eq(CompanySolution::getStatus, pageWrap.getModel().getStatus()); } if (pageWrap.getModel().getSortnum() != null) { queryWrapper.lambda().eq(CompanySolution::getSortnum, pageWrap.getModel().getSortnum()); } if (pageWrap.getModel().getSolutionBaseId() != null) { queryWrapper.lambda().eq(CompanySolution::getSolutionBaseId, pageWrap.getModel().getSolutionBaseId()); } if (pageWrap.getModel().getCanAdd() != null) { queryWrapper.lambda().eq(CompanySolution::getCanAdd, pageWrap.getModel().getCanAdd()); } if (pageWrap.getModel().getCanReduce() != null) { queryWrapper.lambda().eq(CompanySolution::getCanReduce, pageWrap.getModel().getCanReduce()); } for(PageWrap.SortData sortData: pageWrap.getSorts()) { if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { queryWrapper.orderByDesc(sortData.getProperty()); } else { queryWrapper.orderByAsc(sortData.getProperty()); } } return PageData.from(companySolutionMapper.selectPage(page, queryWrapper)); } @Override public long count(CompanySolution companySolution) { QueryWrapper wrapper = new QueryWrapper<>(companySolution); return companySolutionMapper.selectCount(wrapper); } @Override public String getCompanySolutionSignLink(Integer id) { if(id == null ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(CompanySolution.class); queryWrapper.selectAs(Company::getName,CompanySolution::getShopName); queryWrapper.leftJoin(Company.class,Company::getId,CompanySolution::getCompanyId); queryWrapper.eq(CompanySolution::getId,id); queryWrapper.last(" limit 1"); CompanySolution companySolution = companySolutionJoinMapper.selectJoinOne(CompanySolution.class,queryWrapper); if(companySolution == null ||!Constants.equalsInteger(companySolution.getIsdeleted(),Constants.ZERO) ){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } Company company = companyMapper.selectById(companySolution.getCompanyId()); if(Objects.isNull(company)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到企业信息!"); } Solutions solutions = solutionsMapper.selectById(companySolution.getSolutionId()); if(Objects.isNull(solutions)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未查询到关联方案信息!"); } //如果是驳回,只能可驳回已签章状态下的退回申请状态进行操作 if(!Constants.equalsInteger(companySolution.getStatus(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该企业的方案确认书状态已流转,当前不支持该操作~"); } Multifile f = multifileMapper.selectOne(new QueryWrapper().lambda() .eq(Multifile::getObjId,companySolution.getSolutionId()) .eq(Multifile::getObjType,Constants.MultiFile.SOLUTIONS_CONFIRMATION_LATTER.getKey()) .eq(Multifile::getIsdeleted,Constants.ZERO).last("limit 1")); if(f == null || StringUtils.isBlank(f.getFileurl())){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取待签章文件失败,请联系确认签署文件是否正确!"); } String url = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+ systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode()+f.getFileurl(); String notifyUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SIGN_DONE_NOTIFY_URL).getCode(); String applyNo = signService.applySign(solutions.getName(),url,company.getName(),company.getCode(),company.getEmail(),null,company.getSignId(),notifyUrl); if(StringUtils.isBlank(applyNo) ){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取在线签章地址失败,请稍后重试!"); } String link = signService.signLink(applyNo,company.getName(),company.getCode()); if(StringUtils.isBlank(link) ){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"对不起,获取在线签章地址失败,请稍后重试!"); } CompanySolution update= new CompanySolution(); update.setId(companySolution.getId()); update.setEditor(user.getId()); update.setEditDate(new Date()); update.setApplyNo(applyNo); update.setSignStatus(Constants.ZERO); // update.setSignUserId(user.getId()); // update.setSignDate(new Date()); companySolutionJoinMapper.updateById(update); return link; } }