增加演示登录注册接口

main
zhangyue 2026-05-07 15:16:12 +08:00
parent dffa4bf3a8
commit 5bf71ab9da
15 changed files with 250 additions and 8 deletions

View File

@ -1,16 +1,20 @@
package com.zcloud.basic.info.facade;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.basic.info.api.UserServiceI;
import com.zcloud.basic.info.command.convertor.UserCoConvertor;
import com.zcloud.basic.info.dto.clientobject.UserCO;
import com.zcloud.basic.info.persistence.dataobject.UserDO;
import com.zcloud.basic.info.persistence.dataobject.UserImgDO;
import com.zcloud.basic.info.persistence.repository.UserRepository;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.zcloud.gbscommon.zclouduser.facade.ZcloudUserFacade;
import com.zcloud.gbscommon.zclouduser.request.ZcloudUserImgQry;
import com.zcloud.gbscommon.zclouduser.request.ZcloudUserQry;
import com.zcloud.gbscommon.zclouduser.response.ZcloudUserCo;
import com.zcloud.gbscommon.zclouduser.response.ZcloudUserImgBase64Co;
import org.apache.dubbo.config.annotation.DubboService;
import javax.annotation.Resource;
@ -85,4 +89,12 @@ public class ZcloudUserFacadeImpl implements ZcloudUserFacade {
return MultiResponse.of(zcloudUserCos);
}
@Override
public MultiResponse<ZcloudUserImgBase64Co> listBase64ByUrl(ZcloudUserImgQry zcloudUserImgQry) {
Map<String, Object> parmas = PageQueryHelper.toHashMap(zcloudUserImgQry);
List<UserImgDO> list = userServiceI.listBase64ByUrl(parmas);
List<ZcloudUserImgBase64Co> zcloudUserImgBase64Cos = BeanUtil.copyToList(list, ZcloudUserImgBase64Co.class);
return MultiResponse.of(zcloudUserImgBase64Cos);
}
}

View File

@ -0,0 +1,51 @@
package com.zcloud.basic.info.web;
import cn.hutool.core.util.IdcardUtil;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.basic.info.api.UserServiceI;
import com.zcloud.basic.info.api.sync.SyncServiceI;
import com.zcloud.basic.info.dto.AppUserRegisterCmd;
import com.zcloud.basic.info.dto.clientobject.UserCO;
import com.zcloud.basic.info.dto.sync.SyncDepartmentQryPageCmd;
import com.zcloud.basic.info.dto.sync.SyncUserQryPageCmd;
import com.zcloud.basic.info.persistence.dataobject.UserDO;
import com.zcloud.basic.info.utils.SyncPageResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
* @author zhangyue
* @date 2026/4/23 9:45
*/
@Api(tags = "演示登录")
@RequestMapping("/${application.gateway}/login")
@RestController
@AllArgsConstructor
public class LoginController {
private final UserServiceI userService;
@ApiOperation("获取用户数据")
@GetMapping("/getUserInfo")
public SingleResponse listPageSyncUser(@RequestParam(value = "userCode", required = false) String userCode) {
UserCO user = userService.getInfoByUserId(Long.valueOf(userCode));
Map<String, Object> params = new HashMap<>();
params.put("phone", user.getPhone());
params.put("userName", user.getUsername());
params.put("uid", user.getId());
return SingleResponse.of(params);
}
@ApiOperation("注册用户")
@PostMapping("/registerYanshi")
public SingleResponse<UserCO> registerYanshi(@Validated @RequestBody AppUserRegisterCmd cmd) {
return userService.registerYanshi(cmd);
}
}

View File

