PmAuditDeptRefServiceImpl.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package com.ozs.pm.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  4. import com.ozs.common.core.domain.entity.SysDept;
  5. import com.ozs.common.core.domain.entity.SysProcurementStandard;
  6. import com.ozs.common.exception.ServiceException;
  7. import com.ozs.common.exception.base.BaseException;
  8. import com.ozs.plan.mapper.PlanYearsMapper;
  9. import com.ozs.pm.mapper.PmAuditDeptRefMapper;
  10. import com.ozs.pm.doman.PmAuditDeptRef;
  11. import com.ozs.pm.service.PmAuditDeptRefService;
  12. import com.ozs.system.mapper.SysDeptMapper;
  13. import com.ozs.system.mapper.SysProcurementStandardMapper;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import org.springframework.transaction.annotation.Transactional;
  17. import org.springframework.util.ObjectUtils;
  18. import javax.annotation.Resource;
  19. import javax.validation.Validator;
  20. import java.math.BigDecimal;
  21. import java.util.Arrays;
  22. import java.util.Date;
  23. import java.util.List;
  24. /**
  25. * 审核关联表(PmAuditDeptRef)表服务实现类
  26. *
  27. * @author makejava
  28. * @since 2023-02-22 22:10:08
  29. */
  30. @Service
  31. public class PmAuditDeptRefServiceImpl extends ServiceImpl<PmAuditDeptRefMapper, PmAuditDeptRef> implements PmAuditDeptRefService {
  32. @Autowired
  33. PlanYearsMapper planYearsMapper;
  34. @Autowired
  35. protected Validator validator;
  36. @Autowired
  37. private SysDeptMapper deptMapper;
  38. @Resource
  39. private SysProcurementStandardMapper sysProcurementStandardMapper;
  40. @Autowired
  41. private PmAuditDeptRefService pmAuditDeptRefService;
  42. @Override
  43. @Transactional
  44. public Boolean insertPmAuditDeptRefs(Long refId, String refType, Long deptId, BigDecimal evaluation, Long userId, String projectType) {
  45. Date now = new Date();
  46. SysDept sysDept = deptMapper.selectDeptById(deptId);
  47. String[] ancestors = sysDept.getAncestors().split(",");
  48. //当前用户的部门,是否允许提交(不在规定等级范围不可提交)
  49. //查询当前用户的部门是否有上级,是否需要上级及祖级进行审核
  50. Long cdeptId = null;
  51. Long bdeptId = null;
  52. String deptLevel = null;
  53. if (ancestors.length == 2) { //C级
  54. deptLevel = "C";
  55. } else if (ancestors.length == 3) { //B级
  56. deptLevel = "B";
  57. cdeptId = Long.valueOf(ancestors[2]);
  58. } else if (ancestors.length == 4) { //A级
  59. deptLevel = "A";
  60. cdeptId = Long.valueOf(ancestors[2]);
  61. bdeptId = Long.valueOf(ancestors[3]);
  62. }
  63. if (!Arrays.asList("A", "B", "C").contains(deptLevel)) {
  64. throw new BaseException("管理员无权限提交需求。");
  65. }
  66. //判断每个级别是否允许审核,并插入审核关联表
  67. PmAuditDeptRef refA = new PmAuditDeptRef(null, refId, refType, deptId,
  68. "A", 0, userId + "", now,
  69. userId + "", now);
  70. PmAuditDeptRef refB = new PmAuditDeptRef(null, refId, refType, bdeptId,
  71. "B", 0, userId + "",
  72. now, userId + "", now);
  73. PmAuditDeptRef refC = null;
  74. //审核关联表--PmAuditDeptRef
  75. switch (deptLevel) {
  76. case "A":
  77. // A的判断 最少插入1条。最多插入3条
  78. //获取各个项目类型设定的概算金额阈值
  79. LambdaQueryWrapper<SysProcurementStandard> queryWrapperA = new LambdaQueryWrapper<>();
  80. queryWrapperA.eq(SysProcurementStandard::getDeptId, deptId);
  81. queryWrapperA.eq(SysProcurementStandard::getCategory, projectType.equals("2") ? "1" : projectType.equals("1") ? "2" : projectType);
  82. List<SysProcurementStandard> sysProcurementStandardsListA = sysProcurementStandardMapper.selectList(queryWrapperA);
  83. if (ObjectUtils.isEmpty(sysProcurementStandardsListA)) {
  84. throw new ServiceException("部门id为" + deptId + "的部门采购标准未进行初始化!");
  85. }
  86. //A不限额就自己审核
  87. SysProcurementStandard sA = sysProcurementStandardsListA.get(0);
  88. if (!sA.getState().equals(Integer.valueOf(0))) {
  89. //refA采用初始化数据
  90. //A限额了判断是否超额,超额未超额都自己先审。超额了追加上级
  91. BigDecimal maximum = sA.getMaximum();
  92. if (maximum.compareTo(evaluation) != 1) {
  93. //refA采用初始化数据
  94. //A限额了,找B
  95. // (3月23逻辑更改):本单位超限额的记录由本单位先进行审核,随后交由上级审核。(超额未超额都自己先审)
  96. LambdaQueryWrapper<SysProcurementStandard> queryWrapperB = new LambdaQueryWrapper<>();
  97. queryWrapperB.eq(SysProcurementStandard::getDeptId, bdeptId);
  98. queryWrapperB.eq(SysProcurementStandard::getCategory, projectType.equals("2") ? "1" : projectType.equals("1") ? "2" : projectType);
  99. List<SysProcurementStandard> sysProcurementStandardsListB = sysProcurementStandardMapper.selectList(queryWrapperB);
  100. //B不限额,B审
  101. if (ObjectUtils.isEmpty(sysProcurementStandardsListB)) {
  102. throw new ServiceException("部门id为" + bdeptId + "的部门采购标准未进行初始化!");
  103. }
  104. SysProcurementStandard sB = sysProcurementStandardsListB.get(0);
  105. if (sB.getState().equals(Integer.valueOf(0))) {
  106. //refB采用初始化数据
  107. pmAuditDeptRefService.save(refB);
  108. } else {
  109. //B限额了判断是否超额,不超额就自己审。超额了追加C级
  110. BigDecimal maximumB = sB.getMaximum();
  111. //B超额
  112. if (maximumB.compareTo(evaluation) == -1) {
  113. //C不限额,
  114. refC = new PmAuditDeptRef(null, refId, refType, cdeptId, "C", 0, userId + "", now, userId + "", now);
  115. pmAuditDeptRefService.save(refC);
  116. }
  117. //refB采用初始化数据
  118. pmAuditDeptRefService.save(refB);
  119. }
  120. }
  121. }
  122. if (!ObjectUtils.isEmpty(refA)) {
  123. pmAuditDeptRefService.save(refA);
  124. }
  125. break;
  126. case "B":
  127. // B的判断 最少插入1条。最多插入2条
  128. LambdaQueryWrapper<SysProcurementStandard> queryWrapperB = new LambdaQueryWrapper<>();
  129. queryWrapperB.eq(SysProcurementStandard::getDeptId, deptId);
  130. queryWrapperB.eq(SysProcurementStandard::getCategory, projectType.equals("2") ? "1" : projectType.equals("1") ? "2" : projectType);
  131. List<SysProcurementStandard> sysProcurementStandardsListB = sysProcurementStandardMapper.selectList(queryWrapperB);
  132. //B不限额,B审
  133. if (ObjectUtils.isEmpty(sysProcurementStandardsListB)) {
  134. throw new ServiceException("部门id为" + deptId + "的部门采购标准未进行初始化!");
  135. }
  136. SysProcurementStandard sB = sysProcurementStandardsListB.get(0);
  137. refB = new PmAuditDeptRef(null, refId, refType, deptId, "B", 0, userId + "", now, userId + "", now);
  138. if (sB.getState() == 0) {
  139. } else {
  140. //B限额了判断是否超额,不超额就自己审。超额了追加C级
  141. BigDecimal maximumB = sB.getMaximum();
  142. //B不超额B审
  143. if (maximumB.compareTo(evaluation) == 1) {
  144. } else {
  145. //C不限额C审,
  146. refB = null;
  147. // refB = new PmAuditDeptRef(null, refId, refType, deptId, "B", 1, userId + "", now, userId + "", now);
  148. refC = new PmAuditDeptRef(null, refId, refType, cdeptId, "C", 0, userId + "", now, userId + "", now);
  149. pmAuditDeptRefService.save(refC);
  150. }
  151. }
  152. if (!ObjectUtils.isEmpty(refB)) {
  153. pmAuditDeptRefService.save(refB);
  154. }
  155. break;
  156. default:
  157. //C不限额C审,
  158. // 插入1条
  159. refC = new PmAuditDeptRef(null, refId, refType, deptId, "C", 0, userId + "", now, userId + "", now);
  160. pmAuditDeptRefService.save(refC);
  161. }
  162. return true;
  163. }
  164. }