PlanYearsServiceImpl.java 67 KB

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