lwhhszx 11 месяцев назад
Родитель
Сommit
445dec3aa1
23 измененных файлов с 625 добавлено и 26 удалено
  1. 15 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/QiaoBiPersonSignUpDTO.java
  2. 9 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/QiaoBiVIPTypeVO.java
  3. 13 0
      PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/QiaoBiVipTypeDTO.java
  4. 19 0
      PCS/src/main/java/cn/cslg/permission/common/utils/DateUtils.java
  5. 1 1
      PCS/src/main/java/cn/cslg/permission/common/utils/RandomUtil.java
  6. 2 0
      PCS/src/main/java/cn/cslg/permission/controller/PersonnelController.java
  7. 39 0
      PCS/src/main/java/cn/cslg/permission/controller/qiaobi/QiaoBiPersonController.java
  8. 36 0
      PCS/src/main/java/cn/cslg/permission/controller/qiaobi/VipTypeController.java
  9. 21 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AppVipType.java
  10. 30 0
      PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoPersonVipType.java
  11. 1 1
      PCS/src/main/java/cn/cslg/permission/exception/ExceptionEnum.java
  12. 22 0
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AppVipTypeMapper.java
  13. 18 0
      PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AssoPersonVipTypeMapper.java
  14. 2 0
      PCS/src/main/java/cn/cslg/permission/service/LoginService.java
  15. 28 0
      PCS/src/main/java/cn/cslg/permission/service/PersonInvitationCodeService.java
  16. 43 24
      PCS/src/main/java/cn/cslg/permission/service/PersonnelService.java
  17. 37 0
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/AppVipTypeService.java
  18. 102 0
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoPersonVipTypeService.java
  19. 107 0
      PCS/src/main/java/cn/cslg/permission/service/qiaobi/QiaoBiPersonService.java
  20. 18 0
      PCS/src/main/resources/mapper/AppVipTypeMapper.xml
  21. 19 0
      PCS/src/main/resources/mapper/AssoPersonVipTypeMapper.xml
  22. 1 0
      PCS/src/main/resources/mapper/TenantVipTypeMapper.xml
  23. 42 0
      PCS/src/test/java/cn/cslg/permission/AppVipTypeTest.java

+ 15 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/QiaoBiPersonSignUpDTO.java

@@ -0,0 +1,15 @@
+package cn.cslg.permission.common.model.qiaobi;
+
+import lombok.Data;
+
+@Data
+public class QiaoBiPersonSignUpDTO {
+    private String phoneNum;
+    private String phoneCode;
+    private Integer vipType;
+    private String name;
+    private String email;
+    private String username;
+    private String password;
+    private String inviteCode;
+}

+ 9 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/QiaoBiVIPTypeVO.java

@@ -0,0 +1,9 @@
+package cn.cslg.permission.common.model.qiaobi;
+
+import lombok.Data;
+
+@Data
+public class QiaoBiVIPTypeVO {
+    private Integer id;
+    private String vipTypeName;
+}

+ 13 - 0
PCS/src/main/java/cn/cslg/permission/common/model/qiaobi/QiaoBiVipTypeDTO.java

@@ -0,0 +1,13 @@
+package cn.cslg.permission.common.model.qiaobi;
+
+
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+
+@Data
+public class QiaoBiVipTypeDTO {
+private String vipTypeName;
+private String appCode;
+}

+ 19 - 0
PCS/src/main/java/cn/cslg/permission/common/utils/DateUtils.java

@@ -766,4 +766,23 @@ public class DateUtils {
         calendar.set(Calendar.SECOND, 0);
         return calendar.getTime();
     }
