diff --git a/start/src/main/resources/nacos.yml b/start/src/main/resources/nacos.yml index c0ab37e..d850fed 100644 --- a/start/src/main/resources/nacos.yml +++ b/start/src/main/resources/nacos.yml @@ -4,7 +4,7 @@ nacos: application: name: jjb-saas-zcloud-basic-info version: - gateway: basic-info + gateway: basicInfo cn-name: 统一用户管理 spring: application: diff --git a/web-adapter/src/main/java/com/zcloud/basic/info/web/UserController.java b/web-adapter/src/main/java/com/zcloud/basic/info/web/UserController.java index b45c8b6..efb8ecc 100644 --- a/web-adapter/src/main/java/com/zcloud/basic/info/web/UserController.java +++ b/web-adapter/src/main/java/com/zcloud/basic/info/web/UserController.java @@ -143,5 +143,11 @@ public class UserController { return userService.updatePassword(userUpdatePassWordCmd); } + @ApiOperation("根据登录人密码获取查询人手机号和身份证号") + @PostMapping("/getEncryInfo") + public SingleResponse getEncryInfo(@Validated @RequestBody UserCheckPassWordCmd userCheckPassWordCmd) { + return userService.getEncryInfo(userCheckPassWordCmd); + } + } diff --git a/web-app/src/main/java/com/zcloud/basic/info/command/DepartmentAddExe.java b/web-app/src/main/java/com/zcloud/basic/info/command/DepartmentAddExe.java index a0fccca..96a7841 100644 --- a/web-app/src/main/java/com/zcloud/basic/info/command/DepartmentAddExe.java +++ b/web-app/src/main/java/com/zcloud/basic/info/command/DepartmentAddExe.java @@ -10,6 +10,7 @@ import com.zcloud.basic.info.domain.gateway.DepartmentSuperviseGateway; import com.zcloud.basic.info.domain.model.DepartmentE; import com.zcloud.basic.info.domain.model.DepartmentSuperviseE; import com.zcloud.basic.info.dto.DepartmentAddCmd; +import com.zcloud.basic.info.persistence.repository.DepartmentRepository; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; @@ -34,13 +35,16 @@ public class DepartmentAddExe { private final DepartmentGateway departmentGateway; private final DepartmentSuperviseGateway departmentSuperviseGateway; - private final DepartmentSuperviseCoConvertor departmentSuperviseCoConvertor; + private final DepartmentRepository departmentRepository; @Transactional(rollbackFor = Exception.class) public Long execute(DepartmentAddCmd cmd) { DepartmentE examTypeE = new DepartmentE(); - + //名字校验重复 + if (departmentRepository.existsByName(cmd.getName())) { + throw new BizException("部门名称已存在"); + } BeanUtils.copyProperties(cmd, examTypeE); Long id = null; try { diff --git a/web-app/src/main/java/com/zcloud/basic/info/command/UserAddExe.java b/web-app/src/main/java/com/zcloud/basic/info/command/UserAddExe.java index 66340e3..f2730b4 100644 --- a/web-app/src/main/java/com/zcloud/basic/info/command/UserAddExe.java +++ b/web-app/src/main/java/com/zcloud/basic/info/command/UserAddExe.java @@ -83,6 +83,7 @@ public class UserAddExe { userE.setRoleId(roleId); } try { + res = userGateway.add(userE); if(corpInfoDO != null && !ObjectUtils.isEmpty(corpInfoDO.getCorpName())){ corpName = corpInfoDO.getCorpName(); diff --git a/web-app/src/main/java/com/zcloud/basic/info/command/query/DepartmentQueryExe.java b/web-app/src/main/java/com/zcloud/basic/info/command/query/DepartmentQueryExe.java index d911e3e..c10b17b 100644 --- a/web-app/src/main/java/com/zcloud/basic/info/command/query/DepartmentQueryExe.java +++ b/web-app/src/main/java/com/zcloud/basic/info/command/query/DepartmentQueryExe.java @@ -53,6 +53,9 @@ public class DepartmentQueryExe { if (departmentPageQry.getEqCorpinfoId() == null) { departmentPageQry.setEqCorpinfoId(AuthContext.getTenantId()); } + if(departmentPageQry.getEqParentId() == null){ + departmentPageQry.setEqParentId(AuthContext.getTenantId()); + } Map parmas = PageQueryHelper.toHashMap(departmentPageQry); PageResponse pageResponse = departmentRepository.listPage(parmas); List examCenterCOS = departmentCoConvertor.converDOsToCOs(pageResponse.getData()); diff --git a/web-app/src/main/java/com/zcloud/basic/info/command/query/UserQueryExe.java b/web-app/src/main/java/com/zcloud/basic/info/command/query/UserQueryExe.java index d796164..1c3b042 100644 --- a/web-app/src/main/java/com/zcloud/basic/info/command/query/UserQueryExe.java +++ b/web-app/src/main/java/com/zcloud/basic/info/command/query/UserQueryExe.java @@ -10,6 +10,7 @@ import com.jjb.saas.framework.auth.utils.AuthContext; import com.zcloud.basic.info.command.convertor.UserCoConvertor; import com.zcloud.basic.info.domain.gateway.UserGateway; import com.zcloud.basic.info.domain.model.UserE; +import com.zcloud.basic.info.dto.UserCheckPassWordCmd; import com.zcloud.basic.info.dto.UserPageQry; import com.zcloud.basic.info.dto.UserQryCmd; import com.zcloud.basic.info.dto.UserVerifyQryCmd; @@ -17,6 +18,7 @@ import com.zcloud.basic.info.dto.clientobject.UserCO; import com.zcloud.basic.info.persistence.dataobject.UserDO; import com.zcloud.basic.info.persistence.repository.UserRepository; import com.zcloud.gbscommon.excelEntity.UserExcelExportEntity; +import com.zcloud.gbscommon.utils.DesensitizationUtils; import com.zcloud.gbscommon.utils.PageQueryHelper; import lombok.AllArgsConstructor; import org.springframework.beans.BeanUtils; @@ -66,6 +68,9 @@ public class UserQueryExe { Map params = PageQueryHelper.toHashMap(userQryCmd); List imgFilesDOList = userRepository.listAll(params); List imgFilesCOList = userCoConvertor.converDOsToCOs(imgFilesDOList); + //手机号脱敏 + //身份照脱敏 + imgFilesCOList.forEach(this::desensitize); return MultiResponse.of(imgFilesCOList); } @@ -80,6 +85,7 @@ public class UserQueryExe { UserDO userDO = userRepository.getInfoById(id); UserCO userCO = new UserCO(); BeanUtils.copyProperties(userDO, userCO); + desensitize(userCO); return SingleResponse.of(userCO); } @@ -101,17 +107,28 @@ public class UserQueryExe { QueryWrapper userDOQueryWrapper = new QueryWrapper<>(); userDOQueryWrapper.in("id",collection); List list = userRepository.list(userDOQueryWrapper); - return userCoConvertor.converDOsToCOs(list); + List userCOS = userCoConvertor.converDOsToCOs(list); + userCOS.forEach(this::desensitize); + return userCOS; } public List getUserList() { List list = userRepository.list(); - return userCoConvertor.converDOsToCOs(list); + List userCOS = userCoConvertor.converDOsToCOs(list); + userCOS.forEach(this::desensitize); + return userCOS; + } + + private void desensitize(UserCO userCO) { + userCO.setUserIdCard(DesensitizationUtils.idCardDesensitize(userCO.getUserIdCard())); + userCO.setPhone(DesensitizationUtils.mobileDesensitize(userCO.getPhone())); } public UserCO getInfoByUserId(Long aLong) { UserDO byId = userRepository.getById(aLong); - return userCoConvertor.converDOToCO(byId); + UserCO userCO = userCoConvertor.converDOToCO(byId); + desensitize(userCO); + return userCO; } /** @@ -124,6 +141,9 @@ public class UserQueryExe { params.put("userIdList", Arrays.asList(ids)); } List userDOList = userRepository.listAll(params); + //手机号脱敏 + //身份照脱敏 + userDOList.forEach(userDO -> desensitize(userCoConvertor.converDOToCO(userDO))); List userExcelExportEntities = userCoConvertor.converDOsToExcelEntitys(userDOList); UserE userE = new UserE(); userE.exportUserTable(httpServletResponse, userExcelExportEntities); @@ -143,7 +163,16 @@ public class UserQueryExe { UserDO userDO = userRepository.getInfoById(id); UserCO userCO = new UserCO(); BeanUtils.copyProperties(userDO, userCO); + desensitize(userCO); return SingleResponse.of(userCO); } + + public SingleResponse getEncryInfo(UserCheckPassWordCmd userCheckPassWordCmd) { + UserE userE = new UserE(); + BeanUtils.copyProperties(userCheckPassWordCmd, userE); + userE.encryptionPassword(); + UserDO userDO = userRepository.getEncryInfo(userE); + return SingleResponse.of(userCoConvertor.converDOToCO(userDO)); + } } diff --git a/web-app/src/main/java/com/zcloud/basic/info/service/UserServiceImpl.java b/web-app/src/main/java/com/zcloud/basic/info/service/UserServiceImpl.java index fdbd836..0942b4e 100644 --- a/web-app/src/main/java/com/zcloud/basic/info/service/UserServiceImpl.java +++ b/web-app/src/main/java/com/zcloud/basic/info/service/UserServiceImpl.java @@ -124,5 +124,9 @@ public class UserServiceImpl implements UserServiceI { return userUpdateExe.executeUpdatePassword(userUpdatePassWordCmd); } + @Override + public SingleResponse getEncryInfo(UserCheckPassWordCmd userCheckPassWordCmd) { + return userQueryExe.getEncryInfo(userCheckPassWordCmd); + } } diff --git a/web-client/src/main/java/com/zcloud/basic/info/api/UserServiceI.java b/web-client/src/main/java/com/zcloud/basic/info/api/UserServiceI.java index 50c4a66..61edd79 100644 --- a/web-client/src/main/java/com/zcloud/basic/info/api/UserServiceI.java +++ b/web-client/src/main/java/com/zcloud/basic/info/api/UserServiceI.java @@ -50,5 +50,7 @@ public interface UserServiceI { UserCO getInfoByUserId(Long aLong); void changePassword(Long id); Response updatePassword(UserUpdatePassWordCmd userUpdatePassWordCmd); + + SingleResponse getEncryInfo(UserCheckPassWordCmd userCheckPassWordCmd); } diff --git a/web-client/src/main/java/com/zcloud/basic/info/dto/UserAddCmd.java b/web-client/src/main/java/com/zcloud/basic/info/dto/UserAddCmd.java index ff1a63c..de67c09 100644 --- a/web-client/src/main/java/com/zcloud/basic/info/dto/UserAddCmd.java +++ b/web-client/src/main/java/com/zcloud/basic/info/dto/UserAddCmd.java @@ -25,7 +25,6 @@ public class UserAddCmd extends Command { private String userId; @ApiModelProperty(value = "登录账号", name = "username", required = true) - @NotEmpty(message = "登录账号不能为空") private String username; @ApiModelProperty(value = "姓名", name = "name", required = true) @@ -60,11 +59,9 @@ public class UserAddCmd extends Command { private String phone; @ApiModelProperty(value = "人员类型编码(主要负责人等)", name = "personnelType", required = true) - @NotEmpty(message = "人员类型不能为空") private String personnelType; @ApiModelProperty(value = "人员类型翻译", name = "personnelTypeName", required = true) - @NotEmpty(message = "人员类型不能为空") private String personnelTypeName; @ApiModelProperty(value = "民族编码", name = "nation") diff --git a/web-client/src/main/java/com/zcloud/basic/info/dto/UserCheckPassWordCmd.java b/web-client/src/main/java/com/zcloud/basic/info/dto/UserCheckPassWordCmd.java new file mode 100644 index 0000000..d569c98 --- /dev/null +++ b/web-client/src/main/java/com/zcloud/basic/info/dto/UserCheckPassWordCmd.java @@ -0,0 +1,32 @@ +package com.zcloud.basic.info.dto; + +import com.alibaba.cola.dto.Command; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** + * web-client + * + * @Author zhangyue + * @Date 2025-11-04 14:07:38 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +public class UserCheckPassWordCmd extends Command { + @ApiModelProperty(value = "GBS用户id", name = "id", required = true) + @NotNull(message = "GBS用户id不能为空") + private Long id; + @ApiModelProperty(value = "原密码", name = "password") + @NotEmpty(message = "原密码不能为空") + private String password; + +} + diff --git a/web-client/src/main/java/com/zcloud/basic/info/dto/UserXgfAddCmd.java b/web-client/src/main/java/com/zcloud/basic/info/dto/UserXgfAddCmd.java index bff1ff9..633b8d2 100644 --- a/web-client/src/main/java/com/zcloud/basic/info/dto/UserXgfAddCmd.java +++ b/web-client/src/main/java/com/zcloud/basic/info/dto/UserXgfAddCmd.java @@ -25,7 +25,6 @@ public class UserXgfAddCmd extends Command { private String userId; @ApiModelProperty(value = "登录账号", name = "username", required = true) - @NotEmpty(message = "登录账号不能为空") private String username; @ApiModelProperty(value = "姓名", name = "name", required = true) diff --git a/web-domain/src/main/java/com/zcloud/basic/info/domain/model/UserE.java b/web-domain/src/main/java/com/zcloud/basic/info/domain/model/UserE.java index 75b67f0..6db4ec2 100644 --- a/web-domain/src/main/java/com/zcloud/basic/info/domain/model/UserE.java +++ b/web-domain/src/main/java/com/zcloud/basic/info/domain/model/UserE.java @@ -221,8 +221,12 @@ public class UserE extends BaseE { } public void encryptionPassword() { + this.setPassword(Sm2Util.encryptHex(MD5.md5(password), publicKey)); - this.setNewPassword(Sm2Util.encryptHex(MD5.md5(newPassword), publicKey)); + if(StringUtils.isNotEmpty(newPassword)){ + this.setNewPassword(Sm2Util.encryptHex(MD5.md5(newPassword), publicKey)); + } } + } diff --git a/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/DepartmentRepository.java b/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/DepartmentRepository.java index 1ce0541..99121c7 100644 --- a/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/DepartmentRepository.java +++ b/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/DepartmentRepository.java @@ -6,6 +6,7 @@ import com.zcloud.basic.info.domain.model.DepartmentE; import com.zcloud.basic.info.persistence.dataobject.CorpInfoDO; import com.zcloud.basic.info.persistence.dataobject.DepartmentDO; +import javax.validation.constraints.NotEmpty; import java.util.List; import java.util.Map; @@ -33,5 +34,7 @@ public interface DepartmentRepository extends BaseRepository { List listAllTree(); + + boolean existsByName(@NotEmpty(message = "名称不能为空") String name); } diff --git a/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/UserRepository.java b/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/UserRepository.java index b9978e7..7c3bc78 100644 --- a/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/UserRepository.java +++ b/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/UserRepository.java @@ -11,6 +11,8 @@ import com.zcloud.basic.info.domain.model.UserE; import com.zcloud.basic.info.persistence.dataobject.UserDO; import org.apache.catalina.User; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; import java.util.List; import java.util.Map; @@ -60,5 +62,6 @@ public interface UserRepository extends BaseRepository { Response updatePassword(UserDO userDO); + UserDO getEncryInfo(UserE userE); } diff --git a/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/impl/DepartmentRepositoryImpl.java b/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/impl/DepartmentRepositoryImpl.java index 1c71111..356417d 100644 --- a/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/impl/DepartmentRepositoryImpl.java +++ b/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/impl/DepartmentRepositoryImpl.java @@ -123,5 +123,13 @@ public class DepartmentRepositoryImpl extends BaseRepositoryImpl listAllTree() { return departmentMapper.listAllTree(); } + + @Override + public boolean existsByName(String name) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("name", name); + queryWrapper.eq("corpinfo_id", AuthContext.getTenantId()); + return departmentMapper.selectCount(queryWrapper) > 0; + } } diff --git a/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/impl/UserRepositoryImpl.java b/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/impl/UserRepositoryImpl.java index 09f9e44..12f92ca 100644 --- a/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/impl/UserRepositoryImpl.java +++ b/web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/impl/UserRepositoryImpl.java @@ -5,6 +5,7 @@ import com.alibaba.cola.dto.MultiResponse; import com.alibaba.cola.dto.PageResponse; import com.alibaba.cola.dto.Response; import com.alibaba.cola.dto.SingleResponse; +import com.alibaba.cola.exception.BizException; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -36,6 +37,7 @@ import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; import java.util.Collections; import java.util.HashMap; @@ -67,9 +69,9 @@ public class UserRepositoryImpl extends BaseRepositoryImpl i IPage iPage = new Query().getPage(params); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper = PageQueryHelper.createPageQueryWrapper(queryWrapper, params, "u."); - queryWrapper.orderByDesc("u.sort"); queryWrapper.eq("u.delete_enum", "FALSE"); queryWrapper.apply("u.id != u.corpinfo_id"); + queryWrapper.orderByAsc("u.sort").orderByDesc("u.create_time"); IPage result = userMapper.selectUserPage(iPage, queryWrapper); return PageHelper.pageToResponse(result, result.getRecords()); } @@ -153,9 +155,10 @@ public class UserRepositoryImpl extends BaseRepositoryImpl i @Override public List listByPostId(Long postId) { - QueryWrapper queryWrapper = new QueryWrapper(); + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("post_id", postId); queryWrapper.eq("delete_enum", "FALSE"); + queryWrapper.orderByAsc("u.sort").orderByDesc("u.create_time"); List userPostList = this.list(queryWrapper); return userPostList; } @@ -165,6 +168,7 @@ public class UserRepositoryImpl extends BaseRepositoryImpl i QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.in("post_id", postIds); queryWrapper.eq("delete_enum", "FALSE"); + queryWrapper.orderByAsc("u.sort").orderByDesc("u.create_time"); List userPostList = this.list(queryWrapper); return userPostList; } @@ -174,6 +178,7 @@ public class UserRepositoryImpl extends BaseRepositoryImpl i QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("corpinfo_id", corpInfoId); queryWrapper.eq("delete_enum", "FALSE"); + queryWrapper.orderByAsc("u.sort").orderByDesc("u.create_time"); return list(queryWrapper); } @@ -190,6 +195,9 @@ public class UserRepositoryImpl extends BaseRepositoryImpl i @Override public void saveUser(UserDO userDO) { + if(StringUtils.isEmpty(userDO.getUsername())){ + userDO.setUsername(userDO.getPhone()); + } UserAddCmd userAddCmd = new UserAddCmd(); userAddCmd.setAccount(userDO.getUsername()); userAddCmd.setName(userDO.getName()); @@ -201,6 +209,9 @@ public class UserRepositoryImpl extends BaseRepositoryImpl i SingleResponse gbsResult = userFacade.add(userAddCmd); userDO.setId(gbsResult.getData()); + if(userDO.getSort() == null){ + userDO.setSort(9999); + } save(userDO); } @@ -293,5 +304,18 @@ public class UserRepositoryImpl extends BaseRepositoryImpl i userUpdatePasswordCmd.setPassword(userDO.getNewPassword()); return userFacade.updatePassword(userUpdatePasswordCmd); } + + @Override + public UserDO getEncryInfo(UserE userE) { + // TODO 验证老密码是否正确 + AccountPasswordCheckCmd accountPasswordCheckCmd = new AccountPasswordCheckCmd(); + accountPasswordCheckCmd.setUserId(AuthContext.getUserId()); + accountPasswordCheckCmd.setPassword(userE.getPassword()); + SingleResponse response = accountFacade.checkPassword(accountPasswordCheckCmd); + if(!response.isSuccess()){ + throw new BizException("密码错误"); + } + return getById(userE.getId()); + } } diff --git a/web-infrastructure/src/main/resources/mapper/UserMapper.xml b/web-infrastructure/src/main/resources/mapper/UserMapper.xml index 1ed6a7a..7a5e8f4 100644 --- a/web-infrastructure/src/main/resources/mapper/UserMapper.xml +++ b/web-infrastructure/src/main/resources/mapper/UserMapper.xml @@ -89,7 +89,7 @@ - order by + order by u.sort , u.create_time desc