PlanYearsServiceImpl.java 77 KB

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