package com.ozs.plan.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; 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.model.LoginUser; import com.ozs.common.enums.ProjectStatus; import com.ozs.common.enums.ProjectTypes; import com.ozs.common.enums.SysFileRefEnum; import com.ozs.common.exception.ServiceException; import com.ozs.common.utils.StringUtils; import com.ozs.common.utils.bean.BeanUtils; import com.ozs.plan.doman.PlanYears; import com.ozs.plan.doman.vo.requestVo.PlanYearsStandardVo; import com.ozs.plan.doman.vo.responseVo.PlanYearsResponseVo; import com.ozs.plan.mapper.PlanYearsMapper; import com.ozs.plan.service.PlanYearsService; 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.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import javax.validation.Validator; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * @author buzhanyi */ @Service @Slf4j public class PlanYearsServiceImpl implements PlanYearsService { @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; @Override public PageInfo selectPlanYearsList(PlanYearsStandardVo vo) { PlanYears ofYears = new PlanYears(); List planYears; List planYearsList = new ArrayList<>(); PageHelper.startPage(vo.getPageNum().intValue(), vo.getPageSize().intValue()); try { BeanUtils.copyProperties(vo, ofYears); planYears = planYearsMapper.selectPlanYearsList(ofYears); planYearsList = changeTo(planYears); } catch (Exception e) { e.printStackTrace(); } PageInfo pageInfo = new PageInfo(planYearsList); return pageInfo; } @Override public List selectPlanYearsListEXP(PlanYearsStandardVo vo) { List list = new ArrayList<>(); List planYearsList = new ArrayList<>(); try { int num = 1; int size = 200; while (size == 200) { LambdaQueryWrapper lw = new LambdaQueryWrapper(); if (!ObjectUtils.isEmpty(vo.getProjectName())) { lw.like(PlanYears::getProjectName, vo.getProjectName()); } if (!ObjectUtils.isEmpty(vo.getPurchaseServices())) { lw.eq(PlanYears::getPurchaseServices, vo.getPurchaseServices()); } if (!ObjectUtils.isEmpty(vo.getIsExcess())) { lw.eq(PlanYears::getIsExcess, vo.getIsExcess()); } if (!ObjectUtils.isEmpty(vo.getProjectStatus())) { lw.eq(PlanYears::getProjectStatus, vo.getProjectStatus()); } if (!ObjectUtils.isEmpty(vo.getBeginTime())) { lw.ge(PlanYears::getPlanDemandSubTime, vo.getBeginTime()); } if (!ObjectUtils.isEmpty(vo.getEndTime())) { lw.le(PlanYears::getPlanDemandSubTime, vo.getEndTime()); } Page page = planYearsMapper.selectPage(new Page(num, size, false), lw); list.addAll(page.getRecords()); size = page.getRecords().size(); num++; } planYearsList = changeTo(list); } catch (Exception e) { e.printStackTrace(); } return planYearsList; } @Override public PageInfo selectPlanYearsExamineList(PlanYearsStandardVo vo) { PlanYears ofYears = new PlanYears(); PageHelper.startPage(vo.getPageNum().intValue(), vo.getPageSize().intValue()); List planYears; List planYearsList = new ArrayList<>(); try { BeanUtils.copyProperties(vo, ofYears); planYears = planYearsMapper.selectPlanYearsExamineList(ofYears); planYearsList = changeTo(planYears); } catch (Exception e) { e.printStackTrace(); } PageInfo pageInfo = new PageInfo(planYearsList); return pageInfo; } @Override public List selectPlanYearsExamineListEXP(PlanYearsStandardVo vo) { List list = new ArrayList<>(); List planYearsList = new ArrayList<>(); try { int num = 1; int size = 200; while (size == 200) { LambdaQueryWrapper lw = new LambdaQueryWrapper(); if (!ObjectUtils.isEmpty(vo.getProjectName())) { lw.like(PlanYears::getProjectName, vo.getProjectName()); } if (!ObjectUtils.isEmpty(vo.getPurchaseServices())) { lw.eq(PlanYears::getPurchaseServices, vo.getPurchaseServices()); } if (!ObjectUtils.isEmpty(vo.getIsExcess())) { lw.eq(PlanYears::getIsExcess, vo.getIsExcess()); } if (!ObjectUtils.isEmpty(vo.getProjectStatus())) { lw.eq(PlanYears::getProjectStatus, vo.getProjectStatus()); } else { lw.in(PlanYears::getProjectStatus, "1,3"); } if (!ObjectUtils.isEmpty(vo.getBeginTime())) { lw.ge(PlanYears::getPlanDemandSubTime, vo.getBeginTime()); } if (!ObjectUtils.isEmpty(vo.getEndTime())) { lw.le(PlanYears::getPlanDemandSubTime, vo.getEndTime()); } Page page = planYearsMapper.selectPage(new Page(num, size, false), lw); list.addAll(page.getRecords()); size = page.getRecords().size(); num++; } planYearsList = changeTo(list); } catch (Exception e) { e.printStackTrace(); } return planYearsList; } @Transactional @Override public AjaxResult insertPlanYears(PlanYearsStandardVo yearsStandardVo) { if (planYearsMapper.countProjectName(yearsStandardVo.getProjectName()).size() > 0) { return AjaxResult.error("该项目名称已经存在"); } PlanYears ofYears = new PlanYears(); try { BeanUtils.copyProperties(yearsStandardVo, ofYears); } catch (Exception e) { e.printStackTrace(); } //判断是否为超额计划 ofYears.setIsExcess(isExcessOrNo(ofYears.getProjectType(), ofYears.getEvaluation())); ofYears.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode()); ofYears.setSendLetter("0"); ofYears.setCreateTime(new Date()); planYearsMapper.insertPlanYears(ofYears); log.info("id:{}", ofYears.getPlanYearId()); List sysFileRefs = yearsStandardVo.getSysFileRefs(); if (!ObjectUtils.isEmpty(sysFileRefs)) { for (SysFileRef ref : sysFileRefs) { ref.setRedId(ofYears.getPlanYearId()); ref.setType(SysFileRefEnum.PLAN_YEAR.getType()); ref.setCreated(ofYears.getCreated()); ref.setCreateTime(new Date()); ref.setUpdated(ofYears.getCreated()); ref.setUpdateTime(new Date()); sysFileRefMapper.insert(ref); } } return AjaxResult.success(); } @Override public AjaxResult deletePlanYearsByIds(Long[] planIds) { planYearsMapper.deletePlanYearsByIds(planIds); return AjaxResult.success(); } @Override public AjaxResult deletePlanYearsById(Long planId) { planYearsMapper.deletePlanYearsById(planId); return AjaxResult.success(); } @Override public AjaxResult view(PlanYearsStandardVo yearsStandardVo) { PlanYearsResponseVo responseVo = new PlanYearsResponseVo(); PlanYears byId = planYearsMapper.getById(yearsStandardVo.getPlanYearId()); byId.getPlanYearId(); if (byId == null) { return AjaxResult.error("数据查询失败"); } SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(byId.getPurchaseDeptId()).get("sysDept"); byId.setPurchaseDeptName(sysDeptResponseVo.getDeptName()); HashMap map = new HashMap<>(); map.put("red_id", byId.getPlanYearId()); map.put("type", "1"); 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(PlanYearsStandardVo yearsStandardVo) { if (planYearsMapper.countProjectNameOther(yearsStandardVo.getProjectName(), String.valueOf(yearsStandardVo.getPlanYearId())) > 0) { return AjaxResult.error("该项目名称已经存在"); } PlanYears ofYears = new PlanYears(); try { BeanUtils.copyProperties(yearsStandardVo, ofYears); } catch (Exception e) { e.printStackTrace(); } ofYears.setIsExcess(isExcessOrNo(ofYears.getProjectType(), ofYears.getEvaluation())); ofYears.setUpdateTime(new Date()); ofYears.setSendLetter("0"); planYearsMapper.updateInfoById(ofYears); List sysFileRefs = yearsStandardVo.getSysFileRefs(); HashMap map = new HashMap<>(); map.put("red_id", ofYears.getPlanYearId()); map.put("type", "1"); sysFileRefMapper.deleteByMap(map); if (!ObjectUtils.isEmpty(sysFileRefs)) { for (SysFileRef ref : sysFileRefs) { ref.setRedId(ofYears.getPlanYearId()); ref.setType(SysFileRefEnum.PLAN_YEAR.getType()); ref.setCreated(yearsStandardVo.getUpdated()); ref.setCreateTime(new Date()); ref.setUpdated(yearsStandardVo.getUpdated()); ref.setUpdateTime(new Date()); sysFileRefMapper.insert(ref); } } return AjaxResult.success(); } @Override public String importPlanYears(List planYears, boolean isUpdateSupport, LoginUser loginUser) { if (StringUtils.isNull(planYears) || planYears.size() == 0) { throw new ServiceException("导入年度计划数据不能为空!"); } 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 (PlanYears ofYear : planYears) { try { //验证项目名称是否重复导入 List plan = planYearsMapper.countProjectName(ofYear.getProjectName()); //将录入信息中的值更改为要保存的数据 if (plan.size() == 0) { //采购单位 SysDept info = deptMapper.checkDeptNameOnlyOne(ofYear.getPurchaseDeptName()); if (StringUtils.isNotNull(info)) { ofYear.setPurchaseDeptId(info.getDeptId()); } ofYear.setProjectType(projectTypesMap.get(ofYear.getProjectType())); ofYear.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode()); ofYear.setPurchaseMode(planPurchaseModesMap.get(ofYear.getPurchaseMode())); //项目属性是多选字段 StringBuilder builder = new StringBuilder(); if (ofYear.getProjectAttr().contains(",")) { String[] split = ofYear.getProjectAttr().split(","); for (String s : split) { builder.append(projectAttributes.get(s) + ","); } } else { builder.append(projectAttributes.get(ofYear.getProjectAttr())); } ofYear.setProjectAttr(builder.toString()); ofYear.setPurchaseServices(purchaseServices.get(ofYear.getPurchaseServices())); ofYear.setSendLetter("0"); ofYear.setIsExcess(isExcessOrNo(ofYear.getProjectType(), ofYear.getEvaluation())); ofYear.setCreated(String.valueOf(loginUser.getUserId())); ofYear.setCreateTime(new Date()); planYearsMapper.insertPlanYears(ofYear); successNum++; successMsg.append("*" + successNum + "、项目 " + ofYear.getProjectName() + " 导入成功!"); //} else if (isUpdateSupport) { // PlanYears years = plan.get(0); // BeanValidators.validateWithException(validator, ofYear); // years.setCreateTime(new Date()); // years.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode()); // planYearsMapper.updateById(years); // successNum++; // successMsg.append("
" + successNum + "、项目 " + ofYear.getProjectName() + " 更新成功"); } else { failureNum++; failureMsg.append("*" + successNum + "、项目 " + ofYear.getProjectName() + " 已存在"); } } catch (Exception exc) { failureNum++; String msg = "*" + successNum + "、项目 " + ofYear.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(PlanYearsStandardVo yearsStandardVo) { //PlanYears byId = PlanYearsMapper.getById(yearsStandardVo.getPlanYearId()); //BigDecimal evaluation = byId.getEvaluation(); //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 (byId.getProjectType().equals(value.getCode())) { // threshold = BigDecimal.valueOf(Long.parseLong(thresholdMap.get(value.getInfo()))); // } // break; //} // //if (evaluation.compareTo(threshold) == 1) { // //是超额项目 //} int commit = planYearsMapper.commit(yearsStandardVo.getPlanYearId()); if (commit != 1) { return AjaxResult.error("项目状态数据异常"); } return AjaxResult.success(); } @Override @Transactional public AjaxResult reviewTo(PlanYearsStandardVo vo) { PlanYears ofYears = new PlanYears(); BeanUtils.copyProperties(vo, ofYears); ofYears.setPlanYearId(vo.getPlanYearId()); ofYears.setProjectStatus(ProjectStatus.PLANTOEXAMINE.getCode()); return review(vo, ofYears); } @Override @Transactional public AjaxResult reviewReturn(PlanYearsStandardVo vo) { PlanYears ofYears = new PlanYears(); BeanUtils.copyProperties(vo, ofYears); ofYears.setProjectStatus(ProjectStatus.PLANTOBACK.getCode()); return review(vo, ofYears); } private AjaxResult review(PlanYearsStandardVo vo, PlanYears ofYears) { List sysFileRefs = vo.getSysFileRefs(); if (!ObjectUtils.isEmpty(sysFileRefs)) { for (SysFileRef ref : sysFileRefs) { ref.setRedId(vo.getPlanYearId()); ref.setType(SysFileRefEnum.PLAN_YEAR_EXAMINE.getType()); ref.setCreated(vo.getUpdated()); ref.setCreateTime(new Date()); ref.setUpdated(vo.getUpdated()); ref.setUpdateTime(new Date()); sysFileRefMapper.insert(ref); } } int review = planYearsMapper.review(ofYears); if (review != 1) { return AjaxResult.error("项目状态数据异常"); } return AjaxResult.success(); } @Override public AjaxResult appUpdate(PlanYearsStandardVo vo) { PlanYears ofYears = new PlanYears(); BeanUtils.copyProperties(vo, ofYears); //申请后会成为未提交的状态,可以进行修改 ofYears.setProjectStatus(ProjectStatus.PLANWAITCOMMIT.getCode()); int review = planYearsMapper.review(ofYears); if (review != 1) { return AjaxResult.error("项目状态数据异常"); } return AjaxResult.success(); } @Override public AjaxResult sendLetter(PlanYearsStandardVo yearsStandardVo) { int review = planYearsMapper.sendLetter(yearsStandardVo.getPlanYearId()); if (review != 1) { return AjaxResult.error("项目状态数据异常"); } return AjaxResult.success(); } @Override public AjaxResult upLoadPlanFile(PlanYearsStandardVo yearsStandardVo) { List sysFileRefs = yearsStandardVo.getSysFileRefs(); if (!ObjectUtils.isEmpty(sysFileRefs)) { for (SysFileRef ref : sysFileRefs) { ref.setRedId(yearsStandardVo.getPlanYearId()); ref.setType(SysFileRefEnum.PLAN_YEAR.getType()); sysFileRefMapper.insert(ref); } } return AjaxResult.success(); } @Override public AjaxResult downLoadPlanFile(PlanYearsStandardVo yearsStandardVo) { 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 planYears) { 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 (PlanYears planYear : planYears) { SysDeptResponseVo sysDeptResponseVo = (SysDeptResponseVo) deptService.selectDeptById(planYear.getPurchaseDeptId()).get("sysDept"); planYear.setPurchaseDeptName(sysDeptResponseVo.getDeptName()); for (Map.Entry entry : projectTypesMap.entrySet()) { if (planYear.getProjectType().equals(entry.getValue())) { planYear.setProjectTypeStr(entry.getKey()); break; } } for (Map.Entry entry : planPurchaseModesMap.entrySet()) { if (planYear.getPurchaseMode().equals(entry.getValue())) { planYear.setPurchaseModeStr(entry.getKey()); break; } } //项目属性是拼接的 if (planYear.getProjectAttr().length() > 1) { StringBuilder builder = new StringBuilder(); String[] split = planYear.getProjectAttr().split(","); for (String s : split) { for (Map.Entry entry : projectAttributes.entrySet()) { if (s.equals(entry.getValue())) { builder.append(entry.getKey() + ","); break; } } } planYear.setProjectAttrStr(builder.toString()); } else { for (Map.Entry entry : projectAttributes.entrySet()) { if (planYear.getProjectAttr().equals(entry.getValue())) { planYear.setProjectAttrStr(entry.getKey()); break; } } } for (Map.Entry entry : purchaseServices.entrySet()) { if (planYear.getPurchaseServices().equals(entry.getValue())) { planYear.setPurchaseServicesStr(entry.getKey()); break; } } list.add(planYear); } return list; } }