From 8d2f2f78c0c02205b91946f4f5cfdc03bcb3383a Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期四, 10 四月 2025 16:25:21 +0800 Subject: [PATCH] 项目法人单位保存bug --- business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java | 440 +++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 297 insertions(+), 143 deletions(-) diff --git a/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java b/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java index 32026cc..e8527bd 100644 --- a/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java +++ b/business/src/main/java/com/ycl/service/impl/ProjectInfoServiceImpl.java @@ -7,18 +7,20 @@ import cn.hutool.core.util.ZipUtil; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.common.base.Result; import com.ycl.common.config.SysConfig; import com.ycl.common.constant.Constants; import com.ycl.common.core.domain.BaseEntity; -import com.ycl.common.enums.business.FileTypeEnum; -import com.ycl.common.enums.business.ImportanceTypeEnum; -import com.ycl.common.enums.business.ProjectCategoryEnum; -import com.ycl.common.enums.business.ProjectStatusEnum; +import com.ycl.common.core.domain.entity.SysDictData; +import com.ycl.common.enums.YesOrNo; +import com.ycl.common.enums.business.*; import com.ycl.common.exception.base.BaseException; import com.ycl.common.utils.CopyUtils; import com.ycl.common.utils.DateUtils; @@ -39,13 +41,13 @@ import com.ycl.framework.utils.PageUtil; import com.ycl.listener.excel.ProjectImportListener; import com.ycl.mapper.*; -import com.ycl.service.FileService; -import com.ycl.service.ProjectInfoService; -import com.ycl.service.ProjectInfoWinUnitService; -import com.ycl.service.ProjectInfoYearPlanService; +import com.ycl.service.*; import com.ycl.system.mapper.SysDeptMapper; +import com.ycl.system.service.ISysDeptService; +import com.ycl.system.service.ISysDictDataService; import lombok.RequiredArgsConstructor; import org.apache.commons.codec.Charsets; +import org.springframework.aop.framework.AopContext; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; @@ -64,6 +66,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; +import java.time.Year; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -93,6 +96,9 @@ private final ProjectInvestmentPolicyComplianceServiceImpl projectInvestmentPolicyComplianceServiceImpl; private final ProjectUnitRegistrationInfoServiceImpl projectUnitRegistrationInfoServiceImpl; private final SysDeptMapper sysDeptMapper; + private final ISysDictDataService dictDataService; + private final ProcessLogService processLogService; + /** * 娣诲姞 @@ -101,37 +107,69 @@ * @return */ @Override - @Transactional(rollbackFor = Exception.class) public Result add(ProjectInfoForm form) { //娣诲姞鍩烘湰淇℃伅 ProjectInfo entity = ProjectInfoForm.getEntityByForm(form, null); Long userId = SecurityUtils.getUserId(); - Long deptId = SecurityUtils.getDeptId(); - entity.setProjectOwnerUnit(deptId); entity.setCreateBy(userId); entity.setUpdateBy(userId); - //濡傛灉涓嶆槸鍌ㄥ椤圭洰(涓嶆槸鏈紑宸ラ」鐩�)涓嶉渶瑕佸鏍� - if(ProjectConstant.COMMIT.equals(entity.getUsedStatus()) && ProjectStatusEnum.PENDDING.getType().equals(entity.getProjectStatus())){ + //濡傛灉鏄偍澶囬」鐩�(鏈紑宸ラ」鐩�)涓嶉渶瑕佸鏍� + if (ProjectConstant.COMMIT.equals(entity.getUsedStatus()) && ProjectStatusEnum.PENDDING.getType().equals(entity.getProjectStatus())) { entity.setUsedStatus(ProjectConstant.PASS); + } + if(!checkProjectNameAndIdIsUnique(entity,null)){ + throw new RuntimeException("椤圭洰閲嶅锛岄」鐩悕绉般�侀」鐩爜宸插瓨鍦�"); } baseMapper.insert(entity); addPlan(entity.getId()); //娣诲姞璁″垝琛� - //娣诲姞鏂囦欢 - List<File> fileList = form.getFileList(); - fileList.forEach(item -> { - item.setBusId(entity.getId()); - item.setType(FileTypeEnum.PROJECT_INFO); - }); - fileService.saveBatch(fileList); - //娣诲姞椤圭洰涓爣鍗曚綅 - saveUnit(entity.getId(),form.getWinUnitList()); + List<ProjectInfoWinUnit> projectInfoWinUnits = new ArrayList<>(); + for (ProjectInfoWinUnitForm winUnitForm : form.getWinUnitList()) { + ProjectInfoWinUnit projectInfoWinUnit = ProjectInfoWinUnitForm.getEntityByForm(winUnitForm, null); + projectInfoWinUnit.setId(null); + projectInfoWinUnit.setProjectInfoId(entity.getId()); + projectInfoWinUnits.add(projectInfoWinUnit); + } + if (!CollectionUtils.isEmpty(projectInfoWinUnits)) { + projectInfoWinUnitService.saveBatch(projectInfoWinUnits); + } //娣诲姞骞村害鎶曡祫璁″垝 - saveYearPlan(entity.getId(),form.getYearPlanList()); + List<ProjectInfoYearPlan> projectInfoYearPlans = new ArrayList<>(); + for (ProjectInfoYearPlanForm yearPlanForm : form.getYearPlanList()) { + ProjectInfoYearPlan yearPlan = ProjectInfoYearPlanForm.getEntityByForm(yearPlanForm, null); + yearPlan.setId(null); + yearPlan.setProjectInfoId(entity.getId()); + projectInfoYearPlans.add(yearPlan); + } + if (!CollectionUtils.isEmpty(projectInfoYearPlans)) { + projectInfoYearPlanService.saveBatch(projectInfoYearPlans); + } return Result.ok("娣诲姞鎴愬姛").data(entity.getId()); } + /** + * 鍒ゆ柇椤圭洰鍚嶅拰椤圭洰鐮佹槸鍚﹀敮涓� + * @param entity from true 鏉ヨ嚜add() false 鏉ヨ嚜edit() + * @return + */ + public boolean checkProjectNameAndIdIsUnique(ProjectInfo entity,Long updateId){ + LambdaQueryWrapper<ProjectInfo> queryWrapper = new LambdaQueryWrapper<>(); + if (updateId == null) { + List<ProjectInfo> list = new LambdaQueryChainWrapper<>(baseMapper) + .eq(ProjectInfo::getProjectName, entity.getProjectName()) + .eq(ProjectInfo::getProjectCode, entity.getProjectCode()) + .list(); + return list == null || list.isEmpty(); + } else { + List<ProjectInfo> list = new LambdaQueryChainWrapper<>(baseMapper) + .eq(ProjectInfo::getProjectName, entity.getProjectName()) + .eq(ProjectInfo::getProjectCode, entity.getProjectCode()) + .ne(ProjectInfo::getId, updateId) + .list(); + return list == null || list.isEmpty(); + } + } public void addPlan(Long projectInfoId) { Plan plan = new Plan(); @@ -151,53 +189,64 @@ * @return */ @Override - @Transactional(rollbackFor = Exception.class) public Result update(ProjectInfoForm form) { ProjectInfo entity = baseMapper.selectById(form.getId()); + // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊 Assert.notNull(entity, "璁板綍涓嶅瓨鍦�"); ProjectInfoForm.getEntityByForm(form, entity); Long userId = SecurityUtils.getUserId(); entity.setUpdateBy(userId); - //濡傛灉涓嶆槸鍌ㄥ椤圭洰(涓嶆槸鏈紑宸ラ」鐩�)涓嶉渶瑕佸鏍� - if(ProjectConstant.COMMIT.equals(entity.getUsedStatus()) && ProjectStatusEnum.PENDDING.getType().equals(entity.getProjectStatus())){ + //濡傛灉鏄偍澶囬」鐩�(鏈紑宸ラ」鐩�)涓嶉渶瑕佸鏍� + if (ProjectConstant.COMMIT.equals(entity.getUsedStatus()) && ProjectStatusEnum.PENDDING.getType().equals(entity.getProjectStatus())) { entity.setUsedStatus(ProjectConstant.PASS); + } + // 绠$悊鍛樹慨鏀圭殑鐩存帴閫氳繃 + if (SecurityUtils.isAdmin(SecurityUtils.getUserId())) { + entity.setUsedStatus(ProjectConstant.PASS); + } + if(!checkProjectNameAndIdIsUnique(entity,form.getId())){ + throw new RuntimeException("椤圭洰閲嶅锛岄」鐩悕绉般�侀」鐩爜宸插瓨鍦�"); } //鏇存柊椤圭洰淇℃伅 baseMapper.updateById(entity); - List<File> fileList = form.getFileList(); - fileList.forEach(item -> { - item.setId(null); - item.setBusId(entity.getId()); - item.setType(FileTypeEnum.PROJECT_INFO); - }); - //鍒犻櫎鍘熸湁鏂囦欢 - QueryWrapper<File> fileQueryWrapper = new QueryWrapper<>(); - fileQueryWrapper.eq("type", FileTypeEnum.PROJECT_INFO.getType()); - fileQueryWrapper.eq("bus_id", entity.getId()); - fileMapper.delete(fileQueryWrapper); - //鏇挎崲鎴愮幇鏈� - fileService.saveBatch(fileList); - //淇敼椤圭洰涓爣鍗曚綅 //鍒犻櫎鍘熸暟鎹� - QueryWrapper<ProjectInfoWinUnit> unitWrapper = new QueryWrapper<>(); - unitWrapper.eq("project_info_id",form.getId()); - projectInfoWinUnitService.remove(unitWrapper); + new LambdaUpdateChainWrapper<>(projectInfoWinUnitService.getBaseMapper()) + .eq(ProjectInfoWinUnit::getProjectInfoId, entity.getId()) + .remove(); //娣诲姞椤圭洰涓爣鍗曚綅 - saveUnit(entity.getId(),form.getWinUnitList()); + List<ProjectInfoWinUnit> projectInfoWinUnits = new ArrayList<>(); + for (ProjectInfoWinUnitForm winUnitForm : form.getWinUnitList()) { + ProjectInfoWinUnit projectInfoWinUnit = ProjectInfoWinUnitForm.getEntityByForm(winUnitForm, null); + projectInfoWinUnit.setId(null); + projectInfoWinUnit.setProjectInfoId(entity.getId()); + projectInfoWinUnits.add(projectInfoWinUnit); + } + if (!CollectionUtils.isEmpty(projectInfoWinUnits)) { + projectInfoWinUnitService.saveBatch(projectInfoWinUnits); + } //淇敼骞村害鎶曡祫璁″垝 //鍒犻櫎鍘熸暟鎹� - QueryWrapper<ProjectInfoYearPlan> yearPlanWrapper = new QueryWrapper<>(); - unitWrapper.eq("project_info_id",form.getId()); - projectInfoYearPlanService.remove(yearPlanWrapper); + new LambdaUpdateChainWrapper<>(projectInfoYearPlanService.getBaseMapper()) + .eq(ProjectInfoYearPlan::getProjectInfoId, entity.getId()) + .remove(); //娣诲姞骞村害鎶曡祫璁″垝 - saveYearPlan(entity.getId(),form.getYearPlanList()); + List<ProjectInfoYearPlan> projectInfoYearPlans = new ArrayList<>(); + for (ProjectInfoYearPlanForm yearPlanForm : form.getYearPlanList()) { + ProjectInfoYearPlan yearPlan = ProjectInfoYearPlanForm.getEntityByForm(yearPlanForm, null); + yearPlan.setId(null); + yearPlan.setProjectInfoId(entity.getId()); + projectInfoYearPlans.add(yearPlan); + } + if (!CollectionUtils.isEmpty(projectInfoYearPlans)) { + projectInfoYearPlanService.saveBatch(projectInfoYearPlans); + } return Result.ok("淇敼鎴愬姛"); } - private void saveUnit(Long id,List<ProjectInfoWinUnitForm> projectInfoWinUnitForm) { + private void saveUnit(Long id, List<ProjectInfoWinUnitForm> projectInfoWinUnitForm) { List<ProjectInfoWinUnit> projectInfoWinUnits = new ArrayList<>(); for (ProjectInfoWinUnitForm winUnitForm : projectInfoWinUnitForm) { ProjectInfoWinUnit projectInfoWinUnit = ProjectInfoWinUnitForm.getEntityByForm(winUnitForm, null); @@ -209,6 +258,7 @@ projectInfoWinUnitService.saveBatch(projectInfoWinUnits); } } + private void saveYearPlan(Long id, List<ProjectInfoYearPlanForm> yearPlanList) { List<ProjectInfoYearPlan> projectInfoYearPlans = new ArrayList<>(); for (ProjectInfoYearPlanForm yearPlanForm : yearPlanList) { @@ -221,6 +271,7 @@ projectInfoYearPlanService.saveBatch(projectInfoYearPlans); } } + /** * 鎵归噺鍒犻櫎 * @@ -246,8 +297,8 @@ investmentInfoMapper.delete(new QueryWrapper<ProjectInvestmentInfo>().eq("project_id", id)); policyMapper.delete(new QueryWrapper<ProjectInvestmentPolicyCompliance>().eq("project_id", id)); unitRegistrationInfoMapper.delete(new QueryWrapper<ProjectUnitRegistrationInfo>().eq("project_id", id)); - projectInfoWinUnitService.remove(new QueryWrapper<ProjectInfoWinUnit>().eq("project_info_id",id)); - projectInfoYearPlanService.remove(new QueryWrapper<ProjectInfoYearPlan>().eq("project_info_id",id)); + projectInfoWinUnitService.remove(new QueryWrapper<ProjectInfoWinUnit>().eq("project_info_id", id)); + projectInfoYearPlanService.remove(new QueryWrapper<ProjectInfoYearPlan>().eq("project_info_id", id)); List<String> types = new ArrayList<>(); types.add(FileTypeEnum.PROJECT_INFO.getType()); @@ -272,53 +323,59 @@ if (query.getProjectEndTime() != null) { query.setProjectEndTime(DateUtils.getDayEnd(query.getProjectEndTime())); } - String projectCategory = query.getProjectCategory(); - //瀹炴柦闃舵鏈変袱涓�兼斁鍦╯ql澶勭悊 - if (ProjectCategoryEnum.RESERVE.getType().equals(projectCategory)) { - query.setProjectStatus(ProjectCategoryEnum.RESERVE.getStatus()); - query.setReserveOrPrevious(ProjectCategoryEnum.RESERVE.getCode()); - } else if (ProjectCategoryEnum.PREVIOUS.getType().equals(projectCategory)) { - query.setProjectStatus(ProjectCategoryEnum.PREVIOUS.getStatus()); - query.setReserveOrPrevious(ProjectCategoryEnum.PREVIOUS.getCode()); - } else if (ProjectCategoryEnum.FINISH.getType().equals(projectCategory)) { - query.setProjectStatus(ProjectCategoryEnum.FINISH.getStatus()); - } else if (ProjectCategoryEnum.EXCEPTION.getType().equals(projectCategory)) { - //TODO - //鍏堟煡鍑哄紓甯告祦绋嬫垨鑰呭紓甯歌繘搴︽垨鑰呭紓甯歌鍒掔殑projectId鍜屽紓甯哥绫� - //閫氳繃projectId鏌ュ嚭椤圭洰鏁版嵁 - //琛ュ厖鐩稿簲鐨勫紓甯告暟鎹紙寮傚父绉嶇被銆佸紓甯告祦绋嬭妭鐐圭瓑锛� - List<ProjectVO> list = new ArrayList<>(); - return Result.ok().data(list).total(0); + if (YesOrNo.YES.getCode().equals(query.getCenter())) { + query.setProjectPhase("6"); } - + // 寮傚父椤圭洰鏆傛椂杩斿洖绌� + if (YesOrNo.YES.getCode().equals(query.getExe())) { + return Result.ok().data(new ArrayList<>()).total(0); + } Long userId = SecurityUtils.getUserId(); String ancestors = sysDeptMapper.selectAncestors(userId); String[] ancestorArr = ancestors.split(","); List<String> ancestorList = Arrays.stream(ancestorArr).collect(Collectors.toList()); - ancestorList.add(SecurityUtils.getDeptId()+""); - if(!CollectionUtils.isEmpty(ancestorList) && ancestorList.contains("101")){ + ancestorList.add(SecurityUtils.getDeptId() + ""); + if (!CollectionUtils.isEmpty(ancestorList) && ancestorList.contains("101")) { query.setProjectOwnerUnit(SecurityUtils.getDeptId()); //涓氫富 query.setRole(0); - }else if(!CollectionUtils.isEmpty(ancestorList) && ancestorList.contains("102")){ + } else if ((!CollectionUtils.isEmpty(ancestorList) && ancestorList.contains("102"))) { query.setCompetentDepartment(SecurityUtils.getDeptId()); //瀹℃壒 瀵瑰簲涓荤閮ㄩ棬 query.setRole(1); + } else if (SecurityUtils.isAdmin(userId)) { + query.setRole(3); } IPage<ProjectInfoVO> page = PageUtil.getPage(query, ProjectInfoVO.class); baseMapper.getPage(query, page); List<ProjectInfoVO> records = page.getRecords(); List<ProjectVO> list = new ArrayList<>(); + int year = Year.now().getValue(); records.forEach(vo -> { ProjectInfoVO.transform(vo); ProjectVO projectVO = new ProjectVO(); copyToProjectVO(vo, projectVO); - List<Long> departmentList = vo.getCompetentDepartmentList(); - projectVO.setAuditRole(SecurityUtils.isAdmin(SecurityUtils.getUserId()) || (!CollectionUtils.isEmpty(departmentList) && departmentList.contains(SecurityUtils.getDeptId()))); - //缈昏瘧椤圭洰闃舵 - String phase = ProjectCategoryEnum.getPhaseByProjectStatus(projectVO.getProjectStatus(), projectVO.getProcessId() != null); + String competentDepartment = vo.getCompetentDepartment(); + projectVO.setAuditRole(SecurityUtils.isAdmin(SecurityUtils.getUserId()) || (StringUtils.isNotEmpty(competentDepartment) && competentDepartment.equals(SecurityUtils.getDeptId() + ""))); + // 缈昏瘧椤圭洰闃舵 + String phase = ProjectCategoryEnum.getPhaseByProjectStatus(projectVO.getProjectPhase()); projectVO.setProjectPhase(phase); + if (StringUtils.isNotEmpty(projectVO.getProjectSubType())) { + // 缈昏瘧椤圭洰瀛愮被鍨� + SysDictData dictData = dictDataService.selectDictDataByValue(projectVO.getProjectType(), projectVO.getProjectSubType(), "sys_project_type"); + if (Objects.nonNull(dictData)) { + projectVO.setProjectSubType(dictData.getDictLabel()); + } + } + // 鑾峰彇鏈勾搴︾殑鎶曡祫閲戦 + List<ProjectInfoYearPlan> yearPlans = new LambdaQueryChainWrapper<>(projectInfoYearPlanService.getBaseMapper()) + .eq(ProjectInfoYearPlan::getProjectInfoId, projectVO.getId()) + .eq(ProjectInfoYearPlan::getYear, year) + .list(); + if (! CollectionUtils.isEmpty(yearPlans)) { + projectVO.setYearInvestAmount(yearPlans.get(0).getYearTotalMoney()); + } list.add(projectVO); }); return Result.ok().data(list).total(page.getTotal()); @@ -348,20 +405,17 @@ ProjectInfo entity = baseMapper.getById(id); Assert.notNull(entity, "璁板綍涓嶅瓨鍦�"); ProjectInfoVO vo = ProjectInfoVO.getVoByEntity(entity, null); - List<Long> departmentList = vo.getCompetentDepartmentList(); - vo.setAuditRole(SecurityUtils.isAdmin(SecurityUtils.getUserId()) || (!CollectionUtils.isEmpty(departmentList) && departmentList.contains(SecurityUtils.getDeptId()))); + String competentDepartment = vo.getCompetentDepartment(); + vo.setAuditRole(SecurityUtils.isAdmin(SecurityUtils.getUserId()) || (StringUtils.isNotEmpty(competentDepartment) && competentDepartment.equals(SecurityUtils.getDeptId() + ""))); QueryWrapper<File> fileQueryWrapper = new QueryWrapper<>(); fileQueryWrapper.eq("type", FileTypeEnum.PROJECT_INFO.getType()); fileQueryWrapper.eq("bus_id", vo.getId()); - - List<File> files = fileMapper.selectList(fileQueryWrapper); - vo.setFileList(files); //涓爣鍗曚綅 List<ProjectInfoWinUnitVO> unitVOS = new ArrayList<>(); List<ProjectInfoWinUnit> unitList = projectInfoWinUnitService.list(new QueryWrapper<ProjectInfoWinUnit>().eq("project_info_id", id)); for (ProjectInfoWinUnit projectInfoWinUnit : unitList) { - ProjectInfoWinUnitVO unitVO = ProjectInfoWinUnitVO.getVoByEntity(projectInfoWinUnit,null); + ProjectInfoWinUnitVO unitVO = ProjectInfoWinUnitVO.getVoByEntity(projectInfoWinUnit, null); unitVO.setId(null); unitVOS.add(unitVO); } @@ -370,7 +424,7 @@ List<ProjectInfoYearPlanVO> yearPlanVOS = new ArrayList<>(); List<ProjectInfoYearPlan> yearPlaList = projectInfoYearPlanService.list(new QueryWrapper<ProjectInfoYearPlan>().eq("project_info_id", id)); for (ProjectInfoYearPlan yearPlan : yearPlaList) { - ProjectInfoYearPlanVO yearPlanVO = ProjectInfoYearPlanVO.getVoByEntity(yearPlan,null); + ProjectInfoYearPlanVO yearPlanVO = ProjectInfoYearPlanVO.getVoByEntity(yearPlan, null); yearPlanVO.setId(null); yearPlanVOS.add(yearPlanVO); } @@ -412,46 +466,54 @@ List<ProjectVO> city = new ArrayList<>(); List<ProjectVO> county = new ArrayList<>(); projectVOS.forEach(item -> { - if (ProjectCategoryEnum.RESERVE.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null))) { + if (ProjectCategoryEnum.RESERVE.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectPhase()))) { reserve.add(item); - } else if (ProjectCategoryEnum.PREVIOUS.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null))) { + } else if (ProjectCategoryEnum.PREVIOUS.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectPhase()))) { previous.add(item); - } else if (ProjectCategoryEnum.IMPLEMENT.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null))) { + } else if (ProjectCategoryEnum.IMPLEMENT.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectPhase()))) { implement.add(item); - } else if (ProjectCategoryEnum.FINISH.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null))) { + } else if (ProjectCategoryEnum.FINISH.getDesc().equals(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectPhase()))) { finish.add(item); } - if (ImportanceTypeEnum.PROVINCIAL_KEY.getType().equals(item.getImportanceType())) { - province.add(item); - } else if (ImportanceTypeEnum.SUINING_KEY.getType().equals(item.getImportanceType())) { - city.add(item); - } else if (ImportanceTypeEnum.SHEHONG_KEY.getType().equals(item.getImportanceType())) { - county.add(item); - } else if (ImportanceTypeEnum.NORMAL.getType().equals(item.getImportanceType())) { + if (StringUtils.isBlank(item.getImportanceType())) { normal.add(item); + // 浣跨敤contains锛屽洜涓洪噸鐐瑰垎绫诲彲澶氶�夛紝浣跨敤,鍒嗗壊瀛樺偍鐨� + } else { + if (item.getImportanceType().contains(ImportanceTypeEnum.PROVINCIAL_KEY.getType())) { + province.add(item); + } + if (item.getImportanceType().contains(ImportanceTypeEnum.SUINING_KEY.getType())) { + city.add(item); + } + if (item.getImportanceType().contains(ImportanceTypeEnum.SHEHONG_KEY.getType())) { + county.add(item); + } + if (item.getImportanceType().contains(ImportanceTypeEnum.NORMAL.getType())) { + normal.add(item); + } } }); //鍗曚綅鍏堥粯璁や负鍏� proPhaseCountVO.add(new IndexProPhaseCountVO("鍌ㄥ瑙勫垝闃舵", reserve.size(), reserve.stream(). filter(item -> !StringUtils.isEmpty(item.getTotalInvestment())) .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP)) - .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "鍌�")); + .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP).toString(), "鍌�")); proPhaseCountVO.add(new IndexProPhaseCountVO("椤圭洰鍓嶆湡闃舵", previous.size(), previous.stream(). filter(item -> !StringUtils.isEmpty(item.getTotalInvestment())) .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP)) - .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "鏂�")); + .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP).toString(), "鏂�")); proPhaseCountVO.add(new IndexProPhaseCountVO("瀹炴柦闃舵", implement.size(), implement.stream(). filter(item -> !StringUtils.isEmpty(item.getTotalInvestment())) .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP)) - .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "寤�")); + .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP).toString(), "寤�")); proPhaseCountVO.add(new IndexProPhaseCountVO("绔e伐鎶曠敤闃舵", finish.size(), finish.stream(). filter(item -> !StringUtils.isEmpty(item.getTotalInvestment())) .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP)) - .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "绔�")); + .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP).toString(), "绔�")); indexCountVO.setProPhaseCountVO(proPhaseCountVO); @@ -459,22 +521,22 @@ impTypeCountVO.add(new IndexImpTypeCountVO("涓�鑸」鐩�", normal.size(), normal.stream(). filter(item -> !StringUtils.isEmpty(item.getTotalInvestment())) .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP)) - .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "鏅�")); + .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP).toString(), "鏅�")); impTypeCountVO.add(new IndexImpTypeCountVO("鍘块噸鐐归」鐩�", county.size(), county.stream(). filter(item -> !StringUtils.isEmpty(item.getTotalInvestment())) .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP)) - .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "鍘�")); + .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP).toString(), "鍘�")); impTypeCountVO.add(new IndexImpTypeCountVO("甯傞噸鐐归」鐩�", city.size(), city.stream(). filter(item -> !StringUtils.isEmpty(item.getTotalInvestment())) .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP)) - .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "甯�")); + .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP).toString(), "甯�")); impTypeCountVO.add(new IndexImpTypeCountVO("鐪侀噸鐐归」鐩�", province.size(), province.stream(). filter(item -> !StringUtils.isEmpty(item.getTotalInvestment())) .map(item -> new BigDecimal(item.getTotalInvestment()).setScale(2, RoundingMode.HALF_UP)) - .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("100000000"), 2, RoundingMode.HALF_UP).toString(), "鐪�")); + .reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP).toString(), "鐪�")); indexCountVO.setImpTypeCountVO(impTypeCountVO); return indexCountVO; } @@ -483,6 +545,12 @@ public Map<String, Integer> countExceptionProject(IndexDTO indexDTO) { Map<String, Integer> map = new HashMap<>(); map.put("processExceptionProject", 0); + // 鏌ヨ鍙戠敓杩囧缂虹殑椤圭洰鏁� + List<String> projectIds = new LambdaQueryChainWrapper<>(processLogService.getBaseMapper()) + .select(ProcessLog::getProjectId) + .eq(ProcessLog::getEventType, ProcessLogEventTypeEnum.WAIT) + .list().stream().map(ProcessLog::getProjectId).distinct().collect(Collectors.toList()); + map.put("hasWaitProjectNum", projectIds.size()); return map; } @@ -542,7 +610,7 @@ ProjectExcelTemplate excel = new ProjectExcelTemplate(); BeanUtils.copyProperties(item, excel); //椤圭洰闃舵 - excel.setProjectPhase(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectStatus(), item.getProcessId() != null)); + excel.setProjectPhase(ProjectCategoryEnum.getPhaseByProjectStatus(item.getProjectPhase())); excelList.add(excel); }); Set<Integer> indexes = OutputExcelUtils.getSelectFields(query.getFieldList(), ProjectExcelTemplate.class); @@ -762,53 +830,139 @@ } @Override + @Transactional(rollbackFor = Exception.class) public Result editProject(ProjectForm form) { + // 鑽夌鐨勬儏鍐碉紝闇�瑕佸垽瀹氭湁娌℃湁閫変笟涓诲崟浣�(鍥犱负鑽夌涓嶆牎楠屽繀濉�)锛屾病閫夊垯榛樿璁剧疆涓哄綋鍓嶄汉鐨勫崟浣� + if (ProjectConstant.DRAFT.equals(form.getProjectInfoForm().getUsedStatus())) { + if (Objects.isNull(form.getProjectInfoForm().getProjectOwnerUnit())) { + form.getProjectInfoForm().setProjectOwnerUnit(SecurityUtils.getDeptId()); + } + } + Long projectId = form.getProjectInfoForm().getId(); if (ObjectUtil.isNotNull(form.getProjectInfoForm())) { if (ObjectUtil.isNull(form.getProjectInfoForm().getId())) { //鏂板 - add(form.getProjectInfoForm()); + ProjectInfo entity = ProjectInfoForm.getEntityByForm(form.getProjectInfoForm(), null); + Long userId = SecurityUtils.getUserId(); + entity.setCreateBy(userId); + entity.setUpdateBy(userId); + //濡傛灉鏄偍澶囬」鐩�(鏈紑宸ラ」鐩�)涓嶉渶瑕佸鏍革紙鑽夌闄ゅ锛� + if (ProjectCategoryEnum.RESERVE.getType().equals(entity.getProjectPhase()) && ! ProjectConstant.DRAFT.equals(entity.getUsedStatus())) { + entity.setUsedStatus(ProjectConstant.PASS); + } + // 绠$悊鍛樹慨鏀圭殑鐩存帴閫氳繃(绠$悊鍛樹繚瀛樹负鑽夌锛岄偅涔堢姸鎬佽繕鏄崏绋�) + if (SecurityUtils.isAdmin(SecurityUtils.getUserId()) && ! ProjectConstant.DRAFT.equals(entity.getUsedStatus())) { + entity.setUsedStatus(ProjectConstant.PASS); + } + if(!checkProjectNameAndIdIsUnique(entity,null)){ + throw new RuntimeException("椤圭洰閲嶅锛岄」鐩悕绉般�侀」鐩爜宸插瓨鍦�"); + } + baseMapper.insert(entity); + projectId = entity.getId(); + addPlan(entity.getId()); //娣诲姞璁″垝琛� + //娣诲姞椤圭洰涓爣鍗曚綅 + List<ProjectInfoWinUnit> projectInfoWinUnits = new ArrayList<>(); + for (ProjectInfoWinUnitForm winUnitForm : form.getProjectInfoForm().getWinUnitList()) { + ProjectInfoWinUnit projectInfoWinUnit = ProjectInfoWinUnitForm.getEntityByForm(winUnitForm, null); + projectInfoWinUnit.setId(null); + projectInfoWinUnit.setProjectInfoId(entity.getId()); + projectInfoWinUnits.add(projectInfoWinUnit); + } + if (!CollectionUtils.isEmpty(projectInfoWinUnits)) { + projectInfoWinUnitService.saveBatch(projectInfoWinUnits); + } + //娣诲姞骞村害鎶曡祫璁″垝 + List<ProjectInfoYearPlan> projectInfoYearPlans = new ArrayList<>(); + for (ProjectInfoYearPlanForm yearPlanForm : form.getProjectInfoForm().getYearPlanList()) { + ProjectInfoYearPlan yearPlan = ProjectInfoYearPlanForm.getEntityByForm(yearPlanForm, null); + yearPlan.setId(null); + yearPlan.setProjectInfoId(entity.getId()); + projectInfoYearPlans.add(yearPlan); + } + if (!CollectionUtils.isEmpty(projectInfoYearPlans)) { + projectInfoYearPlanService.saveBatch(projectInfoYearPlans); + } } else { //鏇存柊 - update(form.getProjectInfoForm()); - } - } - if (ObjectUtil.isNotNull(form.getProjectInvestmentInfoForm())) { - if (ObjectUtil.isNull(form.getProjectInvestmentInfoForm().getId())) { - projectInvestmentInfoServiceImpl.add(form.getProjectInvestmentInfoForm()); - } else { - projectInvestmentInfoServiceImpl.update(form.getProjectInvestmentInfoForm()); - } - } - if (ObjectUtil.isNotNull(form.getProjectInvestmentFundingForm())) { - if (ObjectUtil.isNull(form.getProjectInvestmentFundingForm().getId())) { - projectInvestmentFundingServiceImpl.add(form.getProjectInvestmentFundingForm()); - } else { - projectInvestmentFundingServiceImpl.update(form.getProjectInvestmentFundingForm()); - } - } - if (ObjectUtil.isNotNull(form.getProjectInvestmentPolicyComplianceForm())) { - if (ObjectUtil.isNull(form.getProjectInvestmentPolicyComplianceForm().getId())) { - projectInvestmentPolicyComplianceServiceImpl.add(form.getProjectInvestmentPolicyComplianceForm()); - } else { - projectInvestmentPolicyComplianceServiceImpl.update(form.getProjectInvestmentPolicyComplianceForm()); - } - } - if (ObjectUtil.isNotNull(form.getProjectUnitRegistrationInfoForm())) { - if (ObjectUtil.isNull(form.getProjectUnitRegistrationInfoForm().getId())) { - projectUnitRegistrationInfoServiceImpl.add(form.getProjectUnitRegistrationInfoForm()); - } else { - projectUnitRegistrationInfoServiceImpl.update(form.getProjectUnitRegistrationInfoForm()); - } - } - if (ObjectUtil.isNotNull(form.getDocumentInfoForm())) { - if (ObjectUtil.isNull(form.getDocumentInfoForm().getProjectId())) { - return Result.error("璇峰厛淇濆瓨鎶曡祫绠$悊鍩烘湰淇℃伅"); - } else { - addDoc(form.getDocumentInfoForm()); - } - } + ProjectInfo entity = baseMapper.selectById(form.getProjectInfoForm().getId()); - return Result.ok("鎻愪氦鎴愬姛"); + // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊 + Assert.notNull(entity, "璁板綍涓嶅瓨鍦�"); + ProjectInfoForm.getEntityByForm(form.getProjectInfoForm(), entity); + Long userId = SecurityUtils.getUserId(); + entity.setUpdateBy(userId); + //濡傛灉鏄偍澶囬」鐩�(鏈紑宸ラ」鐩�)涓嶉渶瑕佸鏍革紙鑽夌闄ゅ锛� + if (ProjectCategoryEnum.RESERVE.getType().equals(entity.getProjectPhase()) && ! ProjectConstant.DRAFT.equals(entity.getUsedStatus())) { + entity.setUsedStatus(ProjectConstant.PASS); + } + // 绠$悊鍛樹慨鏀圭殑鐩存帴閫氳繃(绠$悊鍛樹繚瀛樹负鑽夌锛岄偅涔堢姸鎬佽繕鏄崏绋�) + if (SecurityUtils.isAdmin(SecurityUtils.getUserId()) && ! ProjectConstant.DRAFT.equals(entity.getUsedStatus())) { + entity.setUsedStatus(ProjectConstant.PASS); + } + if(!checkProjectNameAndIdIsUnique(entity, entity.getId())){ + throw new RuntimeException("椤圭洰閲嶅锛岄」鐩悕绉般�侀」鐩爜宸插瓨鍦�"); + } + //鏇存柊椤圭洰淇℃伅 + baseMapper.updateById(entity); + //淇敼椤圭洰涓爣鍗曚綅 + //鍒犻櫎鍘熸暟鎹� + new LambdaUpdateChainWrapper<>(projectInfoWinUnitService.getBaseMapper()) + .eq(ProjectInfoWinUnit::getProjectInfoId, entity.getId()) + .remove(); + //娣诲姞椤圭洰涓爣鍗曚綅 + List<ProjectInfoWinUnit> projectInfoWinUnits = new ArrayList<>(); + for (ProjectInfoWinUnitForm winUnitForm : form.getProjectInfoForm().getWinUnitList()) { + ProjectInfoWinUnit projectInfoWinUnit = ProjectInfoWinUnitForm.getEntityByForm(winUnitForm, null); + projectInfoWinUnit.setId(null); + projectInfoWinUnit.setProjectInfoId(entity.getId()); + projectInfoWinUnits.add(projectInfoWinUnit); + } + if (!CollectionUtils.isEmpty(projectInfoWinUnits)) { + projectInfoWinUnitService.saveBatch(projectInfoWinUnits); + } + + //淇敼骞村害鎶曡祫璁″垝 + //鍒犻櫎鍘熸暟鎹� + new LambdaUpdateChainWrapper<>(projectInfoYearPlanService.getBaseMapper()) + .eq(ProjectInfoYearPlan::getProjectInfoId, entity.getId()) + .remove(); + //娣诲姞骞村害鎶曡祫璁″垝 + List<ProjectInfoYearPlan> projectInfoYearPlans = new ArrayList<>(); + for (ProjectInfoYearPlanForm yearPlanForm : form.getProjectInfoForm().getYearPlanList()) { + ProjectInfoYearPlan yearPlan = ProjectInfoYearPlanForm.getEntityByForm(yearPlanForm, null); + yearPlan.setId(null); + yearPlan.setProjectInfoId(entity.getId()); + projectInfoYearPlans.add(yearPlan); + } + if (!CollectionUtils.isEmpty(projectInfoYearPlans)) { + projectInfoYearPlanService.saveBatch(projectInfoYearPlans); + } + } + + // 鏇存柊鍏跺畠椤圭洰淇℃伅琛� + if (Objects.nonNull(form.getProjectInvestmentFundingForm())) { + if (Objects.nonNull(form.getProjectInvestmentFundingForm().getId())) { + projectInvestmentFundingServiceImpl.update(form.getProjectInvestmentFundingForm()); + } else { + form.getProjectInvestmentFundingForm().setProjectId(projectId); + projectInvestmentFundingServiceImpl.add(form.getProjectInvestmentFundingForm()); + } + } + if (Objects.nonNull(form.getProjectUnitRegistrationInfoForm())) { + if (Objects.nonNull(form.getProjectUnitRegistrationInfoForm().getId())) { + projectUnitRegistrationInfoServiceImpl.update(form.getProjectUnitRegistrationInfoForm()); + } else { + // 鍏堝垹鎺変箣鍓嶇殑锛屽啀鏂板 + new LambdaUpdateChainWrapper<>(projectUnitRegistrationInfoServiceImpl.getBaseMapper()) + .eq(ProjectUnitRegistrationInfo::getProjectId, projectId) + .remove(); + form.getProjectUnitRegistrationInfoForm().setProjectId(projectId); + projectUnitRegistrationInfoServiceImpl.add(form.getProjectUnitRegistrationInfoForm()); + } + + } + } + return Result.ok("淇濆瓨鎴愬姛"); } @Override -- Gitblit v1.8.0