@ -29,10 +29,7 @@ import com.zcloud.basic.info.domain.model.*;
import com.zcloud.basic.info.dto.*;
import com.zcloud.basic.info.persistence.dataobject.*;
import com.zcloud.basic.info.persistence.repository.*;
import com.zcloud.gbscommon.utils.DateUtil;
import com.zcloud.gbscommon.utils.Tools;
import com.zcloud.gbscommon.utils.UuidUtil;
import com.zcloud.gbscommon.utils.ZcloudRedisUtil;
import com.zcloud.gbscommon.utils.*;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
@ -179,6 +176,51 @@ public class UserAddExe {
return true;
}
@Transactional(rollbackFor = Exception.class)
public boolean executeRegisterYanshi(AppUserRegisterCmd cmd) {
UserE userE = new UserE();
BeanUtils.copyProperties(cmd, userE);
userE.checkPassword(cmd.getNewPassword(), cmd.getConfirmPassword());
//校验手机号
List<Integer> employmentFlagList = Arrays.asList(UserEmploymentFlagEnum.ON.getCode(), UserEmploymentFlagEnum.ENTRY_AUDIT.getCode(), UserEmploymentFlagEnum.RESIGNATION_AUDIT.getCode());
List<UserDO> userList = userRepository.getListByPhone(userE.getPhone(), employmentFlagList);
if (CollUtil.isNotEmpty(userList)) {
List<UserE> userEList = userCoConvertor.convertDOsToEs(userList);
userE.checkPhone(userEList);
}
// TODO 需要修改 获取redis验证码
if (!"369258".equals(cmd.getPhoneCode()) && !"dev".equals(codeConfig.getProfile())) {
Object phoneCodeObj = zcloudRedisUtil.get(RedisConstant.PHONE_CODE_KEY + cmd.getPhone());
if (phoneCodeObj == null || !phoneCodeObj.toString().equals(cmd.getPhoneCode())) {
throw new BizException("验证码已过期或错误");
}
zcloudRedisUtil.del(RedisConstant.PHONE_CODE_KEY + cmd.getPhone());
}
userE.setUserId(Tools.get32UUID());
userE.setTenantId(2046785341004177408L);
userE.setCorpinfoId(2046785341004177408L);
userE.setEmploymentFlag(1);
userE.setPassword(Sm2Util.encryptHex(MD5.md5(cmd.getNewPassword()), userE.getPublicKey()));
userE.setName(cmd.getPhone());
userE.setUsername(cmd.getPhone());
userE.setDepartmentId(2046785341004177408L);
userE.setUserType(2);
userE.setPostId(2048945839900323842L);
userE.setOrgId(2046785341004177408L);
userE.setRoleId(2008483569812549634L);
userE.setMainCorpFlag(0);
userE.setPersonnelType("aqglry");
userE.setPersonnelTypeName("安全管理人员");
userE.setEmploymentFlag(1);
userE.setRzFlag(0);
userGateway.addYanshi(userE);
return true;
}
@Transactional(rollbackFor = Exception.class)
public boolean executePerfectUserInfo(AppUserInfoCmd cmd) {
@ -440,10 +482,12 @@ public class UserAddExe {
messageTargetCmd.setMobile(phone);
messageSendCmd.setTargetCmd(messageTargetCmd);
messageSendCmd.setSourceCode(codeConfig.getMessage());
messageSendCmd.setNeedTokenEnum(false);
Map<String, Object> sendParams = new HashMap<String, Object>();
sendParams.put("code", phoneCode);
messageSendCmd.setParams(sendParams);
SingleResponse<Boolean> d = messageFacade.send(messageSendCmd);
System.out.println( d.toString());
return d == null ? false : d.getData();
}

View File

@ -23,6 +23,7 @@ import com.zcloud.basic.info.dto.clientobject.*;
import com.zcloud.basic.info.persistence.dataobject.UserCorpInfoDO;
import com.zcloud.basic.info.persistence.dataobject.UserDO;
import com.zcloud.basic.info.persistence.dataobject.UserExpandInfoDO;
import com.zcloud.basic.info.persistence.dataobject.UserImgDO;
import com.zcloud.basic.info.persistence.repository.CorpInfoRepository;
import com.zcloud.basic.info.persistence.repository.UserExpandInfoRepository;
import com.zcloud.basic.info.persistence.repository.UserRepository;
@ -366,6 +367,8 @@ public class UserQueryExe {
return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
}
public List<UserImgDO> listBase64ByUrl(Map<String, Object> map){
return userRepository.listBase64ByUrl(map);
}
}

View File

