package com.doumee.service.business.impl; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.Utils; import com.doumee.dao.business.*; import com.doumee.dao.business.model.Areas; import com.doumee.dao.business.model.Company; import com.doumee.dao.business.model.Declares; import com.doumee.dao.business.model.Project; import com.doumee.dao.business.model.ProjectSo; import com.doumee.service.business.AreasService; import com.doumee.service.business.ProjectSoService; 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.github.yulichang.wrapper.MPJLambdaWrapper; import java.math.BigDecimal; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** * 项目关联服务机构关联表Service实现 * @author 江蹄蹄 * @date 2023/02/15 08:55 */ @Service public class ProjectSoServiceImpl implements ProjectSoService { @Autowired private ProjectSoMapper projectSoMapper; @Autowired private ProjectSoJoinMapper projectSoJoinMapper; @Autowired private ProjectMapper projectMapper; @Autowired private CompanyMapper companyMapper; @Autowired private AreasService areasService; @Override public Integer create(ProjectSo projectSo) { if(projectSo.getProjectId() == null || projectSo.getCompanyId() == null || projectSo.getType() == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } if(Constants.equalsObject(projectSo.getType(),Constants.ZERO) && Constants.formatBigdecimal(projectSo.getPrice()).compareTo(new BigDecimal(0)) != 1){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } ProjectSo ps = new ProjectSo(); ps.setCompanyId(projectSo.getCompanyId()); ps.setProjectId(projectSo.getProjectId()); ps.setType(projectSo.getType()); ps.setIsdeleted(Constants.ZERO); //配置对象名称 String orgType = Constants.equalsObject(projectSo.getType(),Constants.ONE)? Constants.CompanyType.ZF_SERVICE_COMPANY.getDes():Constants.CompanyType.SERVICE_COMPANYTYPE.getDes(); if(findOne(ps) != null){ throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"对不起,该"+orgType+"配置已关联,无需重复提交!"); } if(projectMapper.selectById(projectSo.getProjectId()) == null){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该项目信息不存在!"); } Company com =companyMapper.selectById(projectSo.getCompanyId()); if( com== null || !Constants.equalsInteger(com.getIsdeleted(),Constants.ZERO) || (Constants.equalsObject(projectSo.getType(),Constants.ZERO) ^ Constants.equalsInteger(com.getType(),Constants.CompanyType.SERVICE_COMPANYTYPE.getValue())) || (Constants.equalsObject(projectSo.getType(),Constants.ONE) ^ Constants.equalsInteger(com.getType(),Constants.CompanyType.ZF_SERVICE_COMPANY.getValue()))){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该"+orgType+"信息不存在!"); } projectSo.setIsdeleted(Constants.ZERO); projectSo.setCreateDate(DateUtil.getCurrentDate()); projectSoMapper.insert(projectSo); return projectSo.getId(); } @Override public List createBatch(ProjectSo projectSo) { if(projectSo.getProjectId() == null || CollectionUtils.isEmpty(projectSo.getCompanyIds()) || projectSo.getType() == null){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } if(Constants.equalsObject(projectSo.getType(),Constants.ZERO) && Constants.formatBigdecimal(projectSo.getPrice()).compareTo(new BigDecimal(0)) != 1){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } List collect = projectSo.getCompanyIds().stream().distinct().collect(Collectors.toList()); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(Company::getIsdeleted,Constants.ZERO) .eq(Company::getType,Constants.CompanyType.ZF_SERVICE_COMPANY.getValue()) .in(Company::getId,collect); List coms =companyMapper.selectList(wrapper); if (CollectionUtils.isEmpty(coms)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该"+projectSo.getCompanyIds()+"信息不存在!"); } long count = coms.stream().filter(s -> Constants.equalsInteger(s.getType(), Constants.CompanyType.ZF_SERVICE_COMPANY.getValue())).count(); if (count == 0){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该"+projectSo.getCompanyIds()+"信息不存在!"); } ProjectSo ps = new ProjectSo(); // ps.setCompanyId(projectSo.getCompanyId()); ps.setProjectId(projectSo.getProjectId()); ps.setType(projectSo.getType()); ps.setIsdeleted(Constants.ZERO); //配置对象名称 String orgType = Constants.equalsObject(projectSo.getType(),Constants.ONE)? Constants.CompanyType.ZF_SERVICE_COMPANY.getDes():Constants.CompanyType.SERVICE_COMPANYTYPE.getDes(); List list = findList(ps); //是否存在已经关联的综合服务单位 if( !CollectionUtils.isEmpty(list) && list.stream().anyMatch(s -> projectSo.getCompanyIds().contains(s.getCompanyId()))){ throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"对不起,该"+orgType+"配置已关联,无需重复提交!"); } if(projectMapper.selectById(projectSo.getProjectId()) == null){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,该项目信息不存在!"); } List collect1 = projectSo.getCompanyIds().stream().map(s -> { ProjectSo insert = new ProjectSo(); insert.setCreator(projectSo.getCreator()); insert.setEditor(projectSo.getCreator()); insert.setType(Constants.ONE); insert.setEditDate(DateUtil.getCurrentDate()); insert.setIsdeleted(Constants.ZERO); insert.setName(projectSo.getName()); insert.setRemark(projectSo.getRemark()); insert.setCompanyId(s); insert.setProjectId(projectSo.getProjectId()); insert.setSortnum(projectSo.getSortnum()); insert.setCreateDate(DateUtil.getCurrentDate()); projectSoMapper.insert(insert); return insert.getId(); }).collect(Collectors.toList()); return collect1; } @Override public void deleteById(Integer id) { projectSoMapper.deleteById(id); } @Override public void delete(ProjectSo projectSo) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(projectSo); projectSoMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } projectSoMapper.deleteBatchIds(ids); } @Override public void updateById(ProjectSo projectSo) { projectSoMapper.updateById(projectSo); } @Override public void updateByPrice(ProjectSo projectSo) { if(projectSo.getId() == null ||Constants.formatBigdecimal(projectSo.getPrice()).compareTo(new BigDecimal(0)) != 1){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } ProjectSo model = findById(projectSo.getId()); if(model == null){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,请求数据不存在!"); } if( Constants.formatBigdecimal(projectSo.getPrice()).compareTo(Constants.formatBigdecimal(model.getPrice())) ==0 ){ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,价格无变化!"); } projectSo.setEditDate(DateUtil.getCurrentDate()); projectSoMapper.updateById(projectSo); } @Override public void updateByIdInBatch(List projectSos) { if (CollectionUtils.isEmpty(projectSos)) { return; } for (ProjectSo projectSo: projectSos) { this.updateById(projectSo); } } @Override public ProjectSo findById(Integer id) { return projectSoMapper.selectById(id); } @Override public ProjectSo findOne(ProjectSo projectSo) { QueryWrapper wrapper = new QueryWrapper<>(projectSo); return projectSoMapper.selectOne(wrapper); } @Override public List findList(ProjectSo projectSo) { QueryWrapper wrapper = new QueryWrapper<>(projectSo); return projectSoMapper.selectList(wrapper); } @Override public PageData findPage(PageWrap pageWrap) { pageWrap.getModel().setIsdeleted(Constants.ZERO); IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); queryWrapper.leftJoin(Company.class,Company::getId,ProjectSo::getCompanyId); queryWrapper.eq(ProjectSo::getProjectId, pageWrap.getModel().getProjectId()); queryWrapper.eq(ProjectSo::getIsdeleted,Constants.ZERO); queryWrapper.eq(Company::getIsdeleted,Constants.ZERO); queryWrapper.selectAll(ProjectSo.class); queryWrapper.selectAs(Company::getName, ProjectSo::getCompanyName); queryWrapper.selectAs(Company::getAreaId, ProjectSo::getCompanyAreaId); queryWrapper.selectAs(Company::getCityId, ProjectSo::getCompanyCityId); queryWrapper.selectAs(Company::getLinkName,ProjectSo::getCompanyLinkName); queryWrapper.selectAs(Company::getLinkPhone,ProjectSo::getCompanyLinkPhone); queryWrapper.eq(ProjectSo::getType,pageWrap.getModel().getType()); if(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName())){ queryWrapper.like(Company::getName,pageWrap.getModel().getCompanyName()); } queryWrapper.orderByDesc(ProjectSo::getCreateDate); IPage result = projectSoJoinMapper.selectJoinPage(page,ProjectSo.class, queryWrapper); if (!CollectionUtils.isEmpty(result.getRecords())){ result.getRecords().forEach(s->{ s.setCompanyBelongAddress(areasService.getAddress(s.getCompanyCityId(),s.getCompanyAreaId())); }); } return PageData.from(result); } @Override public long count(ProjectSo projectSo) { QueryWrapper wrapper = new QueryWrapper<>(projectSo); return projectSoMapper.selectCount(wrapper); } /** * 判断当前服务机构是否属于该项目中的服务机构 * @param declares * @return */ @Override public ProjectSo belongToService(Declares declares,Integer soId) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(ProjectSo.class); queryWrapper.selectAs(Company::getName, ProjectSo::getCompanyName); queryWrapper.leftJoin(Company.class,Company::getId,ProjectSo::getCompanyId); queryWrapper.eq(ProjectSo::getProjectId,declares.getProjectId()); queryWrapper.eq(ProjectSo::getCompanyId,soId); queryWrapper.eq(ProjectSo::getIsdeleted,Constants.ZERO); queryWrapper.eq(ProjectSo::getType,Constants.ZERO); queryWrapper.last(" limit 1"); ProjectSo model=projectSoJoinMapper.selectJoinOne(ProjectSo.class,queryWrapper); return model; /* List list=projectSoJoinMapper.selectJoinList(ProjectSo.class,queryWrapper); for(int i=0;i