PlanYearsServiceImpl.java 74 KB

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