PlanYearsServiceImpl.java 67 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359
  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.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.ozs.base.domain.BaseAgency;
  7. import com.ozs.base.service.BaseAgencyService;
  8. import com.ozs.common.constant.Constants;
  9. import com.ozs.common.core.domain.AjaxResult;
  10. import com.ozs.common.core.domain.entity.SysDept;
  11. import com.ozs.common.core.domain.entity.SysDictData;
  12. import com.ozs.common.core.domain.entity.SysRole;
  13. import com.ozs.common.core.domain.entity.SysUser;
  14. import com.ozs.common.core.domain.model.LoginUser;
  15. import com.ozs.common.enums.*;
  16. import com.ozs.common.exception.ServiceException;
  17. import com.ozs.common.utils.PageUtils;
  18. import com.ozs.common.utils.SecurityUtils;
  19. import com.ozs.common.utils.StringUtils;
  20. import com.ozs.common.utils.bean.BeanUtils;
  21. import com.ozs.home.domain.vo.HomeToDoQueryResVo;
  22. import com.ozs.plan.doman.PlanQuarter;
  23. import com.ozs.plan.doman.PlanYears;
  24. import com.ozs.plan.doman.ProvisionalPlan;
  25. import com.ozs.plan.doman.vo.requestVo.PlanYearsStandardVo;
  26. import com.ozs.plan.doman.vo.responseVo.PlanQuarterResponseVo;
  27. import com.ozs.plan.doman.vo.responseVo.PlanYearsResponseVo;
  28. import com.ozs.plan.mapper.PlanQuarterMapper;
  29. import com.ozs.plan.mapper.PlanYearsMapper;
  30. import com.ozs.plan.mapper.ProvisionalPlanMapper;
  31. import com.ozs.plan.service.PlanYearsService;
  32. import com.ozs.pm.doman.*;
  33. import com.ozs.pm.doman.vo.responseVo.*;
  34. import com.ozs.pm.mapper.PmDemandMapper;
  35. import com.ozs.pm.service.*;
  36. import com.ozs.system.domain.SysFileInfo;
  37. import com.ozs.system.domain.SysFileRef;
  38. import com.ozs.system.domain.vo.responseVo.SysDeptResponseVo;
  39. import com.ozs.system.mapper.SysDeptMapper;
  40. import com.ozs.system.mapper.SysFileRefMapper;
  41. import com.ozs.system.mapper.SysRoleMapper;
  42. import com.ozs.system.service.*;
  43. import lombok.extern.slf4j.Slf4j;
  44. import org.springframework.beans.factory.annotation.Autowired;
  45. import org.springframework.stereotype.Service;
  46. import org.springframework.transaction.annotation.Transactional;
  47. import org.springframework.util.ObjectUtils;
  48. import javax.annotation.Resource;
  49. import javax.servlet.http.HttpServletRequest;
  50. import javax.validation.Validator;
  51. import java.math.BigDecimal;
  52. import java.text.ParseException;
  53. import java.text.SimpleDateFormat;
  54. import java.util.ArrayList;
  55. import java.util.Date;
  56. import java.util.HashMap;
  57. import java.util.LinkedHashMap;
  58. import java.util.List;
  59. import java.util.Map;
  60. import java.util.stream.Collectors;
  61. /**
  62. * @author buzhanyi
  63. */
  64. @Service
  65. @Slf4j
  66. public class PlanYearsServiceImpl extends ServiceImpl<PlanYearsMapper, PlanYears> implements PlanYearsService {
  67. @Autowired
  68. PlanYearsMapper planYearsMapper;
  69. @Autowired
  70. private PlanQuarterMapper planQuarterMapper;
  71. @Autowired
  72. protected Validator validator;
  73. @Autowired
  74. private ISysDictTypeService dictTypeService;
  75. @Autowired
  76. private ISysDeptService deptService;
  77. @Autowired
  78. private SysFileRefMapper sysFileRefMapper;
  79. @Autowired
  80. private SysDeptMapper deptMapper;
  81. @Autowired
  82. private SysFileService fileService;
  83. @Autowired
  84. private SysRoleMapper sysRoleMapper;
  85. @Autowired
  86. private ISysUserService userService;
  87. @Autowired
  88. private PmDemandMapper pmDemandMapper;
  89. @Autowired
  90. private PlanQuarterServiceImpl quartzServiceImpl;
  91. @Autowired
  92. private IPmDemandService demandService;
  93. @Autowired
  94. private ProvisionalPlanMapper provisionalPlanMapper;
  95. @Autowired
  96. private IPmDemandService pmDemandService;
  97. @Autowired
  98. private ISysDictDataService dictDataService;
  99. @Autowired
  100. private BaseAgencyService baseAgencyService;
  101. @Autowired
  102. private PmBookBuildingService pmBookBuildingService;
  103. @Autowired
  104. private PmReleaseAnnouncementService pmReleaseAnnouncementService;
  105. @Autowired
  106. private PmDemandExpertRefService pmDemandExpertRefService;
  107. @Autowired
  108. private PmBidOpeningService pmBidOpeningService;
  109. @Autowired
  110. private PmBidWinningService pmBidWinningService;
  111. @Autowired
  112. private PmBidFailureService pmBidFailureService;
  113. @Autowired
  114. private PmContractInfoService pmContractInfoService;
  115. @Autowired
  116. private PmProjectConstructionService pmProjectConstructionService;
  117. @Autowired
  118. private SysFileRefService sysFileRefService;
  119. @Override
  120. public List<PlanYearsResponseVo> selectPlanYearsListEXP(PlanYearsStandardVo vo) {
  121. List<PlanYears> list = new ArrayList<>();
  122. List<PlanYearsResponseVo> planYearsList = new ArrayList<>();
  123. try {
  124. int num = 1;
  125. int size = 200;
  126. while (size == 200) {
  127. LambdaQueryWrapper<PlanYears> lw = new LambdaQueryWrapper<PlanYears>();
  128. if (!ObjectUtils.isEmpty(vo.getProjectName())) {
  129. lw.like(PlanYears::getProjectName, vo.getProjectName());
  130. }
  131. if (!ObjectUtils.isEmpty(vo.getPurchaseServices())) {
  132. lw.eq(PlanYears::getPurchaseServices, vo.getPurchaseServices());
  133. }
  134. if (!ObjectUtils.isEmpty(vo.getIsExcess())) {
  135. lw.eq(PlanYears::getIsExcess, vo.getIsExcess());
  136. }
  137. if (!ObjectUtils.isEmpty(vo.getProjectStatus())) {
  138. lw.eq(PlanYears::getProjectStatus, vo.getProjectStatus());
  139. }
  140. if (!ObjectUtils.isEmpty(vo.getBeginTime())) {
  141. lw.ge(PlanYears::getPlanDemandSubTime, vo.getBeginTime());
  142. }
  143. if (!ObjectUtils.isEmpty(vo.getEndTime())) {
  144. lw.le(PlanYears::getPlanDemandSubTime, vo.getEndTime());
  145. }
  146. lw.eq(PlanYears::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
  147. Page<PlanYears> page = planYearsMapper.selectPage(new Page<PlanYears>(num, size, false), lw);
  148. list.addAll(page.getRecords());
  149. size = page.getRecords().size();
  150. num++;
  151. }
  152. planYearsList = changeTo(list);
  153. } catch (Exception e) {
  154. e.printStackTrace();
  155. }
  156. return planYearsList;
  157. }
  158. @Override
  159. public List<PlanYearsResponseVo> selectPlanYearsExamineListEXP(PlanYearsStandardVo vo) {
  160. List<PlanYears> list = new ArrayList<>();
  161. List<PlanYearsResponseVo> planYearsList = new ArrayList<>();
  162. try {
  163. int num = 1;
  164. int size = 200;
  165. while (size == 200) {
  166. LambdaQueryWrapper<PlanYears> lw = new LambdaQueryWrapper<PlanYears>();
  167. if (!ObjectUtils.isEmpty(vo.getProjectName())) {
  168. lw.like(PlanYears::getProjectName, vo.getProjectName());
  169. }
  170. if (!ObjectUtils.isEmpty(vo.getPurchaseServices())) {
  171. lw.eq(PlanYears::getPurchaseServices, vo.getPurchaseServices());
  172. }
  173. if (!ObjectUtils.isEmpty(vo.getIsExcess())) {
  174. lw.eq(PlanYears::getIsExcess, vo.getIsExcess());
  175. }
  176. if (!ObjectUtils.isEmpty(vo.getProjectStatus())) {
  177. lw.eq(PlanYears::getProjectStatus, vo.getProjectStatus());
  178. } else {
  179. lw.in(PlanYears::getProjectStatus, "1,3");
  180. }
  181. if (!ObjectUtils.isEmpty(vo.getBeginTime())) {
  182. lw.ge(PlanYears::getPlanDemandSubTime, vo.getBeginTime());
  183. }
  184. if (!ObjectUtils.isEmpty(vo.getEndTime())) {
  185. lw.le(PlanYears::getPlanDemandSubTime, vo.getEndTime());
  186. }
  187. lw.eq(PlanYears::getDelFlay, DataIsDelete.DataNOTDelete);
  188. Page<PlanYears> page = planYearsMapper.selectPage(new Page<PlanYears>(num, size, false), lw);
  189. list.addAll(page.getRecords());
  190. size = page.getRecords().size();
  191. num++;
  192. }
  193. planYearsList = changeTo(list);
  194. } catch (Exception e) {
  195. e.printStackTrace();
  196. }
  197. return planYearsList;
  198. }
  199. @Transactional
  200. @Override
  201. public AjaxResult insertPlanYears(PlanYearsStandardVo yearsStandardVo) {
  202. if (planYearsMapper.countProjectName(yearsStandardVo.getProjectName()) > 0) {
  203. return AjaxResult.error("该项目名称已经存在");
  204. }
  205. PlanYears ofYears = new PlanYears();
  206. try {
  207. BeanUtils.copyProperties(yearsStandardVo, ofYears);
  208. } catch (Exception e) {
  209. e.printStackTrace();
  210. }
  211. //判断是否为超额计划
  212. ofYears.setIsExcess(isExcessOrNo(ofYears.getProjectType(), ofYears.getEvaluation()));
  213. ofYears.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
  214. ofYears.setCreateTime(new Date());
  215. planYearsMapper.insertPlanYears(ofYears);
  216. log.info("id:{}", ofYears.getPlanYearId());
  217. List<SysFileRef> sysFileRefs = yearsStandardVo.getSysFileRefs();
  218. if (!ObjectUtils.isEmpty(sysFileRefs)) {
  219. for (SysFileRef ref : sysFileRefs) {
  220. ref.setRedId(ofYears.getPlanYearId());
  221. ref.setType(SysFileRefEnum.PLAN_YEAR.getType());
  222. ref.setCreated(ofYears.getCreated());
  223. ref.setCreateTime(new Date());
  224. ref.setUpdated(ofYears.getCreated());
  225. ref.setUpdateTime(new Date());
  226. sysFileRefMapper.insert(ref);
  227. }
  228. }
  229. return AjaxResult.success();
  230. }
  231. @Override
  232. public AjaxResult deletePlanYearsByIds(Long[] planIds) {
  233. planYearsMapper.deletePlanYearsByIds(planIds);
  234. return AjaxResult.success();
  235. }
  236. @Override
  237. public AjaxResult deletePlanYearsById(Long planId) {
  238. planYearsMapper.deletePlanYearsById(planId);
  239. return AjaxResult.success();
  240. }
  241. @Override
  242. public AjaxResult view(PlanYearsStandardVo yearsStandardVo) {
  243. PlanYearsResponseVo responseVo = new PlanYearsResponseVo();
  244. PlanYears byId = planYearsMapper.getById(yearsStandardVo.getPlanYearId());
  245. byId.getPlanYearId();
  246. if (byId == null) {
  247. return AjaxResult.error("数据查询失败");
  248. }
  249. SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(Long.valueOf(byId.getPurchaseDeptId())).get("sysDept");
  250. byId.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
  251. HashMap<String, Object> map = new HashMap<>();
  252. map.put("red_id", byId.getPlanYearId());
  253. map.put("type", SysFileRefEnum.PLAN_YEAR.getType());
  254. List<SysFileRef> fileRefs = sysFileRefMapper.selectByMap(map);
  255. List<SysFileInfo> fileInfos = new ArrayList<>();
  256. BeanUtils.copyProperties(byId, responseVo);
  257. if (!ObjectUtils.isEmpty(fileRefs)) {
  258. for (SysFileRef ref : fileRefs) {
  259. SysFileInfo fileInfo = fileService.getById(ref.getFileId());
  260. fileInfos.add(fileInfo);
  261. }
  262. responseVo.setFileInfos(fileInfos);
  263. }
  264. return AjaxResult.success(responseVo);
  265. }
  266. @Transactional
  267. @Override
  268. public AjaxResult update(PlanYearsStandardVo yearsStandardVo) {
  269. if (planYearsMapper.countProjectNameOther(yearsStandardVo.getProjectName(), String.valueOf(yearsStandardVo.getPlanYearId())) > 0) {
  270. return AjaxResult.error("该项目名称已经存在");
  271. }
  272. PlanYears ofYears = new PlanYears();
  273. try {
  274. BeanUtils.copyProperties(yearsStandardVo, ofYears);
  275. } catch (Exception e) {
  276. e.printStackTrace();
  277. }
  278. ofYears.setIsExcess(isExcessOrNo(ofYears.getProjectType(), ofYears.getEvaluation()));
  279. ofYears.setUpdateTime(new Date());
  280. planYearsMapper.updateInfoById(ofYears);
  281. List<SysFileRef> sysFileRefs = yearsStandardVo.getSysFileRefs();
  282. HashMap<String, Object> map = new HashMap<>();
  283. map.put("red_id", ofYears.getPlanYearId());
  284. map.put("type", "1");
  285. sysFileRefMapper.deleteByMap(map);
  286. if (!ObjectUtils.isEmpty(sysFileRefs)) {
  287. for (SysFileRef ref : sysFileRefs) {
  288. ref.setRedId(ofYears.getPlanYearId());
  289. ref.setType(SysFileRefEnum.PLAN_YEAR.getType());
  290. ref.setCreated(yearsStandardVo.getUpdated());
  291. ref.setCreateTime(new Date());
  292. ref.setUpdated(yearsStandardVo.getUpdated());
  293. ref.setUpdateTime(new Date());
  294. sysFileRefMapper.insert(ref);
  295. }
  296. }
  297. return AjaxResult.success();
  298. }
  299. @Transactional
  300. @Override
  301. public String importPlanYears(List<PlanYearsStandardVo> planYears, boolean isUpdateSupport, LoginUser loginUser) {
  302. if (StringUtils.isNull(planYears) || planYears.size() == 0) {
  303. throw new ServiceException("导入年度计划数据不能为空!");
  304. }
  305. List<PlanYears> plans = new ArrayList<>();
  306. for (PlanYearsStandardVo yearsStandardVo : planYears) {
  307. PlanYears ofYears = new PlanYears();
  308. BeanUtils.copyProperties(yearsStandardVo, ofYears);
  309. ofYears.setPurchaseDeptName(yearsStandardVo.getPurchaseDeptId());
  310. plans.add(ofYears);
  311. }
  312. HashMap<String, HashMap<String, String>> planEnums = dictTypeService.getAboutEnums();
  313. HashMap<String, String> projectTypesMap = planEnums.get("projectTypes");
  314. HashMap<String, String> planPurchaseModesMap = planEnums.get("planPurchaseModes");
  315. HashMap<String, String> projectAttributes = planEnums.get("projectAttributes");
  316. HashMap<String, String> purchaseServices = planEnums.get("purchaseServices");
  317. int successNum = 0;
  318. int failureNum = 0;
  319. StringBuilder successMsg = new StringBuilder();
  320. StringBuilder failureMsg = new StringBuilder();
  321. //deptService
  322. for (PlanYears ofYear : plans) {
  323. try {
  324. //验证项目名称是否重复导入
  325. //将录入信息中的值更改为要保存的数据
  326. if (planYearsMapper.countProjectName(ofYear.getProjectName()) == 0) {
  327. //采购单位
  328. SysDept info = deptMapper.checkDeptNameOnlyOne(ofYear.getPurchaseDeptName());
  329. if (!ObjectUtils.isEmpty(info)) {
  330. ofYear.setPurchaseDeptId(String.valueOf(info.getDeptId()));
  331. } else {
  332. ++failureNum;
  333. failureMsg.append("*" + failureNum + "*采购单位“" + ofYear.getPurchaseDeptName() + "”不存在");
  334. }
  335. ofYear.setProjectType(projectTypesMap.get(ofYear.getProjectType()));
  336. ofYear.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
  337. ofYear.setPurchaseMode(planPurchaseModesMap.get(ofYear.getPurchaseMode()));
  338. //项目属性是多选字段
  339. StringBuilder builder = new StringBuilder();
  340. if (ofYear.getProjectAttr().contains(",")) {
  341. String[] split = ofYear.getProjectAttr().split(",");
  342. for (String s : split) {
  343. if (!ofYear.getProjectAttr().endsWith(s)) {
  344. builder.append(projectAttributes.get(s) + ",");
  345. } else {
  346. builder.append(projectAttributes.get(s));
  347. }
  348. }
  349. } else {
  350. builder.append(projectAttributes.get(ofYear.getProjectAttr()));
  351. }
  352. ofYear.setProjectAttr(builder.toString());
  353. ofYear.setPurchaseServices(purchaseServices.get(ofYear.getPurchaseServices()));
  354. ofYear.setIsExcess(isExcessOrNo(ofYear.getProjectType(), ofYear.getEvaluation()));
  355. ofYear.setCreated(String.valueOf(loginUser.getUserId()));
  356. ofYear.setCreateTime(new Date());
  357. planYearsMapper.insertPlanYears(ofYear);
  358. successNum++;
  359. successMsg.append("*" + successNum + "、项目 " + ofYear.getProjectName() + " 导入成功!");
  360. //} else if (isUpdateSupport) {
  361. // PlanYears years = plan.get(0);
  362. // BeanValidators.validateWithException(validator, ofYear);
  363. // years.setCreateTime(new Date());
  364. // years.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
  365. // planYearsMapper.updateById(years);
  366. // successNum++;
  367. // successMsg.append("<br/>" + successNum + "、项目 " + ofYear.getProjectName() + " 更新成功");
  368. } else {
  369. failureNum++;
  370. failureMsg.append(failureNum + "*项目 " + ofYear.getProjectName() + " 已存在!/n");
  371. }
  372. } catch (Exception exc) {
  373. failureNum++;
  374. String msg = "*" + successNum + "*项目 " + ofYear.getProjectName() + " 导入失败";
  375. failureMsg.append(msg + exc.getMessage());
  376. log.error(msg, exc);
  377. }
  378. }
  379. if (failureNum > 0) {
  380. failureMsg.insert(0, "导入失败!共 " + failureNum + " 条数据格式不正确:");
  381. throw new ServiceException(failureMsg.toString());
  382. } else {
  383. successMsg.insert(0, "导入成功!共 " + successNum + " 条。");
  384. }
  385. return successMsg.toString();
  386. }
  387. @Override
  388. public AjaxResult commit(PlanYearsStandardVo yearsStandardVo) {
  389. //PlanYears byId = PlanYearsMapper.getById(yearsStandardVo.getPlanYearId());
  390. //BigDecimal evaluation = byId.getEvaluation();
  391. //BigDecimal threshold = new BigDecimal(0);
  392. ////获取各个项目类型设定的概算金额阈值
  393. //List<SysDictData> data = dictTypeService.selectDictDataByType("sys_over_limit_threshold");
  394. //HashMap<String, String> thresholdMap = new LinkedHashMap<>();
  395. ////各个类型的概算金额阈值
  396. //for (SysDictData dictData : data) {
  397. // // 类型----阈值
  398. // thresholdMap.put(dictData.getDictLabel(), dictData.getDictValue());
  399. //}
  400. ////项目类型
  401. //for (ProjectTypes value : ProjectTypes.values()) {
  402. // if (byId.getProjectType().equals(value.getCode())) {
  403. // threshold = BigDecimal.valueOf(Long.parseLong(thresholdMap.get(value.getInfo())));
  404. // }
  405. // break;
  406. //}
  407. //
  408. //if (evaluation.compareTo(threshold) == 1) {
  409. // //是超额项目
  410. //}
  411. int commit = planYearsMapper.commit(yearsStandardVo.getPlanYearId());
  412. if (commit != 1) {
  413. return AjaxResult.error("项目状态数据异常");
  414. }
  415. return AjaxResult.success();
  416. }
  417. @Override
  418. @Transactional
  419. public AjaxResult reviewTo(PlanYearsStandardVo vo) {
  420. //年度计划审核通过后同步到季度计划和项目管理
  421. PlanYears ofYears = new PlanYears();
  422. PlanQuarter quarters = new PlanQuarter();
  423. PmDemand demand = new PmDemand();
  424. PlanYears byId = planYearsMapper.getById(vo.getPlanYearId());
  425. BeanUtils.copyProperties(byId, quarters);
  426. BeanUtils.copyProperties(byId, demand);
  427. //同步到季度计划状态为已审核---(已审核过的不再同步)
  428. PlanQuarter quarter = planQuarterMapper.getByPlanYearId(vo.getPlanYearId());
  429. if (ObjectUtils.isEmpty(quarter)) {
  430. quarters.setPlanType(0);
  431. quarters.setPlanYearId(byId.getPlanYearId());
  432. quarters.setProjectStatus(ProjectStatus.PLANTOEXAMINE.getCode());
  433. quarters.setCreateTime(new Date());
  434. planQuarterMapper.insertPlanQuarter(quarters);
  435. //同步到项目管理状态为需求待填制
  436. demand.setPlanId(quarters.getPlanPracticalId());
  437. demand.setEvaluation(byId.getEvaluation().doubleValue());
  438. demand.setProjectStatus(PmProjectStatus.DEMAND_WAIT_FILL.getCode());
  439. demand.setPurchaseDeptId(Long.valueOf(byId.getPurchaseDeptId()));
  440. demand.setCreateTime(new Date());
  441. pmDemandMapper.insert(demand);
  442. //计划附件也进行同步---查询年度计划附件后复制一份改为项目需求附件
  443. LambdaQueryWrapper<SysFileRef> sysFileRefLp = new LambdaQueryWrapper<>();
  444. sysFileRefLp.eq(SysFileRef::getType, SysFileRefEnum.PLAN_YEAR.getType());
  445. sysFileRefLp.eq(SysFileRef::getRedId, vo.getPlanYearId());
  446. List<SysFileRef> sysFileRefs = sysFileRefMapper.selectList(sysFileRefLp);
  447. if (!ObjectUtils.isEmpty(sysFileRefs)) {
  448. for (SysFileRef ref : sysFileRefs) {
  449. ref.setRedId(demand.getDemandId());
  450. ref.setType(SysFileRefEnum.PM_DEMAND.getType());
  451. ref.setId(null);
  452. sysFileRefMapper.insert(ref);
  453. }
  454. }
  455. }
  456. vo.setProjectStatus(ProjectStatus.PLANTOEXAMINE.getCode());
  457. return review(vo);
  458. }
  459. @Override
  460. @Transactional
  461. public AjaxResult reviewReturn(PlanYearsStandardVo vo) {
  462. vo.setProjectStatus(ProjectStatus.PLANTOBACK.getCode());
  463. return review(vo);
  464. }
  465. private AjaxResult review(PlanYearsStandardVo vo) {
  466. List<SysFileRef> sysFileRefs = vo.getSysFileRefs();
  467. if (!ObjectUtils.isEmpty(sysFileRefs)) {
  468. for (SysFileRef ref : sysFileRefs) {
  469. ref.setRedId(vo.getPlanYearId());
  470. ref.setType(SysFileRefEnum.PLAN_YEAR_EXAMINE.getType());
  471. ref.setCreated(vo.getUpdated());
  472. ref.setCreateTime(new Date());
  473. ref.setUpdated(vo.getUpdated());
  474. ref.setUpdateTime(new Date());
  475. sysFileRefMapper.insert(ref);
  476. }
  477. }
  478. int review = planYearsMapper.review(vo);
  479. if (review != 1) {
  480. return AjaxResult.error("项目状态数据异常");
  481. }
  482. return AjaxResult.success();
  483. }
  484. @Override
  485. public AjaxResult appUpdate(PlanYearsStandardVo vo) {
  486. //申请后会成为未提交的状态,可以进行修改
  487. vo.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
  488. int review = planYearsMapper.review(vo);
  489. if (review != 1) {
  490. return AjaxResult.error("项目状态数据异常");
  491. }
  492. return AjaxResult.success();
  493. }
  494. @Override
  495. public AjaxResult sendLetter(PlanYearsStandardVo yearsStandardVo) {
  496. int review = planYearsMapper.sendLetter(yearsStandardVo);
  497. if (review != 1) {
  498. return AjaxResult.error("项目状态数据异常");
  499. }
  500. return AjaxResult.success();
  501. }
  502. @Override
  503. public AjaxResult upLoadPlanFile(PlanYearsStandardVo yearsStandardVo) {
  504. List<SysFileRef> sysFileRefs = yearsStandardVo.getSysFileRefs();
  505. if (!ObjectUtils.isEmpty(sysFileRefs)) {
  506. for (SysFileRef ref : sysFileRefs) {
  507. ref.setRedId(yearsStandardVo.getPlanYearId());
  508. ref.setType(SysFileRefEnum.PLAN_YEAR.getType());
  509. sysFileRefMapper.insert(ref);
  510. }
  511. }
  512. return AjaxResult.success();
  513. }
  514. @Override
  515. public AjaxResult downLoadPlanFile(PlanYearsStandardVo yearsStandardVo) {
  516. return AjaxResult.success();
  517. }
  518. @Override
  519. public AjaxResult demandUnitPlanManagementTotal() {
  520. List<PlanYears> planYears = new ArrayList<>();
  521. try {
  522. List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
  523. List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
  524. if (sysRoleList.size() > 0) {
  525. SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
  526. SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
  527. QueryWrapper<PlanYears> queryWrapper = new QueryWrapper<>();
  528. queryWrapper.eq("purchase_dept_id", sysDept.getDeptId());
  529. planYears = planYearsMapper.selectList(queryWrapper);
  530. }
  531. } catch (Exception e) {
  532. e.printStackTrace();
  533. }
  534. return AjaxResult.success(planYears.size());
  535. }
  536. @Override
  537. public AjaxResult purchasingManagementPurchasingManagementTotal() {
  538. List<PlanYears> planYears = new ArrayList<>();
  539. try {
  540. List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
  541. List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
  542. if (sysRoleList.size() > 0) {
  543. SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
  544. SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
  545. List<SysDept> sysDepts = deptMapper.selectChildrenDeptById(sysDept.getDeptId());
  546. List<Long> collect = sysDepts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
  547. if (collect.size() == 0) {
  548. collect.add(-1L);
  549. }
  550. QueryWrapper<PlanYears> queryWrapper = new QueryWrapper<>();
  551. queryWrapper
  552. .or(wrapper -> wrapper.lambda().eq(PlanYears::getPurchaseDeptId, sysDept.getDeptId())
  553. .eq(PlanYears::getIsExcess, IsExcess.NO_EXCESS.getCode()))
  554. .or(wrapper -> wrapper.lambda().in(PlanYears::getPurchaseDeptId, collect)
  555. .eq(PlanYears::getIsExcess, IsExcess.EXCESS.getCode()))
  556. .in("project_status", ProjectStatus.PLANWAIEXAMINE.getCode(), ProjectStatus.PLANTOEXAMINE.getCode());
  557. planYears = planYearsMapper.selectList(queryWrapper);
  558. }
  559. } catch (Exception e) {
  560. e.printStackTrace();
  561. }
  562. return AjaxResult.success(planYears.size());
  563. }
  564. @Override
  565. public AjaxResult demandUnitDemandManagementTotal() {
  566. List<PmDemand> pmDemands = new ArrayList<>();
  567. try {
  568. List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
  569. List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("purchasing_management")).collect(Collectors.toList());
  570. if (sysRoleList.size() > 0) {
  571. SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
  572. SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
  573. QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
  574. queryWrapper.eq("purchase_dept_id", sysDept.getDeptId());
  575. pmDemands = pmDemandMapper.selectList(queryWrapper);
  576. }
  577. } catch (Exception e) {
  578. e.printStackTrace();
  579. }
  580. return AjaxResult.success(pmDemands.size());
  581. }
  582. @Override
  583. public AjaxResult purchasingManagementDemandManagementTotal() {
  584. List<PmDemand> pmDemands = new ArrayList<>();
  585. try {
  586. List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
  587. List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
  588. if (sysRoleList.size() > 0) {
  589. SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
  590. SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
  591. List<SysDept> sysDepts = deptMapper.selectChildrenDeptById(sysDept.getDeptId());
  592. List<Long> collect = sysDepts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
  593. if (collect.size() == 0) {
  594. collect.add(-1L);
  595. }
  596. QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
  597. queryWrapper
  598. .or(wrapper -> wrapper.lambda().eq(PmDemand::getPurchaseDeptId, sysDept.getDeptId())
  599. .eq(PmDemand::getIsExcess, IsExcess.NO_EXCESS.getCode()))
  600. .or(wrapper -> wrapper.lambda().in(PmDemand::getPurchaseDeptId, collect)
  601. .eq(PmDemand::getIsExcess, IsExcess.EXCESS.getCode()))
  602. .in("project_status", PmProjectStatus.DEMAND_WAIT_AUDIT.getCode(), PmProjectStatus.DEMAND_AUDIT_RETURN.getCode());
  603. pmDemands = pmDemandMapper.selectList(queryWrapper);
  604. }
  605. } catch (Exception e) {
  606. e.printStackTrace();
  607. }
  608. return AjaxResult.success(pmDemands.size());
  609. }
  610. @Override
  611. public AjaxResult demandUnitContractManagementTotal() {
  612. List<PmDemand> pmDemands = new ArrayList<>();
  613. try {
  614. List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
  615. List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("purchasing_management")).collect(Collectors.toList());
  616. if (sysRoleList.size() > 0) {
  617. SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
  618. SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
  619. QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
  620. queryWrapper.eq("purchase_dept_id", sysDept.getDeptId());
  621. queryWrapper.in("project_status", PmProjectStatus.CONTRACT_WAIT_FILL.getCode(), PmProjectStatus.UNDER_CONSTRUCTION.getCode());
  622. pmDemands = pmDemandMapper.selectList(queryWrapper);
  623. }
  624. } catch (Exception e) {
  625. e.printStackTrace();
  626. }
  627. return AjaxResult.success(pmDemands.size());
  628. }
  629. @Override
  630. public AjaxResult demandUnitConstructionManagementTotal() {
  631. List<PmDemand> pmDemands = new ArrayList<>();
  632. try {
  633. List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
  634. List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("purchasing_management")).collect(Collectors.toList());
  635. if (sysRoleList.size() > 0) {
  636. SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
  637. SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
  638. QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
  639. queryWrapper.eq("purchase_dept_id", sysDept.getDeptId());
  640. queryWrapper.in("project_status", PmProjectStatus.UNDER_CONSTRUCTION.getCode(), PmProjectStatus.COMPLETION_CONSTRUCTION.getCode());
  641. pmDemands = pmDemandMapper.selectList(queryWrapper);
  642. }
  643. } catch (Exception e) {
  644. e.printStackTrace();
  645. }
  646. return AjaxResult.success(pmDemands.size());
  647. }
  648. @Override
  649. public AjaxResult purchasingManagementTaskReleaseTotal() {
  650. List<PmDemand> pmDemands = new ArrayList<>();
  651. try {
  652. List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
  653. List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
  654. if (sysRoleList.size() > 0) {
  655. SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
  656. SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
  657. List<SysDept> sysDepts = deptMapper.selectChildrenDeptById(sysDept.getDeptId());
  658. List<Long> collect = sysDepts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
  659. if (collect.size() == 0) {
  660. collect.add(-1L);
  661. }
  662. QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
  663. queryWrapper
  664. .or(wrapper -> wrapper.lambda().eq(PmDemand::getPurchaseDeptId, sysDept.getDeptId())
  665. .eq(PmDemand::getIsExcess, IsExcess.NO_EXCESS.getCode()))
  666. .or(wrapper -> wrapper.lambda().in(PmDemand::getPurchaseDeptId, collect)
  667. .eq(PmDemand::getIsExcess, IsExcess.EXCESS.getCode()))
  668. .in("project_status", PmProjectStatus.TASK_WAIT_RELEASE.getCode(),
  669. PmProjectStatus.WAIT_SELECT_AGENT.getCode(),
  670. PmProjectStatus.WAIT_UPLOAD_BID_FILE.getCode(),
  671. PmProjectStatus.WAIT_ANNOUNCEMENT.getCode(),
  672. PmProjectStatus.WAIT_OPEN_BID.getCode(),
  673. PmProjectStatus.WAIT_BID_ANNOUNCEMENT.getCode(),
  674. PmProjectStatus.BIDDING_PUBLICITY.getCode()
  675. );
  676. pmDemands = pmDemandMapper.selectList(queryWrapper);
  677. }
  678. } catch (Exception e) {
  679. e.printStackTrace();
  680. }
  681. return AjaxResult.success(pmDemands.size());
  682. }
  683. @Override
  684. public AjaxResult procurementOfficeProcurementExecutionTotal() {
  685. List<PmDemand> pmDemands = new ArrayList<>();
  686. try {
  687. List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
  688. List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
  689. if (sysRoleList.size() > 0) {
  690. SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
  691. SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
  692. List<SysDept> sysDepts = deptMapper.selectChildrenDeptById(sysDept.getDeptId());
  693. List<Long> collect = sysDepts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
  694. if (collect.size() == 0) {
  695. collect.add(-1L);
  696. }
  697. QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
  698. queryWrapper
  699. .or(wrapper -> wrapper.lambda().eq(PmDemand::getPurchaseDeptId, sysDept.getDeptId())
  700. .eq(PmDemand::getIsExcess, IsExcess.NO_EXCESS.getCode()))
  701. .or(wrapper -> wrapper.lambda().in(PmDemand::getPurchaseDeptId, collect)
  702. .eq(PmDemand::getIsExcess, IsExcess.EXCESS.getCode()))
  703. .in("project_status",
  704. PmProjectStatus.WAIT_SELECT_AGENT.getCode(),
  705. PmProjectStatus.WAIT_UPLOAD_BID_FILE.getCode(),
  706. PmProjectStatus.WAIT_ANNOUNCEMENT.getCode(),
  707. PmProjectStatus.WAIT_OPEN_BID.getCode(),
  708. PmProjectStatus.WAIT_BID_ANNOUNCEMENT.getCode(),
  709. PmProjectStatus.BIDDING_PUBLICITY.getCode(),
  710. PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
  711. pmDemands = pmDemandMapper.selectList(queryWrapper);
  712. }
  713. } catch (Exception e) {
  714. e.printStackTrace();
  715. }
  716. return AjaxResult.success(pmDemands.size());
  717. }
  718. @Override
  719. public AjaxResult procurementOfficeWinningTheBidTotal() {
  720. List<PmDemand> pmDemands = new ArrayList<>();
  721. try {
  722. List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
  723. List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
  724. if (sysRoleList.size() > 0) {
  725. SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
  726. SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
  727. List<SysDept> sysDepts = deptMapper.selectChildrenDeptById(sysDept.getDeptId());
  728. List<Long> collect = sysDepts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
  729. if (collect.size() == 0) {
  730. collect.add(-1L);
  731. }
  732. QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
  733. queryWrapper
  734. .or(wrapper -> wrapper.lambda().eq(PmDemand::getPurchaseDeptId, sysDept.getDeptId())
  735. .eq(PmDemand::getIsExcess, IsExcess.NO_EXCESS.getCode()))
  736. .or(wrapper -> wrapper.lambda().in(PmDemand::getPurchaseDeptId, collect)
  737. .eq(PmDemand::getIsExcess, IsExcess.EXCESS.getCode()))
  738. .lt("project_status", PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
  739. pmDemands = pmDemandMapper.selectList(queryWrapper);
  740. }
  741. } catch (Exception e) {
  742. e.printStackTrace();
  743. }
  744. return AjaxResult.success(pmDemands.size());
  745. }
  746. @Override
  747. public AjaxResult procurementOfficeFailureToWinTheBidTotal() {
  748. List<PmDemand> pmDemands = new ArrayList<>();
  749. try {
  750. List<SysRole> sysRoles = sysRoleMapper.selectRolePermissionByUserId(SecurityUtils.getUserId());
  751. List<SysRole> sysRoleList = sysRoles.stream().filter(tdto -> tdto.getRoleKey().equals("demand_unit")).collect(Collectors.toList());
  752. if (sysRoleList.size() > 0) {
  753. SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
  754. SysDept sysDept = deptMapper.selectDeptById(sysUser.getDeptId());
  755. List<SysDept> sysDepts = deptMapper.selectChildrenDeptById(sysDept.getDeptId());
  756. List<Long> collect = sysDepts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
  757. if (collect.size() == 0) {
  758. collect.add(-1L);
  759. }
  760. QueryWrapper<PmDemand> queryWrapper = new QueryWrapper<>();
  761. queryWrapper
  762. .or(wrapper -> wrapper.lambda().eq(PmDemand::getPurchaseDeptId, sysDept.getDeptId())
  763. .eq(PmDemand::getIsExcess, IsExcess.NO_EXCESS.getCode()))
  764. .or(wrapper -> wrapper.lambda().in(PmDemand::getPurchaseDeptId, collect)
  765. .eq(PmDemand::getIsExcess, IsExcess.EXCESS.getCode()))
  766. .gt("project_status", PmProjectStatus.CONTRACT_WAIT_FILL.getCode());
  767. pmDemands = pmDemandMapper.selectList(queryWrapper);
  768. }
  769. } catch (Exception e) {
  770. e.printStackTrace();
  771. }
  772. return AjaxResult.success(pmDemands.size());
  773. }
  774. /**
  775. * 查询需求单位待办事项(计划待提交)
  776. *
  777. * @return
  778. */
  779. @Override
  780. public List<PlanQuarterResponseVo> planWaitCommit() {
  781. return getListByProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
  782. }
  783. /**
  784. * 采购管理部门首页待办事项(计划待审核)
  785. *
  786. * @return
  787. */
  788. @Override
  789. public List<PlanQuarterResponseVo> planWaitExamine() {
  790. return getListByProjectStatus(ProjectStatus.PLANWAIEXAMINE.getCode());
  791. }
  792. /**
  793. * 需求单位待办事项
  794. */
  795. @Override
  796. public AjaxResult demandUnitWillManipulateTotal() {
  797. List<HomeToDoQueryResVo> homeRes = new ArrayList<>();
  798. //计划待提交,需求待提交,合同待填制,项目建设待完成
  799. List<PlanQuarterResponseVo> planRes = getListByProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
  800. List<PmDemandResVo> demandRes = demandService.demandWaitCommit();
  801. demandRes.addAll(demandService.contractWaitFilled());
  802. demandRes.addAll(demandService.projectWaitFinish());
  803. //转为首页table展示数据
  804. if (!ObjectUtils.isEmpty(planRes) && planRes.size() > 0) {
  805. for (PlanQuarterResponseVo planVo : planRes) {
  806. HomeToDoQueryResVo home = new HomeToDoQueryResVo();
  807. BeanUtils.copyProperties(planVo, home);
  808. homeRes.add(home);
  809. }
  810. }
  811. if (!ObjectUtils.isEmpty(demandRes) && demandRes.size() > 0) {
  812. for (PmDemandResVo demandResVo : demandRes) {
  813. HomeToDoQueryResVo home = new HomeToDoQueryResVo();
  814. BeanUtils.copyProperties(demandResVo, home);
  815. homeRes.add(home);
  816. }
  817. }
  818. return AjaxResult.success(homeRes);
  819. }
  820. @Override
  821. public AjaxResult purchasingManagementWillManipulateTotal() {
  822. List<HomeToDoQueryResVo> homeRes = new ArrayList<>();
  823. //计划待审核,需求待审核,任务待下达
  824. List<PlanQuarterResponseVo> planRes = getListByProjectStatus(ProjectStatus.PLANWAIEXAMINE.getCode());
  825. List<PmDemandResVo> demandRes = demandService.demandWaitExamine();
  826. demandRes.addAll(demandService.taskWaitRelease());
  827. //转为首页table展示数据
  828. if (!ObjectUtils.isEmpty(planRes) && planRes.size() > 0) {
  829. for (PlanQuarterResponseVo planVo : planRes) {
  830. HomeToDoQueryResVo home = new HomeToDoQueryResVo();
  831. BeanUtils.copyProperties(planVo, home);
  832. homeRes.add(home);
  833. }
  834. }
  835. if (!ObjectUtils.isEmpty(demandRes) && demandRes.size() > 0) {
  836. for (PmDemandResVo demandResVo : demandRes) {
  837. HomeToDoQueryResVo home = new HomeToDoQueryResVo();
  838. BeanUtils.copyProperties(demandResVo, home);
  839. homeRes.add(home);
  840. }
  841. }
  842. return AjaxResult.success(homeRes);
  843. }
  844. /**
  845. * 通过年度ID,查询季度、临时计划详情,通过季度、临时计划ID查询项目
  846. *
  847. * @param yearsStandardVo
  848. * @return
  849. */
  850. @Override
  851. public AjaxResult projectDetails(PlanYearsStandardVo yearsStandardVo) {
  852. Map<String, Object> returnMap = new HashMap<>();
  853. // 通过年度ID查询年度详情
  854. PlanYears byId = planYearsMapper.getById(yearsStandardVo.getPlanYearId());
  855. if (StringUtils.isNull(byId)) {
  856. return AjaxResult.error("没有查到相关数据!");
  857. }
  858. // 通过年度ID查询季度、临时计划详情
  859. ProvisionalPlan provisionalPlan = provisionalPlanMapper.selectProvisionalPlanByYearId(yearsStandardVo.getPlanYearId().intValue());
  860. if (StringUtils.isNull(provisionalPlan)) {
  861. return AjaxResult.error("没有查到相关数据!");
  862. }
  863. // 通过季度、临时计划ID查询项目数据
  864. PmDemand pmDemand = pmDemandService.selectByPlanId(provisionalPlan.getPlanPracticalId());
  865. if (StringUtils.isNotNull(pmDemand)) {
  866. String detailType = "";
  867. if (StringUtils.isNotNull(yearsStandardVo.getDetailType())) {
  868. detailType = yearsStandardVo.getDetailType();
  869. } else {
  870. // 详情类型(1项目计划,2需求建档,3任务下达,4中标信息,5合同信息,6建设情况)
  871. // 项目计划 4之前(包括4)
  872. // 需求建党 4之后(不包括4)
  873. // 任务下达 8之后(不包括8)
  874. // 采购执行 9之后(不包括9)
  875. // 合同信息 15之后(不包括15)
  876. // 项目建设 17
  877. Integer projectStatus = Integer.valueOf(pmDemand.getProjectStatus());
  878. if (projectStatus <= 4) {
  879. detailType = "1";
  880. } else if (4 < projectStatus && projectStatus <= 8) {
  881. detailType = "2";
  882. } else if (8 < projectStatus && projectStatus <= 9) {
  883. detailType = "3";
  884. } else if (9 < projectStatus && projectStatus <= 15) {
  885. detailType = "4";
  886. } else if (15 < projectStatus && projectStatus < 17) {
  887. detailType = "5";
  888. } else if (projectStatus == 17) {
  889. detailType = "6";
  890. }
  891. }
  892. Long demandId = pmDemand.getDemandId();
  893. PmDemandResVo vo = new PmDemandResVo();
  894. vo.setDemandId(demandId);
  895. vo.setDetailType(detailType);
  896. if ("1".equals(detailType)) { //项目计划
  897. BeanUtils.copyProperties(pmDemand, vo);
  898. SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(vo.getPurchaseDeptId()).get("sysDept");
  899. if (sysDeptResponseVo != null) {
  900. vo.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
  901. }
  902. String purchaseServicesName = dictDataService.selectDictLabel("purchase_services", vo.getPurchaseServices());
  903. if (StringUtils.isNotEmpty(purchaseServicesName)) {
  904. vo.setPurchaseServicesName(purchaseServicesName);
  905. }
  906. //采购需求附件
  907. List<SysFileInfo> demandFileInfos = getSysFileInfoList(vo.getDemandId(), SysFileRefEnum.PM_DEMAND.getType());
  908. if (!ObjectUtils.isEmpty(demandFileInfos)) {
  909. vo.setDemandFileInfos(demandFileInfos);
  910. }
  911. //项目类型
  912. for (ProjectTypes value : ProjectTypes.values()) {
  913. if (vo.getProjectType() != null && vo.getProjectType().equals(value.getCode())) {
  914. vo.setProjectTypeName(value.getInfo());
  915. break;
  916. }
  917. }
  918. //是否为超限额计划
  919. for (IsExcess value : IsExcess.values()) {
  920. if (vo.getIsExcess() != null && vo.getIsExcess().equals(value.getCode())) {
  921. vo.setIsExcessName(value.getInfo());
  922. break;
  923. }
  924. }
  925. //采购方式
  926. for (PlanPurchaseMode value : PlanPurchaseMode.values()) {
  927. if (vo.getPurchaseMode() != null && vo.getPurchaseMode().equals(value.getCode())) {
  928. vo.setPurchaseModeName(value.getInfo());
  929. break;
  930. }
  931. }
  932. //项目属性
  933. for (ProjectAttribute value : ProjectAttribute.values()) {
  934. if (vo.getProjectAttr() != null && vo.getProjectAttr().equals(value.getCode())) {
  935. vo.setProjectAttrName(value.getInfo());
  936. break;
  937. }
  938. }
  939. //预警状态
  940. for (WarnStatus value : WarnStatus.values()) {
  941. if (vo.getWarnStatus() != null && vo.getWarnStatus().equals(value.getCode())) {
  942. vo.setWarnStatusName(value.getInfo());
  943. break;
  944. }
  945. }
  946. //项目状态
  947. for (PmProjectStatus value : PmProjectStatus.values()) {
  948. if (vo.getProjectStatus() != null && vo.getProjectStatus().equals(value.getCode())) {
  949. vo.setProjectStatusName(value.getInfo());
  950. break;
  951. }
  952. }
  953. } else if ("2".equals(detailType)) { //需求建档
  954. //采购需求审核文件
  955. List<SysFileInfo> auditFileInfos = getSysFileInfoList(vo.getDemandId(), SysFileRefEnum.PM_DEMAND_EXAMINE.getType());
  956. if (!ObjectUtils.isEmpty(auditFileInfos)) {
  957. vo.setAuditFileInfos(auditFileInfos);
  958. }
  959. LambdaQueryWrapper<PmBookBuilding> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  960. lambdaQueryWrapper.eq(PmBookBuilding::getDemandId, demandId);
  961. PmBookBuilding pmBookBuilding = pmBookBuildingService.getOne(lambdaQueryWrapper);
  962. if (pmBookBuilding != null) {
  963. PmBookBuildingResVo responseVo = new PmBookBuildingResVo();
  964. BeanUtils.copyProperties(pmBookBuilding, responseVo);
  965. List<SysFileInfo> fileInfos = getSysFileInfoList(pmBookBuilding.getId(), SysFileRefEnum.PM_BOOK_BUILDING.getType());
  966. if (!ObjectUtils.isEmpty(fileInfos)) {
  967. responseVo.setFileInfos(fileInfos);
  968. }
  969. vo.setPmBookBuildingResVo(responseVo);
  970. }
  971. } else if ("3".equals(detailType)) { //任务下达
  972. //任务下达文件
  973. List<SysFileInfo> taskReleaseFileInfos = getSysFileInfoList(vo.getDemandId(), SysFileRefEnum.PM_TAST_RELEASE.getType());
  974. if (!ObjectUtils.isEmpty(taskReleaseFileInfos)) {
  975. vo.setTaskReleaseFileInfos(taskReleaseFileInfos);
  976. }
  977. } else if ("4".equals(detailType)) { //中标信息
  978. PmPurchaseExecutionResVo pmPurchaseExecutionResVo = new PmPurchaseExecutionResVo();
  979. //代理商信息
  980. BaseAgency baseAgency = this.baseAgencyService.getById(pmDemand.getAgencyId());
  981. pmPurchaseExecutionResVo.setBaseAgency(baseAgency);
  982. //发布公告列表
  983. LambdaQueryWrapper<PmReleaseAnnouncement> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  984. lambdaQueryWrapper.eq(PmReleaseAnnouncement::getDemandId, demandId);
  985. List<PmReleaseAnnouncement> pmReleaseAnnouncementList = this.pmReleaseAnnouncementService.list(lambdaQueryWrapper);
  986. if (!ObjectUtils.isEmpty(pmReleaseAnnouncementList)) {
  987. List<PmReleaseAnnouncementResVo> pmReleaseAnnouncementResVoList = new ArrayList<>();
  988. for (PmReleaseAnnouncement pmReleaseAnnouncement : pmReleaseAnnouncementList) {
  989. PmReleaseAnnouncementResVo pmReleaseAnnouncementResVo = new PmReleaseAnnouncementResVo();
  990. BeanUtils.copyProperties(pmReleaseAnnouncement, pmReleaseAnnouncementResVo);
  991. List<SysFileInfo> fileInfos = getSysFileInfoList(pmReleaseAnnouncement.getId(), SysFileRefEnum.PM_ANNOUNCEMENT_FILE.getType());
  992. if (!ObjectUtils.isEmpty(fileInfos)) {
  993. pmReleaseAnnouncementResVo.setFileInfos(fileInfos);
  994. }
  995. pmReleaseAnnouncementResVoList.add(pmReleaseAnnouncementResVo);
  996. }
  997. pmPurchaseExecutionResVo.setPmReleaseAnnouncementResVoList(pmReleaseAnnouncementResVoList);
  998. }
  999. //专家信息列表
  1000. List<PmBaseExpertResVo> pmBaseExpertResVoList = this.pmDemandExpertRefService.getPmBaseExpertResVoList(demandId);
  1001. pmPurchaseExecutionResVo.setPmBaseExpertResVoList(pmBaseExpertResVoList);
  1002. //开标信息列表
  1003. List<PmBidOpeningResVo> pmBidOpeningResVoList = this.pmBidOpeningService.getPmBidOpeningResVoList(demandId);
  1004. pmPurchaseExecutionResVo.setPmBidOpeningResVoList(pmBidOpeningResVoList);
  1005. //中标信息列表
  1006. LambdaQueryWrapper<PmBidWinning> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
  1007. lambdaQueryWrapper1.eq(PmBidWinning::getDemandId, demandId).orderByDesc(PmBidWinning::getBidAnnouncementTime);
  1008. List<PmBidWinning> pmBidWinningList = this.pmBidWinningService.list(lambdaQueryWrapper1);
  1009. if (!ObjectUtils.isEmpty(pmBidWinningList)) {
  1010. List<PmBidWinningResVo> pmBidWinningResVoList = new ArrayList<>();
  1011. for (PmBidWinning pmBidWinning : pmBidWinningList) {
  1012. PmBidWinningResVo pmBidWinningResVo = new PmBidWinningResVo();
  1013. BeanUtils.copyProperties(pmBidWinning, pmBidWinningResVo);
  1014. List<SysFileInfo> fileInfos = getSysFileInfoList(pmBidWinning.getId(), SysFileRefEnum.PM_BID_WINNING_FILE.getType());
  1015. if (!ObjectUtils.isEmpty(fileInfos)) {
  1016. pmBidWinningResVo.setFileInfos(fileInfos);
  1017. }
  1018. pmBidWinningResVoList.add(pmBidWinningResVo);
  1019. }
  1020. pmPurchaseExecutionResVo.setPmBidWinningResVoList(pmBidWinningResVoList);
  1021. }
  1022. //质疑情况
  1023. List<SysFileInfo> callRequestFileInfos = getSysFileInfoList(vo.getDemandId(), SysFileRefEnum.PM_BID_CALL_QEUSTION_FILE.getType());
  1024. if (!ObjectUtils.isEmpty(callRequestFileInfos)) {
  1025. pmPurchaseExecutionResVo.setCallRequestFileInfos(callRequestFileInfos);
  1026. }
  1027. //流标情况
  1028. LambdaQueryWrapper<PmBidFailure> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
  1029. lambdaQueryWrapper2.eq(PmBidFailure::getDemandId, demandId).orderByDesc(PmBidFailure::getBidFailureTime);
  1030. List<PmBidFailure> pmBidFailureList = this.pmBidFailureService.list(lambdaQueryWrapper2);
  1031. if (!ObjectUtils.isEmpty(pmBidFailureList)) {
  1032. List<PmBidFailureResVo> pmBidFailureResVoList = new ArrayList<>();
  1033. for (PmBidFailure pmBidFailure : pmBidFailureList) {
  1034. PmBidFailureResVo pmBidFailureResVo = new PmBidFailureResVo();
  1035. BeanUtils.copyProperties(pmBidFailure, pmBidFailureResVo);
  1036. List<SysFileInfo> fileInfos = getSysFileInfoList(pmBidFailure.getId(), SysFileRefEnum.PM_BID_FAILURE_FILE.getType());
  1037. if (!ObjectUtils.isEmpty(fileInfos)) {
  1038. pmPurchaseExecutionResVo.setFileInfos(fileInfos);
  1039. }
  1040. pmBidFailureResVoList.add(pmBidFailureResVo);
  1041. }
  1042. pmPurchaseExecutionResVo.setPmBidFailureResVoList(pmBidFailureResVoList);
  1043. }
  1044. //中标通知书
  1045. List<SysFileInfo> pmBidWinningNotificationFileInfos = getSysFileInfoList(vo.getDemandId(), SysFileRefEnum.PM_BID_WINNING_NOTIFICATION.getType());
  1046. if (!ObjectUtils.isEmpty(pmBidWinningNotificationFileInfos)) {
  1047. pmPurchaseExecutionResVo.setPmBidWinningNotificationFileInfos(pmBidWinningNotificationFileInfos);
  1048. }
  1049. vo.setPmPurchaseExecutionResVo(pmPurchaseExecutionResVo);
  1050. } else if ("5".equals(detailType)) { //合同信息
  1051. LambdaQueryWrapper<PmContractInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  1052. lambdaQueryWrapper.eq(PmContractInfo::getDemandId, demandId);
  1053. PmContractInfo pmContractInfo = pmContractInfoService.getOne(lambdaQueryWrapper);
  1054. if (pmContractInfo != null) {
  1055. PmContractInfoResVo pmContractInfoResVo = new PmContractInfoResVo();
  1056. BeanUtils.copyProperties(pmContractInfo, pmContractInfoResVo);
  1057. //合同信息文件
  1058. List<SysFileInfo> fileInfos = getSysFileInfoList(pmContractInfo.getId(), SysFileRefEnum.PM_CONTRACT_INFO.getType());
  1059. if (!ObjectUtils.isEmpty(fileInfos)) {
  1060. pmContractInfoResVo.setFileInfos(fileInfos);
  1061. }
  1062. vo.setPmContractInfoResVo(pmContractInfoResVo);
  1063. }
  1064. } else if ("6".equals(detailType)) { //建设情况
  1065. LambdaQueryWrapper<PmProjectConstruction> lambdaQueryWrapper = new LambdaQueryWrapper<>();
  1066. lambdaQueryWrapper.eq(PmProjectConstruction::getDemandId, demandId);
  1067. PmProjectConstruction pmProjectConstruction = pmProjectConstructionService.getOne(lambdaQueryWrapper);
  1068. if (pmProjectConstruction != null) {
  1069. PmProjectConstructionResVo pmProjectConstructionResVo = new PmProjectConstructionResVo();
  1070. BeanUtils.copyProperties(pmProjectConstruction, pmProjectConstructionResVo);
  1071. //建设情况文件
  1072. List<SysFileInfo> fileInfos = getSysFileInfoList(pmProjectConstruction.getId(), SysFileRefEnum.PM_PROJECT_CONSTRUCTION.getType());
  1073. if (!ObjectUtils.isEmpty(fileInfos)) {
  1074. pmProjectConstructionResVo.setFileInfos(fileInfos);
  1075. }
  1076. vo.setPmProjectConstructionResVo(pmProjectConstructionResVo);
  1077. }
  1078. }
  1079. return AjaxResult.success(vo);
  1080. } else {
  1081. if (StringUtils.isNotNull(provisionalPlan)) {
  1082. return AjaxResult.success(provisionalPlan);
  1083. } else {
  1084. if (StringUtils.isNotNull(byId)) {
  1085. return AjaxResult.success(byId);
  1086. }
  1087. }
  1088. }
  1089. return AjaxResult.error("没有查到相关数据!");
  1090. }
  1091. private List<SysFileInfo> getSysFileInfoList(Long redId, Integer type) {
  1092. HashMap<String, Object> map = new HashMap<>();
  1093. map.put("red_id", redId);
  1094. map.put("type", type);
  1095. List<SysFileRef> fileRefs = sysFileRefService.listByMap(map);
  1096. if (!ObjectUtils.isEmpty(fileRefs)) {
  1097. List<SysFileInfo> fileInfos = new ArrayList<>();
  1098. for (SysFileRef ref : fileRefs) {
  1099. SysFileInfo fileInfo = fileService.getById(ref.getFileId());
  1100. fileInfos.add(fileInfo);
  1101. }
  1102. return fileInfos;
  1103. } else {
  1104. return null;
  1105. }
  1106. }
  1107. /**
  1108. * 查询已被催告发函的计划
  1109. *
  1110. * @return
  1111. */
  1112. @Override
  1113. public List<PlanQuarterResponseVo> willSendLetter() {
  1114. LambdaQueryWrapper<PlanYears> yearsLp = new LambdaQueryWrapper<PlanYears>();
  1115. yearsLp.eq(PlanYears::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
  1116. yearsLp.eq(PlanYears::getSendLetter, "1");
  1117. List<PlanYears> planYears = planYearsMapper.selectList(yearsLp);
  1118. LambdaQueryWrapper<PlanQuarter> quarterLp = new LambdaQueryWrapper<PlanQuarter>();
  1119. quarterLp.eq(PlanQuarter::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
  1120. quarterLp.eq(PlanQuarter::getSendLetter, "1");
  1121. List<PlanQuarter> planQuarters = planQuarterMapper.selectList(quarterLp);
  1122. //融合一起
  1123. List<PlanQuarterResponseVo> vos = planComplex(planYears, planQuarters);
  1124. return vos;
  1125. }
  1126. public List<PlanQuarterResponseVo> getListByProjectStatus(String projectStatus) {
  1127. LambdaQueryWrapper<PlanYears> yearsLp = new LambdaQueryWrapper<PlanYears>();
  1128. yearsLp.eq(PlanYears::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
  1129. yearsLp.eq(PlanYears::getProjectStatus, projectStatus);
  1130. List<PlanYears> planYears = planYearsMapper.selectList(yearsLp);
  1131. LambdaQueryWrapper<PlanQuarter> quarterLp = new LambdaQueryWrapper<PlanQuarter>();
  1132. quarterLp.eq(PlanQuarter::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
  1133. quarterLp.eq(PlanQuarter::getProjectStatus, projectStatus);
  1134. List<PlanQuarter> planQuarters = planQuarterMapper.selectList(quarterLp);
  1135. //融合一起
  1136. List<PlanQuarterResponseVo> vos = planComplex(planYears, planQuarters);
  1137. return vos;
  1138. }
  1139. /**
  1140. * 年度计划与季度数据一起
  1141. *
  1142. * @return
  1143. */
  1144. public List<PlanQuarterResponseVo> planComplex(List<PlanYears> planYears, List<PlanQuarter> planQuarters) {
  1145. List<PlanYearsResponseVo> yearsRes = changeTo(planYears);
  1146. List<PlanQuarterResponseVo> quarterRes = quartzServiceImpl.changeTo(planQuarters);
  1147. if (!ObjectUtils.isEmpty(yearsRes) && yearsRes.size() > 0) {
  1148. for (PlanYearsResponseVo yearsRe : yearsRes) {
  1149. PlanQuarterResponseVo responseVo = new PlanQuarterResponseVo();
  1150. BeanUtils.copyProperties(yearsRe, responseVo);
  1151. quarterRes.add(responseVo);
  1152. }
  1153. }
  1154. return quarterRes;
  1155. }
  1156. //判断是否为超额计划
  1157. public String isExcessOrNo(String projectType, BigDecimal evaluation) {
  1158. BigDecimal threshold = new BigDecimal(0);
  1159. //获取各个项目类型设定的概算金额阈值
  1160. List<SysDictData> data = dictTypeService.selectDictDataByType("sys_over_limit_threshold");
  1161. HashMap<String, String> thresholdMap = new LinkedHashMap<>();
  1162. //各个类型的概算金额阈值
  1163. for (SysDictData dictData : data) {
  1164. // 类型----阈值
  1165. thresholdMap.put(dictData.getDictLabel(), dictData.getDictValue());
  1166. }
  1167. //项目类型
  1168. for (ProjectTypes value : ProjectTypes.values()) {
  1169. if (projectType.equals(value.getCode())) {
  1170. threshold = BigDecimal.valueOf(Long.parseLong(thresholdMap.get(value.getInfo())));
  1171. }
  1172. break;
  1173. }
  1174. if (evaluation.compareTo(threshold) == 1) {
  1175. //是超额计划
  1176. return ("1");
  1177. } else {
  1178. return ("0");
  1179. }
  1180. }
  1181. //字段赋值对应的名称
  1182. public List<PlanYearsResponseVo> changeTo(List<PlanYears> planYears) {
  1183. //获取年度计划提报时间的阈值
  1184. List<SysDictData> supTime = dictTypeService.selectDictDataByType("sys_annual_plan");
  1185. HashMap<String, String> thresholdMap = new LinkedHashMap<>();
  1186. //年度提报时间的阈值
  1187. for (SysDictData dictData : supTime) {
  1188. // 字段名称----阈值
  1189. thresholdMap.put(dictData.getDictLabel(), dictData.getDictValue());
  1190. }
  1191. //提前或延后*天进行提醒
  1192. List<SysDictData> alertTime = dictTypeService.selectDictDataByType("alert_time_setting");
  1193. HashMap<String, String> alertTimeMap = new LinkedHashMap<>();
  1194. //根据时间类别设定的提醒时间
  1195. for (SysDictData dictData : alertTime) {
  1196. // 字段名称----阈值
  1197. alertTimeMap.put(dictData.getDictLabel(), dictData.getDictValue());
  1198. }
  1199. //获取字典数据
  1200. HashMap<String, HashMap<String, String>> planEnums = dictTypeService.getAboutEnums();
  1201. HashMap<String, String> projectTypesMap = planEnums.get("projectTypes");
  1202. HashMap<String, String> planPurchaseModesMap = planEnums.get("planPurchaseModes");
  1203. HashMap<String, String> projectAttributes = planEnums.get("projectAttributes");
  1204. HashMap<String, String> purchaseServices = planEnums.get("purchaseServices");
  1205. List<PlanYearsResponseVo> list = new ArrayList<PlanYearsResponseVo>();
  1206. for (PlanYears planYear : planYears) {
  1207. PlanYearsResponseVo responseVo = new PlanYearsResponseVo();
  1208. SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(Long.valueOf(planYear.getPurchaseDeptId())).get("sysDept");
  1209. planYear.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
  1210. for (Map.Entry<String, String> entry : projectTypesMap.entrySet()) {
  1211. if (planYear.getProjectType().equals(entry.getValue())) {
  1212. planYear.setProjectTypeStr(entry.getKey());
  1213. break;
  1214. }
  1215. }
  1216. for (Map.Entry<String, String> entry : planPurchaseModesMap.entrySet()) {
  1217. if (planYear.getPurchaseMode().equals(entry.getValue())) {
  1218. planYear.setPurchaseModeStr(entry.getKey());
  1219. break;
  1220. }
  1221. }
  1222. //项目属性是拼接的
  1223. if (!ObjectUtils.isEmpty(planYear.getProjectAttr())) {
  1224. if (planYear.getProjectAttr().length() > 1) {
  1225. StringBuilder builder = new StringBuilder();
  1226. String[] split = planYear.getProjectAttr().split(",");
  1227. for (String s : split) {
  1228. for (Map.Entry<String, String> entry : projectAttributes.entrySet()) {
  1229. if (s.equals(entry.getValue())) {
  1230. if (!planYear.getProjectAttr().endsWith(s)) {
  1231. builder.append(entry.getKey() + ",");
  1232. } else {
  1233. builder.append(entry.getKey());
  1234. }
  1235. break;
  1236. }
  1237. }
  1238. }
  1239. planYear.setProjectAttrStr(builder.toString());
  1240. } else {
  1241. for (Map.Entry<String, String> entry : projectAttributes.entrySet()) {
  1242. if (planYear.getProjectAttr().equals(entry.getValue())) {
  1243. planYear.setProjectAttrStr(entry.getKey());
  1244. break;
  1245. }
  1246. }
  1247. }
  1248. }
  1249. for (Map.Entry<String, String> entry : purchaseServices.entrySet()) {
  1250. if (planYear.getPurchaseServices().equals(entry.getValue())) {
  1251. planYear.setPurchaseServicesStr(entry.getKey());
  1252. break;
  1253. }
  1254. }
  1255. BeanUtils.copyProperties(planYear, responseVo);
  1256. try {
  1257. responseVo.setTipsMessage(planYearsGetTips(responseVo, thresholdMap, alertTimeMap));
  1258. } catch (ParseException e) {
  1259. e.printStackTrace();
  1260. }
  1261. list.add(responseVo);
  1262. }
  1263. return list;
  1264. }
  1265. /**
  1266. * 根据年度计划提报时间的阈值进行提示
  1267. *
  1268. * @return
  1269. */
  1270. public String planYearsGetTips(PlanYearsResponseVo responseVo, HashMap<String, String> thresholdMap, HashMap<String, String> alertTimeMap) throws ParseException {
  1271. //提示信息:定义距离结束时间*天内提示
  1272. int alertDay = Integer.parseInt(alertTimeMap.get("计划提报时间"));
  1273. Integer remindTime = 1000 * 60 * 60 * 24 * alertDay;
  1274. //提报时间的结束时间阈值
  1275. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  1276. Date thresholdTime = dateFormat.parse(thresholdMap.get("起止时间结束"));
  1277. Date date = new Date();
  1278. thresholdTime.setYear(date.getYear());
  1279. double surplus = thresholdTime.getTime() - date.getTime();
  1280. //少于设定天数便提醒
  1281. if (surplus < remindTime && surplus > 0) {
  1282. //剩余天数(向上取整)
  1283. int i = new Double(Math.ceil(surplus / 1000 / 60 / 60 / 24)).intValue();
  1284. if (i > 0) {
  1285. return "距离计划提报时间不足" + i + "天";
  1286. }
  1287. }
  1288. //距离计划完成采购时间一周内提醒
  1289. Integer alertTime = 1000 * 60 * 60 * 24 * 7;
  1290. double surplusTwo = responseVo.getPlanPurchaseFinishTime().getTime() - System.currentTimeMillis();
  1291. //少于设定阈值便提醒
  1292. if (surplusTwo < alertTime && surplusTwo > 0) {
  1293. //剩余天数(向上取整)
  1294. int i = new Double(Math.ceil(surplusTwo / 1000 / 60 / 60 / 24)).intValue();
  1295. if (i > 0) {
  1296. return "距离计划完成采购时间不足" + i + "天";
  1297. }
  1298. }
  1299. return "";
  1300. }
  1301. }