TRX před 1 rokem
rodič
revize
9cacde6de2
26 změnil soubory, kde provedl 226 přidání a 96 odebrání
  1. 13 3
      FullCardClient/src/main/java/com/zhongshu/card/client/model/base/SuperModel.java
  2. 13 3
      FullCardClient/src/main/java/com/zhongshu/card/client/model/base/SuperParam.java
  3. 10 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/base/SuperSearch.java
  4. 47 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/login/LoginCommonModel.java
  5. 0 3
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/OrganizationSearchParam.java
  6. 1 1
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/SchoolAddParam.java
  7. 2 2
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/UserCountModel.java
  8. 0 3
      FullCardClient/src/main/java/com/zhongshu/card/client/model/payment/ExpenseFlowModel.java
  9. 0 3
      FullCardClient/src/main/java/com/zhongshu/card/client/model/payment/ExpenseFlowSearch.java
  10. 0 3
      FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoModel.java
  11. 0 3
      FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoPoolSearch.java
  12. 0 3
      FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoSearch.java
  13. 29 4
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/user/IndexController.java
  14. 13 3
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/base/SuperMain.java
  15. 8 7
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/org/UserAccount.java
  16. 0 3
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/payment/ExpenseFlow.java
  17. 0 3
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/payment/ProjectPaySetting.java
  18. 0 3
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/payment/WxPayConfig.java
  19. 0 3
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/school/CardInfo.java
  20. 0 3
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/school/CardInfoPool.java
  21. 42 4
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/IndexService.java
  22. 2 2
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/OrganizationServiceImpl.java
  23. 1 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/RoleServiceImpl.java
  24. 1 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/UserAccountServiceImpl.java
  25. 36 33
      FullCardServer/src/main/java/com/zhongshu/card/server/core/test/Test.java
  26. 8 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/util/CommonUtil.java

+ 13 - 3
FullCardClient/src/main/java/com/zhongshu/card/client/model/base/SuperModel.java

@@ -1,5 +1,6 @@
 package com.zhongshu.card.client.model.base;
 