+
+    /**
+     * 获取增加月份后的时间
+     *
+     * @param date  yyyy-MM-dd HH:mm:ss
+     * @param
+     */
+    public static Date getPlusMonthDate(Date date, int month) {
+        Calendar cal = Calendar.getInstance();
+        try {
+            cal.setTime(date);
+            cal.add(Calendar.MONTH, month);
+            return cal.getTime();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
 }

+ 1 - 1
PCS/src/main/java/cn/cslg/permission/common/utils/RandomUtil.java

@@ -15,7 +15,7 @@ public class RandomUtil {
             "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E",
             "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
             "S", "T", "U", "V", "W", "X", "Y", "Z", "1", "2", "3", "4", "5",
-            "6", "7", "8", "9", "0" };
+            "6", "7", "8", "9", "0"};
 
     /**
      * 随机验证码

+ 2 - 0
PCS/src/main/java/cn/cslg/permission/controller/PersonnelController.java

@@ -136,4 +136,6 @@ public class PersonnelController {
         personnelService.setPersonConfig(uploadPersonnelConfigVO);
         return Response.success();
     }
+
+
 }

+ 39 - 0
PCS/src/main/java/cn/cslg/permission/controller/qiaobi/QiaoBiPersonController.java

@@ -0,0 +1,39 @@
+package cn.cslg.permission.controller.qiaobi;
+
+import cn.cslg.permission.common.core.base.Constants;
+import cn.cslg.permission.common.model.personnel.UploadPersonnelConfigDTO;
+import cn.cslg.permission.common.model.qiaobi.QiaoBiPersonSignUpDTO;
+import cn.cslg.permission.common.model.qiaobi.QiaoBiVIPTypeVO;
+import cn.cslg.permission.common.model.qiaobi.QiaoBiVipTypeDTO;
+import cn.cslg.permission.common.utils.Response;
+import cn.cslg.permission.service.qiaobi.AppVipTypeService;
+import cn.cslg.permission.service.qiaobi.QiaoBiPersonService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author 沈永艺
+ * @date 2022-8-3
+ * @description 应用类 Controller 层
+ */
+@Tag(name = "会员类型管理")
+@RestController
+@RequestMapping(Constants.PERMISSION_API + "/qiaoBiPerson")
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class QiaoBiPersonController {
+    private final QiaoBiPersonService qiaoBiPersonService;
+    @PostMapping("/personnelSignUp")
+    @Operation(summary = "用户注册")
+    public String personnelSignUp(@RequestBody QiaoBiPersonSignUpDTO qiaoBiPersonSignUpDTO) {
+        qiaoBiPersonService.personSignUp(qiaoBiPersonSignUpDTO);
+        return Response.success();
+    }
+}

+ 36 - 0
PCS/src/main/java/cn/cslg/permission/controller/qiaobi/VipTypeController.java

@@ -0,0 +1,36 @@
+package cn.cslg.permission.controller.qiaobi;
+
+import cn.cslg.permission.common.core.base.Constants;
+import cn.cslg.permission.common.model.qiaobi.QiaoBiVIPTypeVO;
+import cn.cslg.permission.common.model.qiaobi.QiaoBiVipTypeDTO;
+import cn.cslg.permission.common.utils.Response;
+import cn.cslg.permission.domain.qiaobi.AppVipType;
+import cn.cslg.permission.service.ApplicationService;
+import cn.cslg.permission.service.qiaobi.AppVipTypeService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author 沈永艺
+ * @date 2022-8-3
+ * @description 应用类 Controller 层
+ */
+@Tag(name = "会员类型管理")
+@RestController
+@RequestMapping(Constants.PERMISSION_API + "/vipType")
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class VipTypeController {
+    private final AppVipTypeService appVipTypeService;
+
+    @PostMapping("/queryQiaoBiVipType")
+    private String queryQiaoBiVipType(@RequestBody QiaoBiVipTypeDTO qiaoBiVipTypeDTO){
+      List<QiaoBiVIPTypeVO> qiaoBiVIPTypeVOList=  appVipTypeService.qiaoBiVIPTypeVOList(qiaoBiVipTypeDTO);
+      return Response.success(qiaoBiVIPTypeVOList);
+    }
+
+}

+ 21 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AppVipType.java

@@ -0,0 +1,21 @@
+package cn.cslg.permission.domain.qiaobi;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @TableName APP_VIP_TYPE
+ */
+@TableName(value ="APP_VIP_TYPE")
+@Data
+public class AppVipType extends Model {
+    private Integer id;
+
+    private String applicationCode;
+
+    private Integer tenantVipTypeId;
+    private Integer lastTime;
+}

+ 30 - 0
PCS/src/main/java/cn/cslg/permission/domain/qiaobi/AssoPersonVipType.java

@@ -0,0 +1,30 @@
+package cn.cslg.permission.domain.qiaobi;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+/**
+ * @TableName ASSO_PERSON_VIP_TYPE
+ */
+@TableName(value ="ASSO_PERSON_VIP_TYPE")
+@Data
+public class AssoPersonVipType extends Model {
+    private Integer id;
+
+    private Integer personId;
+
+    private Integer vipTypeId;
+
+    private Date createTime;
+
+    private Date expitrTime;
+
+    private static final long serialVersionUID = 1L;
+}