@ -12,6 +12,7 @@ import com.zcloud.basic.info.command.UserUpdateExe;
import com.zcloud.basic.info.command.query.UserQueryExe;
import com.zcloud.basic.info.dto.*;
import com.zcloud.basic.info.dto.clientobject.*;
import com.zcloud.basic.info.persistence.dataobject.UserImgDO;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@ -19,6 +20,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* web-app
@ -54,6 +56,12 @@ public class UserServiceImpl implements UserServiceI {
return SingleResponse.buildSuccess();
}
@Override
public SingleResponse<UserCO> registerYanshi(AppUserRegisterCmd cmd) {
userAddExe.executeRegisterYanshi(cmd);
return SingleResponse.buildSuccess();
}
@Override
public SingleResponse<UserCO> passwordRecover(AppUserRegisterCmd cmd) {
userUpdateExe.executePasswordRecover(cmd);
@ -227,6 +235,11 @@ public class UserServiceImpl implements UserServiceI {
return userQueryExe.getUserCorpByPhone(cmd);
}
@Override
public List<UserImgDO> listBase64ByUrl(Map<String, Object> map) {
return userQueryExe.listBase64ByUrl(map);
}
@Override
public List<UserCorpInfoCO> getUserCorpList(Long id) {
return userQueryExe.getUserCorpList(id);

View File

@ -7,11 +7,13 @@ import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.basic.info.dto.*;
import com.zcloud.basic.info.dto.clientobject.*;
import com.zcloud.basic.info.persistence.dataobject.UserImgDO;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* web-client
@ -24,6 +26,7 @@ public interface UserServiceI {
SingleResponse<UserCO> add(UserAddCmd cmd);
SingleResponse<UserCO> register(AppUserRegisterCmd cmd);
SingleResponse<UserCO> registerYanshi(AppUserRegisterCmd cmd);
SingleResponse<UserCO> passwordRecover(AppUserRegisterCmd cmd);
@ -96,5 +99,7 @@ public interface UserServiceI {
List<UserCO> getUserList();
UserLoginCO getUserCorpByPhone(UserAppPhoneCmd cmd);
List<UserImgDO> listBase64ByUrl(Map<String, Object> map);
}

View File

@ -10,5 +10,6 @@ import org.springframework.stereotype.Component;
public class CodeConfig {
private String message="MS000087";
// private String message="MS000070";
private String profile="prod";
}

View File

@ -20,6 +20,11 @@ public interface UserGateway {
*/
Boolean add(UserE userE);
/**
*
*/
Boolean addYanshi(UserE userE);
Boolean register(UserE userE);
/**

View File

@ -47,6 +47,15 @@ public class UserGatewayImpl implements UserGateway {
return true;
}
@Override
public Boolean addYanshi(UserE userE) {
UserDO d = new UserDO();
BeanUtils.copyProperties(userE, d);
userRepository.saveUserYanshi(d);
userE.setId(d.getId());
return true;
}
@Override
public Boolean register(UserE userE) {
UserDO d = new UserDO();

View File

@ -0,0 +1,36 @@
package com.zcloud.basic.info.persistence.dataobject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.jjb.saas.framework.repository.basedo.BaseDO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
/**
* web-infrastructure
*
* @Author zhangyue
* @Date 2025-11-04 14:07:35
*/
@Data
@TableName("user_img_base64")
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class UserImgDO extends BaseDO {
@ApiModelProperty(value = "id")
private Long id;
@ApiModelProperty(value = "业务id")
private String userImgBase64Id;
@ApiModelProperty(value = "用户id")
private Long userId;
@ApiModelProperty(value = "用户uid")
@TableField(exist = false)
private String userUid;
@ApiModelProperty(value = "用户人脸url")
private String userAvatarUrl;
@ApiModelProperty(value = "用户人脸base64")
private String userAvatarBase64;
}

View File

@ -8,6 +8,7 @@ import com.jjb.saas.framework.datascope.annotation.DataScopes;
import com.zcloud.basic.info.persistence.dataobject.DepartmentLeaderStatictiscDO;
import com.zcloud.basic.info.persistence.dataobject.UserCorpInfoDO;
import com.zcloud.basic.info.persistence.dataobject.UserDO;
import com.zcloud.basic.info.persistence.dataobject.UserImgDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -49,5 +50,8 @@ public interface UserMapper extends BaseMapper<UserDO> {
IPage<UserDO> pageByNopermission(IPage<UserDO> iPage, @Param("ew") QueryWrapper<UserDO> queryWrapper);
void updateFaceByPhone(String userAvatarUrl, String phone);
List<UserImgDO> listBase64ByUrl(@Param("params") Map<String, Object> params);
}

View File

@ -10,6 +10,7 @@ import com.zcloud.basic.info.domain.model.CorpInfoE;
import com.zcloud.basic.info.domain.model.UserE;
import com.zcloud.basic.info.persistence.dataobject.UserCorpInfoDO;
import com.zcloud.basic.info.persistence.dataobject.UserDO;
import com.zcloud.basic.info.persistence.dataobject.UserImgDO;
import org.apache.catalina.User;
import javax.validation.constraints.NotEmpty;
@ -46,6 +47,7 @@ public interface UserRepository extends BaseRepository<UserDO> {
void addCorpUser(UserE userE);
void saveUser(UserDO userDO);
void saveUserYanshi(UserDO userDO);
void saveRegisterUser(UserDO userDO);
@ -103,5 +105,10 @@ public interface UserRepository extends BaseRepository<UserDO> {
void deleteByCorpInfoId(Long corpInfoId);
List<UserImgDO> listBase64ByUrl(Map<String,Object> params);
}

View File

@ -30,6 +30,7 @@ import com.zcloud.basic.info.domain.model.UserE;
import com.zcloud.basic.info.persistence.dataobject.DepartmentLeaderStatictiscDO;
import com.zcloud.basic.info.persistence.dataobject.UserCorpInfoDO;
import com.zcloud.basic.info.persistence.dataobject.UserDO;
import com.zcloud.basic.info.persistence.dataobject.UserImgDO;
import com.zcloud.basic.info.persistence.mapper.UserMapper;
import com.zcloud.basic.info.persistence.repository.UserRepository;
import com.zcloud.gbscommon.utils.PageQueryHelper;
@ -314,10 +315,40 @@ public class UserRepositoryImpl extends BaseRepositoryImpl<UserMapper, UserDO> i
userDO.setUsername(userDO.getPhone());
}
UserAddCmd userAddCmd = new UserAddCmd();
userAddCmd.setAccount(userDO.getUsername());
userAddCmd.setName(userDO.getName());
userAddCmd.setPassword(userDO.getPassword());
RoleDeptAddCmd roleDeptAddCmd = new RoleDeptAddCmd();
roleDeptAddCmd.setRoleId(userDO.getRoleId());
roleDeptAddCmd.setDeptId(userDO.getDepartmentId());
List<RoleDeptAddCmd> roleDeptAddCmdList = Collections.singletonList(roleDeptAddCmd);
userAddCmd.setRoleDepts(roleDeptAddCmdList);
log.info("GBS新增用户开始,用户信息:{}", JSONUtil.toJsonStr(userAddCmd));
SingleResponse<Long> gbsResult = userFacade.add(userAddCmd);
log.info("GBS新增用户结束,用户id:{},结果:{}", gbsResult.getData(), JSONUtil.toJsonStr(gbsResult));
if (!gbsResult.isSuccess()) {
throw new RuntimeException("GBS新增用户失败,用户id:" + gbsResult.getData());
}
userDO.setId(gbsResult.getData());
if (userDO.getSort() == null) {
userDO.setSort(9999);
}
// 新增用户默认在职
userDO.setEmploymentFlag(1);
save(userDO);
}
@Override
public void saveUserYanshi(UserDO userDO) {
if (StringUtils.isEmpty(userDO.getUsername())) {
userDO.setUsername(userDO.getPhone());
}
UserAddCmd userAddCmd = new UserAddCmd();
userAddCmd.setAccount(userDO.getUsername());
userAddCmd.setName(userDO.getName());
userAddCmd.setTenantId(userDO.getTenantId());
userAddCmd.setPassword(userDO.getPassword());
RoleDeptAddCmd roleDeptAddCmd = new RoleDeptAddCmd();
roleDeptAddCmd.setRoleId(userDO.getRoleId());
@ -716,5 +747,10 @@ public class UserRepositoryImpl extends BaseRepositoryImpl<UserMapper, UserDO> i
updateWrapper.set("delete_enum", "TRUE");
update(updateWrapper);
}
@Override
public List<UserImgDO> listBase64ByUrl(Map<String, Object> params) {
return userMapper.listBase64ByUrl(params);
}
}

View File

@ -116,10 +116,10 @@ public class SyncPageResponse extends Response {
public static void main(String[] args) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("corpinfoId", 2003302008103952384L);
jsonObject.put("timestamp", 1776902400000l);
jsonObject.put("corpinfoId", 2590800828822460065L);
jsonObject.put("timestamp", 1777339041444L);
JSONObject jsonbody = new JSONObject();
jsonbody.put("corpinfoId", 2003302008103952384L);
jsonbody.put("corpinfoId", 2590800828822460065L);
jsonbody.put("pageIndex", 1);
jsonbody.put("pageSize", 10);
jsonObject.put("body", jsonbody);

View File

@ -549,5 +549,21 @@
<update id="updateFaceByPhone">
update user set user_avatar_url = #{userAvatarUrl} where phone = #{phone}
</update>
<select id="listBase64ByUrl" resultType="com.zcloud.basic.info.persistence.dataobject.UserImgDO">
select ui.*, u.user_id as userUid
from user_img_base64 ui
left join user u on u.id = ui.user_id
<where>
and ui.delete_enum = 'FALSE'
<if test="params.urlList != null and params.urlList.size() > 0">
ui.user_avatar_url IN
<foreach collection="params.urlList" item="url" open="(" close=")" separator=",">
#{url}
</foreach>
</if>
</where>
</select>
</mapper>