From e19cb5e73228d02813d7e7cc0ffcc51889e07d3c Mon Sep 17 00:00:00 2001 From: xuyang <748613696@qq.com> Date: Sun, 25 Jun 2023 20:59:01 +0800 Subject: [PATCH] =?UTF-8?q?1.app=E8=A7=92=E8=89=B2=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=202.sys=5Fuser=E8=A1=A8=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/njcn/user/enums/AppRoleEnum.java | 31 ++++++ .../com/njcn/user/enums/UserResponseEnum.java | 3 + .../com/njcn/user/pojo/param/UserParam.java | 6 ++ .../main/java/com/njcn/user/pojo/po/User.java | 3 + .../java/com/njcn/user/pojo/vo/UserVO.java | 3 + .../user/pojo/vo/app/RoleReferralCodeVO.java | 22 ++++ .../controller/app/AppRoleController.java | 58 ++++++++++ .../app/ReferralCodeController.java | 66 ++++++++++++ .../njcn/user/service/IAppRoleService.java | 21 ++++ .../user/service/IReferralCodeService.java | 29 +++++ .../com/njcn/user/service/IRoleService.java | 6 ++ .../user/service/impl/AppRoleServiceImpl.java | 64 +++++++++++ .../service/impl/ReferralCodeServiceImpl.java | 102 ++++++++++++++++++ .../user/service/impl/RoleServiceImpl.java | 5 + 14 files changed, 419 insertions(+) create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/enums/AppRoleEnum.java create mode 100644 pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/app/RoleReferralCodeVO.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/controller/app/AppRoleController.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/controller/app/ReferralCodeController.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/IAppRoleService.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/IReferralCodeService.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/AppRoleServiceImpl.java create mode 100644 pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/ReferralCodeServiceImpl.java diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/enums/AppRoleEnum.java b/pqs-user/user-api/src/main/java/com/njcn/user/enums/AppRoleEnum.java new file mode 100644 index 000000000..51d6eb87f --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/enums/AppRoleEnum.java @@ -0,0 +1,31 @@ +package com.njcn.user.enums; + +import lombok.Getter; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/6/25 20:50 + */ +@Getter +public enum AppRoleEnum { + + TOURIST("tourist","游客"), + APP_VIP_USER("app_vip_user","移动端正式用户"), + MARKET_USER("market_user","营销角色"), + ENGINEERING_USER("engineering_user","工程角色"), + ; + + private final String code; + + private final String message; + + AppRoleEnum(String code, String message) { + this.code=code; + this.message=message; + } + + +} diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/enums/UserResponseEnum.java b/pqs-user/user-api/src/main/java/com/njcn/user/enums/UserResponseEnum.java index 0c3890614..a6e6528e8 100644 --- a/pqs-user/user-api/src/main/java/com/njcn/user/enums/UserResponseEnum.java +++ b/pqs-user/user-api/src/main/java/com/njcn/user/enums/UserResponseEnum.java @@ -95,6 +95,9 @@ public enum UserResponseEnum { ROLE_NAME_REPEAT("A0117","角色名称重复"), DEPT_PID_EXCEPTION("A0118","新增部门父节点信息异常"), + + REFERRAL_CODE_LAPSE("A0119","角色推荐码失效,请联系管理员"), + REFERRAL_CODE_ERROR("A0119","角色推荐码错误,请联系管理员"), ; private final String code; diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/UserParam.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/UserParam.java index dfa264a61..4a7f22454 100644 --- a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/UserParam.java +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/param/UserParam.java @@ -79,6 +79,12 @@ public class UserParam { @NotEmpty(message = UserValidMessage.ROLE_NOT_BLANK) private List role; + @ApiModelProperty("手机识别码") + private String devCode; + + @ApiModelProperty("移动端用户头像") + private String headSculpture; + /** * 用户新增操作实体 * diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/User.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/User.java index 3148df1d8..e13aa19ae 100644 --- a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/User.java +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/po/User.java @@ -143,4 +143,7 @@ public class User extends BaseEntity { @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime lockTime; + private String devCode; + + private String headSculpture; } diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/UserVO.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/UserVO.java index 3b76d7695..eacb4b07a 100644 --- a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/UserVO.java +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/UserVO.java @@ -46,4 +46,7 @@ public class UserVO extends UserParam implements Serializable { @ApiModelProperty("角色id") private List roleList; + @ApiModelProperty("头像") + private String headSculpture; + } diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/app/RoleReferralCodeVO.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/app/RoleReferralCodeVO.java new file mode 100644 index 000000000..63fced6b0 --- /dev/null +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/app/RoleReferralCodeVO.java @@ -0,0 +1,22 @@ +package com.njcn.user.pojo.vo.app; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/6/25 18:40 + */ +@Data +public class RoleReferralCodeVO { + + @ApiModelProperty("角色名称") + private String roleName; + + @ApiModelProperty("角色推荐码") + private String roleReferralCode; + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/app/AppRoleController.java b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/app/AppRoleController.java new file mode 100644 index 000000000..4e92eca3c --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/app/AppRoleController.java @@ -0,0 +1,58 @@ +package com.njcn.user.controller.app; + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.user.service.IAppRoleService; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.annotations.Param; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/6/25 18:30 + */ +@Validated +@Slf4j +@RestController +@RequestMapping("/appRole") +@Api(tags = "App角色管理") +@AllArgsConstructor +public class AppRoleController extends BaseController { + + private final IAppRoleService appRoleService; + + /** + * app用户角色升级 + */ + @PostMapping("/roleUpdate") + @OperateInfo + @ApiOperation(value = "角色升级", notes = "角色升级") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userId", value = "用户ID", required = true, paramType = "query"), + @ApiImplicitParam(name = "referralCode", value = "推荐码", required = true, paramType = "query"), + @ApiImplicitParam(name = "devCode", value = "设备码", required = true, paramType = "query"), + }) + public HttpResult roleUpdate(@Param("userId")String userId,@Param("referralCode")String referralCode,@Param("devCode")String devCode) { + String methodDescribe = getMethodDescribe("roleUpdate"); + appRoleService.roleUpdate(userId,referralCode,devCode); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, "success", methodDescribe); + } + + + + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/app/ReferralCodeController.java b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/app/ReferralCodeController.java new file mode 100644 index 000000000..da6e1292c --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/app/ReferralCodeController.java @@ -0,0 +1,66 @@ +package com.njcn.user.controller.app; + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.user.pojo.vo.app.RoleReferralCodeVO; +import com.njcn.user.service.IReferralCodeService; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/6/25 16:13 + */ +@Validated +@Slf4j +@RestController +@RequestMapping("/referralCode") +@Api(tags = "推荐码管理") +@AllArgsConstructor +public class ReferralCodeController extends BaseController { + + private final IReferralCodeService referralCodeService; + + + /** + * 查看角色推荐码 + * 1.用完就生成新的推荐码 + * 2.规定时间内失效,重新生成推荐码 + */ + @PostMapping("findReferralCode") + @OperateInfo + @ApiOperation(value = "查看角色推荐码", notes = "生成角色推荐码") + public HttpResult> findReferralCode() { + String methodDescribe = getMethodDescribe("findReferralCode"); + List list = referralCodeService.findReferralCode(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + + /** + * 刷新角色推荐码 + * 1.重新生成推荐码 + */ + @PostMapping("refreshReferralCode") + @OperateInfo + @ApiOperation(value = "刷新角色推荐码", notes = "刷新角色推荐码") + public HttpResult> refreshReferralCode() { + String methodDescribe = getMethodDescribe("refreshReferralCode"); + List list = referralCodeService.refreshReferralCode(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IAppRoleService.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IAppRoleService.java new file mode 100644 index 000000000..ec936600b --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IAppRoleService.java @@ -0,0 +1,21 @@ +package com.njcn.user.service; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/6/25 18:32 + */ + +public interface IAppRoleService { + + /** + * 角色升级 + * @param userId + * @param referralCode + * @param devCode + */ + void roleUpdate(String userId, String referralCode, String devCode); + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IReferralCodeService.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IReferralCodeService.java new file mode 100644 index 000000000..7ecac1b37 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IReferralCodeService.java @@ -0,0 +1,29 @@ +package com.njcn.user.service; + +import com.njcn.user.pojo.vo.app.RoleReferralCodeVO; + +import java.util.List; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/6/25 16:17 + */ + +public interface IReferralCodeService { + + /** + * 查询角色推荐码 + * @return + */ + List findReferralCode(); + + /** + * 刷新角色推荐码 + * @return + */ + List refreshReferralCode(); + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IRoleService.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IRoleService.java index 848addf42..6c40c86ac 100644 --- a/pqs-user/user-boot/src/main/java/com/njcn/user/service/IRoleService.java +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/IRoleService.java @@ -79,5 +79,11 @@ public interface IRoleService extends IService { Boolean selectRelevance(List ids); + /** + * 根据角色code获取角色 + * @param code + * @return + */ + Role getRoleByCode(String code); } diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/AppRoleServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/AppRoleServiceImpl.java new file mode 100644 index 000000000..bcfb769bf --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/AppRoleServiceImpl.java @@ -0,0 +1,64 @@ +package com.njcn.user.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.redis.utils.RedisUtil; +import com.njcn.user.enums.UserResponseEnum; +import com.njcn.user.pojo.po.UserRole; +import com.njcn.user.pojo.vo.app.RoleReferralCodeVO; +import com.njcn.user.service.IAppRoleService; +import com.njcn.user.service.IReferralCodeService; +import com.njcn.user.service.IRoleService; +import com.njcn.user.service.IUserRoleService; +import com.njcn.web.utils.RequestUtil; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/6/25 18:32 + */ +@Service +@AllArgsConstructor +public class AppRoleServiceImpl implements IAppRoleService { + + private final RedisUtil redisUtil; + + private final IRoleService roleService; + + private final IUserRoleService userRoleService; + + @Override + public void roleUpdate(String userId, String referralCode, String devCode) { + Object object = redisUtil.getObjectByKey("roleReferralCode"); + if (Objects.isNull(object)){ + throw new BusinessException(UserResponseEnum.REFERRAL_CODE_LAPSE); + } + LinkedHashMap map = (LinkedHashMap) object; + if (Objects.isNull(map.get(referralCode))){ + throw new BusinessException(UserResponseEnum.REFERRAL_CODE_ERROR); + } + //修改用户和角色的关系 + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + lambdaUpdateWrapper.eq(UserRole::getUserId,userId).set(UserRole::getRoleId,roleService.getRoleByCode(map.get(referralCode)).getId()); + userRoleService.update(lambdaUpdateWrapper); + //重新生成新的推荐码 + LinkedHashMap roleMap = new LinkedHashMap<>(); + for (Map.Entry entry : map.entrySet()) { + if (Objects.equals(entry.getKey(),referralCode)){ + roleMap.put(ReferralCodeServiceImpl.getCode(),entry.getValue()); + } else { + roleMap.put(entry.getKey(),entry.getValue()); + } + } + redisUtil.saveByKeyWithExpire("roleReferralCode",roleMap,120L); + } + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/ReferralCodeServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/ReferralCodeServiceImpl.java new file mode 100644 index 000000000..2f3afddd5 --- /dev/null +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/ReferralCodeServiceImpl.java @@ -0,0 +1,102 @@ +package com.njcn.user.service.impl; + +import com.njcn.redis.utils.RedisUtil; +import com.njcn.user.pojo.vo.app.RoleReferralCodeVO; +import com.njcn.user.service.IReferralCodeService; +import com.njcn.user.service.IRoleService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/6/25 16:17 + */ +@Slf4j +@Service +@AllArgsConstructor +public class ReferralCodeServiceImpl implements IReferralCodeService { + + private static final String BASIC = "123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZZ"; + + private final RedisUtil redisUtil; + + private final IRoleService roleService; + + @Override + public List findReferralCode() { + List list = new ArrayList<>(); + Object object = redisUtil.getObjectByKey("roleReferralCode"); + if (Objects.isNull(object)){ + LinkedHashMap roleMap = new LinkedHashMap<>(); + String code1 = getCode(); + String code2 = getCode(); + String code3 = getCode(); + roleMap.put(code1,"market_user"); + roleMap.put(code2,"engineering_user"); + roleMap.put(code3,"app_user"); + redisUtil.saveByKeyWithExpire("roleReferralCode",roleMap,120L); + RoleReferralCodeVO vo1 = new RoleReferralCodeVO(); + vo1.setRoleName(roleService.getRoleByCode("market_user").getName()); + vo1.setRoleReferralCode(code1); + RoleReferralCodeVO vo2 = new RoleReferralCodeVO(); + vo2.setRoleName(roleService.getRoleByCode("engineering_user").getName()); + vo2.setRoleReferralCode(code2); + RoleReferralCodeVO vo3 = new RoleReferralCodeVO(); + vo3.setRoleName(roleService.getRoleByCode("app_user").getName()); + vo3.setRoleReferralCode(code3); + list = Arrays.asList(vo1,vo2,vo3); + } else { + LinkedHashMap map = (LinkedHashMap) redisUtil.getObjectByKey("roleReferralCode"); + for (Map.Entry entry : map.entrySet()) { + RoleReferralCodeVO vo = new RoleReferralCodeVO(); + vo.setRoleReferralCode(entry.getKey()); + vo.setRoleName(roleService.getRoleByCode(entry.getValue()).getName()); + list.add(vo); + } + } + return list; + } + + @Override + public List refreshReferralCode() { + LinkedHashMap roleMap = new LinkedHashMap<>(); + String code1 = getCode(); + String code2 = getCode(); + String code3 = getCode(); + roleMap.put(code1,"market_user"); + roleMap.put(code2,"engineering_user"); + roleMap.put(code3,"app_user"); + redisUtil.saveByKeyWithExpire("roleReferralCode",roleMap,120L); + RoleReferralCodeVO vo1 = new RoleReferralCodeVO(); + vo1.setRoleName(roleService.getRoleByCode("market_user").getName()); + vo1.setRoleReferralCode(code1); + RoleReferralCodeVO vo2 = new RoleReferralCodeVO(); + vo2.setRoleName(roleService.getRoleByCode("engineering_user").getName()); + vo2.setRoleReferralCode(code2); + RoleReferralCodeVO vo3 = new RoleReferralCodeVO(); + vo3.setRoleName(roleService.getRoleByCode("app_user").getName()); + vo3.setRoleReferralCode(code3); + return Arrays.asList(vo1,vo2,vo3); + } + + /** + * 生成随机推荐码 + */ + public static String getCode(){ + char[] basicArray = BASIC.toCharArray(); + Random random = new Random(); + char[] result = new char[6]; + for (int i = 0; i < result.length; i++) { + int index = random.nextInt(100) % (basicArray.length); + result[i] = basicArray[index]; + } + return new String(result); + } + +} diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/RoleServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/RoleServiceImpl.java index abea2b74f..907003b18 100644 --- a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/RoleServiceImpl.java +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/RoleServiceImpl.java @@ -193,6 +193,11 @@ public class RoleServiceImpl extends ServiceImpl implements IR } } + @Override + public Role getRoleByCode(String code) { + return this.lambdaQuery().eq(Role::getCode,code).eq(Role::getState,1).one(); + } + /** * 校验参数,检查是否存在相同编码的角色代码 */