+ 1 - 1
PCS/src/main/java/cn/cslg/permission/exception/ExceptionEnum.java

@@ -23,7 +23,7 @@ public enum ExceptionEnum {
     THE_PERSONNEL_IS_NOT_EXIST("416","用户不存在"),
     THE_PERSONNEL_IS_FORBIDDEN("417","该用户不可用"),
     THE_VERSION_IS_NULL("418", "版本号不可为空"),
-
+    THE_PERSONNEL_IS_EXIST("419","用户已存在"),
     //500~600   业务异常相关
     THE_SYSTEM_ERROR("500", "系统异常"),
 

+ 22 - 0
PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AppVipTypeMapper.java

@@ -0,0 +1,22 @@
+package cn.cslg.permission.mapper.qiaobi;
+
+import cn.cslg.permission.common.model.qiaobi.QiaoBiVIPTypeVO;
+import cn.cslg.permission.common.model.qiaobi.QiaoBiVipTypeDTO;
+import cn.cslg.permission.domain.qiaobi.AppVipType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+* @author admin
+* @description 针对表【APP_VIP_TYPE(应用会员类型)】的数据库操作Mapper
+* @createDate 2024-10-31 14:42:32
+* @Entity generator.domain.AppVipType
+*/
+public interface AppVipTypeMapper extends BaseMapper<AppVipType> {
+    public List<QiaoBiVIPTypeVO> queryQiaobiVipTypeVOs(QiaoBiVipTypeDTO qiaoBiVipTypeDTO);
+}
+
+
+
+

+ 18 - 0
PCS/src/main/java/cn/cslg/permission/mapper/qiaobi/AssoPersonVipTypeMapper.java

@@ -0,0 +1,18 @@
+package cn.cslg.permission.mapper.qiaobi;
+
+import cn.cslg.permission.domain.qiaobi.AssoPersonVipType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【ASSO_PERSON_VIP_TYPE(人员的会员)】的数据库操作Mapper
+* @createDate 2024-11-01 11:06:57
+* @Entity generator.domain.AssoPersonVipType
+*/
+public interface AssoPersonVipTypeMapper extends BaseMapper<AssoPersonVipType> {
+
+}
+
+
+
+

+ 2 - 0
PCS/src/main/java/cn/cslg/permission/service/LoginService.java

@@ -362,6 +362,7 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
         if (Boolean.TRUE.equals(StringUtils.isEmpty(sign)) || !sign.equals(md5Sign)) {
             throw new XiaoShiException(ExceptionEnum.THE_SIGN_IS_NOT_SAME);
         }
+
         if (Boolean.TRUE.equals(StringUtils.isEmpty(machineCode))) {
             throw new XiaoShiException(ExceptionEnum.THE_MACHINE_CODE_IS_NULL);
         }
@@ -481,6 +482,7 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
         }
         String appSecret = appKey + currentTimeMillis;
         String md5Sign = SecureUtil.md5(appSecret);
+
         if (Boolean.TRUE.equals(StringUtils.isEmpty(sign)) || !sign.equals(md5Sign)) {
             throw new XiaoShiException(ExceptionEnum.THE_SIGN_IS_NOT_SAME);
         }

+ 28 - 0
PCS/src/main/java/cn/cslg/permission/service/PersonInvitationCodeService.java

@@ -0,0 +1,28 @@
+package cn.cslg.permission.service;
+
+import cn.cslg.permission.common.model.qiaobi.QiaoBiVIPTypeVO;
+import cn.cslg.permission.common.model.qiaobi.QiaoBiVipTypeDTO;
+import cn.cslg.permission.domain.PersonInvitationCode;
+import cn.cslg.permission.domain.qiaobi.AppVipType;
+import cn.cslg.permission.mapper.PersonInvitationCodeMapper;
+import cn.cslg.permission.mapper.qiaobi.AppVipTypeMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author admin
+ * @description 针对表【APP_VIP_TYPE(应用会员类型)】的数据库操作Service实现
+ * @createDate 2024-10-31 14:42:32
+ */
+@Service
+public class PersonInvitationCodeService extends ServiceImpl<PersonInvitationCodeMapper, PersonInvitationCode> {
+
+
+
+}
+
+
+
+

