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<Integer> 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<Integer> collect = projectSo.getCompanyIds().stream().distinct().collect(Collectors.toList());
|
QueryWrapper<Company> wrapper = new QueryWrapper<>();
|
wrapper.lambda()
|
.eq(Company::getIsdeleted,Constants.ZERO)
|
.eq(Company::getType,Constants.CompanyType.ZF_SERVICE_COMPANY.getValue())
|
.in(Company::getId,collect);
|
List<Company> 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<ProjectSo> 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<Integer> 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<ProjectSo> deleteWrapper = new UpdateWrapper<>(projectSo);
|
projectSoMapper.delete(deleteWrapper);
|
}
|
|
@Override
|
public void deleteByIdInBatch(List<Integer> 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<ProjectSo> 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<ProjectSo> wrapper = new QueryWrapper<>(projectSo);
|
return projectSoMapper.selectOne(wrapper);
|
}
|
|
@Override
|
public List<ProjectSo> findList(ProjectSo projectSo) {
|
QueryWrapper<ProjectSo> wrapper = new QueryWrapper<>(projectSo);
|
return projectSoMapper.selectList(wrapper);
|
}
|
|
@Override
|
public PageData<ProjectSo> findPage(PageWrap<ProjectSo> pageWrap) {
|
pageWrap.getModel().setIsdeleted(Constants.ZERO);
|
IPage<ProjectSo> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
|
MPJLambdaWrapper<ProjectSo> 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<ProjectSo> 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<ProjectSo> wrapper = new QueryWrapper<>(projectSo);
|
return projectSoMapper.selectCount(wrapper);
|
}
|
|
|
/**
|
* 判断当前服务机构是否属于该项目中的服务机构
|
* @param declares
|
* @return
|
*/
|
@Override
|
public ProjectSo belongToService(Declares declares,Integer soId) {
|
|
MPJLambdaWrapper<ProjectSo> 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<ProjectSo> list=projectSoJoinMapper.selectJoinList(ProjectSo.class,queryWrapper);
|
for(int i=0;i<list.size();i++){
|
ProjectSo queryPS=list.get(i);
|
if(Constants.equalsInteger(queryPS.getCompanyId(),soId)){
|
return queryPS;
|
}
|
}
|
return null;*/
|
}
|
}
|