diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java index 79f5421789..2f340981fa 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/exception/EpmetErrorCode.java @@ -71,7 +71,8 @@ public enum EpmetErrorCode { NOT_DEL_DEPARTMENT(8206, "该部门存在工作人员,不允许删除"), NOT_DEL_AGENCY_GRID(8207, "该机关存在网格,不允许删除"), AREA_CODE_ALREADY_EXISTS(8208,"组织区划已被占用,请重新选择"), - AGENCY_NAME_ALREADY_EXISTS(8209,"您当前的组织名称已存在,请重新修改"), + AGENCY_NAME_ALREADY_EXISTS(8209,"当前组织名称已存在,请重新修改"), + SET_PARENT_AREA_CODE(8210,"请先设置上级组织区划"), REQUIRE_PERMISSION(8301, "您没有足够的操作权限"), THIRD_PLAT_REQUEST_ERROR(8302, "请求第三方平台错误"), diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/form/NextAreaCodeFormDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/form/NextAreaCodeFormDTO.java index ad3783df46..5bdd66cf68 100644 --- a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/form/NextAreaCodeFormDTO.java +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/govorg/form/NextAreaCodeFormDTO.java @@ -14,8 +14,11 @@ import java.io.Serializable; @Data public class NextAreaCodeFormDTO implements Serializable { private static final long serialVersionUID = -1974456701949979946L; + public interface AddUserInternalGroup { + } + @NotBlank(message = "parentAgencyId不能为空",groups = AddUserInternalGroup.class) + private String parentAgencyId; - @NotBlank(message = "areaCode不能为空") private String areaCode; /** @@ -25,7 +28,7 @@ public class NextAreaCodeFormDTO implements Serializable { * 市级: city * 省级:province */ - @NotBlank(message = "level不能为空") + @NotBlank(message = "level不能为空",groups = AddUserInternalGroup.class) private String level; } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java index ebc8cac4b3..b09414f1bd 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/govorg/impl/GovOrgServiceImpl.java @@ -3,6 +3,7 @@ package com.epmet.dataaggre.service.govorg.impl; import com.alibaba.fastjson.JSON; import com.epmet.commons.dynamic.datasource.annotation.DataSource; import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.RenException; import com.epmet.dataaggre.constant.DataSourceConstant; import com.epmet.dataaggre.dao.govorg.CustomerAgencyDao; @@ -20,8 +21,7 @@ import com.epmet.dataaggre.service.govorg.GovOrgService; import com.epmet.dataaggre.service.opercrm.CustomerRelation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -37,7 +37,6 @@ import java.util.List; @DataSource(DataSourceConstant.GOV_ORG) @Slf4j public class GovOrgServiceImpl implements GovOrgService { - private static final Logger logger = LoggerFactory.getLogger(GovOrgServiceImpl.class); @Autowired private CustomerAgencyDao customerAgencyDao; @@ -133,6 +132,10 @@ public class GovOrgServiceImpl implements GovOrgService { @Override public List queryNextLevelAreaCodeList(NextAreaCodeFormDTO formDTO) { + CustomerAgencyEntity parent=customerAgencyDao.selectById(formDTO.getParentAgencyId()); + if (null == parent || StringUtils.isBlank(parent.getAreaCode())) { + throw new RenException(EpmetErrorCode.SET_PARENT_AREA_CODE.getCode(),EpmetErrorCode.SET_PARENT_AREA_CODE.getMsg()); + } //全部下级 List allList = areaCodeService.queryNextLevelAreaCodeList(formDTO); if (CollectionUtils.isNotEmpty(allList)) { diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/EditAgencyFormDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/EditAgencyFormDTO.java index 276099576a..0202ecd894 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/EditAgencyFormDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/EditAgencyFormDTO.java @@ -17,6 +17,7 @@ package com.epmet.dto.form; +import com.epmet.commons.tools.validator.group.CustomerClientShowGroup; import lombok.Data; import org.hibernate.validator.constraints.Length; @@ -33,23 +34,48 @@ import java.io.Serializable; public class EditAgencyFormDTO implements Serializable { private static final long serialVersionUID = 1L; + public interface AddUserInternalGroup { + } + + public interface DefaultUserShowGroup extends CustomerClientShowGroup { + } + + public interface AreaCodeGroup extends CustomerClientShowGroup { + } /** * 机关组织Id */ - @NotBlank(message = "机关组织ID不能为空") + @NotBlank(message = "机关组织ID不能为空", groups = AddUserInternalGroup.class) private String agencyId; /** * 机关组织名称 */ @NotBlank(message = "机关组织名称不能为空") - @Length(max=50,message = "机构名称不能超过50个字") + @Length(max=50,message = "机构名称不能超过50个字",groups = DefaultUserShowGroup.class) private String agencyName; /** * token中用户Id */ + @NotBlank(message = "tokenDto获取userId为空", groups = AddUserInternalGroup.class) private String userId; + //2021.04.16 area_code需求 新增入参 + /** + * open: 选择地区编码必填;closed: 无需选择地区编码;0409新增返参 + */ + @NotBlank(message = "areaCodeSwitch不能为空", groups = AddUserInternalGroup.class) + private String areaCodeSwitch; + + /** + * 地区编码 + */ + @NotBlank(message = "请选择组织区划", groups = AreaCodeGroup.class) + private String areaCode; + + //区域编码名称 + @NotBlank(message = "", groups = AreaCodeGroup.class) + private String areaName; } \ No newline at end of file diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java index 74e095de3e..ddd60b569a 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java @@ -93,13 +93,13 @@ public class AgencyController { **/ @PostMapping("addagency-v2") @RequirePermission(requirePermission = RequirePermissionEnum.ORG_SUBAGENCY_CREATE) - public Result addAgencyV2(@RequestBody AddAgencyV2FormDTO formDTO) { + public Result addAgencyV2(@LoginUser TokenDto tokenDTO,@RequestBody AddAgencyV2FormDTO formDTO) { ValidatorUtils.validateEntity(formDTO, AddAgencyV2FormDTO.DefaultUserShowGroup.class, AddAgencyV2FormDTO.AddUserInternalGroup.class); if (formDTO.getAreaCodeSwitch().equals(CustomerAgencyConstant.AREA_CODE_SWITCH_OPEN)) { ValidatorUtils.validateEntity(formDTO, AddAgencyV2FormDTO.AreaCodeGroup.class); } - //组织名称是否存在 - customerAgencyService.checkAgencyName(formDTO.getAgencyName()); + //当前客户下,同级组织中,组织名称不允许重复 + customerAgencyService.checkAgencyName(formDTO.getAgencyName(),tokenDTO.getCustomerId(),formDTO.getLevel(),null); return new Result().ok(agencyService.addAgencyV2(formDTO)); } @@ -127,7 +127,10 @@ public class AgencyController { @RequirePermission(requirePermission = RequirePermissionEnum.ORG_AGENCY_UPDATE) public Result editAgency(@LoginUser TokenDto tokenDTO, @RequestBody EditAgencyFormDTO formDTO) { formDTO.setUserId(tokenDTO.getUserId()); - ValidatorUtils.validateEntity(formDTO); + ValidatorUtils.validateEntity(formDTO, EditAgencyFormDTO.DefaultUserShowGroup.class, EditAgencyFormDTO.AddUserInternalGroup.class); + if (formDTO.getAreaCodeSwitch().equals(CustomerAgencyConstant.AREA_CODE_SWITCH_OPEN)) { + ValidatorUtils.validateEntity(formDTO, EditAgencyFormDTO.AreaCodeGroup.class); + } return agencyService.editAgency(formDTO); } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java index f9742f72e3..bdc8814ff4 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java @@ -225,5 +225,11 @@ public interface CustomerAgencyDao extends BaseDao { **/ int delByAgencyId(@Param("agencyId") String agencyId, @Param("operateUserId") String operateUserId); - List selectAgencyIdsByAreaCode(String areaCode); + List selectAgencyIdsByAreaCode(@Param("areaCode") String areaCode, + @Param("agencyId") String agencyId); + + List checkAgencyName(@Param("agencyName") String agencyName, + @Param("customerId") String customerId, + @Param("level") String level, + @Param("agencyId") String agencyId); } \ No newline at end of file diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/CustomerAgencyService.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/CustomerAgencyService.java index 464c46c8dc..59941f1f60 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/CustomerAgencyService.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/CustomerAgencyService.java @@ -235,5 +235,5 @@ public interface CustomerAgencyService extends BaseService **/ OrganizeTreeResultDTO organizeTree(String agencyId); - void checkAgencyName(String agencyName); + void checkAgencyName(String agencyName,String customerId,String level,String agencyId); } \ No newline at end of file diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/AgencyServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/AgencyServiceImpl.java index e34fe06786..d3af8846f0 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/AgencyServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/AgencyServiceImpl.java @@ -51,7 +51,6 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Arrays; -import java.util.Date; import java.util.List; /** @@ -133,9 +132,45 @@ public class AgencyServiceImpl implements AgencyService { @Transactional(rollbackFor = Exception.class) public Result editAgency(EditAgencyFormDTO formDTO) { Result result = new Result(); - CustomerAgencyEntity entity = getUpdateEntity(formDTO); + CustomerAgencyEntity originalEntity = customerAgencyDao.selectById(formDTO.getAgencyId()); + //当前客户下,同级组织中,组织名称不允许重复 + customerAgencyService.checkAgencyName(formDTO.getAgencyName(),originalEntity.getCustomerId(),originalEntity.getLevel(),originalEntity.getId()); + + if (formDTO.getAreaCodeSwitch().equals(CustomerAgencyConstant.AREA_CODE_SWITCH_OPEN)) { + //开关开启,areaCode,areaName必填 + if(!formDTO.getAreaCode().equals(originalEntity.getAreaCode())){ + //重新选择了新的area_code + CustomerAgencyDTO parent = customerAgencyService.get(originalEntity.getPid()); + if (null == parent ||StringUtils.isBlank(parent.getAreaCode())) { + throw new RenException(EpmetErrorCode.SET_PARENT_AREA_CODE.getCode(),EpmetErrorCode.SET_PARENT_AREA_CODE.getMsg()); + } + originalEntity.setParentAreaCode(parent.getAreaCode()); + if (!"other".equals(formDTO.getAreaCode())) { + //校验areaCode是否被使用过 + List agencyIds = customerAgencyDao.selectAgencyIdsByAreaCode(formDTO.getAreaCode(),formDTO.getAgencyId()); + if (CollectionUtils.isNotEmpty(agencyIds)) { + //已经被占用,提示 + throw new RenException(EpmetErrorCode.AREA_CODE_ALREADY_EXISTS.getCode(), EpmetErrorCode.AREA_CODE_ALREADY_EXISTS.getMsg()); + } + originalEntity.setAreaCode(formDTO.getAreaCode()); + }else{ + //如果选择的是other,需要自定义一个编码 + AddAreaCodeFormDTO addAreaCodeFormDTO = new AddAreaCodeFormDTO(); + addAreaCodeFormDTO.setCurrentAreaLevel(originalEntity.getLevel()); + addAreaCodeFormDTO.setParentAreaCode(parent.getAreaCode()); + addAreaCodeFormDTO.setName(formDTO.getAgencyName()); + Result addAreaCodeResult = epmetCommonServiceOpenFeignClient.addAreaCode(addAreaCodeFormDTO); + if (!addAreaCodeResult.success() || StringUtils.isBlank(addAreaCodeResult.getData())) { + throw new RenException("自定义area_code异常" + addAreaCodeResult.getInternalMsg()); + } + originalEntity.setAreaCode(addAreaCodeResult.getData()); + } + } + } + originalEntity.setOrganizationName(formDTO.getAgencyName()); + //1:更新当前组织信息 - if (customerAgencyDao.updateById(entity) < NumConstant.ONE) { + if (customerAgencyDao.updateById(originalEntity) < NumConstant.ONE) { log.error(CustomerAgencyConstant.UPDATE_EXCEPTION); throw new RenException(CustomerAgencyConstant.UPDATE_EXCEPTION); } @@ -148,7 +183,6 @@ public class AgencyServiceImpl implements AgencyService { } //3:循环组织列表,查询每一个组织的所有上级组织重新拼接所有上级名称(allParentName)字段值 List editList = new ArrayList<>(); - Date date = new Date(); agencyList.forEach(agency->{ //3-1:查询当前组织的所有上级组织 List listStr = Arrays.asList(agency.getPids().split(":")); @@ -178,12 +212,6 @@ public class AgencyServiceImpl implements AgencyService { return result; } - private CustomerAgencyEntity getUpdateEntity(EditAgencyFormDTO formDTO) { - CustomerAgencyEntity entity = customerAgencyDao.selectById(formDTO.getAgencyId()); - entity.setOrganizationName(formDTO.getAgencyName()); - return entity; - } - /** * @param formDTO * @return @@ -429,7 +457,7 @@ public class AgencyServiceImpl implements AgencyService { public AddAgencyResultDTO addAgencyV2(AddAgencyV2FormDTO formDTO) { CustomerAgencyDTO parent = customerAgencyService.get(formDTO.getParentAgencyId()); if (null == parent) { - throw new RenException(String.format("添加组织失败:没有找到跟组织信息,parentAgencyId=%s", formDTO.getParentAgencyId())); + throw new RenException(String.format("添加组织失败:没有找到上级组织信息,agencyId=%s", formDTO.getParentAgencyId())); } AddAgencyResultDTO resultDTO = new AddAgencyResultDTO(); resultDTO.setAreaCodeSwitch(formDTO.getAreaCodeSwitch()); @@ -438,7 +466,7 @@ public class AgencyServiceImpl implements AgencyService { if (CustomerAgencyConstant.AREA_CODE_SWITCH_OPEN.equals(formDTO.getAreaCodeSwitch())) { //校验areaCode是否被使用过 if (!"other".equals(formDTO.getAreaCode())) { - List agencyIds = customerAgencyDao.selectAgencyIdsByAreaCode(insertEntity.getAreaCode()); + List agencyIds = customerAgencyDao.selectAgencyIdsByAreaCode(insertEntity.getAreaCode(),null); if (CollectionUtils.isNotEmpty(agencyIds)) { //已经被占用,提示 throw new RenException(EpmetErrorCode.AREA_CODE_ALREADY_EXISTS.getCode(), EpmetErrorCode.AREA_CODE_ALREADY_EXISTS.getMsg()); diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java index dc81a51b47..3753412331 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/CustomerAgencyServiceImpl.java @@ -1060,10 +1060,8 @@ public class CustomerAgencyServiceImpl extends BaseServiceImpl wrapper = new QueryWrapper<>(); - wrapper.eq(StringUtils.isNotBlank(agencyName), "ORGANIZATION_NAME", agencyName); - List entityList = baseDao.selectList(wrapper); + public void checkAgencyName(String agencyName,String customerId,String level,String agencyId) { + List entityList = baseDao.checkAgencyName(agencyName,customerId,level,agencyId); if (CollectionUtils.isNotEmpty(entityList)) { throw new RenException(EpmetErrorCode.AGENCY_NAME_ALREADY_EXISTS.getCode(), EpmetErrorCode.AGENCY_NAME_ALREADY_EXISTS.getMsg()); } diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml index 27d446f644..ea6f94a1e8 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml @@ -408,5 +408,23 @@ WHERE ca.DEL_FLAG = '0' AND ca.AREA_CODE = #{areaCode} + + AND ca.id !=#{agencyId} + + + + \ No newline at end of file