+ 43 - 24
PCS/src/main/java/cn/cslg/permission/service/PersonnelService.java

@@ -2,6 +2,7 @@ package cn.cslg.permission.service;
 
 import cn.cslg.permission.common.core.base.RedisConf;
 import cn.cslg.permission.common.model.personnel.UploadPersonnelConfigDTO;
+import cn.cslg.permission.common.model.qiaobi.QiaoBiPersonSignUpDTO;
 import cn.cslg.permission.common.model.vo.PersonnelVO;
 import cn.cslg.permission.common.model.vo.RoleVO;
 import cn.cslg.permission.common.utils.*;
@@ -54,6 +55,7 @@ public class PersonnelService extends ServiceImpl<PersonnelMapper, Personnel> {
     private final RedisUtil redisUtil;
     private final SysDictItemMapper sysDictItemMapper;
     private final MessageUtils messageUtils;
+
     @Transactional(rollbackFor = Exception.class)
     public Personnel addPersonnel(PersonnelVO personnelVO) {
         log.info("开始处理【新增人员】的业务,参数为:{}", personnelVO);
@@ -152,7 +154,7 @@ public class PersonnelService extends ServiceImpl<PersonnelMapper, Personnel> {
                 }
             }
 
-           this.sendAddPersonEmail(personnelVO);
+            this.sendAddPersonEmail(personnelVO);
 
         } catch (Exception e) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -334,7 +336,7 @@ public class PersonnelService extends ServiceImpl<PersonnelMapper, Personnel> {
                 );
 
         //根据人员id查询
