package com.gkhy.labRiskManage.domain.basic.service.impl; import com.gkhy.labRiskManage.application.basic.dto.bo.BasicRiskUnitAppInsertBO; import com.gkhy.labRiskManage.application.basic.dto.bo.BasicRiskUnitAppQueryBO; import com.gkhy.labRiskManage.application.basic.dto.bo.BasicRiskUnitAppUpdateBO; 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.model.dto.*; import com.gkhy.labRiskManage.domain.basic.repository.jpa.BasicRiskUnitRepository; import com.gkhy.labRiskManage.domain.basic.service.BasicExperimentDeviceService; import com.gkhy.labRiskManage.domain.basic.service.BasicExperimentSiteService; import com.gkhy.labRiskManage.domain.basic.service.BasicRiskUnitService; import com.gkhy.labRiskManage.domain.riskReport.entity.RiskUnit; import com.gkhy.labRiskManage.domain.riskReport.utils.GetRoleTagUtils; import com.gkhy.labRiskManage.domain.riskReport.utils.SearchAuthUtils; 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 BasicRiskUnitServiceImpl implements BasicRiskUnitService { @Autowired private BasicRiskUnitRepository riskUnitRepository; @Autowired private BasicExperimentDeviceService basicExperimentDeviceService; @Autowired private BasicExperimentSiteService basicExperimentSiteService; @Autowired private UserDomainService userDomainService; /** * 基础风险单元管理 - 插入 */ @Override public RiskUnitInsertDTO insertBasicRiskUnit(Long currentUserId, BasicRiskUnitAppInsertBO insertReqBO) { if (currentUserId < 0){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"当前用户无效,请重新登陆"); } //参数校验、 if (ObjectUtils.isEmpty(insertReqBO)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "请求参数不能为空"); } if (ObjectUtils.isEmpty(insertReqBO.getRiskCode())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险单元编号不能为空"); } BasicRiskUnit riskUnitByCode = riskUnitRepository.getRiskUnitByCode(insertReqBO.getRiskCode()); // if (!ObjectUtils.isEmpty(riskUnitByCode)){ // throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode(), "风险单元编号已被使用"); // } if (ObjectUtils.isEmpty(insertReqBO.getRiskName())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险单元名字不能为空"); } BasicRiskUnit riskUnitByName = riskUnitRepository.getRiskUnitByName(insertReqBO.getRiskName()); // if (!ObjectUtils.isEmpty(riskUnitByName)){ // throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode(), "风险单元名称已被使用"); // } // todo 人员和部门先不做校验 if (ObjectUtils.isEmpty(insertReqBO.getLiabilityUserId())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "责任人不能为空"); } // if (ObjectUtils.isEmpty(insertReqBO.getLiabilityDepId())){ // throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "责任部门不能为空"); // } UserInfoDomainDTO userInfoById = userDomainService.getUserInfoById(currentUserId); BasicRiskUnit riskUnit = BeanCopyUtils.copyBean(insertReqBO, BasicRiskUnit.class); //设置必要参数 LocalDateTime date = LocalDateTime.now(); riskUnit.setCreateTime(date); riskUnit.setCreateByUserId(userInfoById.getId()); riskUnit.setUpdateTime(date); riskUnit.setUpdateByUserId(userInfoById.getId()); riskUnit.setEvaluateStatus(StatusEnum.EVALUATE_NOT.getCode().byteValue()); riskUnit.setDeleteStatus(StatusEnum.DELETE_NOT.getCode().byteValue()); BasicRiskUnit insertResult = riskUnitRepository.save(riskUnit); return BeanCopyUtils.copyBean(insertResult, RiskUnitInsertDTO.class); } /** * 基础风险单元管理 - 分页查询 */ @Override public SearchResult selectBasicRiskUnitPage(Long currentUserId, BasicRiskUnitAppQueryBO 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.getRiskName() == ""){ queryParam.setRiskName(null); } if (queryParam.getRiskCode() == ""){ queryParam.setRiskCode(null); } SearchResult searchResult = new SearchResult<>(); searchResult.setPageIndex(queryParam.getPageIndex()); searchResult.setPageSize(queryParam.getPageSize()); 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.equal(root.get("riskCode"), queryParam.getRiskCode())); } if (queryParam.getRiskSourceType() != null && !queryParam.getRiskSourceType().equals("")){ predicateList.add(criteriaBuilder.equal(root.get("riskSourceType"), queryParam.getRiskSourceType())); } if (SearchAuthUtils.basicSearchAuth() == 1){ if (roleTag == UserTagEnum.USER_TAG_0.getCode()){ predicateList.add(criteriaBuilder.equal(root.get("createByUserId"), currentUserId)); } } 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 riskUnitBasicQueryDTOS = BeanCopyUtils.copyBeanList(pageResult.getContent(), RiskUnitBasicQueryDTO.class); List userList = userDomainService.getUserList(); for (RiskUnitBasicQueryDTO riskUnitBasicQueryDTO : riskUnitBasicQueryDTOS) { for (UserInfoDomainDTO userInfo : userList) { if (userInfo.getId() == riskUnitBasicQueryDTO.getCreateByUserId()){ riskUnitBasicQueryDTO.setCreateByUserName(userInfo.getRealName()); } if (userInfo.getId() == riskUnitBasicQueryDTO.getUpdateByUserId()){ riskUnitBasicQueryDTO.setUpdateByUserName(userInfo.getRealName()); } if (userInfo.getId() == riskUnitBasicQueryDTO.getLiabilityUserId()){ riskUnitBasicQueryDTO.setLiabilityUserName(userInfo.getRealName()); } } } searchResult.setData(riskUnitBasicQueryDTOS); searchResult.setTotal(pageResult.getTotalElements()); return searchResult; } /** * 基础风险单元管理 - 修改 */ @Override public RiskUnitUpdateDTO updateBasicRiskUnit(Long currentUserId, BasicRiskUnitAppUpdateBO updateParam) { if (currentUserId < 0){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"当前用户无效,请重新登陆"); } //参数校验、 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(), "风险单元编号不能为空"); } BasicRiskUnit riskUnitByCode = riskUnitRepository.getRiskUnitByCode(updateParam.getRiskCode()); // if (!ObjectUtils.isEmpty(riskUnitByCode) && !riskUnitByCode.getId().equals(updateParam.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(), "风险单元名字不能为空"); } BasicRiskUnit riskUnitByName = riskUnitRepository.getRiskUnitByName(updateParam.getRiskName()); // if (!ObjectUtils.isEmpty(riskUnitByName) && !riskUnitByName.getId().equals(updateParam.getId())){ // throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode(), "风险单元名称已被使用"); // } //校验,如果类型是1或者2,则风险源id不可为空 if (updateParam.getRiskSourceType() == 1 || updateParam.getRiskSourceType() == 2){ if (ObjectUtils.isEmpty(updateParam.getRiskSourceId())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险源不能为空"); } //如果riskType为1-区域 if (updateParam.getRiskSourceType() == 1){ SiteQueryDTO siteById = basicExperimentSiteService.getBasicExperimentSiteById(updateParam.getRiskSourceId()); //设置参数 updateParam.setRiskSourceId(siteById.getId()); } //如果riskType为2-设备 if (updateParam.getRiskSourceType() == 2){ DeviceQueryDTO deviceById = basicExperimentDeviceService.getBasicExperimentDeviceById(updateParam.getRiskSourceId()); //设置参数 updateParam.setRiskSourceId(deviceById.getId()); } }else { updateParam.setRiskSourceId(null); } // todo 部门先不做校验 if (ObjectUtils.isEmpty(updateParam.getLiabilityUserId())){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "责任人不能为空"); } // if (ObjectUtils.isEmpty(updateParam.getLiabilityDepId())){ // throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "责任部门不能为空"); // } BasicRiskUnit riskUnitById = riskUnitRepository.getRiskUnitById(updateParam.getId()); if (ObjectUtils.isEmpty(riskUnitById)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "要修改的单元不存在,请确定是否输入正确或该单元已被删除"); } UserInfoDomainDTO userInfoById = userDomainService.getUserInfoById(currentUserId); BasicRiskUnit riskUnit = BeanCopyUtils.copyBean(riskUnitById, BasicRiskUnit.class); //设置必要参数 LocalDateTime date = LocalDateTime.now(); riskUnit.setUpdateTime(date); riskUnit.setUpdateByUserId(userInfoById.getId()); riskUnit.setRiskCode(updateParam.getRiskCode()); riskUnit.setRiskName(updateParam.getRiskName()); riskUnit.setRiskSourceType(updateParam.getRiskSourceType()); riskUnit.setRiskSourceId(updateParam.getRiskSourceId()); riskUnit.setLiabilityUserId(updateParam.getLiabilityUserId()); if (ObjectUtils.isEmpty(updateParam.getLiabilityDepId())){ riskUnit.setLiabilityDepId(updateParam.getLiabilityDepId()); } riskUnit.setImage(updateParam.getImage()); riskUnit.setDescription(updateParam.getDescription()); BasicRiskUnit updateResult = riskUnitRepository.save(riskUnit); return BeanCopyUtils.copyBean(updateResult, RiskUnitUpdateDTO.class); } /** * 基础风险单元管理 - 删除 */ @Override public RiskUnitBasicDeleteDTO deleteBasicRiskUnit(Long currentUserId, Long id) { if (currentUserId < 0){ throw new BusinessException(this.getClass(), ResultCode.BUSINESS_ERROR_NOT_ALLOWED.getCode() ,"当前用户无效,请重新登陆"); } if (ObjectUtils.isEmpty(id)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "请求参数为空"); } BasicRiskUnit riskUnitById = riskUnitRepository.getRiskUnitById(id); if (ObjectUtils.isEmpty(riskUnitById)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "风险单元不存在,请检查是否输入有误或已被删除"); } UserInfoDomainDTO userInfoById = userDomainService.getUserInfoById(currentUserId); BasicRiskUnit riskUnit = BeanCopyUtils.copyBean(riskUnitById, BasicRiskUnit.class); //设置必要参数 LocalDateTime date = LocalDateTime.now(); riskUnit.setUpdateTime(date); riskUnit.setUpdateByUserId(userInfoById.getId()); riskUnit.setDeleteStatus(StatusEnum.DELETED.getCode().byteValue()); BasicRiskUnit deleteResult = riskUnitRepository.save(riskUnit); return BeanCopyUtils.copyBean(deleteResult, RiskUnitBasicDeleteDTO.class); } /** * 基础风险单元管理 - 列表 */ @Override public List listBasicRiskUnit(Long currentUserId) { UserInfoDomainDTO user = userDomainService.getUserById(currentUserId); int roleTag = GetRoleTagUtils.GetRoleTagUtils(user); List listResult = new ArrayList<>(); if (SearchAuthUtils.basicSearchAuth() == 0){ listResult = riskUnitRepository.listRiskUnit(); return BeanCopyUtils.copyBeanList(listResult, RiskUnitListDTO.class); } if (roleTag != UserTagEnum.USER_TAG_0.getCode()){ listResult = riskUnitRepository.listRiskUnit(); }else { listResult = riskUnitRepository.listRiskUnitByUserId(currentUserId); } return BeanCopyUtils.copyBeanList(listResult, RiskUnitListDTO.class); } /** * 基础风险单元管理 - 通过id查询 */ @Override public RiskUnitBasicQueryDTO getBasicRiskUnitById(Long id) { if (ObjectUtils.isEmpty(id)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR_NULL.getCode(), "请求参数不能为空"); } BasicRiskUnit riskUnitById = riskUnitRepository.getRiskUnitById(id); if (ObjectUtils.isEmpty(riskUnitById)){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR.getCode(), "风险源信息不存在,请检查是否输入有误或已被删除"); } return BeanCopyUtils.copyBean(riskUnitById, RiskUnitBasicQueryDTO.class); } /** * 基础风险单元管理 - 通过id列表查询 */ @Override public List getBasicRiskUnitByIdList(List ids) { if (ids.size() < 1){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR.getCode(), "请求参数不能为空"); } List listResult = riskUnitRepository.batchById(ids); if (listResult.size() < 1){ throw new BusinessException(this.getClass(), ResultCode.PARAM_ERROR.getCode(), "查询结果为空"); } return BeanCopyUtils.copyBeanList(listResult, RiskUnitBasicQueryDTO.class); } @Override public RiskUnitUpdateDTO updateRiskUnitStatus(Long riskUnitId, int status) { BasicRiskUnit riskUnitById = riskUnitRepository.getRiskUnitById(riskUnitId); riskUnitById.setEvaluateStatus((byte) status); return BeanCopyUtils.copyBean(riskUnitRepository.save(riskUnitById),RiskUnitUpdateDTO.class); } }