ProvisionalPlanServiceImpl.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. package com.ozs.plan.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.github.pagehelper.PageHelper;
  7. import com.github.pagehelper.PageInfo;
  8. import com.ozs.common.core.domain.AjaxResult;
  9. import com.ozs.common.core.domain.entity.SysDept;
  10. import com.ozs.common.core.domain.entity.SysDictData;
  11. import com.ozs.common.core.domain.model.LoginUser;
  12. import com.ozs.common.enums.ProjectStatus;
  13. import com.ozs.common.enums.ProjectTypes;
  14. import com.ozs.common.enums.SysFileRefEnum;
  15. import com.ozs.common.exception.ServiceException;
  16. import com.ozs.common.utils.StringUtils;
  17. import com.ozs.common.utils.bean.BeanUtils;
  18. import com.ozs.plan.doman.PlanQuarter;
  19. import com.ozs.plan.doman.PlanYears;
  20. import com.ozs.plan.doman.ProvisionalPlan;
  21. import com.ozs.plan.doman.vo.requestVo.PlanQuarterStandardVo;
  22. import com.ozs.plan.doman.vo.requestVo.ProvisionalPlanVo;
  23. import com.ozs.plan.mapper.PlanYearsMapper;
  24. import com.ozs.plan.mapper.ProvisionalPlanMapper;
  25. import com.ozs.plan.service.ProvisionalPlanService;
  26. import com.ozs.system.domain.SysFileRef;
  27. import com.ozs.system.domain.vo.responseVo.SysDeptResponseVo;
  28. import com.ozs.system.mapper.SysDeptMapper;
  29. import com.ozs.system.mapper.SysFileRefMapper;
  30. import com.ozs.system.service.ISysDeptService;
  31. import com.ozs.system.service.ISysDictTypeService;
  32. import org.springframework.beans.factory.annotation.Autowired;
  33. import org.springframework.stereotype.Service;
  34. import org.springframework.util.ObjectUtils;
  35. import java.math.BigDecimal;
  36. import java.util.*;
  37. @Service
  38. public class ProvisionalPlanServiceImpl extends ServiceImpl<ProvisionalPlanMapper, ProvisionalPlan> implements ProvisionalPlanService {
  39. @Autowired
  40. private ProvisionalPlanMapper provisionalPlanMapper;
  41. @Autowired
  42. private ISysDictTypeService dictTypeService;
  43. @Autowired
  44. private SysDeptMapper deptMapper;
  45. @Autowired
  46. private ISysDeptService deptService;
  47. @Autowired
  48. private PlanYearsMapper planYearsMapper;
  49. @Autowired
  50. private SysFileRefMapper sysFileRefMapper;
  51. @Override
  52. public int deleteProvisionalPlanById(Integer planYearId) {
  53. return provisionalPlanMapper.deleteProvisionalPlanById(planYearId);
  54. }
  55. @Override
  56. public int updateProvisionalPlanById(ProvisionalPlan provisionalPlan) {
  57. return provisionalPlanMapper.updateProvisionalPlanById(provisionalPlan);
  58. }
  59. @Override
  60. public String importProvisionalPlan(List<ProvisionalPlan> provisionalPlans, boolean updateSupport, LoginUser loginUser) {
  61. // 字典项
  62. HashMap<String, HashMap<String, String>> planEnums = dictTypeService.getAboutEnums();
  63. HashMap<String, String> projectTypesMap = planEnums.get("projectTypes");
  64. HashMap<String, String> planPurchaseModesMap = planEnums.get("planPurchaseModes");
  65. HashMap<String, String> projectAttributes = planEnums.get("projectAttributes");
  66. HashMap<String, String> purchaseServices = planEnums.get("purchaseServices");
  67. int successNum = 0;
  68. int failureNum = 0;
  69. StringBuilder successMsg = new StringBuilder();
  70. StringBuilder failureMsg = new StringBuilder();
  71. for (ProvisionalPlan ofProvisionalPlan : provisionalPlans) {
  72. try {
  73. //验证项目名称是否重复导入
  74. List<ProvisionalPlan> plan = provisionalPlanMapper.selectProjectName(ofProvisionalPlan.getProjectName());
  75. //将录入信息中的值更改为要保存的数据
  76. if (plan.size() == 0) {
  77. //采购单位
  78. SysDept info = deptMapper.checkDeptNameOnlyOne(ofProvisionalPlan.getPurchaseDeptName());
  79. if (StringUtils.isNotNull(info)) {
  80. ofProvisionalPlan.setPurchaseDeptId(info.getDeptId());
  81. }
  82. ofProvisionalPlan.setProjectType(projectTypesMap.get(ofProvisionalPlan.getProjectType()));
  83. ofProvisionalPlan.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
  84. ofProvisionalPlan.setPurchaseMode(planPurchaseModesMap.get(ofProvisionalPlan.getPurchaseMode()));
  85. //项目属性是多选字段
  86. StringBuilder builder = new StringBuilder();
  87. if (ofProvisionalPlan.getProjectAttr().contains(",")) {
  88. String[] split = ofProvisionalPlan.getProjectAttr().split(",");
  89. for (String s : split) {
  90. builder.append(projectAttributes.get(s) + ",");
  91. }
  92. } else {
  93. builder.append(projectAttributes.get(ofProvisionalPlan.getProjectAttr()));
  94. }
  95. ofProvisionalPlan.setProjectAttr(builder.toString());
  96. ofProvisionalPlan.setPurchaseServices(purchaseServices.get(ofProvisionalPlan.getPurchaseServices()));
  97. ofProvisionalPlan.setIsExcess(isExcessOrNo(ofProvisionalPlan.getProjectType(), ofProvisionalPlan.getEvaluation()));
  98. ofProvisionalPlan.setCreated(String.valueOf(loginUser.getUserId()));
  99. ofProvisionalPlan.setCreateTime(new Date());
  100. ofProvisionalPlan.setPlanType("1");
  101. provisionalPlanMapper.insert(ofProvisionalPlan);
  102. successNum++;
  103. successMsg.append("*" + successNum + "、项目 " + ofProvisionalPlan.getProjectName() + " 导入成功!");
  104. } else {
  105. failureNum++;
  106. failureMsg.append("*" + successNum + "、项目 " + ofProvisionalPlan.getProjectName() + " 已存在");
  107. }
  108. } catch (Exception exc) {
  109. failureNum++;
  110. String msg = "*" + successNum + "、项目 " + ofProvisionalPlan.getProjectName() + " 导入失败";
  111. failureMsg.append(msg + exc.getMessage());
  112. log.error(msg, exc);
  113. }
  114. }
  115. if (failureNum > 0) {
  116. failureMsg.insert(0, "导入失败!共 " + failureNum + " 条数据格式不正确:");
  117. throw new ServiceException(failureMsg.toString());
  118. } else {
  119. successMsg.insert(0, "导入成功!共 " + successNum + " 条。");
  120. }
  121. return successMsg.toString();
  122. }
  123. @Override
  124. public List<ProvisionalPlan> selectProvisionalPlanExport(ProvisionalPlanVo vo) {
  125. List<ProvisionalPlan> list = new ArrayList<>();
  126. List<ProvisionalPlan> provisionalPlanList = new ArrayList<>();
  127. try {
  128. int num = 1;
  129. int size = 200;
  130. while (size == 200) {
  131. LambdaQueryWrapper<ProvisionalPlan> lw = new LambdaQueryWrapper<ProvisionalPlan>();
  132. if (!ObjectUtils.isEmpty(vo.getProjectName())) {
  133. lw.like(ProvisionalPlan::getProjectName, vo.getProjectName());
  134. }
  135. if (!ObjectUtils.isEmpty(vo.getPurchaseServices())) {
  136. lw.eq(ProvisionalPlan::getPurchaseServices, vo.getPurchaseServices());
  137. }
  138. if (!ObjectUtils.isEmpty(vo.getIsExcess())) {
  139. lw.eq(ProvisionalPlan::getIsExcess, vo.getIsExcess());
  140. }
  141. if (!ObjectUtils.isEmpty(vo.getProjectStatus())) {
  142. lw.eq(ProvisionalPlan::getProjectStatus, vo.getProjectStatus());
  143. }
  144. if (!ObjectUtils.isEmpty(vo.getStartTime())) {
  145. lw.ge(ProvisionalPlan::getPlanDemandSubTime, vo.getStartTime());
  146. }
  147. if (!ObjectUtils.isEmpty(vo.getEndTime())) {
  148. lw.le(ProvisionalPlan::getPlanDemandSubTime, vo.getEndTime());
  149. }
  150. Page<ProvisionalPlan> page = provisionalPlanMapper.selectPage(new Page<ProvisionalPlan>(num, size, false), lw);
  151. list.addAll(page.getRecords());
  152. size = page.getRecords().size();
  153. num++;
  154. }
  155. provisionalPlanList = changeTo(list);
  156. } catch (Exception e) {
  157. e.printStackTrace();
  158. }
  159. return provisionalPlanList;
  160. }
  161. @Override
  162. public int commitProvisionalPlan(ProvisionalPlanVo provisionalPlanVo) {
  163. return provisionalPlanMapper.commitProvisionalPlan(provisionalPlanVo.getPlanPracticalId());
  164. }
  165. @Override
  166. public ProvisionalPlan seletById(Integer planPracticalId) {
  167. ProvisionalPlan provisionalPlan = changeToProvisionalPlan(provisionalPlanMapper.seletById(planPracticalId));
  168. return provisionalPlan;
  169. }
  170. @Override
  171. public PageInfo<ProvisionalPlan> selectProvisionalPlan(ProvisionalPlanVo provisionalPlanVo) {
  172. List<ProvisionalPlan> provisionalPlanList = provisionalPlanMapper.selectProvisionalPlan(provisionalPlanVo);
  173. provisionalPlanList = changeTo(provisionalPlanList);
  174. PageHelper.startPage(provisionalPlanVo.getPageNum().intValue(), provisionalPlanVo.getPageSize().intValue());
  175. PageInfo<ProvisionalPlan> pageInfo = new PageInfo<>(provisionalPlanList);
  176. return pageInfo;
  177. }
  178. @Override
  179. public PageInfo<ProvisionalPlan> selectProvisionalPlanAudit(ProvisionalPlanVo provisionalPlanVo) {
  180. List<ProvisionalPlan> provisionalPlanList = provisionalPlanMapper.selectProvisionalPlanAudit(provisionalPlanVo);
  181. provisionalPlanList = changeTo(provisionalPlanList);
  182. PageHelper.startPage(provisionalPlanVo.getPageNum().intValue(), provisionalPlanVo.getPageSize().intValue());
  183. PageInfo<ProvisionalPlan> pageInfo = new PageInfo<>(provisionalPlanList);
  184. return pageInfo;
  185. }
  186. @Override
  187. public AjaxResult auditPass(ProvisionalPlanVo provisionalPlanVo) {
  188. ProvisionalPlan byId = provisionalPlanMapper.seletById(provisionalPlanVo.getPlanPracticalId());
  189. if (ObjectUtils.isEmpty(byId.getPlanYearId())) {
  190. PlanYears ofYears = new PlanYears();
  191. BeanUtils.copyProperties(provisionalPlanVo, ofYears);
  192. planYearsMapper.insertPlanYears(ofYears);
  193. Long planYearId = ofYears.getPlanYearId();
  194. byId.setPlanYearId(ofYears.getPlanYearId().intValue());
  195. }
  196. byId.setProjectStatus(ProjectStatus.PLANTOEXAMINE.getCode());
  197. return review(provisionalPlanVo, byId);
  198. }
  199. @Override
  200. public AjaxResult auditNoPass(ProvisionalPlanVo provisionalPlanVo) {
  201. ProvisionalPlan provisionalPlan = new ProvisionalPlan();
  202. BeanUtils.copyProperties(provisionalPlanVo, provisionalPlan);
  203. provisionalPlan.setProjectStatus(ProjectStatus.PLANTOBACK.getCode());
  204. return review(provisionalPlanVo, provisionalPlan);
  205. }
  206. private AjaxResult review(ProvisionalPlanVo vo, ProvisionalPlan provisionalPlan) {
  207. List<SysFileRef> sysFileRefs = vo.getSysFileRefs();
  208. if (!ObjectUtils.isEmpty(sysFileRefs)) {
  209. for (SysFileRef ref : sysFileRefs) {
  210. ref.setRedId(vo.getPlanPracticalId().longValue());
  211. ref.setType(SysFileRefEnum.PLAN_TEMPORARY.getType());
  212. ref.setCreated(vo.getUpdated());
  213. ref.setCreateTime(new Date());
  214. ref.setUpdated(vo.getUpdated());
  215. ref.setUpdateTime(new Date());
  216. sysFileRefMapper.insert(ref);
  217. }
  218. }
  219. int review = provisionalPlanMapper.review(provisionalPlan);
  220. if (review != 1) {
  221. return AjaxResult.error("项目状态数据异常");
  222. }
  223. return AjaxResult.success();
  224. }
  225. //判断是否为超额计划
  226. public String isExcessOrNo(String projectType, BigDecimal evaluation) {
  227. BigDecimal threshold = new BigDecimal(0);
  228. //获取各个项目类型设定的概算金额阈值
  229. List<SysDictData> data = dictTypeService.selectDictDataByType("sys_over_limit_threshold");
  230. HashMap<String, String> thresholdMap = new LinkedHashMap<>();
  231. //各个类型的概算金额阈值
  232. for (SysDictData dictData : data) {
  233. // 类型----阈值
  234. thresholdMap.put(dictData.getDictLabel(), dictData.getDictValue());
  235. }
  236. //项目类型
  237. for (ProjectTypes value : ProjectTypes.values()) {
  238. if (projectType.equals(value.getCode())) {
  239. threshold = BigDecimal.valueOf(Long.parseLong(thresholdMap.get(value.getInfo())));
  240. }
  241. break;
  242. }
  243. if (evaluation.compareTo(threshold) == 1) {
  244. //是超额计划
  245. return ("1");
  246. } else {
  247. return ("0");
  248. }
  249. }
  250. // 字典项负值
  251. public ProvisionalPlan changeToProvisionalPlan(ProvisionalPlan provisionalPlan) {
  252. HashMap<String, HashMap<String, String>> planEnums = dictTypeService.getAboutEnums();
  253. HashMap<String, String> projectTypesMap = planEnums.get("projectTypes");
  254. HashMap<String, String> planPurchaseModesMap = planEnums.get("planPurchaseModes");
  255. HashMap<String, String> projectAttributes = planEnums.get("projectAttributes");
  256. HashMap<String, String> purchaseServices = planEnums.get("purchaseServices");
  257. if (provisionalPlan.getPurchaseDeptId() != null) {
  258. SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(provisionalPlan.getPurchaseDeptId()).get("sysDept");
  259. provisionalPlan.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
  260. }
  261. for (Map.Entry<String, String> entry : projectTypesMap.entrySet()) {
  262. if (provisionalPlan.getProjectType() != null && provisionalPlan.getProjectType().equals(entry.getValue())) {
  263. provisionalPlan.setProjectTypeStr(entry.getKey());
  264. break;
  265. }
  266. }
  267. for (Map.Entry<String, String> entry : planPurchaseModesMap.entrySet()) {
  268. if (provisionalPlan.getPurchaseMode() != null && provisionalPlan.getPurchaseMode().equals(entry.getValue())) {
  269. provisionalPlan.setPurchaseModeStr(entry.getKey());
  270. break;
  271. }
  272. }
  273. //项目属性是拼接的
  274. if (provisionalPlan.getProjectAttr().length() > 1) {
  275. StringBuilder builder = new StringBuilder();
  276. String[] split = provisionalPlan.getProjectAttr().split(",");
  277. for (String s : split) {
  278. for (Map.Entry<String, String> entry : projectAttributes.entrySet()) {
  279. if (s.equals(entry.getValue())) {
  280. builder.append(entry.getKey() + ",");
  281. break;
  282. }
  283. }
  284. }
  285. provisionalPlan.setProjectAttrStr(builder.toString());
  286. } else {
  287. for (Map.Entry<String, String> entry : projectAttributes.entrySet()) {
  288. if (provisionalPlan.getProjectAttr() != null && provisionalPlan.getProjectAttr().equals(entry.getValue())) {
  289. provisionalPlan.setProjectAttrStr(entry.getKey());
  290. break;
  291. }
  292. }
  293. }
  294. for (Map.Entry<String, String> entry : purchaseServices.entrySet()) {
  295. if (provisionalPlan.getPurchaseServices() != null && provisionalPlan.getPurchaseServices().equals(entry.getValue())) {
  296. provisionalPlan.setPurchaseServicesStr(entry.getKey());
  297. break;
  298. }
  299. }
  300. return provisionalPlan;
  301. }
  302. //字段赋值对应的名称
  303. public List<ProvisionalPlan> changeTo(List<ProvisionalPlan> provisionalPlans) {
  304. HashMap<String, HashMap<String, String>> planEnums = dictTypeService.getAboutEnums();
  305. HashMap<String, String> projectTypesMap = planEnums.get("projectTypes");
  306. HashMap<String, String> planPurchaseModesMap = planEnums.get("planPurchaseModes");
  307. HashMap<String, String> projectAttributes = planEnums.get("projectAttributes");
  308. HashMap<String, String> purchaseServices = planEnums.get("purchaseServices");
  309. List<ProvisionalPlan> list = new ArrayList<ProvisionalPlan>();
  310. for (ProvisionalPlan provisionalPlan : provisionalPlans) {
  311. if (provisionalPlan.getPurchaseDeptId() != null) {
  312. SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(provisionalPlan.getPurchaseDeptId()).get("sysDept");
  313. provisionalPlan.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
  314. }
  315. for (Map.Entry<String, String> entry : projectTypesMap.entrySet()) {
  316. if (provisionalPlan.getProjectType() != null && provisionalPlan.getProjectType().equals(entry.getValue())) {
  317. provisionalPlan.setProjectTypeStr(entry.getKey());
  318. break;
  319. }
  320. }
  321. for (Map.Entry<String, String> entry : planPurchaseModesMap.entrySet()) {
  322. if (provisionalPlan.getPurchaseMode() != null && provisionalPlan.getPurchaseMode().equals(entry.getValue())) {
  323. provisionalPlan.setPurchaseModeStr(entry.getKey());
  324. break;
  325. }
  326. }
  327. //项目属性是拼接的
  328. if (provisionalPlan.getProjectAttr().length() > 1) {
  329. StringBuilder builder = new StringBuilder();
  330. String[] split = provisionalPlan.getProjectAttr().split(",");
  331. for (String s : split) {
  332. for (Map.Entry<String, String> entry : projectAttributes.entrySet()) {
  333. if (s.equals(entry.getValue())) {
  334. builder.append(entry.getKey() + ",");
  335. break;
  336. }
  337. }
  338. }
  339. provisionalPlan.setProjectAttrStr(builder.toString());
  340. } else {
  341. for (Map.Entry<String, String> entry : projectAttributes.entrySet()) {
  342. if (provisionalPlan.getProjectAttr() != null && provisionalPlan.getProjectAttr().equals(entry.getValue())) {
  343. provisionalPlan.setProjectAttrStr(entry.getKey());
  344. break;
  345. }
  346. }
  347. }
  348. for (Map.Entry<String, String> entry : purchaseServices.entrySet()) {
  349. if (provisionalPlan.getPurchaseServices() != null && provisionalPlan.getPurchaseServices().equals(entry.getValue())) {
  350. provisionalPlan.setPurchaseServicesStr(entry.getKey());
  351. break;
  352. }
  353. }
  354. list.add(provisionalPlan);
  355. }
  356. return list;
  357. }
  358. }