-        if(personnelVO.getId()!=null){
+        if (personnelVO.getId() != null) {
             queryWrapper.in(Personnel::getId, Integer.parseInt(personnelVO.getId()));
         }
 
@@ -383,10 +385,9 @@ public class PersonnelService extends ServiceImpl<PersonnelMapper, Personnel> {
 
         LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<>();
         //若前台有传租户id,则根据租户id查询人员列表
-        if(personnelVO.getTenantId()!=null) {
+        if (personnelVO.getTenantId() != null) {
             queryWrapper.eq(Personnel::getTenantId, personnelVO.getTenantId());
-        }
-        else {
+        } else {
             //TODO 代码控制若不是超级管理员则只能查看本租户的人员列表
             if (personnelVO1.getRoleType() == null || personnelVO1.getRoleType() != 1) {
                 queryWrapper.eq(Personnel::getTenantId, personnelVO1.getTenantId());
@@ -403,7 +404,7 @@ public class PersonnelService extends ServiceImpl<PersonnelMapper, Personnel> {
                 );
 
         //根据人员id查询
-        if(personnelVO.getId()!=null){
+        if (personnelVO.getId() != null) {
             queryWrapper.in(Personnel::getId, Integer.parseInt(personnelVO.getId()));
         }
 
@@ -440,8 +441,6 @@ public class PersonnelService extends ServiceImpl<PersonnelMapper, Personnel> {
     }
 
 
-
-
     public List<Integer> getByTenantId(Integer tenantId) {
         //根据租户id查询人员列表
         LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<>();
@@ -524,7 +523,7 @@ public class PersonnelService extends ServiceImpl<PersonnelMapper, Personnel> {
         return personnel;
     }
 
-    public void sendAddPersonEmail(PersonnelVO personnel){
+    public void sendAddPersonEmail(PersonnelVO personnel) {
         //从字典表里获得配置联系人数
         LambdaQueryWrapper<SysDictItem> wrapper1 = new LambdaQueryWrapper<>();
         wrapper1.eq(SysDictItem::getDictParentKey, "ADD_CC_PERSON");
@@ -534,27 +533,47 @@ public class PersonnelService extends ServiceImpl<PersonnelMapper, Personnel> {
         map.put("template", "mail/addPersonEmail.html");
 
         map.put("img", "/logo.png");
-        map.put("value0",personnel.getName());
-        map.put("value1",personnel.getUsername());
-        map.put("value2",personnel.getPassword());
+        map.put("value0", personnel.getName());
+        map.put("value1", personnel.getUsername());
+        map.put("value2", personnel.getPassword());
         map.put("email", personnel.getEmail());
-        if(sysDictItems!=null&&sysDictItems.size()>0){
-            String[]cc =new String[sysDictItems.size()];
-            for (int i=0;i<sysDictItems.size();i++){
-                cc[i]=sysDictItems.get(i).getDictChildValue();
+        if (sysDictItems != null && sysDictItems.size() > 0) {
+            String[] cc = new String[sysDictItems.size()];
+            for (int i = 0; i < sysDictItems.size(); i++) {
+                cc[i] = sysDictItems.get(i).getDictChildValue();
             }
-        map.put("cc",cc);
+            map.put("cc", cc);
         }
         messageUtils.sendEmailMessage(map);
     }
 
-    public void setPersonConfig(UploadPersonnelConfigDTO uploadPersonnelConfigVO){
-        String personConfig=uploadPersonnelConfigVO.getPersonnelConfig();
+    public void setPersonConfig(UploadPersonnelConfigDTO uploadPersonnelConfigVO) {
+        String personConfig = uploadPersonnelConfigVO.getPersonnelConfig();
         PersonnelVO localPer = cacheUtils.getLoginUser(StpUtil.getLoginIdAsInt());
-        String id=localPer.getId();
-        LambdaUpdateWrapper<Personnel> personnelLambdaUpdateWrapper =new LambdaUpdateWrapper<>();
-        personnelLambdaUpdateWrapper.set(Personnel::getPersonConfig,personConfig)
-                .eq(Personnel::getId,Integer.parseInt(id));
-         this.update(personnelLambdaUpdateWrapper);
+        String id = localPer.getId();
+        LambdaUpdateWrapper<Personnel> personnelLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+        personnelLambdaUpdateWrapper.set(Personnel::getPersonConfig, personConfig)
+                .eq(Personnel::getId, Integer.parseInt(id));
+        this.update(personnelLambdaUpdateWrapper);
+    }
+
+    public QiaoBiPersonSignUpDTO addPhoneSignUpPerson(QiaoBiPersonSignUpDTO qiaoBiPersonSignUpDTO) {
+        String phone = qiaoBiPersonSignUpDTO.getPhoneNum();
+        String email = qiaoBiPersonSignUpDTO.getEmail();
+        String name = qiaoBiPersonSignUpDTO.getName();
+        String userName = qiaoBiPersonSignUpDTO.getUsername();
+        String passWord = qiaoBiPersonSignUpDTO.getPassword();
+        if (passWord == null || passWord.trim().equals("")) {
+            passWord = RandomUtil.generateRandomString(8);
+        }
+        qiaoBiPersonSignUpDTO.setPassword(passWord);
+        passWord = SecureUtil.md5(passWord);
+        Personnel personnel = new Personnel();
+        personnel.setPersonnelPhone(phone);
+        personnel.setPersonnelEmail(email);
+        personnel.setPersonnelName(name);
+        personnel.setPersonnelUserName(userName);
+        personnel.setPersonnelPassword(passWord);
+        return qiaoBiPersonSignUpDTO;
     }
 }

+ 37 - 0
PCS/src/main/java/cn/cslg/permission/service/qiaobi/AppVipTypeService.java

@@ -0,0 +1,37 @@
+package cn.cslg.permission.service.qiaobi;
+
+import cn.cslg.permission.common.model.qiaobi.QiaoBiVIPTypeVO;
+import cn.cslg.permission.common.model.qiaobi.QiaoBiVipTypeDTO;
+import cn.cslg.permission.domain.qiaobi.AppVipType;
+import cn.cslg.permission.mapper.qiaobi.AppVipTypeMapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author admin
+ * @description 针对表【APP_VIP_TYPE(应用会员类型)】的数据库操作Service实现
+ * @createDate 2024-10-31 14:42:32
+ */
+@Service
+public class AppVipTypeService extends ServiceImpl<AppVipTypeMapper, AppVipType> {
+
+    public List<QiaoBiVIPTypeVO> qiaoBiVIPTypeVOList(QiaoBiVipTypeDTO qiaoBiVipTypeDTO) {
+        qiaoBiVipTypeDTO.setAppCode("4e95e3d926a2a4befa5d913acc0aa9f5");
+        List<QiaoBiVIPTypeVO> qiaoBiVIPTypeVOList = this.getBaseMapper().queryQiaobiVipTypeVOs(qiaoBiVipTypeDTO);
+        return qiaoBiVIPTypeVOList;
+    }
+    public AppVipType queryById(Integer id) {
+        LambdaQueryWrapper<AppVipType> queryWrapper =new LambdaQueryWrapper<>();
+        queryWrapper.eq(AppVipType::getTenantVipTypeId,id);
+        AppVipType appVipType =this.getOne(queryWrapper);
+        return appVipType;
+    }
+}
+
+
+
+

+ 102 - 0
PCS/src/main/java/cn/cslg/permission/service/qiaobi/AssoPersonVipTypeService.java

@@ -0,0 +1,102 @@
+package cn.cslg.permission.service.qiaobi;
+
+import cn.cslg.permission.common.utils.DateUtils;
+import cn.cslg.permission.domain.qiaobi.AppVipType;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.cslg.permission.domain.qiaobi.AssoPersonVipType;
+import cn.cslg.permission.mapper.qiaobi.AssoPersonVipTypeMapper;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+/**
+ * @author admin
+ * @description 针对表【ASSO_PERSON_VIP_TYPE(人员的会员)】的数据库操作Service实现
+ * @createDate 2024-11-01 11:06:57
+ */
+@Service
+public class AssoPersonVipTypeService extends ServiceImpl<AssoPersonVipTypeMapper, AssoPersonVipType> {
+    @Autowired
+    private AppVipTypeService appVipTypeService;
+
+
+    public AssoPersonVipType addVip(Integer personId, Integer vipTypeId, Integer lastTime) {
+        AssoPersonVipType assoPersonVip = new AssoPersonVipType();
+        LambdaQueryWrapper<AssoPersonVipType> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoPersonVipType::getPersonId, personId)
+                .eq(AssoPersonVipType::getVipTypeId, vipTypeId)
+                .orderByDesc(AssoPersonVipType::getExpitrTime);
+        assoPersonVip = this.getOne(queryWrapper, false);
+
+        if (lastTime == null) {
+            AppVipType appVipType = appVipTypeService.queryById(vipTypeId);
+
+            lastTime = appVipType.getLastTime();
+        }
+        if (assoPersonVip != null) {
+            this.updateAssoPersonVip(assoPersonVip, lastTime);
+        } else {
+            assoPersonVip = this.addAssoPersonVip(personId, vipTypeId, lastTime);
+        }
+        return assoPersonVip;
+    }
+
+    public AssoPersonVipType addAssoPersonVip(Integer personUuid, Integer vipTypeId, Integer lastTime) {
+        Date date = new Date();
+        AssoPersonVipType assoPersonVip = new AssoPersonVipType();
+        assoPersonVip.setCreateTime(date);
+
+        Date expiryDate = DateUtils.getPlusMonthDate(date, lastTime);
+        assoPersonVip.setExpitrTime(expiryDate);
+        assoPersonVip.setPersonId(personUuid);
+        assoPersonVip.setVipTypeId(vipTypeId);
+        assoPersonVip.insert();
+        return assoPersonVip;
+    }
+
+    public AssoPersonVipType updateAssoPersonVip(AssoPersonVipType assoPersonVipType, Integer lastTime) {
+        Date expitrTime = assoPersonVipType.getExpitrTime();
+        Date date = new Date();
+        if (expitrTime.compareTo(date) < 0) {
+            expitrTime = date;
+        }
+        expitrTime = DateUtils.getPlusMonthDate(expitrTime, lastTime);
+        assoPersonVipType.setExpitrTime(expitrTime);
+
+        this.updateById(assoPersonVipType);
+        return assoPersonVipType;
+    }
+
+
+    public void lastPersonVip(Integer personId) {
+        Integer vipTypeId;
+        //查询登录人是否有vip
+        LambdaQueryWrapper<AssoPersonVipType> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoPersonVipType::getPersonId, personId)
+                .orderByDesc(AssoPersonVipType::getCreateTime);
+        AssoPersonVipType assoPersonVipType = this.getOne(queryWrapper, false);
+        if (assoPersonVipType == null) {
+            AppVipType appVipType = appVipTypeService.getOne(new LambdaQueryWrapper<>(), false);
+            vipTypeId = appVipType.getTenantVipTypeId();
+        } else {
+            vipTypeId = assoPersonVipType.getVipTypeId();
+        }
+        this.addVip(personId, vipTypeId, 1);
+    }
+
+    public Integer getPersonVipId(Integer personId) {
+        LambdaQueryWrapper<AssoPersonVipType> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoPersonVipType::getPersonId, personId)
+                .gt(AssoPersonVipType::getExpitrTime, new Date())
+                .orderByDesc(AssoPersonVipType::getCreateTime);
+        AssoPersonVipType assoPersonVipType = this.getOne(queryWrapper, false);
+        return assoPersonVipType.getVipTypeId();
+    }
+}
+
+
+
+

+ 107 - 0
PCS/src/main/java/cn/cslg/permission/service/qiaobi/QiaoBiPersonService.java

@@ -0,0 +1,107 @@
+package cn.cslg.permission.service.qiaobi;
+
+import cn.cslg.permission.common.core.business.LoginCacheKeyUtil;
+import cn.cslg.permission.common.model.qiaobi.QiaoBiPersonSignUpDTO;
+import cn.cslg.permission.common.model.qiaobi.QiaoBiVipTypeDTO;
+import cn.cslg.permission.common.utils.RedisUtil;
+import cn.cslg.permission.common.utils.RegexUtil;
+import cn.cslg.permission.common.utils.StringUtils;
+import cn.cslg.permission.domain.PersonInvitationCode;
+import cn.cslg.permission.domain.Personnel;
+import cn.cslg.permission.exception.ExceptionEnum;
+import cn.cslg.permission.exception.XiaoShiException;
+import cn.cslg.permission.service.PersonInvitationCodeService;
+import cn.cslg.permission.service.PersonnelService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.Data;
+import org.apache.commons.lang3.RegExUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class QiaoBiPersonService {
+    @Autowired
+    private PersonnelService personnelService;
+    @Autowired
+    private PersonInvitationCodeService personInvitationCodeService;
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private AssoPersonVipTypeService assoPersonVipTypeService;
+
+    @Transactional(rollbackFor = Exception.class)
+    public void personSignUp(QiaoBiPersonSignUpDTO qiaoBiPersonSignUpDTO) {
+        String phoneNum = qiaoBiPersonSignUpDTO.getPhoneNum();
+        String inviteCode = qiaoBiPersonSignUpDTO.getInviteCode();
+        Integer vipTypeId = qiaoBiPersonSignUpDTO.getVipType();
+        //验证参数是否正确
+        this.checkMessage(qiaoBiPersonSignUpDTO);
+        this.checkPersonInvalid(phoneNum);
+        //添加人员
+        personnelService.addPhoneSignUpPerson(qiaoBiPersonSignUpDTO);
+        //绑定版本
+        assoPersonVipTypeService.addVip(1, vipTypeId, 1);
+        //执行邀请逻辑
+        if (inviteCode != null && !inviteCode.trim().equals("")) {
+            //根据邀请码查找人员
+            Integer personId = Integer.parseInt(inviteCode);
+            assoPersonVipTypeService.lastPersonVip(personId);
+        }
+    }
+
+    /**
+     * 校验参数
+     *
+     * @param qiaoBiPersonSignUpDTO
+     */
+    private void checkMessage(QiaoBiPersonSignUpDTO qiaoBiPersonSignUpDTO) {
+        String phoneNum = qiaoBiPersonSignUpDTO.getPhoneNum();
+        Integer vipType = qiaoBiPersonSignUpDTO.getVipType();
+        String phoneCode = qiaoBiPersonSignUpDTO.getPhoneCode();
+        String inviteCode = qiaoBiPersonSignUpDTO.getInviteCode().trim();
+        if (phoneCode == null || phoneCode.trim().equals("")) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "验证码不可为空");
+        }
+        if (phoneNum == null || phoneNum.trim().equals("")) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "手机号不可为空");
+        }
+        if (!RegexUtil.isPhoneLegal(phoneNum)) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "手机号格式错误");
+        }
+        if (vipType == null) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "请选择版本");
+        }
+
+        String code = redisUtil.get(LoginCacheKeyUtil.getLoginCaptcha(phoneNum));
+        if (!phoneCode.equals(code)) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "验证码错误");
+        }
+        if (inviteCode != null && !inviteCode.equals("")) {
+            LambdaQueryWrapper<PersonInvitationCode> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(PersonInvitationCode::getInvitationCode, inviteCode);
+            PersonInvitationCode personInvitationCode = personInvitationCodeService.getOne(queryWrapper, false);
+            if (personInvitationCode == null) {
+                throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "邀请码不存在");
+            }
+            qiaoBiPersonSignUpDTO.setInviteCode(personInvitationCode.getPersonId().toString());
+        }
+
+    }
+
+    /**
+     * 校验用户是否已注册
+     *
+     * @param phoneNum
+     */
+    private void checkPersonInvalid(String phoneNum) {
+        //根据手机号查询用户
+        LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Personnel::getPersonnelPhone, phoneNum);
+        Personnel personnel = personnelService.getOne(queryWrapper, false);
+        if (personnel != null) {
+            throw new XiaoShiException(ExceptionEnum.THE_PERSONNEL_IS_EXIST, "用户已存在");
+        }
+    }
+
+}