+import com.github.microservice.auth.security.type.AuthType;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -21,6 +22,18 @@ public class SuperModel implements Serializable {
     @Schema(description = "数据ID")
     private String id;
 
+    @Schema(description = "所属机构ID")
+    private String oid;
+
+    @Schema(description = "所属项目oid")
+    private String projectOid;
+
+    @Schema(description = "数据主题的oid")
+    private String aboutOid;
+
+    @Schema(description = "数据主题管理的oid机构类型")
+    private AuthType aboutAuthType;
+
     @Schema(description = "创建时间")
     private Long createTime;
 
@@ -33,9 +46,6 @@ public class SuperModel implements Serializable {
     @Schema(description = "备注")
     private String remark = "";
 
-    @Schema(description = "所属机构ID")
-    private String oid;
-
     @Schema(description = "添加用户名称")
     private String createUserName;
 

+ 13 - 3
FullCardClient/src/main/java/com/zhongshu/card/client/model/base/SuperParam.java

@@ -1,5 +1,6 @@
 package com.zhongshu.card.client.model.base;
 
+import com.github.microservice.auth.security.type.AuthType;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -17,12 +18,21 @@ public class SuperParam implements Serializable {
     @Schema(description = "数据ID", example = "")
     private String id = null;
 
-    @Schema(description = "排序")
-    private Long sort = 1l;
-
     @Schema(description = "所属机构ID", hidden = true)
     private String oid;
 
+    @Schema(description = "所属项目oid")
+    private String projectOid;
+
+    @Schema(description = "数据主题的oid")
+    private String aboutOid;
+
+    @Schema(description = "数据主题管理的oid机构类型")
+    private AuthType aboutAuthType;
+
+    @Schema(description = "排序")
+    private Long sort = 1l;
+
     @Schema(description = "备注")
     private String remark;
 

+ 10 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/base/SuperSearch.java

@@ -1,5 +1,6 @@
 package com.zhongshu.card.client.model.base;
 
+import com.github.microservice.auth.security.type.AuthType;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import org.springframework.data.domain.Sort;
@@ -20,6 +21,15 @@ public class SuperSearch implements Serializable {
     @Schema(description = "所属机构ID")
     private String oid;
 
+    @Schema(description = "所属项目oid")
+    private String projectOid;
+
+    @Schema(description = "数据主题的oid")
+    private String aboutOid;
+
+    @Schema(description = "数据主题管理的oid机构类型")
+    private AuthType aboutAuthType;
+
     @Schema(description = "搜索时间范围")
     private List<Long> times;
 

+ 47 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/login/LoginCommonModel.java

@@ -0,0 +1,47 @@
+package com.zhongshu.card.client.model.login;
+
+import com.zhongshu.card.client.model.org.OrganizationSimpleModel;
+import com.zhongshu.card.client.model.org.OrganizationUserModel;
+import com.zhongshu.card.client.model.org.UserCountModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Set;
+
+/**
+ * 通用登录返回的数据模型
+ *
+ * @author TRX
+ * @date 2024/9/24
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class LoginCommonModel {
+
+    @Schema(description = "token")
+    private String access_token;
+
+    private String token_type;
+
+    @Schema(description = "刷新token的token")
+    private String refresh_token;
+
+    private Integer expires_in;
+
+    private String scope;
+
+    @Schema(description = "用户基本信息")
+    private UserCountModel userInfo;
+
+    @Schema(description = "平台的oid")
+    private String platformOid;
+
+    @Schema(description = "平台机构信息")
+    private OrganizationSimpleModel platformInfo;
+
+    @Schema(description = "用户权限列表")
+    private Set<String> auths;
+}

+ 0 - 3
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/OrganizationSearchParam.java

@@ -50,9 +50,6 @@ public class OrganizationSearchParam extends SuperSearch {
     @Schema(description = "状态")
     private OrganizationState state;
 
-    @Schema(description = "项目Oid")
-    private String projectOid;
-
     @Schema(description = "oid集合", hidden = true)
     private List<String> oids;
 

+ 1 - 1
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/SchoolAddParam.java

@@ -10,6 +10,6 @@ import lombok.Data;
 @Data
 public class SchoolAddParam extends OrganizationAddParam{
     @Schema(description = "项目ID 取oid")
-    private String projectOid;
+    private String projectOid1;
 
 }

+ 2 - 2
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/UserCountModel.java

@@ -79,7 +79,7 @@ public class UserCountModel extends SuperModel {
     private String address;
 
     @Schema(description = "用户状态")
-    UserState state = UserState.Normal;
+    private UserState state = UserState.Normal;
 
     private String stateStr;
 
@@ -91,7 +91,7 @@ public class UserCountModel extends SuperModel {
     }
 
     @Schema(description = "可登录端类型")
-    UserLoginType loginType = UserLoginType.All;
+    private UserLoginType loginType = UserLoginType.All;
 
     @Schema(description = "是否已修改了密码 (登录时提示)")
     private Boolean isUpdatedPsw = Boolean.FALSE;

+ 0 - 3
FullCardClient/src/main/java/com/zhongshu/card/client/model/payment/ExpenseFlowModel.java

@@ -43,9 +43,6 @@ public class ExpenseFlowModel extends SuperModel {
     @Schema(description = "消费机设备ID")
     private String deviceId;
 
-    @Schema(description = "所属项目Oid")
-    private String projectOid;
-
     @Schema(description = "所属项目的code")
     private String projectCode;
 

+ 0 - 3
FullCardClient/src/main/java/com/zhongshu/card/client/model/payment/ExpenseFlowSearch.java

@@ -30,9 +30,6 @@ public class ExpenseFlowSearch extends SuperSearch {
     @Schema(description = "订单状态")
     private List<OrderState> orderTypes;
 
-    @Schema(description = "所属项目Oid")
-    private String projectOid;
-
     @Schema(description = "订单所属的商户")
     private String shopOid;
 

+ 0 - 3
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoModel.java

@@ -44,9 +44,6 @@ public class CardInfoModel extends SuperModel {
     @Schema(description = "学校oid")
     private String schoolOid;
 
-    @Schema(description = "项目oid")
-    private String projectOid;
-
     @Schema(description = "机构用户信息")
     private OrganizationUserModel organizationUser;
 

+ 0 - 3
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoPoolSearch.java

@@ -33,9 +33,6 @@ public class CardInfoPoolSearch extends SuperSearch {
     @Schema(description = "关键字")
     private String keyWord;
 
-    @Schema(description = "项目Oid")
-    private String projectOid;
-
     @Schema(description = "学校oid")
     private String schoolOid;
 }

+ 0 - 3
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/CardInfoSearch.java

@@ -20,9 +20,6 @@ public class CardInfoSearch extends SuperSearch {
     @Schema(description = "学校oid")
     private String schoolOid;
 
-    @Schema(description = "项目oid")
-    private String projectOid;
-
     @Schema(description = "卡片名称")
     private String name;
 

+ 29 - 4
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/org/IndexController.java → FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/user/IndexController.java

@@ -1,14 +1,17 @@
-package com.zhongshu.card.server.core.controller.org;
+package com.zhongshu.card.server.core.controller.user;
 
 import com.github.microservice.auth.client.model.LoginTokenModel;
 import com.github.microservice.auth.client.model.UserTokenModel;
 import com.github.microservice.auth.security.helper.AuthHelper;
-import com.zhongshu.card.client.model.base.ReTokenParam;
-import com.zhongshu.card.client.model.org.*;
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.net.ResultState;
+import com.zhongshu.card.client.model.base.ReTokenParam;
+import com.zhongshu.card.client.model.org.GetPhoneModel;
+import com.zhongshu.card.client.model.org.LoginParam;
+import com.zhongshu.card.client.model.org.LoginPlatformTokenModel;
 import com.zhongshu.card.client.service.org.OrganizationService;
 import com.zhongshu.card.client.service.org.UserAccountService;
+import com.zhongshu.card.client.type.LoginFromType;
 import com.zhongshu.card.server.core.service.org.IndexService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -18,9 +21,14 @@ import jakarta.servlet.http.HttpServletResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.util.Assert;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
+ * 用户登录等相关
+ *
  * @author TRX
  * @date 2024/6/4
  */
@@ -41,6 +49,23 @@ public class IndexController {
     @Autowired
     UserAccountService userAccountService;
 
+    @Operation(summary = "web通用登录", description = "web通用登录")
+    @RequestMapping(value = "commonLogin", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
+    public ResultContent commonLogin(@RequestBody LoginParam param, HttpServletRequest request, HttpServletResponse response) {
+        param.setLoginFromType(LoginFromType.Platform);
+        ResultContent result = indexService.commonLogin(param);
+        if (result.isSuccess()) {
+            LoginPlatformTokenModel tokenModel = (LoginPlatformTokenModel) result.getContent();
+            response.setHeader("accessToken", tokenModel.getAccess_token());
+            Cookie cookie = new Cookie("accessToken", tokenModel.getAccess_token());
+            cookie.setMaxAge(60 * 60 * 24 * 3);
+            cookie.setPath("/");
+            response.addCookie(cookie);
+        }
+        return result;
+    }
+
+
     /**
      * 登录
      *

+ 13 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/base/SuperMain.java

@@ -1,5 +1,6 @@
 package com.zhongshu.card.server.core.domain.base;
 
+import com.github.microservice.auth.security.type.AuthType;
 import com.github.microservice.components.data.mongo.mongo.domain.SuperEntity;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -11,6 +12,18 @@ import lombok.Data;
 @Data
 public class SuperMain extends SuperEntity {
 
+    @Schema(description = "所属机构ID")
+    private String oid;
+
+    @Schema(description = "所属项目oid")
+    private String projectOid;
+
+    @Schema(description = "数据主题的oid")
+    private String aboutOid;
+
+    @Schema(description = "数据主题管理的oid机构类型")
+    private AuthType aboutAuthType;
+
     @Schema(description = "排序")
     private Long sort = 1l;
 
@@ -20,9 +33,6 @@ public class SuperMain extends SuperEntity {
     @Schema(description = "是否删除")
     private Boolean isDelete = Boolean.FALSE;
 
-    @Schema(description = "所属机构ID")
-    private String oid;
-
     @Schema(description = "创建用户ID")
     private String createUserId;
 

+ 8 - 7
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/org/UserAccount.java

@@ -21,6 +21,7 @@ import org.springframework.data.mongodb.core.mapping.Document;
 @Builder
 public class UserAccount extends SuperMain {
 
+    // ----------------------------用户基本信息
     @Schema(description = "用户ID(由鉴权中心颁发)")
     @Indexed
     private String userId;
@@ -59,17 +60,17 @@ public class UserAccount extends SuperMain {
     private String cardNumber;
 
     @Schema(description = "用户状态")
-    UserState state = UserState.Normal;
-
-    @Schema(description = "可登录端类型")
-    UserLoginType loginType = UserLoginType.All;
-
-    @Schema(description = "用户类型")
-    UserType userType;
+    private UserState state = UserState.Normal;
 
     @Schema(description = "是否已修改了密码 (登录时提示)")
     private Boolean isUpdatedPsw = Boolean.FALSE;
 
     @Schema(description = "是否登录过")
     private Boolean isLogined = Boolean.FALSE;
+
+    @Schema(description = "可登录端类型")
+    private UserLoginType loginType = UserLoginType.All;
+
+    @Schema(description = "用户类型")
+    private UserType userType;
 }

+ 0 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/payment/ExpenseFlow.java

@@ -67,9 +67,6 @@ public class ExpenseFlow extends SuperMain {
     @Schema(description = "消费机设备ID")
     private String deviceId;
 
-    @Schema(description = "所属项目Oid")
-    private String projectOid;
-
     @Schema(description = "所属项目的code")
     private String projectCode;
 

+ 0 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/payment/ProjectPaySetting.java

@@ -22,9 +22,6 @@ import org.springframework.data.mongodb.core.mapping.Document;
 @NoArgsConstructor
 public class ProjectPaySetting extends SuperMain {
 
-    @Schema(description = "项目id")
-    private String projectOid;
-
     @Schema(description = "项目名称")
     private String projectName;
 

+ 0 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/payment/WxPayConfig.java

@@ -21,9 +21,6 @@ import org.springframework.data.mongodb.core.mapping.Document;
 @NoArgsConstructor
 public class WxPayConfig extends SuperMain {
 
-    @Schema(description = "项目id")
-    private String projectOid;
-
     @Schema(description = "appid")
     private String appId;
 

+ 0 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/school/CardInfo.java

@@ -27,9 +27,6 @@ public class CardInfo extends SuperMain {
     @Schema(description = "学校oid")
     private String schoolOid;
 
-    @Schema(description = "项目oid")
-    private String projectOid;
-
     @Schema(description = "卡片名称")
     private String name;
 

+ 0 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/school/CardInfoPool.java

@@ -43,9 +43,6 @@ public class CardInfoPool extends SuperMain {
     @Schema(description = "绑定用户userId")
     private String useUserId;
 
-    @Schema(description = "项目Oid")
-    private String projectOid;
-
     @Schema(description = "学校oid")
     private String schoolOid;
 }

+ 42 - 4
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/IndexService.java

@@ -10,10 +10,8 @@ import com.github.microservice.auth.security.model.AuthDetails;
 import com.github.microservice.auth.security.type.AuthType;
 import com.github.microservice.components.data.mongo.mongo.helper.DBHelper;
 import com.github.microservice.core.util.net.IPUtil;
-import com.zhongshu.card.client.model.org.GetPhoneModel;
-import com.zhongshu.card.client.model.org.LoginParam;
-import com.zhongshu.card.client.model.org.LoginPlatformTokenModel;
-import com.zhongshu.card.client.model.org.OrganizationUserModel;
+import com.zhongshu.card.client.model.login.LoginCommonModel;
+import com.zhongshu.card.client.model.org.*;
 import com.zhongshu.card.client.model.wechat.PhoneModel;
 import com.zhongshu.card.client.model.wechat.WechatPhoneNumber;
 import com.github.microservice.net.ResultContent;
@@ -92,6 +90,46 @@ public class IndexService {
     @Autowired
     OrganizationServiceImpl organizationService;
 
+    /**
+     * 通用用户登录(返回所有权限数据)
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent commonLogin(LoginParam param) {
+        String phone = param.getLoginValue();
+        UserAuthLoginModel userAuthLoginModel = new UserAuthLoginModel();
+        BeanUtils.copyProperties(param, userAuthLoginModel);
+        // 登录
+        ResultContent<LoginTokenModel> resultContent = commonLogin(userAuthLoginModel);
+        if (resultContent.isFailed()) {
+            return resultContent;
+        }
+        Organization organization = organizationDao.findTopByAuthType(AuthType.Platform);
+        if (ObjectUtils.isEmpty(organization)) {
+            return ResultContent.buildFail(String.format("平台未初始化,请联系管理员"));
+        }
+
+        LoginCommonModel commonModel = new LoginCommonModel();
+        LoginTokenModel loginTokenModel = resultContent.getContent();
+        com.zhongshu.card.server.core.util.BeanUtils.copyProperties(loginTokenModel, commonModel);
+
+        UserAccount userAccount = userCountDao.findTopByLoginName(phone);
+        UserCountModel userCountModel = userAccountService.toModel(userAccount);
+        commonModel.setUserInfo(userCountModel);
+
+        // 平台信息
+        commonModel.setPlatformOid(organization.getOid());
+        commonModel.setPlatformInfo(organizationService.toSimpleModel(organization));
+
+        // 用户所有的权限
+        Set<String> auth = new HashSet<>();
+        commonModel.setAuths(auth);
+
+        return ResultContent.buildSuccess(commonModel);
+    }
+
+
     /**
      * 登录 只验证 用户名 和密码
      *

+ 2 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/OrganizationServiceImpl.java

@@ -786,7 +786,7 @@ public class OrganizationServiceImpl extends SuperService implements Organizatio
     }
 
     /**
-     * 初始 结构用户这些信息
+     * 初始 机构用户这些信息 (以机构联系人电话为 登录账号,创建管理员用户)
      *
      * @param organization
      * @return
@@ -844,7 +844,7 @@ public class OrganizationServiceImpl extends SuperService implements Organizatio
     }
 
     /**
-     * 初始角色等信息
+     * 初始机构角色等信息 (管理员角色 并绑定到用户) 初始顶级部门信息
      *
      * @param organization
      * @param userId

+ 1 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/RoleServiceImpl.java

@@ -419,6 +419,7 @@ public class RoleServiceImpl extends SuperService {
                 }
             });
         }
+        // 判断用户是否是管理员
         if (StringUtils.isNotEmpty(oid)) {
             UserAccount userAccount = userCountDao.findTopByUserId(userId);
             Organization organization = organizationDao.findTopByOid(oid);

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/UserAccountServiceImpl.java

@@ -532,7 +532,7 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
             userAccount.setPhone(entity.getContactPhone());
             userAccount.setLoginName(entity.getContactPhone());
             if (!StringUtils.isNotEmpty(entity.getContactPhone())) {
-                userAccount.setName("用户" + entity.getContactPhone());
+                userAccount.setName("用户" + CommonUtil.getPhoneLast4(entity.getContactPhone()));
             } else {
                 userAccount.setName("用户");
             }

+ 36 - 33
FullCardServer/src/main/java/com/zhongshu/card/server/core/test/Test.java

@@ -2,6 +2,7 @@ package com.zhongshu.card.server.core.test;
 
 import cn.hutool.core.lang.Snowflake;
 import cn.hutool.json.JSONUtil;
+import com.zhongshu.card.server.core.util.CommonUtil;
 import com.zhongshu.card.server.core.util.ValidateResult;
 import com.zhongshu.card.server.core.util.ValidateUtils;
 import groovy.lang.GroovyShell;
@@ -18,39 +19,41 @@ import java.util.Map;
  */
 public class Test {
     public static void main(String[] args) {
-        Snowflake snowflake = new Snowflake();
-        String orderNo = String.valueOf(snowflake.nextId());
-        System.out.println(orderNo + " = " + orderNo.length());
-
-        String str = "123abc@";
-        ValidateResult result = ValidateUtils.validatePassWord(str);
-        System.out.println("结果:" + result.isSuccess() + " = " + result.getMsg()
-                + " == " + ValidateUtils.isPhoneNumber("18723497166"));
-
-        Map<String, Object> map = new HashMap<>();
-        map.put("orderNo", orderNo);
-        map.put("age", 24);
-        map.put("money", BigDecimal.valueOf(563.21));
-        System.out.println("map = " + JSONUtil.toJsonStr(map));
-
-        BigDecimal b1 = BigDecimal.valueOf(54.32);
-        BigDecimal b2 = BigDecimal.valueOf(564.32);
-        System.out.println("m= " + b1.divide(b2, 5, RoundingMode.HALF_UP));
-
-        GroovyShell groovyShell = new GroovyShell();
-        String res = " println 'Hello, Groovy!' ";
-        Object result1 = groovyShell.evaluate(res);
-        System.out.println("result1 = " + result1);
-
-        try {
-            String stt = "我是";
-            byte[] encoded = Base64.getEncoder().encode(stt.getBytes("utf-8"));
-            System.out.println("base64 = " + new String(encoded));
-            byte[] stt1 = Base64.getDecoder().decode(encoded);
-            System.out.println("stt1 = " + new String(stt1));
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
+//        Snowflake snowflake = new Snowflake();
+//        String orderNo = String.valueOf(snowflake.nextId());
+//        System.out.println(orderNo + " = " + orderNo.length());
+//
+//        String str = "123abc@";
+//        ValidateResult result = ValidateUtils.validatePassWord(str);
+//        System.out.println("结果:" + result.isSuccess() + " = " + result.getMsg()
+//                + " == " + ValidateUtils.isPhoneNumber("18723497166"));
+//
+//        Map<String, Object> map = new HashMap<>();
+//        map.put("orderNo", orderNo);
+//        map.put("age", 24);
+//        map.put("money", BigDecimal.valueOf(563.21));
+//        System.out.println("map = " + JSONUtil.toJsonStr(map));
+//
+//        BigDecimal b1 = BigDecimal.valueOf(54.32);
+//        BigDecimal b2 = BigDecimal.valueOf(564.32);
+//        System.out.println("m= " + b1.divide(b2, 5, RoundingMode.HALF_UP));
+//
+//        GroovyShell groovyShell = new GroovyShell();
+//        String res = " println 'Hello, Groovy!' ";
+//        Object result1 = groovyShell.evaluate(res);
+//        System.out.println("result1 = " + result1);
+//
+//        try {
+//            String stt = "我是";
+//            byte[] encoded = Base64.getEncoder().encode(stt.getBytes("utf-8"));
+//            System.out.println("base64 = " + new String(encoded));
+//            byte[] stt1 = Base64.getDecoder().decode(encoded);
+//            System.out.println("stt1 = " + new String(stt1));
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+        String phone = "766";
+        System.out.println(CommonUtil.getPhoneLast4(phone));
 
     }
 }

+ 8 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/util/CommonUtil.java

@@ -549,4 +549,12 @@ public class CommonUtil {
         return param;
     }
 
+    public static String getPhoneLast4(String phone) {
+        if (StringUtils.isNotEmpty(phone) && phone.length() >= 4) {
+            int len = phone.length();
+            phone = phone.substring(len - 4, len);
+        }
+        return phone;
+    }
+
 }