package com.ozs.plan.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ozs.common.constant.Constants; import com.ozs.common.core.domain.AjaxResult; import com.ozs.common.core.domain.entity.SysDept; import com.ozs.common.core.domain.entity.SysDictData; import com.ozs.common.core.domain.entity.SysRole; import com.ozs.common.core.domain.model.LoginUser; import com.ozs.common.enums.DataIsDelete; import com.ozs.common.enums.PmProjectStatus; import com.ozs.common.enums.ProjectStatus; import com.ozs.common.enums.ProjectTypes; import com.ozs.common.enums.QuarterEnum; import com.ozs.common.enums.SysFileRefEnum; import com.ozs.common.exception.ServiceException; import com.ozs.common.utils.PageUtils; import com.ozs.common.utils.StringUtils; import com.ozs.common.utils.bean.BeanUtils; import com.ozs.plan.doman.PlanQuarter; import com.ozs.plan.doman.PlanYears; import com.ozs.plan.doman.vo.requestVo.PlanQuarterStandardVo; import com.ozs.plan.doman.vo.responseVo.PlanQuarterResponseVo; import com.ozs.plan.mapper.PlanQuarterMapper; import com.ozs.plan.mapper.PlanYearsMapper; import com.ozs.plan.service.PlanQuarterService; import com.ozs.pm.doman.PmDemand; import com.ozs.pm.mapper.PmDemandMapper; import com.ozs.pm.service.IPmDemandService; import com.ozs.system.domain.SysFileInfo; import com.ozs.system.domain.SysFileRef; import com.ozs.system.domain.vo.responseVo.SysDeptResponseVo; import com.ozs.system.mapper.SysDeptMapper; import com.ozs.system.mapper.SysFileRefMapper; import com.ozs.system.service.ISysDeptService; import com.ozs.system.service.ISysDictTypeService; import com.ozs.system.service.SysFileService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.token.TokenService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.validation.Validator; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @author buzhanyi */ @Service @Slf4j public class PlanQuarterServiceImpl extends ServiceImpl implements PlanQuarterService { @Autowired PlanQuarterMapper planQuarterMapper; @Autowired PlanYearsMapper planYearsMapper; @Autowired protected Validator validator; @Autowired private ISysDictTypeService dictTypeService; @Autowired private ISysDeptService deptService; @Autowired SysFileRefMapper sysFileRefMapper; @Autowired private SysDeptMapper deptMapper; @Autowired private SysFileService fileService; @Autowired private PmDemandMapper pmDemandMapper; @Autowired private IPmDemandService demandService; @Override public List selectPlanQuarterListEXP(PlanQuarterStandardVo vo, LoginUser loginUser) { List list = new ArrayList<>(); List planQuarterList = new ArrayList<>(); try { int num = 1; int size = 200; while (size == 200) { LambdaQueryWrapper lw = new LambdaQueryWrapper<>(); if (!ObjectUtils.isEmpty(vo.getProjectName())) { lw.like(PlanQuarter::getProjectName, vo.getProjectName()); } if (!ObjectUtils.isEmpty(vo.getPurchaseServices())) { lw.eq(PlanQuarter::getPurchaseServices, vo.getPurchaseServices()); } if (!ObjectUtils.isEmpty(vo.getIsExcess())) { lw.eq(PlanQuarter::getIsExcess, vo.getIsExcess()); } if (!ObjectUtils.isEmpty(vo.getProjectStatus())) { lw.eq(PlanQuarter::getProjectStatus, vo.getProjectStatus()); } if (!ObjectUtils.isEmpty(vo.getBeginTime())) { lw.ge(PlanQuarter::getPlanDemandSubTime, vo.getBeginTime()); } if (!ObjectUtils.isEmpty(vo.getEndTime())) { lw.le(PlanQuarter::getPlanDemandSubTime, vo.getEndTime()); } lw.eq(PlanQuarter::getDelFlay, DataIsDelete.DataNOTDelete.getCode()); // 添加数据权限 List roleKeys = loginUser.getUser().getRoles().stream().map(SysRole::getRoleKey).collect(Collectors.toList()); if (roleKeys.contains(Constants.DEMAND_UNIT)) { // 需求单位 /*(purchase_dept_id = 当前用户deptID) */ lw.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId()); } else if (roleKeys.contains(Constants.PURCHASING_MANAGEMENT) || roleKeys.contains(Constants.PURCHASE_SERVICES)) { // 采购管理部门 或 采购办 SysDept sysDept = new SysDept(); sysDept.setParentId(loginUser.getDeptId()); sysDept.setStatus("0"); List childDeptIds = deptService.selectDeptList(sysDept) .stream() .map(SysDept::getDeptId) .collect(Collectors.toList()); if (ObjectUtils.isEmpty(childDeptIds)) { lw.and((wrapper) -> { wrapper.eq(PlanQuarter::getIsExcess, 0); wrapper.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId()); }); } else { lw.and((wrapper) -> { wrapper.eq(PlanQuarter::getIsExcess, 0); wrapper.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId()); }) .or((wrapper) -> { wrapper.eq(PlanQuarter::getIsExcess, 1); wrapper.in(PlanQuarter::getPurchaseDeptId, childDeptIds); }); } } Page page = planQuarterMapper.selectPage(new Page<>(num, size, false), lw); list.addAll(page.getRecords()); size = page.getRecords().size(); num++; } planQuarterList = changeTo(list); } catch (Exception e) { e.printStackTrace(); } return planQuarterList; } @Override public List selectPlanQuarterExamineListEXP(PlanQuarterStandardVo vo, LoginUser loginUser) { List list = new ArrayList<>(); List planQuarterList = new ArrayList<>(); try { int num = 1; int size = 200; while (size == 200) { LambdaQueryWrapper lw = new LambdaQueryWrapper(); if (!ObjectUtils.isEmpty(vo.getProjectName())) { lw.like(PlanQuarter::getProjectName, vo.getProjectName()); } if (!ObjectUtils.isEmpty(vo.getPurchaseServices())) { lw.eq(PlanQuarter::getPurchaseServices, vo.getPurchaseServices()); } if (!ObjectUtils.isEmpty(vo.getIsExcess())) { lw.eq(PlanQuarter::getIsExcess, vo.getIsExcess()); } if (!ObjectUtils.isEmpty(vo.getProjectStatus())) { lw.eq(PlanQuarter::getProjectStatus, vo.getProjectStatus()); } else { lw.in(PlanQuarter::getProjectStatus, "1,3"); } if (!ObjectUtils.isEmpty(vo.getBeginTime())) { lw.ge(PlanQuarter::getPlanDemandSubTime, vo.getBeginTime()); } if (!ObjectUtils.isEmpty(vo.getEndTime())) { lw.le(PlanQuarter::getPlanDemandSubTime, vo.getEndTime()); } lw.eq(PlanQuarter::getDelFlay, DataIsDelete.DataNOTDelete.getCode()); // 添加数据权限 List roleKeys = loginUser.getUser().getRoles().stream().map(SysRole::getRoleKey).collect(Collectors.toList()); if (roleKeys.contains(Constants.DEMAND_UNIT)) { // 需求单位 /*(purchase_dept_id = 当前用户deptID) */ lw.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId()); } else if (roleKeys.contains(Constants.PURCHASING_MANAGEMENT) || roleKeys.contains(Constants.PURCHASE_SERVICES)) { // 采购管理部门 或 采购办 SysDept sysDept = new SysDept(); sysDept.setParentId(loginUser.getDeptId()); sysDept.setStatus("0"); List childDeptIds = deptService.selectDeptList(sysDept) .stream() .map(SysDept::getDeptId) .collect(Collectors.toList()); if (ObjectUtils.isEmpty(childDeptIds)) { lw.and((wrapper) -> { wrapper.eq(PlanQuarter::getIsExcess, 0); wrapper.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId()); }); } else { lw.and((wrapper) -> { wrapper.eq(PlanQuarter::getIsExcess, 0); wrapper.eq(PlanQuarter::getPurchaseDeptId, loginUser.getDeptId()); }) .or((wrapper) -> { wrapper.eq(PlanQuarter::getIsExcess, 1); wrapper.in(PlanQuarter::getPurchaseDeptId, childDeptIds); }); } } Page page = planQuarterMapper.selectPage(new Page(num, size, false), lw); list.addAll(page.getRecords()); size = page.getRecords().size(); num++; } planQuarterList = changeTo(list); } catch (Exception e) { e.printStackTrace(); } return planQuarterList; } @Transactional @Override public AjaxResult insertPlanQuarter(PlanQuarterStandardVo quarterStandardVo) { if (planQuarterMapper.countProjectName(quarterStandardVo.getProjectName()) > 0) { return AjaxResult.error("该项目名称已经存在"); } PlanQuarter quarters = new PlanQuarter(); try { BeanUtils.copyProperties(quarterStandardVo, quarters); } catch (Exception e) { e.printStackTrace(); } //判断是否为超额计划 quarters.setIsExcess(deptService.isExcessOrNo(quarters.getProjectType(), quarters.getEvaluation(), Long.valueOf(quarters.getPurchaseDeptId()))); quarters.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode()); quarters.setCreateTime(new Date()); planQuarterMapper.insertPlanQuarter(quarters); log.info("id:{}", quarters.getPlanPracticalId()); List sysFileRefs = quarterStandardVo.getSysFileRefs(); if (!ObjectUtils.isEmpty(sysFileRefs)) { for (SysFileRef ref : sysFileRefs) { ref.setRedId(quarters.getPlanPracticalId()); ref.setType(SysFileRefEnum.PLAN_TEMPORARY.getType()); ref.setCreated(quarters.getCreated()); ref.setCreateTime(new Date()); ref.setUpdated(quarters.getCreated()); ref.setUpdateTime(new Date()); sysFileRefMapper.insert(ref); } } return AjaxResult.success(); } @Override public AjaxResult deletePlanQuarterByIds(Long[] planIds) { planQuarterMapper.deletePlanQuarterByIds(planIds); return AjaxResult.success(); } @Override public AjaxResult deletePlanQuarterById(Long planId) { planQuarterMapper.deletePlanQuarterById(planId); return AjaxResult.success(); } @Override public AjaxResult view(PlanQuarterStandardVo quarterStandardVo) { PlanQuarterResponseVo responseVo = new PlanQuarterResponseVo(); PlanQuarter byId = planQuarterMapper.getById(quarterStandardVo.getPlanPracticalId()); if (byId == null) { return AjaxResult.error("数据查询失败"); } SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(Long.valueOf(byId.getPurchaseDeptId())).get("sysDept"); byId.setPurchaseDeptName(sysDeptResponseVo.getDeptName()); HashMap map = new HashMap<>(); map.put("red_id", byId.getPlanPracticalId()); map.put("type", SysFileRefEnum.PLAN_TEMPORARY.getType()); List fileRefs = sysFileRefMapper.selectByMap(map); List fileInfos = new ArrayList<>(); BeanUtils.copyProperties(byId, responseVo); if (!ObjectUtils.isEmpty(fileRefs)) { for (SysFileRef ref : fileRefs) { SysFileInfo fileInfo = fileService.getById(ref.getFileId()); fileInfos.add(fileInfo); } responseVo.setFileInfos(fileInfos); } return AjaxResult.success(responseVo); } @Transactional @Override public AjaxResult update(PlanQuarterStandardVo quarterStandardVo) { if (planQuarterMapper.countProjectNameOther(quarterStandardVo.getProjectName(), String.valueOf(quarterStandardVo.getPlanPracticalId())) > 0) { return AjaxResult.error("该项目名称已经存在"); } PlanQuarter quarters = new PlanQuarter(); try { BeanUtils.copyProperties(quarterStandardVo, quarters); } catch (Exception e) { e.printStackTrace(); } quarters.setIsExcess(deptService.isExcessOrNo(quarters.getProjectType(), quarters.getEvaluation(), Long.valueOf(quarters.getPurchaseDeptId()))); quarters.setUpdateTime(new Date()); planQuarterMapper.updateInfoById(quarters); List sysFileRefs = quarterStandardVo.getSysFileRefs(); HashMap map = new HashMap<>(); map.put("red_id", quarters.getPlanPracticalId()); map.put("type", SysFileRefEnum.PLAN_TEMPORARY.getType()); sysFileRefMapper.deleteByMap(map); if (!ObjectUtils.isEmpty(sysFileRefs)) { for (SysFileRef ref : sysFileRefs) { ref.setRedId(quarters.getPlanPracticalId()); ref.setType(SysFileRefEnum.PLAN_TEMPORARY.getType()); ref.setCreated(quarterStandardVo.getUpdated()); ref.setCreateTime(new Date()); ref.setUpdated(quarterStandardVo.getUpdated()); ref.setUpdateTime(new Date()); sysFileRefMapper.insert(ref); } } return AjaxResult.success(); } @Override public String importPlanQuarter(List planQuarters, boolean isUpdateSupport, LoginUser loginUser) { if (StringUtils.isNull(planQuarters) || planQuarters.size() == 0) { throw new ServiceException("导入季度计划数据不能为空!"); } List list = new ArrayList<>(); for (PlanQuarterStandardVo standardVo : planQuarters) { PlanQuarter quarter = new PlanQuarter(); BeanUtils.copyProperties(standardVo, quarter); quarter.setPurchaseDeptName(standardVo.getPurchaseDeptId()); list.add(quarter); } HashMap> planEnums = dictTypeService.getAboutEnums(); HashMap projectTypesMap = planEnums.get("projectTypes"); HashMap planPurchaseModesMap = planEnums.get("planPurchaseModes"); HashMap projectAttributes = planEnums.get("projectAttributes"); HashMap purchaseServices = planEnums.get("purchaseServices"); int successNum = 0; int failureNum = 0; StringBuilder successMsg = new StringBuilder(); StringBuilder failureMsg = new StringBuilder(); //deptService for (PlanQuarter planQuarter : list) { try { //验证项目名称是否重复导入 //将录入信息中的值更改为要保存的数据 if (planQuarterMapper.countProjectName(planQuarter.getProjectName()) == 0) { //采购单位 SysDept info = deptMapper.checkDeptNameOnlyOne(planQuarter.getPurchaseDeptName()); if (!ObjectUtils.isEmpty(info)) { planQuarter.setPurchaseDeptId(String.valueOf(info.getDeptId())); } else { ++failureNum; failureMsg.append("*" + failureNum + "*采购单位“" + planQuarter.getPurchaseDeptName() + "”不存在"); } planQuarter.setProjectType(projectTypesMap.get(planQuarter.getProjectType())); planQuarter.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode()); planQuarter.setPurchaseMode(planPurchaseModesMap.get(planQuarter.getPurchaseMode())); //项目属性是多选字段 StringBuilder builder = new StringBuilder(); if (planQuarter.getProjectAttr().contains(",")) { String[] split = planQuarter.getProjectAttr().split(","); for (String s : split) { if (!planQuarter.getProjectAttr().endsWith(s)) { builder.append(projectAttributes.get(s) + ","); } else { builder.append(projectAttributes.get(s)); } } } else { builder.append(projectAttributes.get(planQuarter.getProjectAttr())); } planQuarter.setProjectAttr(builder.toString()); planQuarter.setPurchaseServices(purchaseServices.get(planQuarter.getPurchaseServices())); planQuarter.setIsExcess(deptService.isExcessOrNo(planQuarter.getProjectType(), planQuarter.getEvaluation(), Long.valueOf(planQuarter.getPurchaseDeptId()))); planQuarter.setCreated(String.valueOf(loginUser.getUserId())); planQuarter.setCreateTime(new Date()); planQuarterMapper.insertPlanQuarter(planQuarter); successNum++; successMsg.append("*" + successNum + "、项目 " + planQuarter.getProjectName() + " 导入成功!"); } else { failureNum++; failureMsg.append(failureNum + "*项目 " + planQuarter.getProjectName() + " 已存在!/n"); } } catch (Exception exc) { failureNum++; String msg = "*" + successNum + "*项目 " + planQuarter.getProjectName() + " 导入失败"; failureMsg.append(msg + exc.getMessage()); log.error(msg, exc); } } if (failureNum > 0) { failureMsg.insert(0, "导入失败!共 " + failureNum + " 条数据格式不正确:"); throw new ServiceException(failureMsg.toString()); } else { successMsg.insert(0, "导入成功!共 " + successNum + " 条。"); } return successMsg.toString(); } @Override public AjaxResult commit(PlanQuarterStandardVo quarterStandardVo) { int commit = planQuarterMapper.commit(quarterStandardVo.getPlanPracticalId()); if (commit != 1) { return AjaxResult.error("项目状态数据异常"); } return AjaxResult.success(); } @Override @Transactional public AjaxResult reviewTo(PlanQuarterStandardVo vo) { //季度计划审核通过后同步到年度计划和项目管理 PlanQuarter quarters = new PlanQuarter(); PmDemand demand = new PmDemand(); PlanQuarter byId = planQuarterMapper.getById(vo.getPlanPracticalId()); if (ObjectUtils.isEmpty(byId.getPlanYearId())) { PlanYears ofYears = new PlanYears(); BeanUtils.copyProperties(byId, ofYears); ofYears.setProjectStatus(ProjectStatus.PLANTOEXAMINE.getCode()); planYearsMapper.insertPlanYears(ofYears); quarters.setPlanYearId(ofYears.getPlanYearId()); } demand.setEvaluation(byId.getEvaluation().doubleValue()); BeanUtils.copyProperties(byId, demand); demand.setPlanId(byId.getPlanPracticalId()); demand.setPurchaseDeptId(Long.valueOf(byId.getPurchaseDeptId())); //同步到项目管理状态为需求待填制 demand.setProjectStatus(PmProjectStatus.DEMAND_WAIT_FILL.getCode()); demand.setCreateTime(new Date()); pmDemandMapper.insert(demand); demandService.updateDemandWarnStatus(demand.getDemandId()); //计划附件也进行同步---查询年度计划附件后复制一份改为项目需求附件 LambdaQueryWrapper sysFileRefLp = new LambdaQueryWrapper<>(); sysFileRefLp.eq(SysFileRef::getType, SysFileRefEnum.PLAN_TEMPORARY.getType()); sysFileRefLp.eq(SysFileRef::getRedId, vo.getPlanPracticalId()); List sysFileRefs = sysFileRefMapper.selectList(sysFileRefLp); if (!ObjectUtils.isEmpty(sysFileRefs)) { for (SysFileRef ref : sysFileRefs) { ref.setRedId(demand.getDemandId()); ref.setType(SysFileRefEnum.PM_DEMAND.getType()); ref.setId(null); sysFileRefMapper.insert(ref); } } vo.setProjectStatus(ProjectStatus.PLANTOEXAMINE.getCode()); return review(vo); } @Override @Transactional public AjaxResult reviewReturn(PlanQuarterStandardVo vo) { vo.setProjectStatus(ProjectStatus.PLANTOBACK.getCode()); return review(vo); } private AjaxResult review(PlanQuarterStandardVo vo) { List sysFileRefs = vo.getSysFileRefs(); if (!ObjectUtils.isEmpty(sysFileRefs)) { for (SysFileRef ref : sysFileRefs) { ref.setRedId(vo.getPlanPracticalId()); ref.setType(SysFileRefEnum.PLAN_TEMPORARY_EXAMINE.getType()); ref.setCreated(vo.getUpdated()); ref.setCreateTime(new Date()); ref.setUpdated(vo.getUpdated()); ref.setUpdateTime(new Date()); sysFileRefMapper.insert(ref); } } int review = planQuarterMapper.review(vo); if (review != 1) { return AjaxResult.error("项目状态数据异常"); } return AjaxResult.success(); } @Override public AjaxResult appUpdate(PlanQuarterStandardVo vo) { //如果项目管理中数据已填制,则不允许申请修改 LambdaQueryWrapper demandLp = new LambdaQueryWrapper<>(); demandLp.eq(PmDemand::getPlanId, vo.getPlanPracticalId()); PmDemand demand = pmDemandMapper.selectOne(demandLp); if (!String.valueOf(demand.getProjectStatus()).equals(PmProjectStatus.DEMAND_WAIT_FILL.getCode())) { return AjaxResult.error("项目信息已填制,不可更改"); } //申请后会成为未提交的状态,可以进行修改 vo.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode()); int review = planQuarterMapper.review(vo); if (review != 1) { return AjaxResult.error("项目状态数据异常"); } return AjaxResult.success(); } @Override public AjaxResult sendLetter(PlanQuarterStandardVo quarterStandardVo) { int review = planQuarterMapper.sendLetter(quarterStandardVo.getPlanPracticalId()); if (review != 1) { return AjaxResult.error("项目状态数据异常"); } return AjaxResult.success(); } @Override public AjaxResult upLoadPlanFile(PlanQuarterStandardVo quarterStandardVo) { List sysFileRefs = quarterStandardVo.getSysFileRefs(); if (!ObjectUtils.isEmpty(sysFileRefs)) { for (SysFileRef ref : sysFileRefs) { ref.setRedId(quarterStandardVo.getPlanPracticalId()); ref.setType(SysFileRefEnum.PLAN_TEMPORARY.getType()); sysFileRefMapper.insert(ref); } } return AjaxResult.success(); } @Override public AjaxResult downLoadPlanFile(PlanQuarterStandardVo quarterStandardVo) { return AjaxResult.success(); } //判断是否为超额计划 public String isExcessOrNo(String projectType, BigDecimal evaluation) { BigDecimal threshold = new BigDecimal(0); //获取各个项目类型设定的概算金额阈值 List data = dictTypeService.selectDictDataByType("sys_over_limit_threshold"); HashMap thresholdMap = new LinkedHashMap<>(); //各个类型的概算金额阈值 for (SysDictData dictData : data) { // 类型----阈值 thresholdMap.put(dictData.getDictLabel(), dictData.getDictValue()); } //项目类型 for (ProjectTypes value : ProjectTypes.values()) { if (projectType.equals(value.getCode())) { threshold = BigDecimal.valueOf(Long.parseLong(thresholdMap.get(value.getInfo()))); } break; } if (evaluation.compareTo(threshold) == 1) { //是超额计划 return ("1"); } else { return ("0"); } } //字段赋值对应的名称 public List changeTo(List planQuarters) { //获取季度计划各个季度提报时间的阈值 List supTime = dictTypeService.selectDictDataByType("sys_quarterly_plan"); HashMap thresholdMap = new LinkedHashMap<>(); //各个季度提报时间的阈值 for (SysDictData dictData : supTime) { // 季度----阈值 thresholdMap.put(dictData.getDictLabel(), dictData.getDictValue()); } //提前或延后*天进行提醒 List alertTime = dictTypeService.selectDictDataByType("alert_time_setting"); HashMap alertTimeMap = new LinkedHashMap<>(); //根据时间类别设定的提醒时间 for (SysDictData dictData : alertTime) { // 字段名称----阈值 alertTimeMap.put(dictData.getDictLabel(), dictData.getDictValue()); } //获取字典数据 HashMap> planEnums = dictTypeService.getAboutEnums(); HashMap projectTypesMap = planEnums.get("projectTypes"); HashMap planPurchaseModesMap = planEnums.get("planPurchaseModes"); HashMap projectAttributes = planEnums.get("projectAttributes"); HashMap purchaseServices = planEnums.get("purchaseServices"); List list = new ArrayList(); for (PlanQuarter planQuarter : planQuarters) { PlanQuarterResponseVo responseVo = new PlanQuarterResponseVo(); SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(Long.valueOf(planQuarter.getPurchaseDeptId())).get("sysDept"); planQuarter.setPurchaseDeptName(sysDeptResponseVo.getDeptName()); for (Map.Entry entry : projectTypesMap.entrySet()) { if (planQuarter.getProjectType().equals(entry.getValue())) { planQuarter.setProjectTypeStr(entry.getKey()); break; } } for (Map.Entry entry : planPurchaseModesMap.entrySet()) { if (planQuarter.getPurchaseMode().equals(entry.getValue())) { planQuarter.setPurchaseModeStr(entry.getKey()); break; } } //项目属性是拼接的 if (!ObjectUtils.isEmpty(planQuarter.getProjectAttr())) { if (planQuarter.getProjectAttr().length() > 1) { StringBuilder builder = new StringBuilder(); String[] split = planQuarter.getProjectAttr().split(","); for (String s : split) { for (Map.Entry entry : projectAttributes.entrySet()) { if (s.equals(entry.getValue())) { if (!planQuarter.getProjectAttr().endsWith(s)) { builder.append(entry.getKey() + ","); } else { builder.append(entry.getKey()); } break; } } } planQuarter.setProjectAttrStr(builder.toString()); } else { for (Map.Entry entry : projectAttributes.entrySet()) { if (planQuarter.getProjectAttr().equals(entry.getValue())) { planQuarter.setProjectAttrStr(entry.getKey()); break; } } } } for (Map.Entry entry : purchaseServices.entrySet()) { if (planQuarter.getPurchaseServices().equals(entry.getValue())) { planQuarter.setPurchaseServicesStr(entry.getKey()); break; } } BeanUtils.copyProperties(planQuarter, responseVo); try { responseVo.setTipsMessage(planQuarterGetTips(thresholdMap, alertTimeMap)); } catch (ParseException e) { e.printStackTrace(); } list.add(responseVo); } return list; } /** * 根据季度计划在各个季度提报时间的阈值进行提示 * * @return */ public String planQuarterGetTips(HashMap thresholdMap, HashMap alertTimeMap) throws ParseException { //提示信息:定义距离结束时间*天内提示 int alertDay = Integer.parseInt(alertTimeMap.get("计划提报时间")); //提示信息:定义距离结束时间一周内提示 Integer remindTine = 1000 * 60 * 60 * 24 * alertDay; //提示语 String subTips = ""; //季度提报时间的结束时间阈值 Date thresholdTime = null; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date = new Date(); for (QuarterEnum val : QuarterEnum.values()) { if (val.getInfo().contains(date.getMonth() + "")) { switch (val.getCode()) { case "1": thresholdTime = dateFormat.parse(thresholdMap.get("第一季度结束时间")); case "2": thresholdTime = dateFormat.parse(thresholdMap.get("第二季度结束时间")); case "3": thresholdTime = dateFormat.parse(thresholdMap.get("第三季度结束时间")); case "4": thresholdTime = dateFormat.parse(thresholdMap.get("第四季度结束时间")); default: } break; } } thresholdTime.setYear(date.getYear()); double surplus = thresholdTime.getTime() - date.getTime(); //少于一周便提醒 if (surplus < remindTine && surplus > 0) { //剩余天数(向上取整) int i = new Double(Math.ceil(surplus / 1000 / 60 / 60 / 24)).intValue(); if (i > 0) { subTips = "距离计划提报时间不足" + i + "天"; } } return subTips; } }