PlanYearsServiceImpl.java 61 KB

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