Browse Source

perf: 优化整体推送代码,提高可维护性

master
wangxiang 2 years ago
parent
commit
d40acf3c7e
  1. 7
      kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/KiccUser.java
  2. 39
      kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/util/SecurityUtils.java
  3. 38
      kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/enums/PushAuditStatusEnum.java
  4. 31
      kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/enums/PushConcernTypeEnum.java
  5. 36
      kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/enums/UserTypeEnum.java
  6. 10
      kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushApplicationController.java
  7. 15
      kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushConcernFanController.java
  8. 8
      kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushEnterpriseController.java
  9. 43
      kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/PushApplicationServiceImpl.java
  10. 35
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java

7
kicc-common/kicc-common-data/src/main/java/com/cloud/kicc/common/data/entity/KiccUser.java

@ -41,12 +41,7 @@ public class KiccUser extends User { @@ -41,12 +41,7 @@ public class KiccUser extends User {
/**
* 用户类型
* { label: '系统管理员', value: '0' },
* { label: '普通用户', value: '1' },
* { label: '企业用户', value: '2' },
* { label: '收样员', value: '3' },
* { label: '客服', value: '4' },
* { label: '企业内部用户', value: '5' },
* {@link com.cloud.kicc.system.api.enums.UserTypeEnum }
*/
@Getter
private String userType;

39
kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/util/SecurityUtils.java

@ -1,11 +1,19 @@ @@ -1,11 +1,19 @@
package com.cloud.kicc.common.security.util;
import cn.hutool.core.util.StrUtil;
import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.common.core.constant.CommonConstants;
import com.cloud.kicc.common.core.constant.SecurityConstants;
import com.cloud.kicc.common.core.exception.CheckedException;
import com.cloud.kicc.common.core.util.SpringContextHolderUtil;
import com.cloud.kicc.common.data.entity.KiccUser;
import com.cloud.kicc.system.api.entity.User;
import com.cloud.kicc.system.api.feign.RemoteUserService;
import lombok.experimental.UtilityClass;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@ -70,6 +78,37 @@ public class SecurityUtils { @@ -70,6 +78,37 @@ public class SecurityUtils {
return roleIds;
}
/**
* 对外开放接口临时登录会话
* @param userId 用户id
* @return User 用户对象
*/
public User openInterfaceTemporaryLoginSession(String userId){
RemoteUserService remoteUserService = SpringContextHolderUtil.getBean(RemoteUserService.class);
R<User> result = remoteUserService.selectByUserId(userId, SecurityConstants.FROM_IN);
if (result == null || result.getData() == null) {
throw new CheckedException("用户不存在");
}
User user = result.getData();
KiccUser kiccUser = new KiccUser(
user.getId(),
user.getDeptId(),
user.getUserName(),
SecurityConstants.BCRYPT + user.getPassword(),
user.getPhone(),
user.getUserType(),
user.getTenantId(),
true,
true,
true,
StrUtil.equals(user.getStatus(), CommonConstants.STATUS_NORMAL),
AuthorityUtils.createAuthorityList(user.getPermissions())
);
Authentication authentication = new UsernamePasswordAuthenticationToken(kiccUser, "N/A", kiccUser.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
return user;
}
public static void main(String[] args) {
System.out.println(new BCryptPasswordEncoder().encode("123456"));
}

38
kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/enums/PushAuditStatusEnum.java

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
package com.cloud.kicc.commonbiz.api.enums;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
*<p>
* 推送审核状态
*</p>
*
* @Author: wangxiang4
* @since: 2023/4/21
*/
@Getter
@RequiredArgsConstructor
public enum PushAuditStatusEnum {
REJECTED(-1,"驳回"),
NOT_APPLIED(0,"未提交"),
UNDER_REVIEW(1,"审核中"),
APPROVED(2,"通过");
/**
*
*/
private final Integer value;
/**
* 描述
*/
private final String description;
}

31
kicc-platform/kicc-platform-api/kicc-common-api/src/main/java/com/cloud/kicc/commonbiz/api/enums/PushConcernTypeEnum.java

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
package com.cloud.kicc.commonbiz.api.enums;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
*<p>
* 推送关注类型
*</p>
*
* @Author: wangxiang4
* @since: 2023/4/21
*/
@Getter
@RequiredArgsConstructor
public enum PushConcernTypeEnum {
DEFAULT("0","默认类型"),
INTERNAL_COMPANY("1","内部企业");
/**
*
*/
private final String value;
/**
* 描述
*/
private final String description;
}

36
kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/enums/UserTypeEnum.java

@ -0,0 +1,36 @@ @@ -0,0 +1,36 @@
package com.cloud.kicc.system.api.enums;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
*<p>
* 用户类型枚举
*</p>
*
* @Author: wangxiang4
* @since: 2023/4/21
*/
@Getter
@RequiredArgsConstructor
public enum UserTypeEnum {
ADMIN("0", "系统管理员"),
NORMAL_USER("1", "普通用户"),
ENTERPRISE_USER("2", "企业用户"),
SAMPLE_COLLECTOR("3", "收样员"),
CUSTOMER_SERVICE("4", "客服"),
INTERNAL_USER("5", "企业内部用户");
/**
*
*/
private final String value;
/**
* 描述
*/
private final String description;
}

10
kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushApplicationController.java

@ -15,8 +15,10 @@ import com.cloud.kicc.common.security.util.SecurityUtils; @@ -15,8 +15,10 @@ import com.cloud.kicc.common.security.util.SecurityUtils;
import com.cloud.kicc.commonbiz.api.entity.PushApplication;
import com.cloud.kicc.commonbiz.api.entity.PushChatMessage;
import com.cloud.kicc.commonbiz.api.entity.PushEnterprise;
import com.cloud.kicc.commonbiz.api.enums.PushAuditStatusEnum;
import com.cloud.kicc.commonbiz.service.IPushApplicationService;
import com.cloud.kicc.commonbiz.service.IPushEnterpriseService;
import com.cloud.kicc.system.api.enums.UserTypeEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
@ -67,9 +69,11 @@ public class PushApplicationController { @@ -67,9 +69,11 @@ public class PushApplicationController {
@PostMapping("/save")
public R save(@Valid @RequestBody PushApplication pushApplication) {
// 企业用户需要验证是否进行企业认证
if (StrUtil.equals(SecurityUtils.getUser().getUserType(), "2") &&
iPushEnterpriseService.count(Wrappers.<PushEnterprise>lambdaQuery().eq(PushEnterprise::getUserId, SecurityUtils.getUser().getId())) == 0){
throw new CheckedException("当前企业用户未进行企业认证,请认证后在试!");
if (StrUtil.equals(SecurityUtils.getUser().getUserType(), UserTypeEnum.ENTERPRISE_USER.getValue()) &&
iPushEnterpriseService.count(Wrappers.<PushEnterprise>lambdaQuery()
.eq(PushEnterprise::getStatus, PushAuditStatusEnum.APPROVED.getValue())
.eq(PushEnterprise::getUserId, SecurityUtils.getUser().getId())) == 0){
throw new CheckedException("该企业用户未进行企业认证,禁止操作!");
}
pushApplication.setMessageSecret(UUID.randomUUID().toString().replace("-",""));
iPushApplicationService.save(pushApplication);

15
kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushConcernFanController.java

@ -7,8 +7,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -7,8 +7,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.common.core.constant.AppConstants;
import com.cloud.kicc.common.security.annotation.Inner;
import com.cloud.kicc.common.security.util.SecurityUtils;
import com.cloud.kicc.commonbiz.api.entity.*;
import com.cloud.kicc.commonbiz.api.enums.PushAuditStatusEnum;
import com.cloud.kicc.commonbiz.api.enums.PushConcernTypeEnum;
import com.cloud.kicc.commonbiz.service.*;
import com.cloud.kicc.system.api.entity.User;
import io.swagger.annotations.Api;
@ -70,12 +71,12 @@ public class PushConcernFanController { @@ -70,12 +71,12 @@ public class PushConcernFanController {
public R save(@Valid @RequestBody PushConcernFan pushConcernFan) {
// 关注可以重复申请,后者信息覆盖前者信息需先删除前者的关注数据
iPushConcernFanService.remove(Wrappers.<PushConcernFan>lambdaQuery()
.eq(PushConcernFan::getStatus, 0)
.in(PushConcernFan::getStatus, PushAuditStatusEnum.NOT_APPLIED.getValue(), PushAuditStatusEnum.UNDER_REVIEW.getValue())
.eq(PushConcernFan::getFanUserId, pushConcernFan.getFanUserId())
.eq(PushConcernFan::getConcernUserId, pushConcernFan.getConcernUserId()));
iPushConcernFanService.save(pushConcernFan);
// 同步推送类型
if (pushConcernFan.getStatus() == 1) {
if (pushConcernFan.getStatus() == PushAuditStatusEnum.APPROVED.getValue()) {
List<PushType> pushTypes = iPushTypeService.list(Wrappers.<PushType>lambdaQuery().eq(PushType::getCreateById, pushConcernFan.getConcernUserId()));
List<PushConcernFanType> pushConcernFanTypes = pushTypes.stream().map(item -> new PushConcernFanType()
.setName(item.getName())
@ -113,8 +114,8 @@ public class PushConcernFanController { @@ -113,8 +114,8 @@ public class PushConcernFanController {
PushConcernFan pushConcernFan = new PushConcernFan();
pushConcernFan.setFanUserId(item.getId());
pushConcernFan.setConcernUserId(innerEnterpriseUserId);
pushConcernFan.setType("1");
pushConcernFan.setStatus(1);
pushConcernFan.setType(PushConcernTypeEnum.INTERNAL_COMPANY.getValue());
pushConcernFan.setStatus(PushAuditStatusEnum.APPROVED.getValue());
iPushConcernFanService.save(pushConcernFan);
});
return R.ok();
@ -127,7 +128,7 @@ public class PushConcernFanController { @@ -127,7 +128,7 @@ public class PushConcernFanController {
.set(PushConcernFan::getStatus, status)
.eq(PushConcernFan::getId, id));
// 同步推送类型
if (status == 1) {
if (status == PushAuditStatusEnum.APPROVED.getValue()) {
PushConcernFan pushConcernFan = iPushConcernFanService.getById(id);
List<PushType> pushTypes = iPushTypeService.list(Wrappers.<PushType>lambdaQuery()
.eq(PushType::getCreateById, pushConcernFan.getConcernUserId()));
@ -154,7 +155,7 @@ public class PushConcernFanController { @@ -154,7 +155,7 @@ public class PushConcernFanController {
@PutMapping("/rejectAuth/{ids:[\\w,]+}")
public R<Boolean> rejectAuth(@PathVariable String[] ids) {
iPushConcernFanService.update(Wrappers.<PushConcernFan>lambdaUpdate()
.set(PushConcernFan::getStatus, -1)
.set(PushConcernFan::getStatus, PushAuditStatusEnum.REJECTED.getValue())
.in(PushConcernFan::getId, ids));
return R.ok(true);
}

8
kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/controller/PushEnterpriseController.java

@ -12,7 +12,9 @@ import com.cloud.kicc.common.core.constant.AppConstants; @@ -12,7 +12,9 @@ import com.cloud.kicc.common.core.constant.AppConstants;
import com.cloud.kicc.common.core.exception.CheckedException;
import com.cloud.kicc.common.security.util.SecurityUtils;
import com.cloud.kicc.commonbiz.api.entity.PushEnterprise;
import com.cloud.kicc.commonbiz.api.enums.PushAuditStatusEnum;
import com.cloud.kicc.commonbiz.service.IPushEnterpriseService;
import com.cloud.kicc.system.api.enums.UserTypeEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
@ -68,12 +70,12 @@ public class PushEnterpriseController { @@ -68,12 +70,12 @@ public class PushEnterpriseController {
@PostMapping("/save")
public R save(@Valid @RequestBody PushEnterprise pushEnterprise) {
// 限制只能有企业用户进行认证
if (!StrUtil.equals(SecurityUtils.getUser().getUserType(), "2")) {
if (!StrUtil.equals(SecurityUtils.getUser().getUserType(), UserTypeEnum.ENTERPRISE_USER.getValue())) {
throw new CheckedException("当前用户不是企业用户请用企业用户登录后重试!");
}
if(iPushEnterpriseService.count(Wrappers.<PushEnterprise>lambdaQuery()
.eq(PushEnterprise::getUserId, SecurityUtils.getUser().getId())) > 0) {
throw new CheckedException("当前企业用户下已经存在认证数据!");
throw new CheckedException("企业用户下已经存在认证数据!");
}
if (StrUtil.isBlank(pushEnterprise.getUserId())) pushEnterprise.setUserId(SecurityUtils.getUser().getId());
iPushEnterpriseService.save(pushEnterprise);
@ -98,7 +100,7 @@ public class PushEnterpriseController { @@ -98,7 +100,7 @@ public class PushEnterpriseController {
@PutMapping("/rejectAuth/{ids:[\\w,]+}")
public R<Boolean> rejectAuth(@PathVariable String[] ids) {
iPushEnterpriseService.update(Wrappers.<PushEnterprise>lambdaUpdate()
.set(PushEnterprise::getStatus, -1)
.set(PushEnterprise::getStatus, PushAuditStatusEnum.REJECTED.getValue())
.in(PushEnterprise::getId, ids));
return R.ok(true);
}

43
kicc-platform/kicc-platform-biz/kicc-common-biz/src/main/java/com/cloud/kicc/commonbiz/service/impl/PushApplicationServiceImpl.java

@ -1,6 +1,7 @@ @@ -1,6 +1,7 @@
package com.cloud.kicc.commonbiz.service.impl;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil;
@ -14,10 +15,12 @@ import com.cloud.kicc.common.core.exception.CheckedException; @@ -14,10 +15,12 @@ import com.cloud.kicc.common.core.exception.CheckedException;
import com.cloud.kicc.common.data.entity.KiccUser;
import com.cloud.kicc.common.security.util.SecurityUtils;
import com.cloud.kicc.commonbiz.api.entity.*;
import com.cloud.kicc.commonbiz.api.enums.PushAuditStatusEnum;
import com.cloud.kicc.commonbiz.mapper.PushApplicationMapper;
import com.cloud.kicc.commonbiz.service.*;
import com.cloud.kicc.commonbiz.util.PushClientUtil;
import com.cloud.kicc.system.api.entity.User;
import com.cloud.kicc.system.api.enums.UserTypeEnum;
import com.cloud.kicc.system.api.feign.RemoteUserService;
import lombok.RequiredArgsConstructor;
import okhttp3.OkHttpClient;
@ -55,7 +58,6 @@ public class PushApplicationServiceImpl extends ServiceImpl<PushApplicationMappe @@ -55,7 +58,6 @@ public class PushApplicationServiceImpl extends ServiceImpl<PushApplicationMappe
private final IPushBlacklistService iPushBlacklistService;
private final IPushChatMessageService iPushChatMessageService;
private final IPushConcernFanTypeService iPushConcernFanTypeService;
private final RemoteUserService remoteUserService;
private final IPushEnterpriseService iPushEnterpriseService;
@Override
@ -65,39 +67,16 @@ public class PushApplicationServiceImpl extends ServiceImpl<PushApplicationMappe @@ -65,39 +67,16 @@ public class PushApplicationServiceImpl extends ServiceImpl<PushApplicationMappe
throw new CheckedException("当前推送方用户ID与推送应用密钥必填!");
}
R<User> result = remoteUserService.selectByUserId(pushChatMessage.getUserId(), SecurityConstants.FROM_IN);
if (result == null || result.getData() == null) {
throw new CheckedException("用户不存在");
SecurityUtils.openInterfaceTemporaryLoginSession(pushChatMessage.getUserId());
if (!ArrayUtil.contains(new String[]{ UserTypeEnum.ENTERPRISE_USER.getValue(), UserTypeEnum.INTERNAL_USER.getValue() }, SecurityUtils.getUser().getUserType())) {
throw new CheckedException("该用户不是企业用户,禁止操作!");
}
// todo: // 待处理需要统一封装公开接口用户信息登录
User user = result.getData();
KiccUser kiccUser = new KiccUser(
user.getId(),
user.getDeptId(),
user.getUserName(),
SecurityConstants.BCRYPT + user.getPassword(),
user.getPhone(),
user.getUserType(),
user.getTenantId(),
true,
true,
true,
StrUtil.equals(user.getStatus(), CommonConstants.STATUS_NORMAL),
AuthorityUtils.createAuthorityList(user.getPermissions())
);
Authentication authentication = new UsernamePasswordAuthenticationToken(kiccUser, "N/A", kiccUser.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
// todo: // 待处理需要使用枚举规范用户类型参数,不好维护
if (!StrUtil.equals(SecurityUtils.getUser().getUserType(), "2") &&
!StrUtil.equals(SecurityUtils.getUser().getUserType(), "5")) {
throw new CheckedException("当前用户不是企业用户,禁止操作!");
}
if (StrUtil.equals(SecurityUtils.getUser().getUserType(), "2") &&
iPushEnterpriseService.count(Wrappers.<PushEnterprise>lambdaQuery().eq(PushEnterprise::getUserId, SecurityUtils.getUser().getId())) == 0){
throw new CheckedException("当前企业用户未进行企业认证,请认证后在试!");
if (StrUtil.equals(SecurityUtils.getUser().getUserType(), UserTypeEnum.ENTERPRISE_USER.getValue()) &&
iPushEnterpriseService.count(Wrappers.<PushEnterprise>lambdaQuery()
.eq(PushEnterprise::getStatus, PushAuditStatusEnum.APPROVED.getValue())
.eq(PushEnterprise::getUserId, SecurityUtils.getUser().getId())) == 0){
throw new CheckedException("该企业用户未进行企业认证,禁止操作!");
}
PushApplication pushApplication = baseMapper.selectOne(Wrappers.<PushApplication>lambdaQuery()

35
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/UserController.java

@ -1,7 +1,9 @@ @@ -1,7 +1,9 @@
package com.cloud.kicc.system.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.EnumUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -21,6 +23,7 @@ import com.cloud.kicc.system.api.entity.Menu; @@ -21,6 +23,7 @@ import com.cloud.kicc.system.api.entity.Menu;
import com.cloud.kicc.system.api.entity.Role;
import com.cloud.kicc.system.api.entity.User;
import com.cloud.kicc.system.api.entity.UserRole;
import com.cloud.kicc.system.api.enums.UserTypeEnum;
import com.cloud.kicc.system.api.vo.ResultVo;
import com.cloud.kicc.system.service.MenuService;
import com.cloud.kicc.system.service.RoleService;
@ -92,6 +95,18 @@ public class UserController { @@ -92,6 +95,18 @@ public class UserController {
return R.ok(userService.getCurrentUserInfo());
}
@GetMapping("/getUserTypeList")
public R getUserTypeList() {
List<Map<String, String>> result = CollectionUtil.newArrayList();
for (UserTypeEnum userTypeEnum : UserTypeEnum.values()) {
Map select = MapUtil.<String, String>newHashMap();
select.put("value", userTypeEnum.getValue());
select.put("label", userTypeEnum.getDescription());
result.add(select);
}
return R.ok(result);
}
@GetMapping("/{id:\\w+}")
public R getById(@PathVariable("id") String id) {
User user = userService.getById(id);
@ -137,24 +152,8 @@ public class UserController { @@ -137,24 +152,8 @@ public class UserController {
@SysLog("新增外部系统用户")
@PostMapping("/saveExternalUser")
public R saveExternalUser(@RequestBody User externalUser) {
User user = userService.getById("1510539584287346688");
userService.getUserAuthority(user);
KiccUser kiccUser = new KiccUser(
user.getId(),
user.getDeptId(),
user.getUserName(),
SecurityConstants.BCRYPT + user.getPassword(),
user.getPhone(),
user.getUserType(),
user.getTenantId(),
true,
true,
true,
StrUtil.equals(user.getStatus(), CommonConstants.STATUS_NORMAL),
AuthorityUtils.createAuthorityList(user.getPermissions())
);
Authentication authentication = new UsernamePasswordAuthenticationToken(kiccUser, "N/A", kiccUser.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
// todo: 使用管理员临时ID,需调整
SecurityUtils.openInterfaceTemporaryLoginSession("1510539584287346688");
externalUser.setPassword(ENCODER.encode(externalUser.getPassword()));
userService.saveUser(externalUser);
return R.ok(externalUser);

Loading…
Cancel
Save