PlanYearsServiceImpl.java 71 KB

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