瀏覽代碼

新增代理后台相关逻辑

yzs 10 月之前
父節點
當前提交
b4230de09b

+ 7 - 0
ai-config-base-biz/src/main/java/org/spring/ai/config/biz/crud/entity/MgrUserInfo.java

@@ -71,6 +71,13 @@ public class MgrUserInfo {
     @ApiModelProperty(value = "创建者账号id")
     private Integer createId;
 
+    /**
+     * 绑定代理id
+     */
+    @TableField(value = "proxy_id")
+    @ApiModelProperty(value = "绑定代理id")
+    private Integer proxyId;
+
     /**
      * CMS系统角色
      */

+ 16 - 0
ai-config-base-biz/src/main/java/org/spring/ai/config/biz/crud/entity/Proxy.java

@@ -17,6 +17,8 @@ import java.time.LocalDateTime;
 
 /**
  * 代理信息表
+ *
+ * @author yzs
  */
 @ApiModel(value = "org-spring-ai-config-biz-crud-entity-Proxy")
 @Data
@@ -39,6 +41,20 @@ public class Proxy {
     @ApiModelProperty(value = "代理名称")
     private String proxyName;
 
+    /**
+     * 剩余月份
+     */
+    @TableField(value = "surplus_month")
+    @ApiModelProperty(value = "剩余月份")
+    private Integer surplusMonth;
+
+    /**
+     * 总月份
+     */
+    @TableField(value = "sum_month")
+    @ApiModelProperty(value = "总月份")
+    private Integer sumMonth;
+
     /**
      * 更新时间
      */

+ 12 - 2
ai-config-base-biz/src/main/java/org/spring/ai/config/biz/crud/service/ProxyService.java

@@ -1,8 +1,18 @@
 package org.spring.ai.config.biz.crud.service;
 
-import org.spring.ai.config.biz.crud.entity.Proxy;
 import com.baomidou.mybatisplus.extension.service.IService;
-public interface ProxyService extends IService<Proxy>{
+import org.spring.ai.config.biz.crud.entity.Proxy;
 
+public interface ProxyService extends IService<Proxy> {
 
+    /**
+     * 扣减月份
+     *
+     * @param proxyId
+     * @param month:
+     * @Author: yzs
+     * @Date: 2025/2/18 15:37
+     * @return: boolean
+     */
+    boolean minusMonth(int proxyId, int month);
 }

+ 12 - 4
ai-config-base-biz/src/main/java/org/spring/ai/config/biz/crud/service/impl/ProxyServiceImpl.java

@@ -1,13 +1,21 @@
 package org.spring.ai.config.biz.crud.service.impl;
 
-import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
-import java.util.List;
+import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.spring.ai.config.biz.crud.entity.Proxy;
 import org.spring.ai.config.biz.crud.mapper.ProxyMapper;
 import org.spring.ai.config.biz.crud.service.ProxyService;
+import org.springframework.stereotype.Service;
+
 @Service
-public class ProxyServiceImpl extends ServiceImpl<ProxyMapper, Proxy> implements ProxyService{
+public class ProxyServiceImpl extends ServiceImpl<ProxyMapper, Proxy> implements ProxyService {
 
+    @Override
+    public boolean minusMonth(int proxyId, int month) {
+        return new LambdaUpdateChainWrapper<>(baseMapper)
+                .eq(Proxy::getId, proxyId)
+                .ge(Proxy::getSurplusMonth, month)
+                .setSql("surplus_month = surplus_month - " + month)
+                .update();
+    }
 }

+ 2 - 0
ai-config-cms-live/src/main/java/org/spring/ai/config/cms/admctr/req/MgrUserInfoAddReq.java

@@ -25,5 +25,7 @@ public class MgrUserInfoAddReq {
     @ApiModelProperty(value = "CMS系统角色")
     private List<Integer> cmsRoleIds;
 
+    @ApiModelProperty(value = "绑定代理")
+    private Integer proxyId;
 
 }

+ 1 - 0
ai-config-cms-live/src/main/java/org/spring/ai/config/cms/controller/admin/MgrUserInfoController.java

@@ -152,6 +152,7 @@ public class MgrUserInfoController {
         mgrUserInfo.setCreateId(admId);
         mgrUserInfo.setLoginName(loginName);
         mgrUserInfo.setName(name);
+        mgrUserInfo.setProxyId(mgrUserInfoAddReq.getProxyId());
         mgrUserInfo.setCmsRoleIds(CollUtil.join(cmsRoleIds, ","));
         if (id == null) {
             if (list.size() > 0) {

+ 47 - 12
ai-config-cms-live/src/main/java/org/spring/ai/config/cms/controller/enterprise/ActivationCodeController.java

@@ -3,6 +3,7 @@ package org.spring.ai.config.cms.controller.enterprise;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.excel.EasyExcel;
@@ -14,14 +15,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.spring.ai.config.biz.crud.entity.ActivationCode;
-import org.spring.ai.config.biz.crud.entity.AiDevice;
-import org.spring.ai.config.biz.crud.entity.Proxy;
-import org.spring.ai.config.biz.crud.entity.SalesPackage;
-import org.spring.ai.config.biz.crud.service.ActivationCodeService;
-import org.spring.ai.config.biz.crud.service.AiDeviceService;
-import org.spring.ai.config.biz.crud.service.ProxyService;
-import org.spring.ai.config.biz.crud.service.SalesPackageService;
+import org.apache.commons.lang3.math.NumberUtils;
+import org.spring.ai.config.biz.crud.entity.*;
+import org.spring.ai.config.biz.crud.service.*;
 import org.spring.ai.config.cms.admctr.service.AdmPowerWebService;
 import org.spring.ai.config.cms.entity.req.ActivationCodeAddReq;
 import org.spring.ai.config.cms.entity.req.ActivationCodeListReq;
@@ -75,6 +71,9 @@ public class ActivationCodeController {
     @Resource
     private AdmPowerWebService admPowerWebService;
 
+    @Resource
+    private MgrUserInfoService mgrUserInfoService;
+
 
     @ApiOperation(value = "激活码列表")
     @PostMapping(value = "list")
@@ -83,12 +82,19 @@ public class ActivationCodeController {
         if (activationCodeListReq == null) {
             throw new BusinessException(ErrorCodeEnum.INPUT_PARAMETER_ERROR.getCode(), ErrorCodeEnum.INPUT_PARAMETER_ERROR.getDesc());
         }
+        int adminId = admPowerWebService.getLoginAdminId(req.getAdminToken());
         LambdaQueryWrapper<ActivationCode> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.eq(StrUtil.isNotBlank(activationCodeListReq.getActivationCode()), ActivationCode::getActivationCode, activationCodeListReq.getActivationCode());
         queryWrapper.eq(activationCodeListReq.getPackageType() != null, ActivationCode::getPackageType, activationCodeListReq.getPackageType());
-        queryWrapper.eq(activationCodeListReq.getProxyId() != null, ActivationCode::getProxyId, activationCodeListReq.getProxyId());
         queryWrapper.eq(activationCodeListReq.getTiming() != null, ActivationCode::getTiming, activationCodeListReq.getTiming());
         queryWrapper.eq(activationCodeListReq.getTiming() != null, ActivationCode::getTimeUnit, activationCodeListReq.getTimeUnit());
+        if (adminId != 1) {
+            MgrUserInfo mgrUserInfo = mgrUserInfoService.getById(adminId);
+            Integer proxyId = mgrUserInfo == null ? null : mgrUserInfo.getProxyId();
+            queryWrapper.eq(ActivationCode::getProxyId, proxyId);
+        } else {
+            queryWrapper.eq(activationCodeListReq.getProxyId() != null, ActivationCode::getProxyId, activationCodeListReq.getProxyId());
+        }
         queryWrapper.orderByAsc(ActivationCode::getIsUse);
         queryWrapper.orderByDesc(ActivationCode::getCreateTime);
         IPage<ActivationCode> iPage = activationCodeService.page(new Page<>(req.getPage(), req.getPageSize()), queryWrapper);
@@ -116,22 +122,44 @@ public class ActivationCodeController {
         if (activationCodeAddReq == null) {
             throw new BusinessException(ErrorCodeEnum.INPUT_PARAMETER_ERROR.getCode(), ErrorCodeEnum.INPUT_PARAMETER_ERROR.getDesc());
         }
+        int adminId = admPowerWebService.getLoginAdminId(req.getAdminToken());
         SalesPackage salesPackage = salesPackageService.getById(activationCodeAddReq.getSalesPackageId());
         if (salesPackage == null) {
             throw new BusinessException(ErrorCodeEnum.FAIL.getCode(), "套餐不存在");
         }
+        boolean result = true;
+        Integer proxId = activationCodeAddReq.getProxyId();
+        if (adminId != 1) {
+            MgrUserInfo mgrUserInfo = mgrUserInfoService.getById(adminId);
+            if (mgrUserInfo == null || mgrUserInfo.getProxyId() == null) {
+                throw new BusinessException(ErrorCodeEnum.FAIL.getCode(), "未绑定代理");
+            }
+            proxId = mgrUserInfo.getProxyId();
+            int monthNum;
+            if (ObjectUtil.equals(salesPackage.getTimeUnit(), NumberUtils.INTEGER_ONE)) {
+                monthNum = activationCodeAddReq.getAddNum();
+            } else {
+                monthNum = activationCodeAddReq.getAddNum() * 12;
+            }
+            //扣减代理月份
+            result = proxyService.minusMonth(proxId, monthNum);
+        }
         List<ActivationCode> insertList = new LinkedList<>();
         for (int i = 0; i < activationCodeAddReq.getAddNum(); i++) {
             ActivationCode activationCode = new ActivationCode();
             BeanUtil.copyProperties(salesPackage, activationCode, "id");
-            activationCode.setProxyId(activationCodeAddReq.getProxyId());
+            activationCode.setProxyId(proxId);
             activationCode.setActivationCode(RandomUtil.randomString(4) + "-" + RandomUtil.randomString(4) + "-" + RandomUtil.randomString(4));
             activationCode.setCreateTime(LocalDateTime.now());
             activationCode.setUpdateTime(LocalDateTime.now());
             activationCode.setIsUse(YesNoEnum.NO.getCode());
             insertList.add(activationCode);
         }
-        boolean result = activationCodeService.batchInsert(insertList);
+        if (result) {
+            result = activationCodeService.batchInsert(insertList);
+        } else {
+            throw new BusinessException(ErrorCodeEnum.FAIL.getCode(), "代理可生成套餐额度不足");
+        }
         return result ? Result.success() : Result.error("批量生成失败");
     }
 
@@ -184,10 +212,17 @@ public class ActivationCodeController {
      * @return: java.util.List<org.spring.ai.config.cms.entity.vo.ExportActivationVo>
      */
     public List<ExportActivationVo> getExportActivationVoList(ActivationCodeListReq activationCodeListReq) {
+        int adminId = admPowerWebService.getLoginAdminId(activationCodeListReq.getAdminToken());
         LambdaQueryWrapper<ActivationCode> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.eq(StrUtil.isNotBlank(activationCodeListReq.getActivationCode()), ActivationCode::getActivationCode, activationCodeListReq.getActivationCode());
         queryWrapper.eq(activationCodeListReq.getPackageType() != null, ActivationCode::getPackageType, activationCodeListReq.getPackageType());
-        queryWrapper.eq(activationCodeListReq.getProxyId() != null, ActivationCode::getProxyId, activationCodeListReq.getProxyId());
+        if (adminId != 1) {
+            MgrUserInfo mgrUserInfo = mgrUserInfoService.getById(adminId);
+            Integer proxyId = mgrUserInfo == null ? null : mgrUserInfo.getProxyId();
+            queryWrapper.eq(ActivationCode::getProxyId, proxyId);
+        } else {
+            queryWrapper.eq(activationCodeListReq.getProxyId() != null, ActivationCode::getProxyId, activationCodeListReq.getProxyId());
+        }
         queryWrapper.eq(activationCodeListReq.getTiming() != null, ActivationCode::getTiming, activationCodeListReq.getTiming());
         queryWrapper.eq(activationCodeListReq.getTiming() != null, ActivationCode::getTimeUnit, activationCodeListReq.getTimeUnit());
         queryWrapper.eq(ActivationCode::getIsUse, YesNoEnum.NO.getCode());

+ 38 - 1
ai-config-cms-live/src/main/java/org/spring/ai/config/cms/controller/proxy/ProxyController.java

@@ -2,15 +2,19 @@ package org.spring.ai.config.cms.controller.proxy;
 
 import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.spring.ai.config.biz.crud.entity.MgrUserInfo;
 import org.spring.ai.config.biz.crud.entity.Proxy;
 import org.spring.ai.config.biz.crud.entity.req.IdReq;
+import org.spring.ai.config.biz.crud.service.MgrUserInfoService;
 import org.spring.ai.config.biz.crud.service.ProxyService;
+import org.spring.ai.config.cms.admctr.service.AdmPowerWebService;
 import org.spring.ai.config.cms.entity.req.SaveProxyReq;
 import org.spring.base.common.enums.ErrorCodeEnum;
 import org.spring.base.common.exception.BusinessException;
@@ -37,6 +41,12 @@ public class ProxyController {
     @Resource
     private ProxyService proxyService;
 
+    @Resource
+    private AdmPowerWebService admPowerWebService;
+
+    @Resource
+    private MgrUserInfoService mgrUserInfoService;
+
 
     @ApiOperation(value = "列表")
     @PostMapping(value = "list")
@@ -47,6 +57,21 @@ public class ProxyController {
         return BasePageQueryRsp.success(iPage.getRecords(), iPage.getTotal());
     }
 
+    @ApiOperation(value = "获取代理剩余月份")
+    @PostMapping(value = "get_surplus_month")
+    public Result<Integer> list(@RequestBody @Valid BaseSimpleReq<?> req) {
+        int adminId = admPowerWebService.getLoginAdminId(req.getAdminToken());
+        MgrUserInfo mgrUserInfo = mgrUserInfoService.getById(adminId);
+        int surplusMonth = 0;
+        if (mgrUserInfo != null && mgrUserInfo.getProxyId() != null) {
+            Proxy proxy = proxyService.getById(mgrUserInfo.getProxyId());
+            if (proxy != null) {
+                surplusMonth = proxy.getSurplusMonth();
+            }
+        }
+        return Result.success(surplusMonth);
+    }
+
     @ApiOperation(value = "添加/编辑")
     @PostMapping(value = "add_or_update")
     public Result<?> addOrUpdate(@RequestBody @Valid BaseSimpleReq<SaveProxyReq> req) {
@@ -56,7 +81,19 @@ public class ProxyController {
         }
         Proxy proxy = new Proxy();
         BeanUtil.copyProperties(saveProxyReq, proxy);
-        boolean result = proxyService.saveOrUpdate(proxy);
+        proxy.setSumMonth(saveProxyReq.getAddMonth());
+        proxy.setSurplusMonth(saveProxyReq.getAddMonth());
+        boolean result;
+        if (saveProxyReq.getId() != null) {
+            LambdaUpdateWrapper<Proxy> updateWrapper = Wrappers.lambdaUpdate();
+            updateWrapper.eq(Proxy::getId, saveProxyReq.getId())
+                    .set(Proxy::getProxyName, saveProxyReq.getProxyName())
+                    .setSql(saveProxyReq.getAddMonth() != null, "surplus_month=surplus_month+" + saveProxyReq.getAddMonth())
+                    .setSql(saveProxyReq.getAddMonth() != null, "sum_month=sum_month+" + saveProxyReq.getAddMonth());
+            result = proxyService.update(updateWrapper);
+        } else {
+            result = proxyService.save(proxy);
+        }
         return result ? Result.success() : Result.error("入库失败");
     }
 

+ 2 - 0
ai-config-cms-live/src/main/java/org/spring/ai/config/cms/entity/req/SaveProxyReq.java

@@ -21,5 +21,7 @@ public class SaveProxyReq {
     @NotBlank(message = "代理名称不能为空")
     private String proxyName;
 
+    @ApiModelProperty(value = "添加月份")
+    private Integer addMonth;
 
 }

+ 3 - 0
ai-config-cms-live/src/main/java/org/spring/ai/config/cms/entity/vo/MgrUserListVo.java

@@ -38,6 +38,9 @@ public class MgrUserListVo {
     @ApiModelProperty(value = "上次登录ip")
     private String lastLoginIp;
 
+    @ApiModelProperty(value = "绑定代理id")
+    private Integer proxyId;
+
     @ApiModelProperty(value = "状态,1:正常,0:禁用")
     private Integer status;
 

+ 4 - 4
ai-config-job/src/main/resources/application-dev.yml

@@ -2,7 +2,7 @@
 spring:
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource
-    url: jdbc:mysql://192.168.101.188:3306/vehicle-position?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true
+    url: jdbc:mysql://120.79.155.3:3306/vehicle-position?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true
     username: slb_ucenter_dev
     password: WnRwRExGnmHPJYEw
     #druid 数据源专有配置
@@ -23,7 +23,7 @@ spring:
       connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
   #redis相关配置
   redis:
-    host: 192.168.101.188
+    host: 120.79.155.3
     port: 6379
     password: 123456
     database: 1
@@ -51,7 +51,7 @@ xxl:
   job:
     accessToken: 0b33f97c2df6447abdb3c14023c6760c
     admin:
-      addresses: http://192.168.101.188:18080/xxl-job-admin
+      addresses: http://120.79.155.3:18080/xxl-job-admin
     executor:
       address: ''
       appname: vehicle-position-job
@@ -62,7 +62,7 @@ xxl:
 # 业务相关配置
 sanling:
   redisson:
-    address: 192.168.101.188:6379
+    address: 120.79.155.3:6379
     password: 123456
     type: STANDALONE
     database: 1

+ 1 - 1
ai-config-job/src/main/resources/application-test.yml

@@ -55,7 +55,7 @@ xxl:
   job:
     accessToken: 0b33f97c2df6447abdb3c14023c6760c
     admin:
-      addresses: http://192.168.101.188:18080/xxl-job-admin
+      addresses: http://120.79.155.3:18080/xxl-job-admin
     executor:
       address: ''
       appname: ai-config

+ 8 - 0
dbscripts/V1.0.0/1.0.6.sql

@@ -0,0 +1,8 @@
+-- 代理表新增字段
+ALTER TABLE `t_proxy`
+    ADD COLUMN `surplus_month` int NULL DEFAULT 0 COMMENT '剩余月份' AFTER `proxy_name`,
+    ADD COLUMN `sum_month`     int NULL DEFAULT 0 COMMENT '总月份' AFTER `surplus_month`;
+
+-- 用户表新增字段
+ALTER TABLE `t_mgr_user_info`
+    ADD COLUMN `proxy_id` int NULL COMMENT '绑定代理id' AFTER `cms_role_ids`;