PlanQuarterServiceImpl.java 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022
  1. package com.ozs.plan.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.ozs.common.core.domain.AjaxResult;
  6. import com.ozs.common.core.domain.entity.SysDept;
  7. import com.ozs.common.core.domain.entity.SysDictData;
  8. import com.ozs.common.core.domain.entity.SysUser;
  9. import com.ozs.common.core.domain.model.LoginUser;
  10. import com.ozs.common.enums.DataIsDelete;
  11. import com.ozs.common.enums.PmProjectStatus;
  12. import com.ozs.common.enums.ProjectStatus;
  13. import com.ozs.common.enums.QuarterEnum;
  14. import com.ozs.common.enums.SysFileRefEnum;
  15. import com.ozs.common.exception.ServiceException;
  16. import com.ozs.common.utils.DateUtils;
  17. import com.ozs.common.utils.SecurityUtils;
  18. import com.ozs.common.utils.StringUtils;
  19. import com.ozs.common.utils.bean.BeanUtils;
  20. import com.ozs.plan.doman.PlanQuarter;
  21. import com.ozs.plan.doman.PlanYears;
  22. import com.ozs.plan.doman.vo.requestVo.PlanQuarterStandardVo;
  23. import com.ozs.plan.doman.vo.responseVo.PlanQuarterResponseVo;
  24. import com.ozs.plan.mapper.PlanQuarterMapper;
  25. import com.ozs.plan.mapper.PlanYearsMapper;
  26. import com.ozs.plan.service.PlanQuarterService;
  27. import com.ozs.pm.doman.PmAuditDeptRef;
  28. import com.ozs.pm.doman.PmDemand;
  29. import com.ozs.pm.mapper.PmAuditDeptRefMapper;
  30. import com.ozs.pm.mapper.PmDemandMapper;
  31. import com.ozs.pm.service.IPmDemandService;
  32. import com.ozs.pm.service.PmAuditDeptRefService;
  33. import com.ozs.system.domain.SysFileInfo;
  34. import com.ozs.system.domain.SysFileRef;
  35. import com.ozs.system.domain.vo.responseVo.SysDeptResponseVo;
  36. import com.ozs.system.mapper.SysDeptMapper;
  37. import com.ozs.system.mapper.SysFileRefMapper;
  38. import com.ozs.system.service.ISysDeptService;
  39. import com.ozs.system.service.ISysDictDataService;
  40. import com.ozs.system.service.ISysDictTypeService;
  41. import com.ozs.system.service.ISysUserService;
  42. import com.ozs.system.service.SysFileService;
  43. import lombok.extern.slf4j.Slf4j;
  44. import org.springframework.beans.factory.annotation.Autowired;
  45. import org.springframework.security.core.token.TokenService;
  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 PlanQuarterServiceImpl extends ServiceImpl<PlanQuarterMapper, PlanQuarter> implements PlanQuarterService {
  68. @Autowired
  69. PlanQuarterMapper planQuarterMapper;
  70. @Autowired
  71. PlanYearsMapper planYearsMapper;
  72. @Autowired
  73. protected Validator validator;
  74. @Autowired
  75. private ISysDictTypeService dictTypeService;
  76. @Autowired
  77. private ISysDeptService deptService;
  78. @Autowired
  79. SysFileRefMapper sysFileRefMapper;
  80. @Autowired
  81. private SysDeptMapper deptMapper;
  82. @Autowired
  83. private SysFileService fileService;
  84. @Autowired
  85. private PmDemandMapper pmDemandMapper;
  86. @Autowired
  87. private IPmDemandService demandService;
  88. @Autowired
  89. private ISysUserService userService;
  90. @Autowired
  91. private PmAuditDeptRefService pmAuditDeptRefService;
  92. @Autowired
  93. private PmAuditDeptRefMapper pmAuditDeptRefMapper;
  94. @Override
  95. public List<PlanQuarterResponseVo> selectPlanQuarterListEXP(PlanQuarterStandardVo vo, LoginUser loginUser) {
  96. List<PlanQuarter> list = new ArrayList<>();
  97. List<PlanQuarterResponseVo> planQuarterList = new ArrayList<>();
  98. try {
  99. int num = 1;
  100. int size = 200;
  101. while (size == 200) {
  102. LambdaQueryWrapper<PlanQuarter> lw = new LambdaQueryWrapper<>();
  103. if (!loginUser.getUserId().equals(Long.valueOf("1"))) {
  104. lw.eq(PlanQuarter::getCreated, loginUser.getUserId());
  105. //lw.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId());
  106. }
  107. lw.eq(PlanQuarter::getPlanType, "0");
  108. if (!ObjectUtils.isEmpty(vo.getProjectName())) {
  109. lw.like(PlanQuarter::getProjectName, vo.getProjectName());
  110. }
  111. if (!ObjectUtils.isEmpty(vo.getPurchaseServices())) {
  112. lw.eq(PlanQuarter::getPurchaseServices, vo.getPurchaseServices());
  113. }
  114. if (!ObjectUtils.isEmpty(vo.getProjectStatus())) {
  115. lw.eq(PlanQuarter::getProjectStatus, vo.getProjectStatus());
  116. }
  117. if (!ObjectUtils.isEmpty(vo.getParams())) {
  118. if (!ObjectUtils.isEmpty(vo.getParams().get("beginTime"))) {
  119. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
  120. Date ofMonth = dateFormat.parse(vo.getParams().get("beginTime").toString() + "-01");
  121. lw.ge(PlanQuarter::getPlanDemandSubTime, ofMonth);
  122. }
  123. if (!ObjectUtils.isEmpty(vo.getParams().get("endTime"))) {
  124. SimpleDateFormat dateFormaH = new SimpleDateFormat("yyyy-MM");
  125. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  126. SimpleDateFormat dateFormatT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
  127. Date ofMonth = DateUtils.getLastDayOfMonth(dateFormaH.parse(vo.getParams().get("endTime").toString()));
  128. Date parse = dateFormatT.parse(dateFormat.format(ofMonth) + " 23:59:59:999");
  129. lw.le(PlanQuarter::getPlanDemandSubTime, parse);
  130. }
  131. }
  132. lw.eq(PlanQuarter::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
  133. Page<PlanQuarter> page = planQuarterMapper.selectPage(new Page<>(num, size, false), lw);
  134. list.addAll(page.getRecords());
  135. size = page.getRecords().size();
  136. num++;
  137. }
  138. planQuarterList = changeTo(list);
  139. } catch (Exception e) {
  140. e.printStackTrace();
  141. }
  142. return planQuarterList;
  143. }
  144. @Override
  145. public List<PlanQuarterResponseVo> selectPlanQuarterExamineListEXP(PlanQuarterStandardVo vo, LoginUser loginUser) {
  146. List<PlanQuarter> list = new ArrayList<>();
  147. List<PlanQuarterResponseVo> planQuarterList = new ArrayList<>();
  148. try {
  149. int num = 1;
  150. int size = 200;
  151. while (size == 200) {
  152. LambdaQueryWrapper<PlanQuarter> lw = new LambdaQueryWrapper<PlanQuarter>();
  153. if (!loginUser.getUserId().equals(Long.valueOf("1"))) {
  154. lw.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId());
  155. }
  156. lw.eq(PlanQuarter::getPlanType, "0");
  157. if (!ObjectUtils.isEmpty(vo.getProjectName())) {
  158. lw.like(PlanQuarter::getProjectName, vo.getProjectName());
  159. }
  160. if (!ObjectUtils.isEmpty(vo.getPurchaseServices())) {
  161. lw.eq(PlanQuarter::getPurchaseServices, vo.getPurchaseServices());
  162. }
  163. if (!ObjectUtils.isEmpty(vo.getProjectStatus())) {
  164. lw.eq(PlanQuarter::getProjectStatus, vo.getProjectStatus());
  165. } else {
  166. lw.in(PlanQuarter::getProjectStatus, "1,3,4");
  167. }
  168. if (!ObjectUtils.isEmpty(vo.getParams())) {
  169. if (!ObjectUtils.isEmpty(vo.getParams().get("beginTime"))) {
  170. lw.ge(PlanQuarter::getPlanDemandSubTime, vo.getParams().get("beginTime"));
  171. }
  172. if (!ObjectUtils.isEmpty(vo.getParams().get("endTime"))) {
  173. SimpleDateFormat dateFormatT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
  174. Date parse = dateFormatT.parse(vo.getParams().get("endTime").toString() + " 23:59:59:999");
  175. lw.le(PlanQuarter::getPlanDemandSubTime, parse);
  176. }
  177. }
  178. lw.eq(PlanQuarter::getDelFlay, DataIsDelete.DataNOTDelete.getCode());
  179. Page<PlanQuarter> page = planQuarterMapper.selectPage(new Page<PlanQuarter>(num, size, false), lw);
  180. list.addAll(page.getRecords());
  181. size = page.getRecords().size();
  182. num++;
  183. }
  184. planQuarterList = changeTo(list);
  185. } catch (Exception e) {
  186. e.printStackTrace();
  187. }
  188. return planQuarterList;
  189. }
  190. @Transactional
  191. @Override
  192. public AjaxResult insertPlanQuarter(PlanQuarterStandardVo quarterStandardVo) {
  193. if (planQuarterMapper.countProjectName(quarterStandardVo.getProjectName()) > 0) {
  194. return AjaxResult.error("该项目名称已经存在");
  195. }
  196. //默认未超额
  197. PlanQuarter quarters = new PlanQuarter();
  198. try {
  199. BeanUtils.copyProperties(quarterStandardVo, quarters);
  200. } catch (Exception e) {
  201. e.printStackTrace();
  202. }
  203. quarters.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
  204. quarters.setCreateTime(new Date());
  205. planQuarterMapper.insertPlanQuarter(quarters);
  206. log.info("id:{}", quarters.getPlanPracticalId());
  207. List<SysFileRef> sysFileRefs = quarterStandardVo.getSysFileRefs();
  208. if (!ObjectUtils.isEmpty(sysFileRefs)) {
  209. for (SysFileRef ref : sysFileRefs) {
  210. ref.setRedId(quarters.getPlanPracticalId());
  211. ref.setType(SysFileRefEnum.PLAN_TEMPORARY.getType());
  212. ref.setCreated(quarters.getCreated());
  213. ref.setCreateTime(new Date());
  214. ref.setUpdated(quarters.getCreated());
  215. ref.setUpdateTime(new Date());
  216. sysFileRefMapper.insert(ref);
  217. }
  218. }
  219. return AjaxResult.success();
  220. }
  221. @Override
  222. public AjaxResult deletePlanQuarterByIds(Long[] planIds) {
  223. planQuarterMapper.deletePlanQuarterByIds(planIds);
  224. return AjaxResult.success();
  225. }
  226. @Override
  227. public AjaxResult deletePlanQuarterById(Long planId) {
  228. planQuarterMapper.deletePlanQuarterById(planId);
  229. return AjaxResult.success();
  230. }
  231. @Override
  232. public AjaxResult view(PlanQuarterStandardVo quarterStandardVo) {
  233. PlanQuarterResponseVo responseVo = new PlanQuarterResponseVo();
  234. PlanQuarter byId = planQuarterMapper.getById(quarterStandardVo.getPlanPracticalId());
  235. if (byId == null) {
  236. return AjaxResult.error("数据查询失败");
  237. }
  238. SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(Long.valueOf(byId.getPurchaseDeptId())).get("sysDept");
  239. byId.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
  240. LambdaQueryWrapper<SysFileRef> lw = new LambdaQueryWrapper<>();
  241. lw.eq(SysFileRef::getRedId, quarterStandardVo.getPlanPracticalId());
  242. lw.in(SysFileRef::getType, Arrays.asList(SysFileRefEnum.PLAN_TEMPORARY.getType(), SysFileRefEnum.PLAN_TEMPORARY_EXAMINE.getType()));
  243. List<SysFileRef> fileRefs = sysFileRefMapper.selectList(lw);
  244. List<SysFileInfo> fileInfos = new ArrayList<>();
  245. BeanUtils.copyProperties(byId, responseVo);
  246. if (!ObjectUtils.isEmpty(fileRefs)) {
  247. for (SysFileRef ref : fileRefs) {
  248. SysFileInfo fileInfo = fileService.getById(ref.getFileId());
  249. fileInfos.add(fileInfo);
  250. }
  251. responseVo.setFileInfos(fileInfos);
  252. }
  253. return AjaxResult.success(responseVo);
  254. }
  255. @Transactional
  256. @Override
  257. public AjaxResult update(PlanQuarterStandardVo quarterStandardVo) {
  258. Date now = new Date();
  259. if (planQuarterMapper.countProjectNameOther(quarterStandardVo.getProjectName(), String.valueOf(quarterStandardVo.getPlanPracticalId())) > 0) {
  260. return AjaxResult.error("该项目名称已经存在");
  261. }
  262. PlanQuarter quarters = new PlanQuarter();
  263. try {
  264. BeanUtils.copyProperties(quarterStandardVo, quarters);
  265. } catch (Exception e) {
  266. e.printStackTrace();
  267. }
  268. quarters.setUpdateTime(now);
  269. PlanQuarter byId = planQuarterMapper.selectById(quarters.getPlanPracticalId());
  270. //临时计划修改后要更新年度计划
  271. if (byId.getPlanType().equals(Integer.parseInt("1"))) {
  272. if (!ObjectUtils.isEmpty(planYearsMapper.selectById(byId.getPlanYearId()))) {
  273. PlanYears years = new PlanYears();
  274. BeanUtils.copyProperties(quarterStandardVo, years);
  275. years.setProjectAttr(null);
  276. years.setPlanYearId(null);
  277. planYearsMapper.updateById(years);
  278. }
  279. }
  280. planQuarterMapper.updateById(quarters);
  281. List<SysFileRef> sysFileRefs = quarterStandardVo.getSysFileRefs();
  282. if (!ObjectUtils.isEmpty(sysFileRefs)) {
  283. // 删关联
  284. LambdaQueryWrapper<SysFileRef> lw = new LambdaQueryWrapper<>();
  285. lw.eq(SysFileRef::getRedId, quarters.getPlanPracticalId());
  286. lw.eq(SysFileRef::getType, SysFileRefEnum.PLAN_TEMPORARY.getType());
  287. sysFileRefMapper.delete(lw);
  288. for (SysFileRef ref : sysFileRefs) {
  289. ref.setRedId(quarters.getPlanPracticalId());
  290. ref.setType(SysFileRefEnum.PLAN_TEMPORARY.getType());
  291. ref.setCreated(quarterStandardVo.getUpdated());
  292. ref.setCreateTime(now);
  293. ref.setUpdated(quarterStandardVo.getUpdated());
  294. ref.setUpdateTime(now);
  295. sysFileRefMapper.insert(ref);
  296. }
  297. }
  298. return AjaxResult.success();
  299. }
  300. @Override
  301. public String importPlanQuarter(List<PlanQuarterStandardVo> planQuarters, boolean isUpdateSupport, LoginUser loginUser) {
  302. if (StringUtils.isNull(planQuarters) || planQuarters.size() == 0) {
  303. throw new ServiceException("导入季度计划数据不能为空!");
  304. }
  305. List<PlanQuarter> list = new ArrayList<>();
  306. for (PlanQuarterStandardVo standardVo : planQuarters) {
  307. PlanQuarter quarter = new PlanQuarter();
  308. BeanUtils.copyProperties(standardVo, quarter);
  309. quarter.setPurchaseDeptName(standardVo.getPurchaseDeptId());
  310. list.add(quarter);
  311. }
  312. HashMap<String, HashMap<String, String>> planEnums = dictTypeService.getAboutEnums();
  313. HashMap<String, String> projectTypesMap = planEnums.get("projectTypes");
  314. HashMap<String, String> projectAttributes = planEnums.get("projectAttributes");
  315. int successNum = 0;
  316. int failureNum = 0;
  317. StringBuilder successMsg = new StringBuilder();
  318. StringBuilder failureMsg = new StringBuilder();
  319. //deptService
  320. for (PlanQuarter planQuarter : list) {
  321. try {
  322. //验证项目名称是否重复导入
  323. //将录入信息中的值更改为要保存的数据
  324. if (planQuarterMapper.countProjectName(planQuarter.getProjectName()) == 0) {
  325. //采购单位
  326. SysDept info = deptMapper.checkDeptNameOnlyOne(planQuarter.getPurchaseDeptName());
  327. if (!ObjectUtils.isEmpty(info)) {
  328. planQuarter.setPurchaseDeptId(String.valueOf(info.getDeptId()));
  329. } else {
  330. ++failureNum;
  331. failureMsg.append("*" + failureNum + "*采购单位“" + planQuarter.getPurchaseDeptName() + "”不存在");
  332. }
  333. planQuarter.setProjectType(projectTypesMap.get(planQuarter.getProjectType()));
  334. planQuarter.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
  335. //项目属性是多选字段
  336. StringBuilder builder = new StringBuilder();
  337. if (planQuarter.getProjectAttr().contains(",")) {
  338. String[] split = planQuarter.getProjectAttr().split(",");
  339. for (String s : split) {
  340. if (!planQuarter.getProjectAttr().endsWith(s)) {
  341. builder.append(projectAttributes.get(s) + ",");
  342. } else {
  343. builder.append(projectAttributes.get(s));
  344. }
  345. }
  346. } else {
  347. builder.append(projectAttributes.get(planQuarter.getProjectAttr()));
  348. }
  349. planQuarter.setProjectAttr(builder.toString());
  350. planQuarter.setCreated(String.valueOf(loginUser.getUserId()));
  351. planQuarter.setCreateTime(new Date());
  352. planQuarterMapper.insertPlanQuarter(planQuarter);
  353. successNum++;
  354. successMsg.append("*" + successNum + "、项目 " + planQuarter.getProjectName() + " 导入成功!");
  355. } else {
  356. failureNum++;
  357. failureMsg.append(failureNum + "*项目 " + planQuarter.getProjectName() + " 已存在!/n");
  358. }
  359. } catch (Exception exc) {
  360. failureNum++;
  361. String msg = "*" + successNum + "*项目 " + planQuarter.getProjectName() + " 导入失败";
  362. failureMsg.append(msg + exc.getMessage());
  363. log.error(msg, exc);
  364. }
  365. }
  366. if (failureNum > 0) {
  367. failureMsg.insert(0, "导入失败!共 " + failureNum + " 条数据格式不正确:");
  368. throw new ServiceException(failureMsg.toString());
  369. } else {
  370. successMsg.insert(0, "导入成功!共 " + successNum + " 条。");
  371. }
  372. return successMsg.toString();
  373. }
  374. @Override
  375. @Transactional
  376. public AjaxResult commit(PlanQuarterStandardVo quarterStandardVo) {
  377. PlanQuarter byId = planQuarterMapper.getById(quarterStandardVo.getPlanPracticalId());
  378. if (!isBetweenValue(byId)) {
  379. return AjaxResult.error("所创计划不在提报日期内!");
  380. }
  381. //申请修改之后再次提交,先清除上一次提交后的审核记录
  382. PmAuditDeptRef ref = new PmAuditDeptRef();
  383. ref.setRefId(byId.getPlanPracticalId()).setRefType("1").setProjectType(byId.getProjectType()).setEvaluation(byId.getEvaluation());
  384. refIsExist(ref, pmAuditDeptRefMapper);
  385. insertAuditDeptRef(userService, pmAuditDeptRefService, ref);
  386. int commit = planQuarterMapper.commit(quarterStandardVo.getPlanPracticalId());
  387. if (commit != 1) {
  388. return AjaxResult.error("项目状态数据异常");
  389. }
  390. return AjaxResult.success();
  391. }
  392. //是否已存在--关联审核部门
  393. static void refIsExist(PmAuditDeptRef ref, PmAuditDeptRefMapper pmAuditDeptRefMapper) {
  394. LambdaQueryWrapper<PmAuditDeptRef> lp = new LambdaQueryWrapper<>();
  395. lp.eq(PmAuditDeptRef::getRefId, ref.getRefId());
  396. lp.eq(PmAuditDeptRef::getRefType, ref.getRefType());
  397. List<PmAuditDeptRef> refs = pmAuditDeptRefMapper.selectList(lp);
  398. if (!ObjectUtils.isEmpty(refs)) {
  399. pmAuditDeptRefMapper.delete(lp);
  400. }
  401. }
  402. static void insertAuditDeptRef(ISysUserService userService, PmAuditDeptRefService pmAuditDeptRefService, PmAuditDeptRef ref) {
  403. SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
  404. Long deptId = sysUser.getDeptId();
  405. if (!pmAuditDeptRefService.insertPmAuditDeptRefs(ref.getRefId(),
  406. ref.getRefType(),
  407. deptId,
  408. ref.getEvaluation(),
  409. sysUser.getUserId(),
  410. ref.getProjectType())) {
  411. throw new ServiceException("审核关联数据插入失败");
  412. }
  413. }
  414. @Override
  415. @Transactional
  416. public AjaxResult reviewTo(PlanQuarterStandardVo vo) {
  417. SysUser sysUser = userService.selectUserById(SecurityUtils.getUserId());
  418. Long deptId = sysUser.getDeptId();
  419. SysDept sysDept = deptMapper.selectDeptById(deptId);
  420. String[] ancestors = sysDept.getAncestors().split(",");
  421. String deptLevel = null;
  422. if (ancestors.length == 2) { //C级
  423. deptLevel = "C";
  424. } else if (ancestors.length == 3) { //B级
  425. deptLevel = "B";
  426. } else if (ancestors.length == 4) { //A级
  427. deptLevel = "A";
  428. }
  429. LambdaQueryWrapper<PmAuditDeptRef> lw = new LambdaQueryWrapper();
  430. lw.eq(PmAuditDeptRef::getRefId, vo.getPlanPracticalId());
  431. lw.eq(PmAuditDeptRef::getRefType, "1");
  432. List<PmAuditDeptRef> list = pmAuditDeptRefService.list(lw);
  433. boolean flay = true;
  434. if (!ObjectUtils.isEmpty(list)) {
  435. for (PmAuditDeptRef pmAuditDeptRef : list) {
  436. // 判断 deptLevel 是否还有更高的 且是 待审核的数据
  437. if (pmAuditDeptRef.getDeptLevel().compareTo(deptLevel) > 0
  438. && pmAuditDeptRef.getStatus().equals(Integer.parseInt("0"))) {
  439. flay = false;
  440. }
  441. // 更新当前 deptLevel 级别的审核状态
  442. if (pmAuditDeptRef.getDeptLevel().compareTo(deptLevel) == 0) {
  443. pmAuditDeptRef.setStatus(1);
  444. pmAuditDeptRefService.updateById(pmAuditDeptRef);
  445. }
  446. }
  447. }
  448. realReviewTo(vo, flay);
  449. return AjaxResult.success();
  450. }
  451. public AjaxResult realReviewTo(PlanQuarterStandardVo vo, boolean flay) {
  452. Date now = new Date();
  453. //季度计划审核通过后同步到年度计划和项目管理
  454. PlanQuarter byId = planQuarterMapper.getById(vo.getPlanPracticalId());
  455. //上传审核文件并赋予计划审核通过
  456. upExamineFile(vo);
  457. if (flay) {
  458. //同步到项目管理
  459. PmDemand demand = new PmDemand();
  460. BeanUtils.copyProperties(byId, demand);
  461. demand.setEvaluation(byId.getEvaluation().doubleValue());
  462. demand.setPlanId(byId.getPlanPracticalId());
  463. demand.setPurchaseDeptId(Long.valueOf(byId.getPurchaseDeptId()));
  464. //同步到项目管理状态为需求待填制
  465. demand.setProjectStatus(PmProjectStatus.DEMAND_WAIT_FILL.getCode());
  466. demand.setCreateTime(now);
  467. demand.setCreateBy(byId.getCreated());
  468. demand.setUpdateTime(now);
  469. demand.setUpdateBy(demand.getCreateBy());
  470. pmDemandMapper.insert(demand);
  471. demandService.updateDemandWarnStatus(demand.getDemandId());
  472. //计划附件也进行同步---查询季度计划附件后同步到项目需求附件和年度计划附件
  473. LambdaQueryWrapper<SysFileRef> sysFileRefLp = new LambdaQueryWrapper<>();
  474. sysFileRefLp.eq(SysFileRef::getRedId, vo.getPlanPracticalId());
  475. sysFileRefLp.in(SysFileRef::getType, Arrays.asList(SysFileRefEnum.PLAN_TEMPORARY.getType(), SysFileRefEnum.PLAN_TEMPORARY_EXAMINE.getType()));
  476. List<SysFileRef> sysFileRefs = sysFileRefMapper.selectList(sysFileRefLp);
  477. if (!ObjectUtils.isEmpty(sysFileRefs)) {
  478. for (SysFileRef ref : sysFileRefs) {
  479. ref.setRedId(demand.getDemandId());
  480. ref.setType(SysFileRefEnum.PM_DEMAND.getType());
  481. ref.setId(null);
  482. ref.setCreated(vo.getUpdated());
  483. ref.setCreateTime(now);
  484. ref.setUpdated(vo.getUpdated());
  485. ref.setUpdateTime(now);
  486. sysFileRefMapper.insert(ref);
  487. }
  488. }
  489. //赋予项目状态已审核
  490. vo.setProjectStatus(ProjectStatus.PLANTOEXAMINE.getCode());
  491. return review(vo);
  492. }
  493. return AjaxResult.success("成功");
  494. }
  495. @Override
  496. @Transactional
  497. public AjaxResult reviewReturn(PlanQuarterStandardVo vo) {
  498. vo.setProjectStatus(ProjectStatus.PLANTOBACK.getCode());
  499. //上传审核文件并赋予计划审核退回
  500. upExamineFile(vo);
  501. return review(vo);
  502. }
  503. /**
  504. * 上传审核文件
  505. *
  506. * @param vo
  507. */
  508. @Override
  509. @Transactional
  510. public void upExamineFile(PlanQuarterStandardVo vo) {
  511. Date now = new Date();
  512. List<SysFileRef> sysFileRefuses = vo.getSysFileRefs();
  513. if (!ObjectUtils.isEmpty(sysFileRefuses)) {
  514. for (SysFileRef ref : sysFileRefuses) {
  515. ref.setRedId(vo.getPlanPracticalId());
  516. ref.setType(SysFileRefEnum.PLAN_TEMPORARY_EXAMINE.getType());
  517. ref.setCreated(vo.getUpdated());
  518. ref.setCreateTime(now);
  519. ref.setUpdated(vo.getUpdated());
  520. ref.setUpdateTime(now);
  521. sysFileRefMapper.insert(ref);
  522. }
  523. }
  524. }
  525. private AjaxResult review(PlanQuarterStandardVo vo) {
  526. int review = planQuarterMapper.review(vo);
  527. if (review != 1) {
  528. return AjaxResult.error("项目状态数据异常");
  529. }
  530. return AjaxResult.success();
  531. }
  532. @Override
  533. public AjaxResult appUpdate(PlanQuarterStandardVo vo) {
  534. //申请后会成为未提交的状态,可以进行修改
  535. PlanQuarter planQuarter = new PlanQuarter();
  536. BeanUtils.copyProperties(vo, planQuarter);
  537. planQuarter.setAppUpdate("true");
  538. planQuarterMapper.updateById(planQuarter);
  539. return AjaxResult.success("申请成功");
  540. }
  541. @Override
  542. @Transactional
  543. public AjaxResult handleAppUpdate(PlanQuarterStandardVo vo) {
  544. //getProjectAttr传值1为同意。-1为拒绝
  545. PlanQuarter planQuarter = new PlanQuarter();
  546. planQuarter.setPlanPracticalId(vo.getPlanPracticalId());
  547. //同意修改申请
  548. if ("1".equals(vo.getProjectAttr())) {
  549. //同意申请之后进行修改,提交后可再次申请
  550. planQuarter.setAppUpdate("");
  551. planQuarter.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
  552. planQuarterMapper.updateById(planQuarter);
  553. return AjaxResult.success("已同意该修改申请");
  554. }
  555. //拒绝后可以再次申请
  556. planQuarter.setAppUpdate("");
  557. planQuarterMapper.updateById(planQuarter);
  558. return AjaxResult.success("已拒绝改申请");
  559. }
  560. @Override
  561. public AjaxResult sendLetter(PlanQuarterStandardVo quarterStandardVo) {
  562. PlanQuarter quarter = new PlanQuarter();
  563. BeanUtils.copyProperties(quarterStandardVo, quarter);
  564. quarter.setSendLetter("1");
  565. quarter.setLetterTime(new Date());
  566. int review = planQuarterMapper.updateById(quarter);
  567. if (review != 1) {
  568. return AjaxResult.error("项目状态数据异常");
  569. }
  570. return AjaxResult.success();
  571. }
  572. @Override
  573. public AjaxResult upLoadPlanFile(PlanQuarterStandardVo quarterStandardVo) {
  574. List<SysFileRef> sysFileRefs = quarterStandardVo.getSysFileRefs();
  575. if (!ObjectUtils.isEmpty(sysFileRefs)) {
  576. for (SysFileRef ref : sysFileRefs) {
  577. ref.setRedId(quarterStandardVo.getPlanPracticalId());
  578. ref.setType(SysFileRefEnum.PLAN_TEMPORARY.getType());
  579. sysFileRefMapper.insert(ref);
  580. }
  581. }
  582. return AjaxResult.success();
  583. }
  584. @Override
  585. public List<PlanQuarter> queryPage(PlanQuarterStandardVo vo) {
  586. LoginUser loginUser = SecurityUtils.getLoginUser();
  587. if (!loginUser.getUserId().equals(Long.valueOf("1"))) {
  588. vo.setPurchaseDeptId(String.valueOf(loginUser.getDeptId()));
  589. }
  590. List<PlanQuarter> query = planQuarterMapper.query(vo);
  591. if (!ObjectUtils.isEmpty(query)) {
  592. query.stream().map(o -> {
  593. LambdaQueryWrapper<PmAuditDeptRef> lw = new LambdaQueryWrapper();
  594. lw.eq(PmAuditDeptRef::getRefId, o.getPlanPracticalId());
  595. lw.eq(PmAuditDeptRef::getRefType, "1");
  596. List<PmAuditDeptRef> list = pmAuditDeptRefService.list(lw);
  597. boolean fl = true;
  598. if (!ObjectUtils.isEmpty(list) && list.size() > 0) {
  599. List<PmAuditDeptRef> collect = list.stream()
  600. .filter(f -> f.getDeptId().equals(Long.valueOf(vo.getPurchaseDeptId())))
  601. .collect(Collectors.toList());
  602. if (ObjectUtils.isEmpty(collect)) {
  603. fl = false;
  604. } else {
  605. String deptLevel = collect.get(0).getDeptLevel();
  606. fl = collect.get(0).getStatus().equals(Integer.parseInt("1")) ? false : true;
  607. for (PmAuditDeptRef pmAuditDeptRef : list) {
  608. if (pmAuditDeptRef.getDeptLevel().compareTo(deptLevel) == -1
  609. && pmAuditDeptRef.getStatus().equals(Integer.parseInt("0"))) {
  610. fl = false;
  611. }
  612. }
  613. }
  614. /*
  615. * String s1="A";
  616. String s2="B";
  617. System.out.println(s1.compareTo(s2));
  618. * over: -1
  619. * */
  620. }
  621. if (vo.getCreated().equals("1")) {
  622. fl = false;
  623. }
  624. o.setFlag(fl);
  625. return o;
  626. }).collect(Collectors.toList());
  627. }
  628. return query;
  629. }
  630. /**
  631. * 导入年度计划数据
  632. *
  633. * @param planYearIds
  634. * @return
  635. */
  636. @Override
  637. @Transactional
  638. public AjaxResult importPlanYearsData(List<Long> planYearIds) {
  639. Date now = new Date();
  640. StringBuilder sb = new StringBuilder("项目【'");
  641. for (Long yearId : planYearIds) {
  642. PlanQuarter byPlanYearId = planQuarterMapper.getByPlanYearId(yearId);
  643. if (!ObjectUtils.isEmpty(byPlanYearId)) {
  644. sb.append(byPlanYearId.getProjectName() + "'、'");
  645. } else {
  646. PlanQuarter quarter = new PlanQuarter();
  647. PlanYears years = planYearsMapper.getById(yearId);
  648. BeanUtils.copyProperties(years, quarter);
  649. quarter.setPlanYearId(yearId);
  650. quarter.setPlanType(0);
  651. quarter.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode());
  652. planQuarterMapper.insert(quarter);
  653. //项目上传附件和审核文件进行同步
  654. LambdaQueryWrapper<SysFileRef> lw = new LambdaQueryWrapper<>();
  655. lw.eq(SysFileRef::getRedId, years.getPlanYearId());
  656. lw.in(SysFileRef::getType, Arrays.asList(SysFileRefEnum.PLAN_YEAR.getType(), SysFileRefEnum.PLAN_YEAR_EXAMINE.getType()));
  657. List<SysFileRef> fileRefs = sysFileRefMapper.selectList(lw);
  658. for (SysFileRef fileRef : fileRefs) {
  659. fileRef.setId(null);
  660. fileRef.setRedId(quarter.getPlanPracticalId());
  661. fileRef.setType(SysFileRefEnum.PLAN_TEMPORARY.getType());
  662. fileRef.setCreateTime(now);
  663. fileRef.setCreated(SecurityUtils.getUserId() + "");
  664. sysFileRefMapper.insert(fileRef);
  665. }
  666. }
  667. }
  668. sb.append("】已存在,请勿选择。");
  669. if (sb.length() > 14) {
  670. return AjaxResult.error(sb.toString());
  671. }
  672. return AjaxResult.success();
  673. }
  674. @Override
  675. public AjaxResult appDelete(PlanQuarterStandardVo quarterStandardVo) {
  676. PlanQuarter planQuarter = new PlanQuarter();
  677. BeanUtils.copyProperties(quarterStandardVo, planQuarter);
  678. planQuarter.setAppDelete("true");
  679. planQuarterMapper.updateById(planQuarter);
  680. return AjaxResult.success("申请成功");
  681. }
  682. @Override
  683. public AjaxResult handleApp(PlanQuarterStandardVo quarterStandardVo) {
  684. //getProjectAttr传值1为同意。-1为拒绝
  685. if ("1".equals(quarterStandardVo.getProjectAttr())) {
  686. planQuarterMapper.deletePlanQuarterById(quarterStandardVo.getPlanPracticalId());
  687. return AjaxResult.success("已成功进行撤销");
  688. }
  689. PlanQuarter planQuarter = new PlanQuarter();
  690. planQuarter.setPlanPracticalId(quarterStandardVo.getPlanPracticalId());
  691. planQuarter.setAppDelete("false");
  692. planQuarterMapper.updateById(planQuarter);
  693. return AjaxResult.success("已拒绝改申请");
  694. }
  695. //字段赋值对应的名称
  696. public List<PlanQuarterResponseVo> changeTo(List<PlanQuarter> planQuarters) {
  697. //获取季度计划各个季度提报时间的阈值
  698. List<SysDictData> supTime = dictTypeService.selectDictDataByType("sys_quarterly_plan");
  699. HashMap<String, String> thresholdMap = new LinkedHashMap<>();
  700. //各个季度提报时间的阈值
  701. for (SysDictData dictData : supTime) {
  702. // 季度----阈值
  703. thresholdMap.put(dictData.getDictLabel(), dictData.getDictValue());
  704. }
  705. //提前或延后*天进行提醒
  706. List<SysDictData> alertTime = dictTypeService.selectDictDataByType("alert_time_setting");
  707. HashMap<String, String> alertTimeMap = new LinkedHashMap<>();
  708. //根据时间类别设定的提醒时间
  709. for (SysDictData dictData : alertTime) {
  710. // 字段名称----阈值
  711. alertTimeMap.put(dictData.getDictLabel(), dictData.getDictValue());
  712. }
  713. //获取字典数据
  714. HashMap<String, HashMap<String, String>> planEnums = dictTypeService.getAboutEnums();
  715. //项目属性
  716. HashMap<String, String> projectAttributes = planEnums.get("projectAttributes");
  717. //项目审核状态
  718. HashMap<String, String> projectStatusMap = planEnums.get("projectStatus");
  719. //项目类型
  720. HashMap<String, String> projectTypesMap = planEnums.get("projectTypes");
  721. //预算科目
  722. HashMap<String, String> budgetAccountMap = planEnums.get("budgetAccount");
  723. //采购服务站
  724. HashMap<String, String> purchaseServicesMap = planEnums.get("purchaseServices");
  725. List<PlanQuarterResponseVo> list = new ArrayList<PlanQuarterResponseVo>();
  726. for (PlanQuarter planQuarter : planQuarters) {
  727. PlanQuarterResponseVo responseVo = new PlanQuarterResponseVo();
  728. SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(Long.valueOf(planQuarter.getPurchaseDeptId())).get("sysDept");
  729. planQuarter.setPurchaseDeptName(sysDeptResponseVo.getDeptName());
  730. //预算科目
  731. for (Map.Entry<String, String> entry : budgetAccountMap.entrySet()) {
  732. if (!ObjectUtils.isEmpty(planQuarter.getBudgetAccount()) && planQuarter.getBudgetAccount().equals(entry.getValue())) {
  733. planQuarter.setBudgetAccountStr(entry.getKey());
  734. break;
  735. }
  736. }
  737. //采购服务站
  738. for (Map.Entry<String, String> entry : purchaseServicesMap.entrySet()) {
  739. if (!ObjectUtils.isEmpty(planQuarter.getPurchaseServices()) && planQuarter.getPurchaseServices().equals(entry.getValue())) {
  740. planQuarter.setPurchaseServicesStr(entry.getKey());
  741. break;
  742. }
  743. }
  744. //项目审核状态
  745. for (Map.Entry<String, String> entry : projectStatusMap.entrySet()) {
  746. if (!ObjectUtils.isEmpty(planQuarter.getProjectStatus()) && planQuarter.getProjectStatus().equals(entry.getValue())) {
  747. planQuarter.setProjectStatusStr(entry.getKey());
  748. break;
  749. }
  750. }
  751. //项目类型
  752. for (Map.Entry<String, String> entry : projectTypesMap.entrySet()) {
  753. if (!ObjectUtils.isEmpty(planQuarter.getProjectType()) && planQuarter.getProjectType().equals(entry.getValue())) {
  754. planQuarter.setProjectTypeStr(entry.getKey());
  755. break;
  756. }
  757. }
  758. //项目属性为value拼接
  759. if (!ObjectUtils.isEmpty(planQuarter.getProjectAttr())) {
  760. if (planQuarter.getProjectAttr().length() > 1) {
  761. StringBuilder builder = new StringBuilder();
  762. String[] split = planQuarter.getProjectAttr().split(",");
  763. for (String s : split) {
  764. for (Map.Entry<String, String> entry : projectAttributes.entrySet()) {
  765. if (s.equals(entry.getValue())) {
  766. if (!planQuarter.getProjectAttr().endsWith(s)) {
  767. builder.append(entry.getKey() + ",");
  768. } else {
  769. builder.append(entry.getKey());
  770. }
  771. break;
  772. }
  773. }
  774. }
  775. planQuarter.setProjectAttrName(builder.toString());
  776. } else {
  777. for (Map.Entry<String, String> entry : projectAttributes.entrySet()) {
  778. if (planQuarter.getProjectAttr().equals(entry.getValue())) {
  779. planQuarter.setProjectAttrName(entry.getKey());
  780. break;
  781. }
  782. }
  783. }
  784. }
  785. //机关业务指导处(科)为id拼接
  786. String organDivision = planQuarter.getOrganDivision();
  787. if (!ObjectUtils.isEmpty(organDivision)) {
  788. int length = organDivision.split(",").length;
  789. SysDept sysDept = new SysDept();
  790. if (length > 1) {
  791. StringBuilder builder = new StringBuilder();
  792. String[] split = organDivision.split(",");
  793. for (String s : split) {
  794. sysDept = deptService.selectById(Long.valueOf(s));
  795. if (!ObjectUtils.isEmpty(sysDept)) {
  796. if (!organDivision.endsWith(s)) {
  797. builder.append(sysDept.getDeptName() + ",");
  798. } else {
  799. builder.append(sysDept.getDeptName());
  800. }
  801. }
  802. }
  803. planQuarter.setOrganDivisionStr(builder.toString());
  804. } else if (length == 1) {
  805. sysDept = deptService.selectById(Long.valueOf(organDivision));
  806. if (!ObjectUtils.isEmpty(sysDept)) {
  807. planQuarter.setOrganDivisionStr(sysDept.getDeptName());
  808. }
  809. }
  810. }
  811. //是否可以申请撤销和申请修改
  812. //需求待填制可以申请,需求建档就不能申请
  813. PmDemand demand = demandService.selectByPlanId(planQuarter.getPlanPracticalId());
  814. if (!ObjectUtils.isEmpty(demand) && !demand.getProjectStatus().equals(PmProjectStatus.DEMAND_WAIT_FILL.getCode())) {
  815. planQuarter.setAppDeleteDo("false");
  816. planQuarter.setAppUpdateDo("false");
  817. } else {
  818. //能否申请撤销
  819. if (!ObjectUtils.isEmpty(planQuarter.getAppDelete()) && planQuarter.getAppDelete().equals("true")) {
  820. //申请过的不能再申请
  821. planQuarter.setAppDeleteDo("false");
  822. } else if (planQuarter.getProjectStatus().equals("0")) {
  823. planQuarter.setAppDeleteDo("false");
  824. } else {
  825. //提交后可以申请撤销
  826. planQuarter.setAppDeleteDo("true");
  827. }
  828. //能否申请修改
  829. if (!ObjectUtils.isEmpty(planQuarter.getAppUpdate()) && planQuarter.getAppUpdate().equals("true")) {
  830. //申请过的不能再申请
  831. planQuarter.setAppUpdateDo("false");
  832. } else if (planQuarter.getProjectStatus().equals("0")) {
  833. planQuarter.setAppUpdateDo("false");
  834. } else {
  835. //提交后可以申请撤销
  836. planQuarter.setAppUpdateDo("true");
  837. }
  838. }
  839. BeanUtils.copyProperties(planQuarter, responseVo);
  840. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
  841. responseVo.setPlanDemandSubTimeStr(sdf.format(responseVo.getPlanDemandSubTime()));
  842. responseVo.setPlanPurchaseFinishTimeStr(sdf.format(responseVo.getPlanPurchaseFinishTime()));
  843. responseVo.setPlanDeliverTimeStr(sdf.format(responseVo.getPlanDeliverTime()));
  844. //状态在采购需求对接和流废标退回之间的项目可以进行催告---已发函不可再次发函
  845. responseVo.setSendLetterDo("false");
  846. if (!ObjectUtils.isEmpty(demand)) {
  847. if (sendLetterDo(demand.getProjectStatus()) && planQuarter.getSendLetter().equals("0")) {
  848. responseVo.setSendLetterDo("true");
  849. }
  850. }
  851. try {
  852. responseVo.setTipsMessage(planQuarterGetTips(thresholdMap, alertTimeMap));
  853. } catch (ParseException e) {
  854. e.printStackTrace();
  855. }
  856. list.add(responseVo);
  857. }
  858. return list;
  859. }
  860. //是否可以执行发函
  861. @Override
  862. public boolean sendLetterDo(String projectStatus) {
  863. List<String> ls = new ArrayList<>();
  864. ls.add(PmProjectStatus.PURCHASE_DEMAND_DOCKING.getCode());
  865. ls.add(PmProjectStatus.EXPERT_FEEDBACK.getCode());
  866. ls.add(PmProjectStatus.PROCUREMENT_DOCUMENTS_REVIEW.getCode());
  867. ls.add(PmProjectStatus.PROCUREMENT_ANNOUNCEMENT.getCode());
  868. ls.add(PmProjectStatus.PRE_BID_QUERY.getCode());
  869. ls.add(PmProjectStatus.WAIT_OPEN_BID.getCode());
  870. ls.add(PmProjectStatus.BID_RESULT_ANNOUNCEMENT.getCode());
  871. ls.add(PmProjectStatus.WASTE_BID_HANDLE.getCode());
  872. ls.add(PmProjectStatus.POST_BID_QUERY.getCode());
  873. ls.add(PmProjectStatus.WASTE_BID_RETURN.getCode());
  874. return ls.contains(projectStatus);
  875. }
  876. @Override
  877. public List<Integer> idNotDemand() {
  878. return planQuarterMapper.idNotDemand();
  879. }
  880. /**
  881. * 根据季度计划在各个季度提报时间的阈值进行提示
  882. *
  883. * @return
  884. */
  885. public String planQuarterGetTips(HashMap<String, String> thresholdMap, HashMap<String, String> alertTimeMap) throws ParseException {
  886. //提示信息:定义距离结束时间*天内提示
  887. int alertDay = Integer.parseInt(alertTimeMap.get("计划提报时间"));
  888. Integer remindTine = 1000 * 60 * 60 * 24 * alertDay;
  889. String subTips = "";
  890. //季度提报时间的结束时间阈值
  891. Date thresholdTime = null;
  892. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  893. Date date = new Date();
  894. for (QuarterEnum val : QuarterEnum.values()) {
  895. if (val.getInfo().contains(date.getMonth() + "")) {
  896. switch (val.getCode()) {
  897. case "1":
  898. thresholdTime = dateFormat.parse(thresholdMap.get("第一季度结束时间"));
  899. case "2":
  900. thresholdTime = dateFormat.parse(thresholdMap.get("第二季度结束时间"));
  901. case "3":
  902. thresholdTime = dateFormat.parse(thresholdMap.get("第三季度结束时间"));
  903. case "4":
  904. thresholdTime = dateFormat.parse(thresholdMap.get("第四季度结束时间"));
  905. default:
  906. }
  907. break;
  908. }
  909. }
  910. double surplus = thresholdTime.getTime() - date.getTime();
  911. //少于设定时间便提醒
  912. if (surplus < remindTine && surplus > 0) {
  913. //剩余天数(向上取整)
  914. int i = (int) Math.ceil(surplus / 1000 / 60 / 60 / 24);
  915. if (i > 0) {
  916. subTips = "距离计划提报时间不足" + i + "天";
  917. }
  918. }
  919. return subTips;
  920. }
  921. //是否在提报时间内
  922. public Boolean isBetweenValue(PlanQuarter planQuarter) {
  923. //获取年度计划提报时间的阈值
  924. //获取季度计划各个季度提报时间的阈值
  925. List<SysDictData> supTime = dictTypeService.selectDictDataByType("sys_quarterly_plan");
  926. HashMap<String, String> thresholdMap = new LinkedHashMap<>();
  927. //各个季度提报时间的阈值
  928. for (SysDictData dictData : supTime) {
  929. // 季度----阈值
  930. thresholdMap.put(dictData.getDictLabel(), dictData.getDictValue());
  931. }
  932. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  933. Date thresholdTimeStart = null;
  934. Date thresholdTimeEnd = null;
  935. Calendar instance = Calendar.getInstance();
  936. instance.setTime(planQuarter.getPlanDemandSubTime());
  937. try {
  938. for (QuarterEnum val : QuarterEnum.values()) {
  939. if (val.getInfo().contains((instance.get(Calendar.MONTH) + 1) + "")) {
  940. //System.err.println("MONTH" + (instance.get(Calendar.MONTH) + 1));
  941. switch (val.getCode()) {
  942. case "1":
  943. thresholdTimeStart = dateFormat.parse(thresholdMap.get("第一季度开始时间"));
  944. thresholdTimeEnd = dateFormat.parse(thresholdMap.get("第一季度结束时间"));
  945. break;
  946. case "2":
  947. thresholdTimeStart = dateFormat.parse(thresholdMap.get("第二季度开始时间"));
  948. thresholdTimeEnd = dateFormat.parse(thresholdMap.get("第二季度结束时间"));
  949. break;
  950. case "3":
  951. thresholdTimeStart = dateFormat.parse(thresholdMap.get("第三季度开始时间"));
  952. thresholdTimeEnd = dateFormat.parse(thresholdMap.get("第三季度结束时间"));
  953. break;
  954. default:
  955. thresholdTimeStart = dateFormat.parse(thresholdMap.get("第四季度开始时间"));
  956. thresholdTimeEnd = dateFormat.parse(thresholdMap.get("第四季度结束时间"));
  957. }
  958. break;
  959. }
  960. }
  961. if (!ObjectUtils.isEmpty(thresholdTimeStart) && !ObjectUtils.isEmpty(thresholdTimeEnd)) {
  962. System.err.println("instance=" + new Date(instance.getTime().getTime()));
  963. System.err.println("thresholdTimeStart=" + thresholdTimeStart);
  964. System.err.println("thresholdTimeEnd=" + thresholdTimeEnd);
  965. System.err.println("instance.before(thresholdTimeStart)=" + instance.before(thresholdTimeStart));
  966. System.err.println("instance.after(thresholdTimeEnd)=" + instance.after(thresholdTimeEnd));
  967. Date date = new Date(instance.getTime().getTime());
  968. if (date.before(thresholdTimeStart) || date.after(thresholdTimeEnd)) {
  969. return false;
  970. }
  971. }
  972. } catch (ParseException e) {
  973. e.printStackTrace();
  974. }
  975. return true;
  976. }
  977. }