PlanYearsServiceImpl.java 75 KB

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