PlanYearsServiceImpl.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. package com.ozs.plan.service.impl;
  2. import com.ozs.common.core.domain.AjaxResult;
  3. import com.ozs.common.core.domain.entity.SysDictData;
  4. import com.ozs.common.core.domain.model.LoginUser;
  5. import com.ozs.common.enums.ProjectStatus;
  6. import com.ozs.common.enums.ProjectTypes;
  7. import com.ozs.common.exception.ServiceException;
  8. import com.ozs.common.utils.StringUtils;
  9. import com.ozs.common.utils.bean.BeanUtils;
  10. import com.ozs.plan.doman.PlanYears;
  11. import com.ozs.plan.doman.vo.requestVo.PlanYearsStandardVo;
  12. import com.ozs.plan.doman.vo.responseVo.PlanYearsResponseVo;
  13. import com.ozs.plan.mapper.PlanYearsMapper;
  14. import com.ozs.plan.service.PlanYearsService;
  15. import com.ozs.system.domain.vo.responseVo.SysDeptResponseVo;
  16. import com.ozs.system.service.ISysDeptService;
  17. import com.ozs.system.service.ISysDictTypeService;
  18. import com.ozs.system.service.impl.SysUserServiceImpl;
  19. import org.slf4j.Logger;
  20. import org.slf4j.LoggerFactory;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.stereotype.Service;
  23. import javax.validation.Validator;
  24. import java.math.BigDecimal;
  25. import java.util.ArrayList;
  26. import java.util.Date;
  27. import java.util.HashMap;
  28. import java.util.LinkedHashMap;
  29. import java.util.List;
  30. /**
  31. * @author buzhanyi
  32. */
  33. @Service
  34. public class PlanYearsServiceImpl implements PlanYearsService {
  35. private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
  36. @Autowired
  37. PlanYearsMapper planYearsMapper;
  38. @Autowired
  39. protected Validator validator;
  40. @Autowired
  41. private ISysDictTypeService dictTypeService;
  42. @Autowired
  43. private ISysDeptService deptService;
  44. @Override
  45. public List<PlanYears> selectPlanYearsList(PlanYearsStandardVo vo) {
  46. PlanYears ofYears = new PlanYears();
  47. List<PlanYears> planYears = new ArrayList<>();
  48. try {
  49. BeanUtils.copyProperties(vo, ofYears);
  50. planYears = planYearsMapper.selectPlanYearsList(ofYears);
  51. for (PlanYears planYear : planYears) {
  52. SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(planYear.getPurchaseDeptId()).get("sysDept");
  53. planYear.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
  54. }
  55. } catch (Exception e) {
  56. e.printStackTrace();
  57. }
  58. return planYears;
  59. }
  60. @Override
  61. public List<PlanYears> selectPlanYearsExamineList(PlanYearsStandardVo vo) {
  62. PlanYears ofYears = new PlanYears();
  63. List<PlanYears> planYears = new ArrayList<>();
  64. try {
  65. BeanUtils.copyProperties(vo, ofYears);
  66. planYears = planYearsMapper.selectPlanYearsExamineList(ofYears);
  67. for (PlanYears planYear : planYears) {
  68. SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(planYear.getPurchaseDeptId()).get("sysDept");
  69. planYear.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
  70. }
  71. } catch (Exception e) {
  72. e.printStackTrace();
  73. }
  74. return planYears;
  75. }
  76. @Override
  77. public AjaxResult insertPlanYears(PlanYearsStandardVo yearsStandardVo) {
  78. if (planYearsMapper.countProjectName(yearsStandardVo.getProjectName()).size() > 0) {
  79. return AjaxResult.error("该项目名称已经存在");
  80. }
  81. PlanYears ofYears = new PlanYears();
  82. try {
  83. BeanUtils.copyProperties(yearsStandardVo, ofYears);
  84. } catch (Exception e) {
  85. e.printStackTrace();
  86. }
  87. //判断是否为超额计划
  88. ofYears.setIsExcess(isExcessOrNo(ofYears.getProjectType(), ofYears.getEvaluation()));
  89. ofYears.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
  90. ofYears.setCreateTime(new Date());
  91. planYearsMapper.insertPlanYears(ofYears);
  92. return AjaxResult.success();
  93. }
  94. @Override
  95. public AjaxResult deletePlanYearsByIds(Long[] planIds) {
  96. planYearsMapper.deletePlanYearsByIds(planIds);
  97. return AjaxResult.success();
  98. }
  99. @Override
  100. public AjaxResult deletePlanYearsById(Long planId) {
  101. planYearsMapper.deletePlanYearsById(planId);
  102. return AjaxResult.success();
  103. }
  104. @Override
  105. public AjaxResult view(PlanYearsStandardVo yearsStandardVo) {
  106. PlanYearsResponseVo planYearsResponseVo = new PlanYearsResponseVo();
  107. PlanYears byId = planYearsMapper.getById(yearsStandardVo.getPlanYearId());
  108. if (byId == null) {
  109. return AjaxResult.error("数据查询失败");
  110. }
  111. BeanUtils.copyProperties(byId, planYearsResponseVo);
  112. return AjaxResult.success(planYearsResponseVo);
  113. }
  114. @Override
  115. public AjaxResult update(PlanYearsStandardVo yearsStandardVo) {
  116. if (planYearsMapper.countProjectNameOther(yearsStandardVo.getProjectName(), String.valueOf(yearsStandardVo.getPlanYearId())) > 0) {
  117. return AjaxResult.error("该项目名称已经存在");
  118. }
  119. PlanYears ofYears = new PlanYears();
  120. try {
  121. BeanUtils.copyProperties(yearsStandardVo, ofYears);
  122. } catch (Exception e) {
  123. e.printStackTrace();
  124. }
  125. ofYears.setIsExcess(isExcessOrNo(ofYears.getProjectType(), ofYears.getEvaluation()));
  126. ofYears.setUpdateTime(new Date());
  127. planYearsMapper.updateById(ofYears);
  128. return AjaxResult.success();
  129. }
  130. @Override
  131. public String importPlanYears(List<PlanYears> planYears, boolean isUpdateSupport, LoginUser loginUser) {
  132. if (StringUtils.isNull(planYears) || planYears.size() == 0) {
  133. throw new ServiceException("导入年度计划数据不能为空!");
  134. }
  135. HashMap<String, HashMap<String, String>> planEnums = dictTypeService.getAboutEnums();
  136. HashMap<String, String> projectTypesMap = planEnums.get("ProjectTypes");
  137. HashMap<String, String> planPurchaseModesMap = planEnums.get("PlanPurchaseModes");
  138. HashMap<String, String> projectAttributes = planEnums.get("ProjectAttributes");
  139. HashMap<String, String> purchaseServices = planEnums.get("purchaseServices");
  140. //deptService.se
  141. int successNum = 0;
  142. int failureNum = 0;
  143. StringBuilder successMsg = new StringBuilder();
  144. StringBuilder failureMsg = new StringBuilder();
  145. for (PlanYears ofYear : planYears) {
  146. try {
  147. //验证项目名称是否重复导入
  148. List<PlanYears> plan = planYearsMapper.countProjectName(ofYear.getProjectName());
  149. if (plan.size() == 0) {
  150. //将录入信息中的值更改为要保存的数据
  151. ofYear.setProjectType(projectTypesMap.get(ofYear.getProjectType()));
  152. ofYear.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
  153. ofYear.setPurchaseMode(planPurchaseModesMap.get(ofYear.getPurchaseMode()));
  154. //项目属性是多选字段
  155. String[] split = ofYear.getProjectAtt().split(",");
  156. StringBuilder builder = new StringBuilder();
  157. if (split.length > 1) {
  158. for (String s : split) {
  159. builder.append(projectAttributes.get(s) + ",");
  160. }
  161. }
  162. ofYear.setProjectAtt(builder.toString());
  163. ofYear.setPurchaseServices(purchaseServices.get(ofYear.getPurchaseServices()));
  164. ofYear.setCreated(String.valueOf(loginUser.getUserId()));
  165. ofYear.setCreateTime(new Date());
  166. //采购单位
  167. planYearsMapper.insertPlanYears(ofYear);
  168. successNum++;
  169. successMsg.append("<br/>" + successNum + "、项目 " + ofYear.getProjectName() + " 导入成功");
  170. //} else if (isUpdateSupport) {
  171. // PlanYears years = plan.get(0);
  172. // BeanValidators.validateWithException(validator, ofYear);
  173. // years.setCreateTime(new Date());
  174. // years.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
  175. // planYearsMapper.updateById(years);
  176. // successNum++;
  177. // successMsg.append("<br/>" + successNum + "、项目 " + ofYear.getProjectName() + " 更新成功");
  178. } else {
  179. failureNum++;
  180. failureMsg.append("<br/>" + successNum + "、项目 " + ofYear.getProjectName() + " 已存在");
  181. }
  182. } catch (Exception exc) {
  183. failureNum++;
  184. String msg = "<br/>" + successNum + "、项目 " + ofYear.getProjectName() + " 导入失败";
  185. failureMsg.append(msg + exc.getMessage());
  186. log.error(msg, exc);
  187. }
  188. }
  189. if (failureNum > 0) {
  190. failureMsg.insert(0, "导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
  191. throw new ServiceException(failureMsg.toString());
  192. } else {
  193. successMsg.insert(0, "导入成功!共 " + successNum + " 条,数据如下:");
  194. }
  195. return successMsg.toString();
  196. }
  197. @Override
  198. public AjaxResult commit(PlanYearsStandardVo yearsStandardVo) {
  199. //PlanYears byId = PlanYearsMapper.getById(yearsStandardVo.getPlanYearId());
  200. //BigDecimal evaluation = byId.getEvaluation();
  201. //BigDecimal threshold = new BigDecimal(0);
  202. ////获取各个项目类型设定的概算金额阈值
  203. //List<SysDictData> data = dictTypeService.selectDictDataByType("sys_over_limit_threshold");
  204. //HashMap<String, String> thresholdMap = new LinkedHashMap<>();
  205. ////各个类型的概算金额阈值
  206. //for (SysDictData dictData : data) {
  207. // // 类型----阈值
  208. // thresholdMap.put(dictData.getDictLabel(), dictData.getDictValue());
  209. //}
  210. ////项目类型
  211. //for (ProjectTypes value : ProjectTypes.values()) {
  212. // if (byId.getProjectType().equals(value.getCode())) {
  213. // threshold = BigDecimal.valueOf(Long.parseLong(thresholdMap.get(value.getInfo())));
  214. // }
  215. // break;
  216. //}
  217. //
  218. //if (evaluation.compareTo(threshold) == 1) {
  219. // //是超额项目
  220. //}
  221. int commit = planYearsMapper.commit(yearsStandardVo.getPlanYearId());
  222. if (commit != 1) {
  223. return AjaxResult.error("项目状态数据异常");
  224. }
  225. return AjaxResult.success();
  226. }
  227. @Override
  228. public AjaxResult reviewTo(PlanYearsStandardVo vo) {
  229. PlanYears ofYears = new PlanYears();
  230. ofYears.setPlanYearId(vo.getPlanYearId());
  231. ofYears.setProjectStatus(ProjectStatus.PLANTOEXAMINE.getCode());
  232. int review = planYearsMapper.review(ofYears);
  233. if (review != 1) {
  234. return AjaxResult.error("项目状态数据异常");
  235. }
  236. return AjaxResult.success();
  237. }
  238. @Override
  239. public AjaxResult reviewReturn(PlanYearsStandardVo vo) {
  240. PlanYears ofYears = new PlanYears();
  241. BeanUtils.copyProperties(vo, ofYears);
  242. ofYears.setProjectStatus(ProjectStatus.PLANTOBACK.getCode());
  243. int review = planYearsMapper.review(ofYears);
  244. if (review != 1) {
  245. return AjaxResult.error("项目状态数据异常");
  246. }
  247. return AjaxResult.success();
  248. }
  249. @Override
  250. public AjaxResult appUpdate(PlanYearsStandardVo vo) {
  251. PlanYears ofYears = new PlanYears();
  252. BeanUtils.copyProperties(vo, ofYears);
  253. //申请后会成为未提交的状态,可以进行修改
  254. ofYears.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
  255. int review = planYearsMapper.review(ofYears);
  256. if (review != 1) {
  257. return AjaxResult.error("项目状态数据异常");
  258. }
  259. return AjaxResult.success();
  260. }
  261. //判断是否为超额计划
  262. public String isExcessOrNo(String projectType, BigDecimal evaluation) {
  263. BigDecimal threshold = new BigDecimal(0);
  264. //获取各个项目类型设定的概算金额阈值
  265. List<SysDictData> data = dictTypeService.selectDictDataByType("sys_over_limit_threshold");
  266. HashMap<String, String> thresholdMap = new LinkedHashMap<>();
  267. //各个类型的概算金额阈值
  268. for (SysDictData dictData : data) {
  269. // 类型----阈值
  270. thresholdMap.put(dictData.getDictLabel(), dictData.getDictValue());
  271. }
  272. //项目类型
  273. for (ProjectTypes value : ProjectTypes.values()) {
  274. if (projectType.equals(value.getCode())) {
  275. threshold = BigDecimal.valueOf(Long.parseLong(thresholdMap.get(value.getInfo())));
  276. }
  277. break;
  278. }
  279. if (evaluation.compareTo(threshold) == 1) {
  280. //是超额计划
  281. return ("1");
  282. } else {
  283. return ("0");
  284. }
  285. }
  286. }