package com.ruoyi.project.service.impl; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.enums.UserRolesType; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.bean.BeanValidators; import com.ruoyi.project.bo.ProjectListInput; import com.ruoyi.project.bo.ProjectTaskListOut; import com.ruoyi.project.bo.ProjectTaskOut; import com.ruoyi.project.domain.ProjectStaff; import com.ruoyi.project.domain.ProjectStaffRecord; import com.ruoyi.project.domain.ProjectTask; import com.ruoyi.project.mapper.ProjectStaffMapper; import com.ruoyi.project.mapper.ProjectStaffRecordMapper; import com.ruoyi.project.mapper.ProjectTaskMapper; import com.ruoyi.project.service.ProjectTaskService; import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.system.service.ISysDeptService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.validation.Validator; import java.util.List; @Service public class ProjectTaskServiceImpl implements ProjectTaskService { private static final Logger log = LoggerFactory.getLogger(ProjectTaskServiceImpl.class); @Autowired private ProjectTaskMapper projectTaskMapper; @Autowired private ProjectStaffMapper projectStaffMapper; @Autowired private ISysDeptService deptService; @Autowired private Validator validator; @Autowired private SysUserMapper userMapper; @Autowired private ProjectStaffRecordMapper projectStaffRecordMapper; @Override public AjaxResult addProjectTask(ProjectTask projectTask) { userMapper.updateUserProjectSum(projectTask.getAid(),0); int i = projectTaskMapper.insertSelective(projectTask); if (StringUtils.isNotBlank(projectTask.getStaffObject())){ String[] split = projectTask.getStaffObject().split(","); projectStaffMapper.updatePidByList(projectTask.getId(),split); projectTaskMapper.updateStaffName(projectTask.getId()); } return AjaxResult.success(i); } @Override public AjaxResult deleteProject(ProjectTask in) { int i = projectTaskMapper.deleteByPrimaryKey(in.getId()); userMapper.updateUserProjectSum(in.getAid(),0); if (i>0){ projectStaffMapper.deleteBypid(in.getId()); return AjaxResult.success(); } return AjaxResult.error("项目编号不存在"); } @Override public AjaxResult details(Long id) { ProjectTask projectTask = projectTaskMapper.selectByPrimaryKey(id); ProjectTaskOut out= new ProjectTaskOut(); if (projectTask!=null){ BeanUtils.copyBeanProp(out, projectTask); List projectStaffs = projectStaffMapper.selectByPid(id); if (!projectStaffs.isEmpty())out.setList(projectStaffs); return AjaxResult.success(out); } return AjaxResult.error("项目不存在"); } @Override public List list(ProjectListInput in) { pushRoleType(in); if (!SecurityUtils.isSuperAdmin()){ in.setUid(SecurityUtils.getUserId()); Long companyId = deptService.selectCompanyByDeptId(); if (companyId!=null)in.setCompanyId(companyId); } if (in.getEndTime()!=null)in.setEndTime(in.getEndTime()+" 23:59:59"); PageUtils.startPage(); return projectTaskMapper.selectList(in); } private void pushRoleType(ProjectListInput in) { if (in.getRoleType()==null){ if (SecurityUtils.hashRoles(UserRolesType.CEO.getCode())){ in.setRoleType(1); }else if (SecurityUtils.hashRoles(UserRolesType.ADMIN.getCode())){ in.setRoleType(3); }else if (SecurityUtils.hashRoles(UserRolesType.MANAGE.getCode())){ in.setRoleType(2); }else { in.setRoleType(0); } } } @Override public String importProject(List list, boolean updateSupport, String operName) { if (StringUtils.isNull(list) || list.size() == 0) { throw new ServiceException("导入用户数据不能为空!"); } int successNum = 0; int failureNum = 0; StringBuilder successMsg = new StringBuilder(); StringBuilder failureMsg = new StringBuilder(); Long company = deptService.selectCompanyByDeptId(); for (ProjectTaskListOut p : list) { try { // 验证是否存在这个用户 ProjectTask projectTask = projectTaskMapper.selectByPrimaryKey(p.getId()); if (StringUtils.isNull(projectTask)){ BeanValidators.validateWithException(validator, p); if(StringUtils.isNotBlank(p.getAdminName())) { SysUser sysUser = userMapper.selectByNikeName(p.getAdminName(),company); if (sysUser == null) { throw new ServiceException(String.format("负责人[%s]不存在", p.getAdminName())); } p.setAid(sysUser.getUserId()); p.setAdminName(sysUser.getNickName()); } p.setProjectStatus(0); projectTaskMapper.insertSelective(p); if(StringUtils.isNotBlank(p.getStaffName())) { String[] split = p.getStaffName().split(","); for (String s : split) { ProjectStaff newPs = new ProjectStaff(); SysUser sysUser = userMapper.selectByNikeName(s,company); if (sysUser == null) { throw new ServiceException("[" + s + "]不存在"); } newPs.setAid(sysUser.getUserId()); newPs.setName(sysUser.getNickName()); newPs.setPid(p.getId()); projectStaffMapper.insertSelective(newPs); } } projectTaskMapper.updateStaffName(p.getId()); successNum++; successMsg.append("
" + successNum + "、项目: " + p.getName() + " 导入成功"); }else if (updateSupport){ BeanValidators.validateWithException(validator, p); if(StringUtils.isNotBlank(p.getStaffName())) { addStaffAndDelete( p); } if (p.getAdminName()!=null){ SysUser sysUser = userMapper.selectByNikeName(p.getAdminName(),company); if (sysUser == null) { throw new ServiceException(String.format("负责人[%s]不存在", p.getAdminName())); } List projectStaffRecords = projectStaffRecordMapper.selectByPidAndAid(p.getId(), projectTask.getAid()); if (projectStaffRecords.size()>0){ throw new ServiceException(String.format("负责人[%s]存在打卡,不允许切换.", projectTask.getAdminName())); } p.setAid(sysUser.getUserId()); p.setAdminName(sysUser.getNickName()); } projectTaskMapper.updateByPrimaryKeySelective(p); successNum++; successMsg.append("
" + successNum + "、项目: " + projectTask.getName() + " 更新成功"); } else { failureNum++; failureMsg.append("
" + failureNum + "、项目: " + projectTask.getName() + " 已存在"); } } catch (Exception e) { failureNum++; String msg = "
" + failureNum + "、项目: " + p.getName() + " 导入失败:"; failureMsg.append(msg + e.getMessage()); log.error(msg, e); } } if (failureNum > 0) { failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); throw new ServiceException(failureMsg.toString()); } else { successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); } return successMsg.toString(); } @Override public AjaxResult updateProjectTask(ProjectTask in) { ProjectTask use = projectTaskMapper.selectByPrimaryKey(in.getId()); if (in.getAid().equals(use.getAid())){ List projectStaffRecords = projectStaffRecordMapper.selectByPidAndAid(in.getId(), use.getAid()); if (projectStaffRecords.size()>0){ throw new ServiceException(String.format("负责人[%s]存在打卡,不允许切换.", use.getAdminName())); } } return AjaxResult.success(projectTaskMapper.updateByPrimaryKeySelective(in)); } @Override public AjaxResult selectProjectImg(Long pid) { return AjaxResult.success(projectTaskMapper.selectProjectImg(pid)); } @Override public boolean checkProjectNumber(ProjectTask projectTask) { ProjectTask projectTask1 = projectTaskMapper.selectByProjectNumber(projectTask.getProjectNumber()); if (projectTask.getId()==null){ if (projectTask1!=null){ return true; } }else { if (projectTask1!=null&&!projectTask.getId().equals(projectTask1.getId())){ return true; } } return false; } private void addStaffAndDelete( ProjectTaskListOut p) { String[] split = p.getStaffName().split(","); List projectStaffs = projectStaffMapper.selectByPid(p.getId()); addStaff( p, split, projectStaffs); deleteStaff( split, projectStaffs); } private void deleteStaff( String[] split, List projectStaffs) { //预设需要删除,如果找到相同名字的就无需删除 for (ProjectStaff ps : projectStaffs) { boolean flag = true; for (String s : split) { if (ps.getName().equals(s)) { flag = false; } } if (flag) { int sum = projectStaffRecordMapper.selectById(ps.getId()); if (sum > 0) { throw new ServiceException("[" + ps.getName() + "]存在打卡不能删除"); } projectStaffMapper.deleteByPrimaryKey(ps.getId()); } } } private void addStaff( ProjectTaskListOut p, String[] split, List projectStaffs) { Long company = deptService.selectCompanyByDeptId(); for (String s : split) { boolean flag = true; for (ProjectStaff ps : projectStaffs) { if (ps.getName().equals(s)) { flag = false; } } if (flag) { ProjectStaff newPs = new ProjectStaff(); SysUser sysUser = userMapper.selectByNikeName(s,company); if (sysUser == null) { throw new ServiceException("[" + s + "]不存在"); } newPs.setAid(sysUser.getUserId()); newPs.setName(sysUser.getNickName()); newPs.setPid(p.getId()); projectStaffMapper.insertSelective(newPs); } } } }