ProvisionalPlanServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. package com.ozs.plan.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.ozs.common.core.domain.entity.SysDept;
  6. import com.ozs.common.core.domain.entity.SysDictData;
  7. import com.ozs.common.core.domain.model.LoginUser;
  8. import com.ozs.common.enums.ProjectStatus;
  9. import com.ozs.common.enums.ProjectTypes;
  10. import com.ozs.common.exception.ServiceException;
  11. import com.ozs.common.utils.StringUtils;
  12. import com.ozs.plan.doman.PlanYears;
  13. import com.ozs.plan.doman.ProvisionalPlan;
  14. import com.ozs.plan.doman.vo.requestVo.ProvisionalPlanVo;
  15. import com.ozs.plan.mapper.PlanYearsMapper;
  16. import com.ozs.plan.mapper.ProvisionalPlanMapper;
  17. import com.ozs.plan.service.ProvisionalPlanService;
  18. import com.ozs.system.domain.vo.responseVo.SysDeptResponseVo;
  19. import com.ozs.system.mapper.SysDeptMapper;
  20. import com.ozs.system.service.ISysDeptService;
  21. import com.ozs.system.service.ISysDictTypeService;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.stereotype.Service;
  24. import org.springframework.util.ObjectUtils;
  25. import java.math.BigDecimal;
  26. import java.util.*;
  27. @Service
  28. public class ProvisionalPlanServiceImpl extends ServiceImpl<ProvisionalPlanMapper, ProvisionalPlan> implements ProvisionalPlanService {
  29. @Autowired
  30. private ProvisionalPlanMapper provisionalPlanMapper;
  31. @Autowired
  32. private ISysDictTypeService dictTypeService;
  33. @Autowired
  34. private SysDeptMapper deptMapper;
  35. @Autowired
  36. private ISysDeptService deptService;
  37. @Override
  38. public int deleteProvisionalPlanById(Integer planYearId) {
  39. return provisionalPlanMapper.deleteProvisionalPlanById(planYearId);
  40. }
  41. @Override
  42. public int updateProvisionalPlanById(ProvisionalPlan provisionalPlan) {
  43. return provisionalPlanMapper.updateProvisionalPlanById(provisionalPlan);
  44. }
  45. @Override
  46. public String importProvisionalPlan(List<ProvisionalPlan> provisionalPlans, boolean updateSupport, LoginUser loginUser) {
  47. // 字典项
  48. HashMap<String, HashMap<String, String>> planEnums = dictTypeService.getAboutEnums();
  49. HashMap<String, String> projectTypesMap = planEnums.get("projectTypes");
  50. HashMap<String, String> planPurchaseModesMap = planEnums.get("planPurchaseModes");
  51. HashMap<String, String> projectAttributes = planEnums.get("projectAttributes");
  52. HashMap<String, String> purchaseServices = planEnums.get("purchaseServices");
  53. int successNum = 0;
  54. int failureNum = 0;
  55. StringBuilder successMsg = new StringBuilder();
  56. StringBuilder failureMsg = new StringBuilder();
  57. for (ProvisionalPlan ofProvisionalPlan : provisionalPlans) {
  58. try {
  59. //验证项目名称是否重复导入
  60. List<ProvisionalPlan> plan = provisionalPlanMapper.selectProjectName(ofProvisionalPlan.getProjectName());
  61. //将录入信息中的值更改为要保存的数据
  62. if (plan.size() == 0) {
  63. //采购单位
  64. SysDept info = deptMapper.checkDeptNameOnlyOne(ofProvisionalPlan.getPurchaseDeptName());
  65. if (StringUtils.isNotNull(info)) {
  66. ofProvisionalPlan.setPurchaseDeptId(info.getDeptId());
  67. }
  68. ofProvisionalPlan.setProjectType(projectTypesMap.get(ofProvisionalPlan.getProjectType()));
  69. ofProvisionalPlan.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
  70. ofProvisionalPlan.setPurchaseMode(planPurchaseModesMap.get(ofProvisionalPlan.getPurchaseMode()));
  71. //项目属性是多选字段
  72. StringBuilder builder = new StringBuilder();
  73. if (ofProvisionalPlan.getProjectAttr().contains(",")) {
  74. String[] split = ofProvisionalPlan.getProjectAttr().split(",");
  75. for (String s : split) {
  76. builder.append(projectAttributes.get(s) + ",");
  77. }
  78. } else {
  79. builder.append(projectAttributes.get(ofProvisionalPlan.getProjectAttr()));
  80. }
  81. ofProvisionalPlan.setProjectAttr(builder.toString());
  82. ofProvisionalPlan.setPurchaseServices(purchaseServices.get(ofProvisionalPlan.getPurchaseServices()));
  83. ofProvisionalPlan.setIsExcess(isExcessOrNo(ofProvisionalPlan.getProjectType(), ofProvisionalPlan.getEvaluation()));
  84. ofProvisionalPlan.setCreated(String.valueOf(loginUser.getUserId()));
  85. ofProvisionalPlan.setCreateTime(new Date());
  86. ofProvisionalPlan.setPlanType("1");
  87. provisionalPlanMapper.insert(ofProvisionalPlan);
  88. successNum++;
  89. successMsg.append("*" + successNum + "、项目 " + ofProvisionalPlan.getProjectName() + " 导入成功!");
  90. } else {
  91. failureNum++;
  92. failureMsg.append("*" + successNum + "、项目 " + ofProvisionalPlan.getProjectName() + " 已存在");
  93. }
  94. } catch (Exception exc) {
  95. failureNum++;
  96. String msg = "*" + successNum + "、项目 " + ofProvisionalPlan.getProjectName() + " 导入失败";
  97. failureMsg.append(msg + exc.getMessage());
  98. log.error(msg, exc);
  99. }
  100. }
  101. if (failureNum > 0) {
  102. failureMsg.insert(0, "导入失败!共 " + failureNum + " 条数据格式不正确:");
  103. throw new ServiceException(failureMsg.toString());
  104. } else {
  105. successMsg.insert(0, "导入成功!共 " + successNum + " 条。");
  106. }
  107. return successMsg.toString();
  108. }
  109. @Override
  110. public List<ProvisionalPlan> selectProvisionalPlanExport(ProvisionalPlanVo vo) {
  111. List<ProvisionalPlan> list = new ArrayList<>();
  112. List<ProvisionalPlan> provisionalPlanList = new ArrayList<>();
  113. try {
  114. int num = 1;
  115. int size = 200;
  116. while (size == 200) {
  117. LambdaQueryWrapper<ProvisionalPlan> lw = new LambdaQueryWrapper<ProvisionalPlan>();
  118. if (!ObjectUtils.isEmpty(vo.getProjectName())) {
  119. lw.like(ProvisionalPlan::getProjectName, vo.getProjectName());
  120. }
  121. if (!ObjectUtils.isEmpty(vo.getPurchaseServices())) {
  122. lw.eq(ProvisionalPlan::getPurchaseServices, vo.getPurchaseServices());
  123. }
  124. if (!ObjectUtils.isEmpty(vo.getIsExcess())) {
  125. lw.eq(ProvisionalPlan::getIsExcess, vo.getIsExcess());
  126. }
  127. if (!ObjectUtils.isEmpty(vo.getProjectStatus())) {
  128. lw.eq(ProvisionalPlan::getProjectStatus, vo.getProjectStatus());
  129. }
  130. if (!ObjectUtils.isEmpty(vo.getStartTime())) {
  131. lw.ge(ProvisionalPlan::getPlanDemandSubTime, vo.getStartTime());
  132. }
  133. if (!ObjectUtils.isEmpty(vo.getEndTime())) {
  134. lw.le(ProvisionalPlan::getPlanDemandSubTime, vo.getEndTime());
  135. }
  136. Page<ProvisionalPlan> page = provisionalPlanMapper.selectPage(new Page<ProvisionalPlan>(num, size, false), lw);
  137. list.addAll(page.getRecords());
  138. size = page.getRecords().size();
  139. num++;
  140. }
  141. provisionalPlanList = changeTo(list);
  142. } catch (Exception e) {
  143. e.printStackTrace();
  144. }
  145. return provisionalPlanList;
  146. }
  147. //判断是否为超额计划
  148. public String isExcessOrNo(String projectType, BigDecimal evaluation) {
  149. BigDecimal threshold = new BigDecimal(0);
  150. //获取各个项目类型设定的概算金额阈值
  151. List<SysDictData> data = dictTypeService.selectDictDataByType("sys_over_limit_threshold");
  152. HashMap<String, String> thresholdMap = new LinkedHashMap<>();
  153. //各个类型的概算金额阈值
  154. for (SysDictData dictData : data) {
  155. // 类型----阈值
  156. thresholdMap.put(dictData.getDictLabel(), dictData.getDictValue());
  157. }
  158. //项目类型
  159. for (ProjectTypes value : ProjectTypes.values()) {
  160. if (projectType.equals(value.getCode())) {
  161. threshold = BigDecimal.valueOf(Long.parseLong(thresholdMap.get(value.getInfo())));
  162. }
  163. break;
  164. }
  165. if (evaluation.compareTo(threshold) == 1) {
  166. //是超额计划
  167. return ("1");
  168. } else {
  169. return ("0");
  170. }
  171. }
  172. //字段赋值对应的名称
  173. public List<ProvisionalPlan> changeTo(List<ProvisionalPlan> provisionalPlans) {
  174. HashMap<String, HashMap<String, String>> planEnums = dictTypeService.getAboutEnums();
  175. HashMap<String, String> projectTypesMap = planEnums.get("projectTypes");
  176. HashMap<String, String> planPurchaseModesMap = planEnums.get("planPurchaseModes");
  177. HashMap<String, String> projectAttributes = planEnums.get("projectAttributes");
  178. HashMap<String, String> purchaseServices = planEnums.get("purchaseServices");
  179. List<ProvisionalPlan> list = new ArrayList<ProvisionalPlan>();
  180. for (ProvisionalPlan provisionalPlan : provisionalPlans) {
  181. if (provisionalPlan.getPurchaseDeptId() != null) {
  182. SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(provisionalPlan.getPurchaseDeptId()).get("sysDept");
  183. provisionalPlan.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
  184. }
  185. for (Map.Entry<String, String> entry : projectTypesMap.entrySet()) {
  186. if (provisionalPlan.getProjectType() != null && provisionalPlan.getProjectType().equals(entry.getValue())) {
  187. provisionalPlan.setProjectTypeStr(entry.getKey());
  188. break;
  189. }
  190. }
  191. for (Map.Entry<String, String> entry : planPurchaseModesMap.entrySet()) {
  192. if (provisionalPlan.getPurchaseMode() != null && provisionalPlan.getPurchaseMode().equals(entry.getValue())) {
  193. provisionalPlan.setPurchaseModeStr(entry.getKey());
  194. break;
  195. }
  196. }
  197. //项目属性是拼接的
  198. if (provisionalPlan.getProjectAttr().length() > 1) {
  199. StringBuilder builder = new StringBuilder();
  200. String[] split = provisionalPlan.getProjectAttr().split(",");
  201. for (String s : split) {
  202. for (Map.Entry<String, String> entry : projectAttributes.entrySet()) {
  203. if (s.equals(entry.getValue())) {
  204. builder.append(entry.getKey() + ",");
  205. break;
  206. }
  207. }
  208. }
  209. provisionalPlan.setProjectAttrStr(builder.toString());
  210. } else {
  211. for (Map.Entry<String, String> entry : projectAttributes.entrySet()) {
  212. if (provisionalPlan.getProjectAttr() != null && provisionalPlan.getProjectAttr().equals(entry.getValue())) {
  213. provisionalPlan.setProjectAttrStr(entry.getKey());
  214. break;
  215. }
  216. }
  217. }
  218. for (Map.Entry<String, String> entry : purchaseServices.entrySet()) {
  219. if (provisionalPlan.getPurchaseServices() != null && provisionalPlan.getPurchaseServices().equals(entry.getValue())) {
  220. provisionalPlan.setPurchaseServicesStr(entry.getKey());
  221. break;
  222. }
  223. }
  224. list.add(provisionalPlan);
  225. }
  226. return list;
  227. }
  228. }