+ 18 - 0
PCS/src/main/resources/mapper/AppVipTypeMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.cslg.permission.mapper.qiaobi.AppVipTypeMapper">
+
+
+    <select id="queryQiaobiVipTypeVOs" resultType="cn.cslg.permission.common.model.qiaobi.QiaoBiVIPTypeVO">
+        select vip.ID as id,vip.TENANT_VIP_NAME as vipTypeName from APP_VIP_TYPE as app left join TENANT_VIP_TYPE as vip on
+        app.TENANT_VIP_TYPE_ID = vip.ID
+        <where>
+            app.APPLICATION_CODE =#{appCode}
+            <if test="vipTypeName!=null">
+              and  vip.TENANT_VIP_NAME like concat('%', #{vipTypeName}, '%')
+            </if>
+        </where>
+    </select>
+</mapper>

+ 19 - 0
PCS/src/main/resources/mapper/AssoPersonVipTypeMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.cslg.permission.mapper.qiaobi.AssoPersonVipTypeMapper">
+
+    <resultMap id="BaseResultMap" type="cn.cslg.permission.domain.qiaobi.AssoPersonVipType">
+            <result property="id" column="ID" jdbcType="INTEGER"/>
+            <result property="personId" column="PERSON_ID" jdbcType="INTEGER"/>
+            <result property="vipTypeId" column="VIP_TYPE_ID" jdbcType="INTEGER"/>
+            <result property="createTime" column="CREATE_TIME" jdbcType="TIMESTAMP"/>
+            <result property="expitrTime" column="EXPITR_TIME" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        ID,PERSON_ID,VIP_TYPE_ID,
+        CREATE_TIME,EXPITR_TIME
+    </sql>
+</mapper>

+ 1 - 0
PCS/src/main/resources/mapper/TenantVipTypeMapper.xml

@@ -30,6 +30,7 @@
         CREATE_TIME
         from TENANT_VIP_TYPE
         <where>
+            USE_TYPE is null
             <if test="likeName != null">
                 TENANT_VIP_NAME like #{likeName} or CREATE_PERSON_NAME like #{likeName}
             </if>

+ 42 - 0
PCS/src/test/java/cn/cslg/permission/AppVipTypeTest.java

@@ -0,0 +1,42 @@
+package cn.cslg.permission;
+
+import cn.cslg.permission.common.model.dto.EncryptionLoginDTO;
+import cn.cslg.permission.common.model.dto.PhoneLoginDTO;
+import cn.cslg.permission.common.model.dto.SendCodeDTO;
+import cn.cslg.permission.common.model.personnel.UploadPersonnelConfigDTO;
+import cn.cslg.permission.common.model.qiaobi.QiaoBiVIPTypeVO;
+import cn.cslg.permission.common.model.qiaobi.QiaoBiVipTypeDTO;
+import cn.cslg.permission.service.LoginService;
+import cn.cslg.permission.service.qiaobi.AppVipTypeService;
+import cn.hutool.crypto.SecureUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class AppVipTypeTest {
+    @Autowired
+    private AppVipTypeService appVipTypeService;
+@Test
+    public void uploadPersonnelConfigPCSTest2() throws IOException {
+    QiaoBiVipTypeDTO qiaoBiVipTypeDTO =new QiaoBiVipTypeDTO();
+    qiaoBiVipTypeDTO.setVipTypeName("个人");
+         List<QiaoBiVIPTypeVO> qiaoBiVIPTypeVOList= appVipTypeService.qiaoBiVIPTypeVOList(qiaoBiVipTypeDTO);
+    System.out.println(qiaoBiVIPTypeVOList);
+}
+
+}