ProjectTaskServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. package com.ruoyi.project.service.impl;
  2. import com.ruoyi.common.core.domain.AjaxResult;
  3. import com.ruoyi.common.core.domain.entity.SysUser;
  4. import com.ruoyi.common.enums.UserRolesType;
  5. import com.ruoyi.common.exception.ServiceException;
  6. import com.ruoyi.common.utils.PageUtils;
  7. import com.ruoyi.common.utils.SecurityUtils;
  8. import com.ruoyi.common.utils.StringUtils;
  9. import com.ruoyi.common.utils.bean.BeanUtils;
  10. import com.ruoyi.common.utils.bean.BeanValidators;
  11. import com.ruoyi.project.bo.ProjectListInput;
  12. import com.ruoyi.project.bo.ProjectTaskListOut;
  13. import com.ruoyi.project.bo.ProjectTaskOut;
  14. import com.ruoyi.project.domain.ProjectStaff;
  15. import com.ruoyi.project.domain.ProjectStaffRecord;
  16. import com.ruoyi.project.domain.ProjectTask;
  17. import com.ruoyi.project.mapper.ProjectStaffMapper;
  18. import com.ruoyi.project.mapper.ProjectStaffRecordMapper;
  19. import com.ruoyi.project.mapper.ProjectTaskMapper;
  20. import com.ruoyi.project.service.ProjectTaskService;
  21. import com.ruoyi.system.mapper.SysUserMapper;
  22. import com.ruoyi.system.service.ISysDeptService;
  23. import org.slf4j.Logger;
  24. import org.slf4j.LoggerFactory;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.stereotype.Service;
  27. import javax.validation.Validator;
  28. import java.util.List;
  29. @Service
  30. public class ProjectTaskServiceImpl implements ProjectTaskService {
  31. private static final Logger log = LoggerFactory.getLogger(ProjectTaskServiceImpl.class);
  32. @Autowired
  33. private ProjectTaskMapper projectTaskMapper;
  34. @Autowired
  35. private ProjectStaffMapper projectStaffMapper;
  36. @Autowired
  37. private ISysDeptService deptService;
  38. @Autowired
  39. private Validator validator;
  40. @Autowired
  41. private SysUserMapper userMapper;
  42. @Autowired
  43. private ProjectStaffRecordMapper projectStaffRecordMapper;
  44. @Override
  45. public AjaxResult addProjectTask(ProjectTask projectTask) {
  46. userMapper.updateUserProjectSum(projectTask.getAid(),0);
  47. int i = projectTaskMapper.insertSelective(projectTask);
  48. if (StringUtils.isNotBlank(projectTask.getStaffObject())){
  49. String[] split = projectTask.getStaffObject().split(",");
  50. projectStaffMapper.updatePidByList(projectTask.getId(),split);
  51. projectTaskMapper.updateStaffName(projectTask.getId());
  52. }
  53. return AjaxResult.success(i);
  54. }
  55. @Override
  56. public AjaxResult deleteProject(ProjectTask in) {
  57. int i = projectTaskMapper.deleteByPrimaryKey(in.getId());
  58. userMapper.updateUserProjectSum(in.getAid(),0);
  59. if (i>0){
  60. projectStaffMapper.deleteBypid(in.getId());
  61. return AjaxResult.success();
  62. }
  63. return AjaxResult.error("项目编号不存在");
  64. }
  65. @Override
  66. public AjaxResult details(Long id) {
  67. ProjectTask projectTask = projectTaskMapper.selectByPrimaryKey(id);
  68. ProjectTaskOut out= new ProjectTaskOut();
  69. if (projectTask!=null){
  70. BeanUtils.copyBeanProp(out, projectTask);
  71. List<ProjectStaff> projectStaffs = projectStaffMapper.selectByPid(id);
  72. if (!projectStaffs.isEmpty())out.setList(projectStaffs);
  73. return AjaxResult.success(out);
  74. }
  75. return AjaxResult.error("项目不存在");
  76. }
  77. @Override
  78. public List<ProjectTaskListOut> list(ProjectListInput in) {
  79. pushRoleType(in);
  80. if (!SecurityUtils.isSuperAdmin()){
  81. in.setUid(SecurityUtils.getUserId());
  82. Long companyId = deptService.selectCompanyByDeptId();
  83. if (companyId!=null)in.setCompanyId(companyId);
  84. }
  85. if (in.getEndTime()!=null)in.setEndTime(in.getEndTime()+" 23:59:59");
  86. PageUtils.startPage();
  87. return projectTaskMapper.selectList(in);
  88. }
  89. private void pushRoleType(ProjectListInput in) {
  90. if (in.getRoleType()==null){
  91. if (SecurityUtils.hashRoles(UserRolesType.CEO.getCode())){
  92. in.setRoleType(1);
  93. }else if (SecurityUtils.hashRoles(UserRolesType.ADMIN.getCode())){
  94. in.setRoleType(3);
  95. }else if (SecurityUtils.hashRoles(UserRolesType.MANAGE.getCode())){
  96. in.setRoleType(2);
  97. }else {
  98. in.setRoleType(0);
  99. }
  100. }
  101. }
  102. @Override
  103. public String importProject(List<ProjectTaskListOut> list, boolean updateSupport, String operName) {
  104. if (StringUtils.isNull(list) || list.size() == 0)
  105. {
  106. throw new ServiceException("导入用户数据不能为空!");
  107. }
  108. int successNum = 0;
  109. int failureNum = 0;
  110. StringBuilder successMsg = new StringBuilder();
  111. StringBuilder failureMsg = new StringBuilder();
  112. for (ProjectTaskListOut p : list)
  113. {
  114. try
  115. {
  116. // 验证是否存在这个用户
  117. ProjectTask projectTask = projectTaskMapper.selectByPrimaryKey(p.getId());
  118. if (StringUtils.isNull(projectTask)){
  119. BeanValidators.validateWithException(validator, p);
  120. if(StringUtils.isNotBlank(p.getAdminName())) {
  121. SysUser sysUser = userMapper.selectByNikeName(p.getAdminName());
  122. if (sysUser == null) {
  123. throw new ServiceException(String.format("负责人[%s]不存在", p.getAdminName()));
  124. }
  125. p.setAid(sysUser.getUserId());
  126. p.setAdminName(sysUser.getNickName());
  127. }
  128. p.setProjectStatus(0);
  129. projectTaskMapper.insertSelective(p);
  130. if(StringUtils.isNotBlank(p.getStaffName())) {
  131. String[] split = p.getStaffName().split(",");
  132. for (String s : split) {
  133. ProjectStaff newPs = new ProjectStaff();
  134. SysUser sysUser = userMapper.selectByNikeName(s);
  135. if (sysUser == null) {
  136. throw new ServiceException("[" + s + "]不存在");
  137. }
  138. newPs.setAid(sysUser.getUserId());
  139. newPs.setName(sysUser.getNickName());
  140. newPs.setPid(p.getId());
  141. projectStaffMapper.insertSelective(newPs);
  142. }
  143. }
  144. projectTaskMapper.updateStaffName(p.getId());
  145. successNum++;
  146. successMsg.append("<br/>" + successNum + "、项目: " + p.getName() + " 导入成功");
  147. }else if (updateSupport){
  148. BeanValidators.validateWithException(validator, p);
  149. if(StringUtils.isNotBlank(p.getStaffName())) {
  150. addStaffAndDelete( p);
  151. }
  152. if (p.getAdminName()!=null){
  153. SysUser sysUser = userMapper.selectByNikeName(p.getAdminName());
  154. if (sysUser == null) {
  155. throw new ServiceException(String.format("负责人[%s]不存在", p.getAdminName()));
  156. }
  157. List<ProjectStaffRecord> projectStaffRecords = projectStaffRecordMapper.selectByPidAndAid(p.getId(), projectTask.getAid());
  158. if (projectStaffRecords.size()>0){
  159. throw new ServiceException(String.format("负责人[%s]存在打卡,不允许切换.", projectTask.getAdminName()));
  160. }
  161. p.setAid(sysUser.getUserId());
  162. p.setAdminName(sysUser.getNickName());
  163. }
  164. projectTaskMapper.updateByPrimaryKeySelective(p);
  165. successNum++;
  166. successMsg.append("<br/>" + successNum + "、项目: " + projectTask.getName() + " 更新成功");
  167. }
  168. else
  169. {
  170. failureNum++;
  171. failureMsg.append("<br/>" + failureNum + "、项目: " + projectTask.getName() + " 已存在");
  172. }
  173. }
  174. catch (Exception e)
  175. {
  176. failureNum++;
  177. String msg = "<br/>" + failureNum + "、项目: " + p.getName() + " 导入失败:";
  178. failureMsg.append(msg + e.getMessage());
  179. log.error(msg, e);
  180. }
  181. }
  182. if (failureNum > 0)
  183. {
  184. failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
  185. throw new ServiceException(failureMsg.toString());
  186. }
  187. else
  188. {
  189. successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
  190. }
  191. return successMsg.toString();
  192. }
  193. @Override
  194. public AjaxResult updateProjectTask(ProjectTask in) {
  195. ProjectTask use = projectTaskMapper.selectByPrimaryKey(in.getId());
  196. if (in.getAid().equals(use.getAid())){
  197. List<ProjectStaffRecord> projectStaffRecords = projectStaffRecordMapper.selectByPidAndAid(in.getId(), use.getAid());
  198. if (projectStaffRecords.size()>0){
  199. throw new ServiceException(String.format("负责人[%s]存在打卡,不允许切换.", use.getAdminName()));
  200. }
  201. }
  202. return AjaxResult.success(projectTaskMapper.updateByPrimaryKeySelective(in));
  203. }
  204. @Override
  205. public AjaxResult selectProjectImg(Long pid) {
  206. return AjaxResult.success(projectTaskMapper.selectProjectImg(pid));
  207. }
  208. @Override
  209. public boolean checkProjectNumber(ProjectTask projectTask) {
  210. ProjectTask projectTask1 = projectTaskMapper.selectByProjectNumber(projectTask.getProjectNumber());
  211. if (projectTask.getId()==null){
  212. if (projectTask1!=null){
  213. return true;
  214. }
  215. }else {
  216. if (projectTask1!=null&&!projectTask.getId().equals(projectTask1.getId())){
  217. return true;
  218. }
  219. }
  220. return false;
  221. }
  222. private void addStaffAndDelete( ProjectTaskListOut p) {
  223. String[] split = p.getStaffName().split(",");
  224. List<ProjectStaff> projectStaffs = projectStaffMapper.selectByPid(p.getId());
  225. addStaff( p, split, projectStaffs);
  226. deleteStaff( split, projectStaffs);
  227. }
  228. private void deleteStaff( String[] split, List<ProjectStaff> projectStaffs) {
  229. //预设需要删除,如果找到相同名字的就无需删除
  230. for (ProjectStaff ps : projectStaffs) {
  231. boolean flag = true;
  232. for (String s : split) {
  233. if (ps.getName().equals(s)) {
  234. flag = false;
  235. }
  236. }
  237. if (flag) {
  238. int sum = projectStaffRecordMapper.selectById(ps.getId());
  239. if (sum > 0) {
  240. throw new ServiceException("[" + ps.getName() + "]存在打卡不能删除");
  241. }
  242. projectStaffMapper.deleteByPrimaryKey(ps.getId());
  243. }
  244. }
  245. }
  246. private void addStaff( ProjectTaskListOut p, String[] split, List<ProjectStaff> projectStaffs) {
  247. for (String s : split) {
  248. boolean flag = true;
  249. for (ProjectStaff ps : projectStaffs) {
  250. if (ps.getName().equals(s)) {
  251. flag = false;
  252. }
  253. }
  254. if (flag) {
  255. ProjectStaff newPs = new ProjectStaff();
  256. SysUser sysUser = userMapper.selectByNikeName(s);
  257. if (sysUser == null) {
  258. throw new ServiceException("[" + s + "]不存在");
  259. }
  260. newPs.setAid(sysUser.getUserId());
  261. newPs.setName(sysUser.getNickName());
  262. newPs.setPid(p.getId());
  263. projectStaffMapper.insertSelective(newPs);
  264. }
  265. }
  266. }
  267. }