package com.gkhy.labRiskManage.domain.riskReport.service.impl; import com.gkhy.labRiskManage.api.controller.riskReport.dto.repDto.RiskUnitListReqBO; import com.gkhy.labRiskManage.application.riskReport.dto.bo.InherentRiskUnitAppInsertBO; import com.gkhy.labRiskManage.application.riskReport.dto.bo.RiskUnitAppInsertBO; import com.gkhy.labRiskManage.application.riskReport.dto.bo.RiskUnitAppQueryBO; import com.gkhy.labRiskManage.application.riskReport.dto.bo.RiskUnitAppUpdateBO; import com.gkhy.labRiskManage.commons.domain.SearchResult; import com.gkhy.labRiskManage.commons.enums.ResultCode; import com.gkhy.labRiskManage.commons.enums.StatusEnum; import com.gkhy.labRiskManage.commons.enums.UserRoleEnum; import com.gkhy.labRiskManage.commons.enums.UserTagEnum; import com.gkhy.labRiskManage.commons.exception.BusinessException; import com.gkhy.labRiskManage.commons.utils.BeanCopyUtils; import com.gkhy.labRiskManage.domain.account.model.dto.SysUserRoleBindDomainDTO; import com.gkhy.labRiskManage.domain.account.model.dto.UserInfoDomainDTO; import com.gkhy.labRiskManage.domain.account.service.UserDomainService; import com.gkhy.labRiskManage.domain.basic.entity.BasicRiskUnit; import com.gkhy.labRiskManage.domain.basic.entity.BasicRiskUnitType; import com.gkhy.labRiskManage.domain.basic.model.dto.RiskUnitTypeDTO; import com.gkhy.labRiskManage.domain.basic.repository.jpa.BasicRiskUnitRepository; import com.gkhy.labRiskManage.domain.basic.service.BasicRiskUnitTypeService; import com.gkhy.labRiskManage.domain.experiment.model.dto.ExperimentInfoDTO; import com.gkhy.labRiskManage.domain.experiment.service.ExperimentInfoService; import com.gkhy.labRiskManage.domain.riskReport.entity.RiskAssessPlan; import com.gkhy.labRiskManage.domain.riskReport.entity.RiskUnit; import com.gkhy.labRiskManage.domain.riskReport.model.dto.*; import com.gkhy.labRiskManage.domain.riskReport.repository.jpa.RiskAssessPlanRepository; import com.gkhy.labRiskManage.domain.riskReport.repository.jpa.RiskUnitRepository; import com.gkhy.labRiskManage.domain.riskReport.service.RiskAssessPlanService; import com.gkhy.labRiskManage.domain.riskReport.service.RiskUnitService; import com.gkhy.labRiskManage.domain.riskReport.utils.GetRoleTagUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; /** * 实验风险单元 */ @Service public class RiskUnitServiceImpl implements RiskUnitService { @Autowired private RiskUnitRepository riskUnitRepository; @Autowired private UserDomainService userDomainService; @Autowired private BasicRiskUnitTypeService riskUnitTypeService; @Autowired private ExperimentInfoService experimentInfoService; @Autowired private RiskAssessPlanRepository riskAssessPlanService; @Autowired private BasicRiskUnitRepository basicRiskUnitRepository; /** * 实验风险单元 - 插入 */ @Override public RiskUnitInsertDTO insertRiskUnit(Long currentUserId, RiskUnitAppInsertBO insertParam) { if (currentUserId < 0){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"当前用户无效,请重新登陆"); } UserInfoDomainDTO userInfoById = userDomainService.getUserInfoById(currentUserId); //参数校验 if (ObjectUtils.isEmpty(insertParam)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "参数不能为空"); } if (ObjectUtils.isEmpty(insertParam.getRiskCode())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险单元编号不能为空"); } RiskUnit unitByCode = riskUnitRepository.getUnitByCode(insertParam.getRiskCode()); if (!ObjectUtils.isEmpty(unitByCode)){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode(), "编号已被使用"); } if (ObjectUtils.isEmpty(insertParam.getRiskName())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险单元名称不能为空"); } if (ObjectUtils.isEmpty(insertParam.getLiabilityUserId())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "责任人不能为空"); } if (ObjectUtils.isEmpty(insertParam.getRiskUnitTypeId())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险单元类型不能为空"); } BasicRiskUnitType riskUnitTypeById = riskUnitTypeService.getRiskUnitTypeById(insertParam.getRiskUnitTypeId()); if (ObjectUtils.isEmpty(riskUnitTypeById)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险单元类型不存在或已被删除"); } // if (ObjectUtils.isEmpty(insertParam.getLiabilityDep())){ // throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "责任部门不能为空"); // } //参数接收到的封装 RiskUnit riskUnit = BeanCopyUtils.copyBean(insertParam, RiskUnit.class); //获取需要的参数 LocalDateTime date = LocalDateTime.now(); riskUnit.setCreateTime(date); riskUnit.setUpdateTime(date); riskUnit.setCreateByUserId(userInfoById.getId()); riskUnit.setUpdateByUserId(userInfoById.getId()); riskUnit.setLiabilityUserId(insertParam.getLiabilityUserId()); riskUnit.setDeleteStatus(StatusEnum.DELETE_NOT.getCode().byteValue()); riskUnit.setRiskType(StatusEnum.EXPERIMENT_RISK.getCode().byteValue()); riskUnit.setEvaluateStatus(StatusEnum.EVALUATE_NOT.getCode().byteValue()); RiskUnit saveResult = riskUnitRepository.save(riskUnit); RiskUnitInsertDTO riskUnitInsertDTO = BeanCopyUtils.copyBean(saveResult, RiskUnitInsertDTO.class); return riskUnitInsertDTO; } /** * 固有风险单元 - 插入 */ @Override public RiskUnitInsertDTO insertInherentRiskUnit(Long currentUserId, InherentRiskUnitAppInsertBO insertParam) { if (currentUserId < 0){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode(),"当前用户无效,请重新登陆"); } UserInfoDomainDTO userInfoById = userDomainService.getUserInfoById(currentUserId); //参数校验 if (ObjectUtils.isEmpty(insertParam)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "参数不能为空"); } if (ObjectUtils.isEmpty(insertParam.getBasicRiskUnitId())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险单元不能为空"); } //参数接收到的封装 RiskUnit riskUnit = BeanCopyUtils.copyBean(insertParam, RiskUnit.class); //获取需要的参数 LocalDateTime date = LocalDateTime.now(); riskUnit.setCreateTime(date); riskUnit.setUpdateTime(date); riskUnit.setCreateByUserId(userInfoById.getId()); riskUnit.setUpdateByUserId(userInfoById.getId()); riskUnit.setDeleteStatus(StatusEnum.DELETE_NOT.getCode().byteValue()); riskUnit.setRiskType(StatusEnum.INHERENT_RISK.getCode().byteValue()); RiskUnit saveResult = riskUnitRepository.save(riskUnit); RiskUnitInsertDTO riskUnitInsertDTO = BeanCopyUtils.copyBean(saveResult, RiskUnitInsertDTO.class); return riskUnitInsertDTO; } /** * 风险单元 - 分页查询 */ @Override public SearchResult selectRiskUnitPage(Long currentUserId, RiskUnitAppQueryBO queryParam) { //校验参数 if (ObjectUtils.isEmpty(queryParam.getPageSize())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR.getCode() ,"分页信息不能为空"); } if (ObjectUtils.isEmpty(queryParam.getPageIndex())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR.getCode() ,"分页信息不能为空"); } if (queryParam.getExperimentName() == "null"){ queryParam.setExperimentName(null); } if (queryParam.getRiskCode() == "null"){ queryParam.setRiskCode(null); } if (queryParam.getRiskName() == "null"){ queryParam.setRiskName(null); } SearchResult searchResult = new SearchResult<>(); searchResult.setPageIndex(queryParam.getPageIndex()); searchResult.setPageSize(queryParam.getPageSize()); List experimentIds = new ArrayList<>(); //实验负责人 List experimentByUser = experimentInfoService.getExperimentByUser(currentUserId); if (ObjectUtils.isEmpty(experimentByUser)){ for (ExperimentInfoDTO experimentInfo : experimentByUser) { experimentIds.add(experimentInfo.getId()); } } //辨识专家,评价专家,辨识专家 List assessPlanBySpecialist = riskAssessPlanService.getAssessPlanBySpecialist(currentUserId); if (ObjectUtils.isEmpty(assessPlanBySpecialist)){ for (RiskAssessPlan assessPlan : assessPlanBySpecialist) { experimentIds.add(assessPlan.getExperimentId()); } } UserInfoDomainDTO user = userDomainService.getUserById(currentUserId); int roleTag = GetRoleTagUtils.GetRoleTagUtils(user); //封装查询参数 Specification specification = new Specification() { @Override public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { List predicateList = new ArrayList<>(); if (queryParam.getRiskName() != null && !queryParam.getRiskName().equals("")){ predicateList.add(criteriaBuilder.like(root.get("riskName"),"%"+queryParam.getRiskName()+"%")); } if (queryParam.getRiskCode() != null && !queryParam.getRiskCode().equals("")){ predicateList.add(criteriaBuilder.like(root.get("riskCode"), "%"+queryParam.getRiskCode()+"%")); } // if (roleTag == 0){ // predicateList.add(criteriaBuilder.in(root.get("experimentId")).value(experimentIds)); // } if (queryParam.getExperimentId() != null){ predicateList.add(criteriaBuilder.equal(root.get("experimentId"),queryParam.getExperimentId())); } predicateList.add(criteriaBuilder.equal(root.get("deleteStatus"), StatusEnum.DELETE_NOT.getCode())); return criteriaBuilder.and(predicateList.toArray(new Predicate[0])); } }; PageRequest pageParam = PageRequest.of(queryParam.getPageIndex() - 1, queryParam.getPageSize(), Sort.Direction.DESC, "updateTime"); Page pageResult = riskUnitRepository.findAll(specification, pageParam); List riskUnitQueryDTOS = BeanCopyUtils.copyBeanList(pageResult.getContent(), RiskUnitQueryDTO.class); List riskUnitTypeList = riskUnitTypeService.listRiskUnitType(); //取出所有用户 List userList = userDomainService.getUserList(); for (RiskUnitQueryDTO riskUnitQueryDTO : riskUnitQueryDTOS) { for (UserInfoDomainDTO userInfo : userList) { if (userInfo.getId() == riskUnitQueryDTO.getCreateByUserId()){ riskUnitQueryDTO.setCreateByUserName(userInfo.getRealName()); } if (userInfo.getId() == riskUnitQueryDTO.getUpdateByUserId()){ riskUnitQueryDTO.setUpdateByUserName(userInfo.getRealName()); } } //目前只有实验风险,添加类型。 if (riskUnitQueryDTO.getRiskType() == 2){ for (RiskUnitTypeDTO riskUnitType : riskUnitTypeList) { if (riskUnitQueryDTO.getRiskUnitTypeId().equals(riskUnitType.getId())){ riskUnitQueryDTO.setRiskUnitType(riskUnitType.getRiskType()); } } } } searchResult.setData(riskUnitQueryDTOS); searchResult.setTotal(pageResult.getTotalElements()); return searchResult; } /** * 风险单元 - 修改 */ @Override public RiskUnitInsertDTO updateRiskUnit(Long currentUserId, RiskUnitAppUpdateBO updateParam) { if (currentUserId < 0){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"当前用户无效,请重新登陆"); } UserInfoDomainDTO userInfoById = userDomainService.getUserInfoById(currentUserId); //参数校验 if (ObjectUtils.isEmpty(updateParam)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "参数不能为空"); } if (ObjectUtils.isEmpty(updateParam.getRiskCode())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险单元编号不能为空"); } RiskUnit unitByCode = riskUnitRepository.getUnitByCode(updateParam.getRiskCode()); if (!ObjectUtils.isEmpty(unitByCode) && !updateParam.getId().equals(unitByCode.getId())){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode(), "编号已被使用"); } if (ObjectUtils.isEmpty(updateParam.getRiskName())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险单元名称不能为空"); } if (ObjectUtils.isEmpty(updateParam.getLiabilityUserId())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "责任人不能为空"); } if (ObjectUtils.isEmpty(updateParam.getRiskUnitTypeId())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险单元类型不能为空"); } BasicRiskUnitType riskUnitTypeById = riskUnitTypeService.getRiskUnitTypeById(updateParam.getRiskUnitTypeId()); if (ObjectUtils.isEmpty(riskUnitTypeById)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险单元类型不存在或已被删除"); } // if (ObjectUtils.isEmpty(insertParam.getLiabilityDep())){ // throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "责任部门不能为空"); // } RiskUnit unitById = riskUnitRepository.getUnitById(updateParam.getId()); if (unitById.getRiskType() == 1){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR.getCode(), "固有风险,信息无法修改"); } if (unitById.getEvaluateStatus() == 2){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR.getCode(), "该实验风险单元已被评价,信息无法修改"); } //参数接收到的封装 RiskUnit riskUnit = BeanCopyUtils.copyBean(unitById, RiskUnit.class); //获取需要的参数 LocalDateTime date = LocalDateTime.now(); riskUnit.setUpdateTime(date); riskUnit.setUpdateByUserId(userInfoById.getId()); riskUnit.setExperimentId(updateParam.getExperimentId()); riskUnit.setRiskCode(updateParam.getRiskCode()); riskUnit.setRiskName(updateParam.getRiskName()); riskUnit.setLiabilityUserId(updateParam.getLiabilityUserId()); riskUnit.setLiabilityDep(updateParam.getLiabilityDep()); riskUnit.setDescription(updateParam.getDescription()); riskUnit.setRiskUnitTypeId(riskUnitTypeById.getId()); RiskUnit updateResult = riskUnitRepository.save(riskUnit); RiskUnitInsertDTO riskUnitInsertDTO = BeanCopyUtils.copyBean(updateResult, RiskUnitInsertDTO.class); return riskUnitInsertDTO; } /** * 风险单元 - 删除 */ @Override public RiskUnitDeleteDTO deleteRiskUnit(Long currentUserId, Long id) { if (currentUserId < 0){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"当前用户无效,请重新登陆"); } UserInfoDomainDTO userInfoById = userDomainService.getUserInfoById(currentUserId); if (ObjectUtils.isEmpty(id)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "删除的内容不能为空"); } RiskUnit unitById = riskUnitRepository.getUnitById(id); if (ObjectUtils.isEmpty(unitById)){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR.getCode(), "删除的内容不存在或已被删除"); } if (unitById.getEvaluateStatus() == 2 && unitById.getRiskType() == 2){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR.getCode(), "该实验风险单元已被评价,无法删除"); } //设置必要参数 LocalDateTime date = LocalDateTime.now(); RiskUnit riskUnit = BeanCopyUtils.copyBean(unitById, RiskUnit.class); riskUnit.setUpdateTime(date); riskUnit.setUpdateByUserId(userInfoById.getId()); riskUnit.setDeleteStatus(StatusEnum.DELETED.getCode().byteValue()); RiskUnit deleteResult = riskUnitRepository.save(riskUnit); return BeanCopyUtils.copyBean(deleteResult, RiskUnitDeleteDTO.class); } /** * 风险单元 - 查询by id */ @Override public RiskUnitQueryDTO getRiskUnitById(Long id) { if (ObjectUtils.isEmpty(id)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "查询的内容不能为空"); } RiskUnit unitById = riskUnitRepository.getUnitById(id); if (ObjectUtils.isEmpty(unitById)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险单元不存在或已被删除"); } return BeanCopyUtils.copyBean(unitById, RiskUnitQueryDTO.class); } /** * 风险单元 - 查询by name */ @Override public List getRiskUnitByName(String riskUnitName) { if (ObjectUtils.isEmpty(riskUnitName)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "查询的内容不能为空"); } List riskUnitList = riskUnitRepository.getRiskUnitByName(riskUnitName); if (riskUnitList.size() < 1){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险单元不存在或已被删除"); } return BeanCopyUtils.copyBeanList(riskUnitList, RiskUnitQueryDTO.class); } /** * 基础风险单元管理 - 列表查询 */ @Override public List listRiskUnit(Long currentUserId) { if (currentUserId < 0){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode(), "当前用户无效,请重新登录"); } UserInfoDomainDTO user = userDomainService.getUserById(currentUserId); int roleTag = GetRoleTagUtils.GetRoleTagUtils(user); List riskUnits = new ArrayList<>(); if (roleTag != UserTagEnum.USER_TAG_0.getCode()){ riskUnits = riskUnitRepository.listRiskUnit(); List basicRiskUnits = basicRiskUnitRepository.listRiskUnit(); //todo 固有评价 // for (BasicRiskUnit basicRiskUnit : basicRiskUnits) { // // } }else { riskUnits = riskUnitRepository.listRiskUnitByUserId(currentUserId); List basicRiskUnits = basicRiskUnitRepository.listRiskUnitByUserId(currentUserId);//todo 固有评价 } List riskUnitList = BeanCopyUtils.copyBeanList(riskUnits, RiskUnitListAppQueryDTO.class); List riskUnitTypeList = riskUnitTypeService.listRiskUnitType(); for (RiskUnitListAppQueryDTO riskUnit : riskUnitList) { for (RiskUnitTypeDTO riskUnitType : riskUnitTypeList) { if (riskUnit.getRiskUnitTypeId().equals(riskUnitType.getId())){ riskUnit.setRiskUnitType(riskUnitType.getRiskType()); } } } return riskUnitList; } /** * 风险单元管理 - 列表查询 -根据实验信息 */ @Override public List listRiskUnitByExperiment(Long currentUserId, RiskUnitListReqBO reqBO) { if (currentUserId < 0){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode(), "当前用户无效,请重新登录"); } if (ObjectUtils.isEmpty(reqBO.getExperimentId())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "实验信息无效"); } UserInfoDomainDTO user = userDomainService.getUserById(currentUserId); int roleTag = GetRoleTagUtils.GetRoleTagUtils(user); List riskUnits = new ArrayList<>(); if (roleTag != UserTagEnum.USER_TAG_0.getCode()){ riskUnits = riskUnitRepository.listRiskUnitByExperiment(reqBO); }else { riskUnits = riskUnitRepository.listRiskUnitByExperimentAndUserId(currentUserId, reqBO); } List riskUnitList = BeanCopyUtils.copyBeanList(riskUnits, RiskUnitListAppQueryDTO.class); List riskUnitTypeList = riskUnitTypeService.listRiskUnitType(); for (RiskUnitListAppQueryDTO riskUnit : riskUnitList) { for (RiskUnitTypeDTO riskUnitType : riskUnitTypeList) { if (riskUnit.getRiskUnitTypeId().equals(riskUnitType.getId())){ riskUnit.setRiskUnitType(riskUnitType.getRiskType()); } } } return riskUnitList; } /** * 基础风险单元管理 - 已添加评估计划的unit */ @Override public List listAssessRiskUnit() { List riskUnits = riskUnitRepository.listAssessRiskUnit(); return BeanCopyUtils.copyBeanList(riskUnits, RiskUnitListAppQueryDTO.class); } @Override public List getRiskUnitByExperimentId(Long id) { List riskUnitList= riskUnitRepository.getRiskUnitByExperimentId(id); return riskUnitList; } @Override public RiskUnit updateRiskUnitStatus(Long id, int status) { RiskUnit unitById = riskUnitRepository.getUnitById(id); unitById.setEvaluateStatus((byte) status); return riskUnitRepository.save(unitById); } @Override public List listInherentRiskUnit() { List riskUnits = riskUnitRepository.listInherentRiskUnit(); return riskUnits; } }