package com.gkhy.assess.system.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gkhy.assess.common.api.CommonPage;
import com.gkhy.assess.common.constant.SuperAccountConstant;
import com.gkhy.assess.common.enums.UserIdentityEnum;
import com.gkhy.assess.common.exception.ApiException;
import com.gkhy.assess.common.utils.PageUtil;
import com.gkhy.assess.system.domain.AssProjectSupplement;
import com.gkhy.assess.system.domain.AssProjectSupplementFile;
import com.gkhy.assess.system.domain.SysAttach;
import com.gkhy.assess.system.domain.SysUser;
import com.gkhy.assess.system.mapper.AssProjectSupplementFileMapper;
import com.gkhy.assess.system.mapper.AssProjectSupplementMapper;
import com.gkhy.assess.system.service.AssProjectSupplementFileService;
import com.gkhy.assess.system.service.AssProjectSupplementService;
import com.gkhy.assess.system.service.SysCommonService;
import com.gkhy.assess.system.utils.ShiroUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 项目补录表 服务实现类
*
*
* @author kzy
* @since 2024-06-11 15:44:14
*/
@Service
public class AssProjectSupplementServiceImpl extends ServiceImpl implements AssProjectSupplementService {
@Autowired
private AssProjectSupplementFileService projectSupplementFileService;
@Autowired
private SysCommonService commonService;
@Override
@Transactional(rollbackFor = RuntimeException.class)
public int addProjectSupplement(AssProjectSupplement projectSupplement) {
if(!checkNameUnique(projectSupplement)){
throw new ApiException("补录的项目名称已存在");
}
projectSupplement.setCreateBy(ShiroUtils.getSysUser().getUsername());
int row =baseMapper.insert(projectSupplement);
if(row<1){
throw new ApiException("新增项目失败");
}
List fileList=projectSupplement.getFiles();
if(ObjectUtil.isNotEmpty(fileList)) {
for (AssProjectSupplementFile file : fileList) {
file.setProjectId(projectSupplement.getId());
}
projectSupplementFileService.saveBatch(fileList);
}
return row;
}
@Override
@Transactional(rollbackFor = RuntimeException.class)
public int editProjectSupplement(AssProjectSupplement projectSupplement) {
if(!checkNameUnique(projectSupplement)){
throw new ApiException("补录的项目名称已存在");
}
projectSupplement.setUpdateBy(ShiroUtils.getSysUser().getUsername());
int row =baseMapper.updateById(projectSupplement);
if(row<1){
throw new ApiException("编辑项目失败");
}
List fileList=projectSupplement.getFiles();
List existFileList=projectSupplementFileService.getSupplementFileByProjectId(projectSupplement.getId());
if(ObjectUtil.isNotEmpty(fileList)) {
for (AssProjectSupplementFile psf : fileList) {
psf.setProjectId(projectSupplement.getId());
}
projectSupplementFileService.saveOrUpdateBatch(fileList);
}
//删除附件
List newIds=fileList.stream().map(AssProjectSupplementFile::getId).collect(Collectors.toList());
List delIds = new ArrayList<>();
for(AssProjectSupplementFile psf:existFileList){
if(!newIds.contains(psf.getId())){
delIds.add(psf.getId());
}
}
if(!delIds.isEmpty()){
projectSupplementFileService.removeBatchByIds(delIds);
}
return row;
}
@Override
public AssProjectSupplement getProjectSupplementById(Long projectSupplementId) {
return baseMapper.getProjectSupplementById(projectSupplementId);
}
@Override
public CommonPage projectSupplementList(AssProjectSupplement projectSupplement) {
SysUser user= ShiroUtils.getSysUser();
if(!user.getIdentity().equals(UserIdentityEnum.MONITOR.getCode())){
//机构用户只能查看本机构的项目
if(user.getAgencyId()==null){
throw new ApiException("用户机构id为空");
}
projectSupplement.setAgencyId(user.getAgencyId());
}else {
if (SuperAccountConstant.ADMINISTRATOR.equals(user.getUsername()) || SuperAccountConstant.SUPER_ADMIN.equals(user.getUsername())){
PageUtil.startPage();
List projects=baseMapper.projectList(projectSupplement);
return CommonPage.restPage(projects);
}else {
return CommonPage.restPage(new ArrayList<>());
}
}
PageUtil.startPage();
List projects=baseMapper.projectList(projectSupplement);
return CommonPage.restPage(projects);
}
@Override
public int deleteProjectSupplement(Long projectSupplementId) {
//删除附件
List fileList=projectSupplementFileService.getSupplementFileByProjectId(projectSupplementId);
if(fileList.size()>0){
for(AssProjectSupplementFile file:fileList){
commonService.removeFile(file.getPath());
projectSupplementFileService.removeById(file.getId());
}
}
return baseMapper.deleteById(projectSupplementId);
}
@Override
public Boolean checkNameUnique(AssProjectSupplement projectSupplement) {
Long projectId = projectSupplement.getId()==null? -1L : projectSupplement.getId();
AssProjectSupplement pro = baseMapper.getProjectByName(projectSupplement.getName(),projectSupplement.getAgencyId());
if (pro!=null && pro.getId().longValue() != projectId.longValue())
{
return false;
}
return true;
}
}