Browse Source

Merge branch 'develop-kjf' into develop

* develop-kjf:
  5.8
  5.8

# Conflicts:
#	kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/feign/config/KxsStatFeignClientConfiguration.java
mac 2 years ago
parent
commit
0cb54c7e49
27 changed files with 734 additions and 37 deletions
  1. 0 2
      kxs-common/kxs-common-core/src/main/java/com/kxs/common/core/constant/ServiceNameConstants.java
  2. 20 0
      kxs-quartz/src/main/java/com/kxs/daemon/quartz/task/UserBeanTask.java
  3. 12 0
      kxs-stat/kxs-stat-api/pom.xml
  4. 21 4
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/feign/RemoteKxsStatService.java
  5. 85 0
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/feign/config/KxsStatFeignClientConfiguration.java
  6. 43 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/controller/KxsStatController.java
  7. 3 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserTradeMapper.java
  8. 5 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/KxsUserTradeService.java
  9. 60 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserTradeServiceImpl.java
  10. 14 0
      kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserTradeMapper.xml
  11. 6 1
      kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/feign/RemoteOldService.java
  12. 12 0
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/dto/kxsapp/PrizePoolSynchronizationDTO.java
  13. 40 0
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/emun/UserLevel.java
  14. 23 4
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/feign/RemoteKxsUserService.java
  15. 5 0
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsShdScore.java
  16. 101 0
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsUserRealLevel.java
  17. 6 6
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/vo/kxsapp/shareholder/ShareholderGetMyStandardsVO.java
  18. 4 0
      kxs-user/kxs-user-biz/pom.xml
  19. 39 4
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/controller/kxsapp/ShareholderController.java
  20. 17 0
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/mapper/KxsUserRealLevelMapper.java
  21. 4 0
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/KxsShdScoreService.java
  22. 10 0
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/KxsShdTradeAmtService.java
  23. 17 0
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/KxsUserRealLevelService.java
  24. 63 16
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsShdScoreServiceImpl.java
  25. 50 0
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsShdTradeAmtServiceImpl.java
  26. 56 0
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsUserRealLevelServiceImpl.java
  27. 18 0
      kxs-user/kxs-user-biz/src/main/resources/mapper/KxsUserRealLevelMapper.xml

+ 0 - 2
kxs-common/kxs-common-core/src/main/java/com/kxs/common/core/constant/ServiceNameConstants.java

@@ -32,10 +32,8 @@ public interface ServiceNameConstants {
 	 * 仓库模块
 	 */
 	String STORE_SERVICE = "kxs-store-biz";
-
 	/**
 	 * 统计模块
 	 */
 	String STAT_SERVICE = "kxs-stat-biz";
-
 }

+ 20 - 0
kxs-quartz/src/main/java/com/kxs/daemon/quartz/task/UserBeanTask.java

@@ -51,4 +51,24 @@ public class UserBeanTask {
         log.info("用户欠款扣除定时任务:{},输入参数{}", LocalDateTime.now(), para);
         return SkyQuartzEnum.JOB_LOG_STATUS_SUCCESS.getType();
     }
+    /**
+     *  股东大盘分红积分汇算
+     *  扫描用户真实职级表,根据直属用户职级汇算成积分
+     */
+    @SneakyThrows
+    public String integralStat(String para) {
+        remoteKxsUserService.integralStat(SecurityConstants.FROM_IN);
+        log.info("股东大盘分红积分汇算:{},输入参数{}", LocalDateTime.now(), para);
+        return SkyQuartzEnum.JOB_LOG_STATUS_SUCCESS.getType();
+    }
+    /**
+     *  股东大盘分红积分汇算
+     *  扫描用户真实职级表,根据直属用户职级汇算成积分
+     */
+    @SneakyThrows
+    public String userRealLevel(String para) {
+        remoteKxsUserService.userRealLevel(SecurityConstants.FROM_IN);
+        log.info("股东大盘真实职级计算:{},输入参数{}", LocalDateTime.now(), para);
+        return SkyQuartzEnum.JOB_LOG_STATUS_SUCCESS.getType();
+    }
 }

+ 12 - 0
kxs-stat/kxs-stat-api/pom.xml

@@ -58,4 +58,16 @@
             <artifactId>kxs-common-seata</artifactId>
         </dependency>
     </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>14</source>
+                    <target>14</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>

+ 21 - 4
kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/feign/RemoteKxsStatService.java

@@ -1,15 +1,32 @@
 
 package com.kxs.stat.api.feign;
 
+import com.kxs.common.core.constant.SecurityConstants;
+import com.kxs.common.core.util.R;
+
+import com.kxs.stat.api.model.KxsUserTrade;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.service.annotation.GetExchange;
+import org.springframework.web.service.annotation.PostExchange;
+
+import java.util.List;
 
 /**
- * 远程 KXS 统计服务
- *
- * @author 没秃顶的码农
- * @date 2024-05-08
+ * @author Pota1ovO
+ * @date 2024/5/08
  */
 public interface RemoteKxsStatService {
 
+	/**
+	 * 获取全部交易额
+	 *
+	 * @param from    调用标志
+	 *
+	 */
+	@GetExchange("/stat/getUserTradeList")
+	R<List<KxsUserTrade>> getUserTradeList(@RequestParam("month") String month, @RequestHeader(SecurityConstants.FROM) String from);
+
 
 
 }

+ 85 - 0
kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/feign/config/KxsStatFeignClientConfiguration.java

@@ -0,0 +1,85 @@
+package com.kxs.stat.api.feign.config;
+
+import cn.hutool.core.text.CharSequenceUtil;
+import com.kxs.common.core.constant.ServiceNameConstants;
+import com.kxs.stat.api.feign.RemoteKxsStatService;
+import io.seata.core.context.RootContext;
+import jakarta.servlet.http.HttpServletRequest;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.cloud.client.loadbalancer.reactive.ReactorLoadBalancerExchangeFilterFunction;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpHeaders;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.reactive.function.client.ClientRequest;
+import org.springframework.web.reactive.function.client.WebClient;
+import org.springframework.web.reactive.function.client.support.WebClientAdapter;
+import org.springframework.web.service.invoker.HttpServiceProxyFactory;
+
+/**
+ * <p>
+ * 当前服务的webClient配置
+ * 服务下的远程调用统一在此配置
+ * 使用注册中心 需配置远程调用器 以实现负载均衡
+ * </p>
+ *
+ * @author Pota1ovO
+ * @date 2024/5/08
+ */
+@Configuration
+@RequiredArgsConstructor
+public class KxsStatFeignClientConfiguration {
+
+	/**
+	 * 负载均衡器
+	 */
+	private final ReactorLoadBalancerExchangeFilterFunction reactorLoadBalancerExchangeFilterFunction;
+
+	private static final String SERVICE_NAME = ServiceNameConstants.CLIENT_NAME + ServiceNameConstants.STAT_SERVICE;
+
+	@Bean("kxsStatFeignClient")
+	public WebClient oauthRequestInterceptor() {
+
+
+		return WebClient.builder()
+			// 给请求添加过滤器,添加自定义的认证头
+			.filter((request, next) -> {
+				ClientRequest.Builder filtered = ClientRequest.from(request);
+
+				// seata XID传递
+				String xid = RootContext.getXID();
+				if (CharSequenceUtil.isNotBlank(xid)) {
+					filtered.header(RootContext.KEY_XID, xid);
+				}
+
+				ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder
+					.getRequestAttributes();
+				// 不是web请求不传递token
+				if (requestAttributes != null) {
+					HttpServletRequest httpServletRequest = requestAttributes.getRequest();
+					String token = httpServletRequest.getHeader(HttpHeaders.AUTHORIZATION);
+					if (!CharSequenceUtil.isBlank(token)) {
+						// 传递token
+						filtered.header(HttpHeaders.AUTHORIZATION, token);
+					}
+				}
+				return next.exchange(filtered.build());
+			}).filter(reactorLoadBalancerExchangeFilterFunction)
+			.baseUrl(SERVICE_NAME)
+			.build();
+	}
+
+	/**
+	 * 远程仓库模块服务
+	 * @param client 客户端
+	 * @return 远程仓库模块服务
+	 */
+	@Bean
+	RemoteKxsStatService remoteKxsStatService(@Qualifier("kxsStatFeignClient") WebClient client) {
+		HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(client)).build();
+		return factory.createClient(RemoteKxsStatService.class);
+	}
+
+}

+ 43 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/controller/KxsStatController.java

@@ -0,0 +1,43 @@
+package com.kxs.stat.biz.controller;
+
+
+import com.kxs.common.core.util.R;
+import com.kxs.common.security.annotation.Inner;
+import com.kxs.stat.biz.service.KxsUserTradeService;
+import com.kxs.user.api.dto.kxsapp.app.ForgetPwdDTO;
+import jakarta.validation.Valid;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 用户表(KxsSecurityUser)表控制层
+ *
+ * @author Pota1ovO
+ * @since 2024-05-08
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("stat")
+public class KxsStatController {
+    private final KxsUserTradeService kxsUserTradeService;
+    /**
+     * 获取本月全部统计数据
+     *
+     */
+    @Inner(value = false)
+    @GetMapping("/getUserTradeList")
+    public R getUserTradeList(@RequestParam("month") String month) {
+
+        return R.ok(kxsUserTradeService.getUserTradeList(month));
+    }
+
+    /**
+     * 真实职级计算
+     */
+//    @Inner
+    @GetMapping("/userRealLevel")
+    public void userRealLevel() {
+        kxsUserTradeService.userRealLevel();
+    }
+}
+

+ 3 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserTradeMapper.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.kxs.stat.api.model.KxsUserTrade;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * 个人交易统计总表(KxsUserTrade)表数据库访问层
  *
@@ -13,5 +15,6 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface KxsUserTradeMapper extends BaseMapper<KxsUserTrade> {
 
+    List<KxsUserTrade> getUserTradeList(String tableName);
 }
 

+ 5 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/KxsUserTradeService.java

@@ -3,6 +3,8 @@ package com.kxs.stat.biz.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.kxs.stat.api.model.KxsUserTrade;
 
+import java.util.List;
+
 /**
  * 个人交易统计总表(KxsUserTrade)表服务接口
  *
@@ -11,5 +13,8 @@ import com.kxs.stat.api.model.KxsUserTrade;
  */
 public interface KxsUserTradeService extends IService<KxsUserTrade> {
 
+    List<KxsUserTrade> getUserTradeList(String month);
+
+    void userRealLevel();
 }
 

+ 60 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserTradeServiceImpl.java

@@ -1,11 +1,25 @@
 package com.kxs.stat.biz.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.common.core.constant.SecurityConstants;
+import com.kxs.common.core.util.R;
+import com.kxs.common.security.util.SecurityUtils;
 import com.kxs.stat.biz.mapper.KxsUserTradeMapper;
 import com.kxs.stat.api.model.KxsUserTrade;
 import com.kxs.stat.biz.service.KxsUserTradeService;
+import com.kxs.user.api.emun.UserLevel;
+import com.kxs.user.api.feign.RemoteKxsUserService;
+import com.kxs.user.api.model.KxsUser;
+import com.kxs.user.api.model.KxsUserRealLevel;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
 /**
  * 个人交易统计总表(KxsUserTrade)表服务实现类
  *
@@ -13,7 +27,53 @@ import org.springframework.stereotype.Service;
  * @since 2024-05-07 17:25:06
  */
 @Service("kxsUserTradeService")
+@RequiredArgsConstructor
 public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, KxsUserTrade> implements KxsUserTradeService {
+    private final RemoteKxsUserService remoteKxsUserService;
+
+    @Override
+    public List<KxsUserTrade> getUserTradeList(String month) {
+        //拼接表名
+        String[] split = month.split("-");
+        String tableName = "kxs_user_trade_" + split[0] + split[1];
+        return baseMapper.getUserTradeList(tableName);
+    }
+
+
+    @Override
+    public void userRealLevel() {
+        //构造月份
+        LocalDateTime now = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
+        String month = now.format(formatter);
+        List<KxsUserTrade> userTradeList = getUserTradeList(month);
+        for (KxsUserTrade datum : userTradeList) {
+            Integer userId = datum.getUserId();
+            BigDecimal helpDirectTradeAmt = datum.getHelpDirectTradeAmt();//扶持期贷记卡交易额
+            BigDecimal helpDebitTradeAmt = datum.getHelpDebitTradeAmt();//扶持期借记卡
+            BigDecimal proDirectTradeAmt = datum.getProDirectTradeAmt();//稳定期贷记卡
+            BigDecimal proDebitTradeAmt = datum.getProDebitTradeAmt();//稳定期借记卡
+            BigDecimal proADirectTradeAmt = datum.getProADirectTradeAmt();//稳定期A贷记卡
+            BigDecimal proADebitTradeAmt = datum.getProADebitTradeAmt();//稳定期A借记卡
+            BigDecimal proBDebitTradeAmt = datum.getProBDebitTradeAmt();//稳定期B借记卡
+            BigDecimal proBDirectTradeAmt = datum.getProBDirectTradeAmt();//稳定期B贷记卡
+            BigDecimal totalAmount = helpDirectTradeAmt.add(helpDebitTradeAmt).add(proDirectTradeAmt).add(proDebitTradeAmt).add(proADirectTradeAmt).add(proADebitTradeAmt).add(proBDebitTradeAmt).add(proBDirectTradeAmt);
+            KxsUserRealLevel kxsUserRealLevel = new KxsUserRealLevel();
+            kxsUserRealLevel.setCreateTime(now);
+            kxsUserRealLevel.setDelFlag("0");
+            kxsUserRealLevel.setMonth(month);
+            for (UserLevel userLevel : UserLevel.values()) {
+                if (totalAmount.compareTo(userLevel.getTransactions()) >= 0) {
+                    kxsUserRealLevel.setLevel(userLevel.getLevel());
+                } else if (totalAmount.compareTo(BigDecimal.ZERO) <= 0) {
+                    kxsUserRealLevel.setLevel("0");
+                }
+            }
+            kxsUserRealLevel.setUserId(Long.valueOf(userId));
+            remoteKxsUserService.updateUserRealLevel(kxsUserRealLevel, SecurityConstants.FROM_IN);
+        }
+
+    }
 
 }
 

+ 14 - 0
kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserTradeMapper.xml

@@ -32,5 +32,19 @@
         <result column="pro_b_debit_cap_num" property="proBDebitCapNum" />
 
     </resultMap>
+    <select id="getUserTradeList" resultType="com.kxs.stat.api.model.KxsUserTrade">
+        select
+            sum(pro_b_direct_trade_amt) as proBDirectTradeAmt,
+            sum(pro_b_debit_trade_amt) as proBDebitTradeAmt,
+            sum(pro_a_debit_trade_amt) as proADebitTradeAmt,
+            sum(pro_a_direct_trade_amt) as proADirectTradeAmt,
+            sum(pro_debit_trade_amt) as proDebitTradeAmt,
+            sum(pro_direct_trade_amt) as proDirectTradeAmt,
+            sum(help_debit_trade_amt) as helpDebitTradeAmt,
+            sum(help_direct_trade_amt) as helpDirectTradeAmt,
+            user_id
+        from ${tableName} where del_flag != 1
+        and total_type = 1 group by user_id
+    </select>
 
 </mapper>

+ 6 - 1
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/feign/RemoteOldService.java

@@ -30,5 +30,10 @@ public interface RemoteOldService {
 	 */
 	@GetExchange("/v1/kxsmain/users/getteamopenposinfo")
 	R teamOpenTotalData(@RequestParam("value") String param);
-
+	/**
+	 * 奖池同步交易额
+	 * @param param 请求实体
+	 */
+	@GetExchange("/v1/UserTradeDaySummary/GetUserTradeAmout")
+	R GetUserTradeAmout(@RequestParam("value")  Map<String, Object> param);
 }

+ 12 - 0
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/dto/kxsapp/PrizePoolSynchronizationDTO.java

@@ -0,0 +1,12 @@
+package com.kxs.user.api.dto.kxsapp;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class PrizePoolSynchronizationDTO {
+    private BigDecimal TotalPosAmt; //POS总交易额
+    private BigDecimal MpAmtwd; //来客吧码牌交易总额
+    private BigDecimal SimAmtwd; //广电卡活动交易总额
+}

+ 40 - 0
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/emun/UserLevel.java

@@ -0,0 +1,40 @@
+package com.kxs.user.api.emun;
+
+import lombok.Getter;
+
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.math.BigDecimal;
+
+/**
+ * @BelongsProject: ap-server
+ * @Author: Pota1ovO
+ * @CreateTime: 2023-08-06  11:40
+ * @Description: 等级枚举
+ * @Version: 1.0
+ */
+@Getter
+@AllArgsConstructor
+public enum UserLevel {
+    /* -----------以下为公共通用的状态码 -----------*/
+    LEVEL_ZERO   ("0",new BigDecimal(0)),
+    LEVEL_ONE   ("1",new BigDecimal(1000000)),
+    LEVEL_TWO   ("2",new BigDecimal(3000000)),
+    LEVEL_THREE ("3",new BigDecimal(8000000)),
+    LEVEL_FOUR  ("4",new BigDecimal(15000000)),
+    LEVEL_FIVE  ("5", new BigDecimal(30000000)),
+    LEVEL_SIX   ("6", new BigDecimal(60000000)),
+    LEVEL_SEVEN ("7", new BigDecimal(100000000)),
+    LEVEL_EIGHT ("8", new BigDecimal(300000000)),
+    LEVEL_NINE  ("9", new BigDecimal(500000000)),
+    ;
+
+
+    //状态码
+    private final String level;
+    //状态码码描述
+    private final BigDecimal transactions;
+}

+ 23 - 4
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/feign/RemoteKxsUserService.java

@@ -3,10 +3,7 @@ package com.kxs.user.api.feign;
 
 import com.kxs.common.core.constant.SecurityConstants;
 import com.kxs.common.core.util.R;
-import com.kxs.user.api.model.KxsLeader;
-import com.kxs.user.api.model.KxsUser;
-import com.kxs.user.api.model.KxsUserAdvance;
-import com.kxs.user.api.model.KxsUserAmountLog;
+import com.kxs.user.api.model.*;
 import com.kxs.user.api.vo.kxsapp.user.RealUserInfoVO;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestHeader;
@@ -156,5 +153,27 @@ public interface RemoteKxsUserService {
 	@GetExchange("/app/checkPayPwd")
 	R<Boolean> checkPayPwd(@RequestParam("payPwd") String payPwd);
 
+	/**
+	 * 积分汇算  每日执行
+	 *
+	 * @return {@link R}
+	 */
+	@GetExchange("/shareholder/integralStat")
+	void integralStat(@RequestHeader(SecurityConstants.FROM) String from);
+	/**
+	 * 真实职级计算  每日执行
+	 *
+	 * @return {@link R}
+	 */
+	@GetExchange("/shareholder/userRealLevel")
+	void userRealLevel(@RequestHeader(SecurityConstants.FROM) String from);
+	/**
+	 * 修改用户真实职级表
+	 *
+	 * @param from       调用标志
+	 * @return {@link R}<{@link Boolean}>
+	 */
+	@PostExchange("/shareholder/userRealLevel")
+	R<Boolean> updateUserRealLevel(@RequestBody KxsUserRealLevel kxsUserRealLevel, @RequestHeader(SecurityConstants.FROM) String from);
 
 }

+ 5 - 0
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsShdScore.java

@@ -73,6 +73,11 @@ public class KxsShdScore extends Model<KxsShdScore> implements Serializable {
     @Schema(description = "用户名")
     private String username;
 
+    /**
+     * 用户id
+     */
+    @Schema(description = "用户名")
+    private Long userId;
 
     /**
      * 用户编号

+ 101 - 0
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsUserRealLevel.java

@@ -0,0 +1,101 @@
+package com.kxs.user.api.model;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 用户当前真实等级表(KxsUserRealLevel)表实体类
+ *
+ * @author 系统
+ * @since 2024-05-08 14:06:37
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class KxsUserRealLevel extends Model<KxsUserRealLevel> implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    
+    
+    /**
+     * 主键ID
+     */
+    @Schema(description = "主键ID")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+
+    /**
+     * 新增时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @Schema(description = "新增时间")
+    private LocalDateTime createTime;
+
+
+    /**
+     * 更新时间
+     */
+    @TableField(fill = FieldFill.UPDATE)
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+
+
+    /**
+     * 删除标记,0未删除,1已删除
+     */
+    @Schema(description = "删除标记,0未删除,1已删除")
+    private String delFlag;
+
+
+    /**
+     * 版本
+     */
+    @Schema(description = "版本")
+    private Integer version;
+
+
+    /**
+     * 计算月份
+     */
+    @Schema(description = "计算月份")
+    private String month;
+
+
+    /**
+     * 当前等级
+     */
+    @Schema(description = "当前等级")
+    private String level;
+
+
+    /**
+     * 用户id
+     */
+    @Schema(description = "用户id")
+    private Long userId;
+
+
+    /**
+     * 上级id
+     */
+    @Schema(description = "上级id")
+    private Long pid;
+
+
+
+
+}
+

+ 6 - 6
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/vo/kxsapp/shareholder/ShareholderGetMyStandardsVO.java

@@ -27,42 +27,42 @@ public class ShareholderGetMyStandardsVO implements Serializable {
      * 初级股东积分
      */
     @Schema(description = "初级股东积分")
-    private Integer firstScore;
+    private Integer firstScore = 0;
 
 
     /**
      * 中级股东积分
      */
     @Schema(description = "中级股东积分")
-    private Integer centerScore;
+    private Integer centerScore = 0;
 
 
     /**
      * 高级股东积分
      */
     @Schema(description = "高级股东积分")
-    private Integer highScore;
+    private Integer highScore = 0;
 
 
     /**
      * 全国初级股东积分
      */
     @Schema(description = "全国初级股东积分")
-    private Object firstScoreAll;
+    private Object firstScoreAll = 0;
 
 
     /**
      * 全国中级股东积分
      */
     @Schema(description = "全国中级股东积分")
-    private Object centerScoreAll;
+    private Object centerScoreAll = 0;
 
 
     /**
      * 全国高级股东积分
      */
     @Schema(description = "全国高级股东积分")
-    private Object highScoreAll;
+    private Object highScoreAll = 0;
 
 
 

+ 4 - 0
kxs-user/kxs-user-biz/pom.xml

@@ -79,6 +79,10 @@
             <groupId>com.kxs</groupId>
             <artifactId>kxs-product-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.kxs</groupId>
+            <artifactId>kxs-stat-api</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 39 - 4
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/controller/kxsapp/ShareholderController.java

@@ -1,8 +1,15 @@
 package com.kxs.user.biz.controller.kxsapp;
 
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.kxs.common.core.util.R;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.kxs.common.security.annotation.Inner;
+import com.kxs.system.api.feign.RemoteOldService;
 import com.kxs.user.api.model.KxsShdScore;
+import com.kxs.user.api.model.KxsUserRealLevel;
+import com.kxs.user.biz.service.KxsUserRealLevelService;
 import org.springdoc.core.annotations.ParameterObject;
 
 import com.kxs.user.biz.service.KxsShdTradeAmtService;
@@ -12,6 +19,11 @@ import org.springframework.web.bind.annotation.*;
 
 import lombok.RequiredArgsConstructor;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+
 /**
  * 用户相关(Shareholder)控制层
  *
@@ -28,9 +40,7 @@ public class ShareholderController {
      */
     private final KxsShdTradeAmtService kxsShdTradeAmtService;
     private final KxsShdScoreService kxsShdScoreService;
-
-
-
+    private final KxsUserRealLevelService kxsUserRealLevelService;
     /**
      * 股东大盘分红-获取分红奖池统计
      *
@@ -63,12 +73,37 @@ public class ShareholderController {
      */
     @GetMapping("/getShareholderUserList")
     public R getShareholderUserList(@ParameterObject Page<KxsShdScore> page, @RequestParam("month") String month, @RequestParam("type") Integer type) {
-        return R.ok(kxsShdScoreService.getShareholderUserList(page,month,type));
+        return R.ok(kxsShdScoreService.getShareholderUserList(page, month, type));
     }
 
 
+    /**
+     * 股东大盘分红-统计积分
+     * 每日计算
+     */
+    @Inner
+    @GetMapping("/integralStat")
+    public void integralStat() {
+        kxsShdScoreService.integralStat();
+    }
 
+    /**
+     * 股东大盘分红-奖池同步交易额
+     */
+    @Inner
+    @GetMapping("/prizePoolSynchronization")
+    public void prizePoolSynchronization() {
+            kxsShdTradeAmtService.prizePoolSynchronization();
+    }
 
+    /**
+     * 真实职级计算
+     */
+    @Inner
+    @GetMapping("/userRealLevel")
+    public void userRealLevel(@RequestBody KxsUserRealLevel kxsUserRealLevel) {
+        kxsUserRealLevelService.userRealLevel(kxsUserRealLevel);
+    }
 
 }
 

+ 17 - 0
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/mapper/KxsUserRealLevelMapper.java

@@ -0,0 +1,17 @@
+package com.kxs.user.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.kxs.user.api.model.KxsUserRealLevel;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 用户当前真实等级表(KxsUserRealLevel)表数据库访问层
+ *
+ * @author 系统
+ * @since 2024-05-08 14:06:37
+ */
+@Mapper
+public interface KxsUserRealLevelMapper extends BaseMapper<KxsUserRealLevel> {
+
+}
+

+ 4 - 0
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/KxsShdScoreService.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.kxs.user.api.model.KxsShdScore;
 
+import java.math.BigDecimal;
+
 /**
  * 股东大盘分红用户积分表(KxsShdScore)表服务接口
  *
@@ -20,5 +22,7 @@ public interface KxsShdScoreService extends IService<KxsShdScore> {
      * 积分统计
      */
     void integralStat();
+
+
 }
 

+ 10 - 0
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/KxsShdTradeAmtService.java

@@ -3,6 +3,8 @@ package com.kxs.user.biz.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.kxs.user.api.model.KxsShdTradeAmt;
 
+import java.math.BigDecimal;
+
 /**
  * 股东大盘分红交易表(KxsShdTradeAmt)表服务接口
  *
@@ -12,5 +14,13 @@ import com.kxs.user.api.model.KxsShdTradeAmt;
 public interface KxsShdTradeAmtService extends IService<KxsShdTradeAmt> {
 
     Object getShareholderAmount(String tradeMonth);
+
+    /**
+     * 奖池同步交易额
+
+     */
+    void prizePoolSynchronization();
+
+
 }
 

+ 17 - 0
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/KxsUserRealLevelService.java

@@ -0,0 +1,17 @@
+package com.kxs.user.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.kxs.user.api.model.KxsUserRealLevel;
+
+/**
+ * 用户当前真实等级表(KxsUserRealLevel)表服务接口
+ *
+ * @author 系统
+ * @since 2024-05-08 14:06:37
+ */
+public interface KxsUserRealLevelService extends IService<KxsUserRealLevel> {
+
+    void userRealLevel(KxsUserRealLevel kxsUserRealLevel);
+
+}
+

+ 63 - 16
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsShdScoreServiceImpl.java

@@ -5,16 +5,21 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kxs.common.security.util.SecurityUtils;
 import com.kxs.user.api.model.KxsUser;
+import com.kxs.user.api.model.KxsUserRealLevel;
 import com.kxs.user.api.vo.kxsapp.shareholder.ShareholderGetMyStandardsAllVO;
 import com.kxs.user.api.vo.kxsapp.shareholder.ShareholderGetMyStandardsVO;
 import com.kxs.user.api.vo.kxsapp.subGetShareholderUserList.UserScoreListVO;
 import com.kxs.user.biz.mapper.KxsShdScoreMapper;
 import com.kxs.user.api.model.KxsShdScore;
 import com.kxs.user.biz.mapper.KxsUserMapper;
+import com.kxs.user.biz.mapper.KxsUserRealLevelMapper;
 import com.kxs.user.biz.service.KxsShdScoreService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 
 /**
@@ -28,12 +33,16 @@ import java.util.List;
 public class KxsShdScoreServiceImpl extends ServiceImpl<KxsShdScoreMapper, KxsShdScore> implements KxsShdScoreService {
     private final KxsShdScoreMapper kxsShdScoreMapper;
     private final KxsUserMapper kxsUserMapper;
+    private final KxsUserRealLevelMapper kxsUserRealLevelMapper;
     @Override
     public Object getMyStandards(String month) {
         Long id = SecurityUtils.getUser().getId();
         KxsUser kxsUser = kxsUserMapper.selectById(id);
         //获取个人积分
         ShareholderGetMyStandardsVO shareholderGetMyStandardsVO = kxsShdScoreMapper.getMyStandards(month,kxsUser.getUserCode());
+        if (shareholderGetMyStandardsVO == null){
+            shareholderGetMyStandardsVO = new ShareholderGetMyStandardsVO();
+        }
         //获取全国积分
         ShareholderGetMyStandardsAllVO allVO = kxsShdScoreMapper.getMyStandardsAll(month);
         if (allVO != null){
@@ -61,11 +70,60 @@ public class KxsShdScoreServiceImpl extends ServiceImpl<KxsShdScoreMapper, KxsSh
     @Override
     public void integralStat() {
         //初级积分
-        //获取全部用户职级 > K3
-        //循环用户查询直属用户数量大于3
-        Long aLong = kxsUserMapper.selectCount(Wrappers.<KxsUser>query().lambda().eq(KxsUser::getPid, 1));
-        if (aLong > 3){
-            List<KxsUser> kxsUsers = kxsUserMapper.selectList(Wrappers.<KxsUser>query().lambda().eq(KxsUser::getPid, 1));
+        //获取职级 > K3 的全部用户
+        List<KxsUserRealLevel> kxsUserRealLevels = kxsUserRealLevelMapper.selectList(Wrappers.<KxsUserRealLevel>query().lambda().gt(KxsUserRealLevel::getLevel, 3));
+        //构造月份
+        LocalDateTime now = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
+        String month = now.format(formatter);
+        for (KxsUserRealLevel kxsUserRealLevel : kxsUserRealLevels) {
+            //查询全部直属用户
+            List<KxsUserRealLevel> kxsUserRealLevelList = kxsUserRealLevelMapper.selectList(Wrappers.<KxsUserRealLevel>query().lambda().eq(KxsUserRealLevel::getPid, kxsUserRealLevel.getUserId()));
+            //当直属用户大于3时才进行积分计算
+            if (kxsUserRealLevelList.size() > 3){
+                //初级积分基数
+                int firstScoreCardinal = 0;
+                //中级积分基数
+                int centerScoreCardinal = 0;
+                //高级积分基数
+                int highScoreCardinal = 0;
+                          for (KxsUserRealLevel kxsUserRealLevelSon : kxsUserRealLevelList) {
+                    int level = Integer.parseInt(kxsUserRealLevelSon.getLevel());
+                    //校验用户职级
+                    if (level > 2){
+                        ++firstScoreCardinal;
+                    }
+                    if(level > 3){
+                        ++centerScoreCardinal;
+                    }
+                    if(level > 4){
+                        ++highScoreCardinal;
+                    }
+                }
+                //用户实际获得积分
+                int firstScore = firstScoreCardinal / 3;
+                int centerScore = centerScoreCardinal / 3;
+                int highScore = highScoreCardinal / 3;
+                KxsShdScore kxsShdScore = kxsShdScoreMapper.selectOne(Wrappers.<KxsShdScore>query().lambda().eq(KxsShdScore::getUserId, kxsUserRealLevel.getUserId()).eq(KxsShdScore::getMonth,month));
+                if (kxsShdScore == null){
+                    kxsShdScore = new KxsShdScore();
+                    kxsShdScore.setCreateTime(now);
+                    kxsShdScore.setDelFlag("0");
+                    kxsShdScore.setUserId(kxsUserRealLevel.getUserId());
+                    kxsShdScore.setFirstScore(firstScore);
+                    kxsShdScore.setCenterScore(centerScore);
+                    kxsShdScore.setHighScore(highScore);
+                    kxsShdScore.setMonth(month);
+                    kxsShdScoreMapper.insert(kxsShdScore);
+                }else {
+                    //存在记录只需修改积分
+                    kxsShdScore.setFirstScore(firstScore);
+                    kxsShdScore.setCenterScore(centerScore);
+                    kxsShdScore.setHighScore(highScore);
+                    kxsShdScore.setUpdateTime(now);
+                    kxsShdScoreMapper.updateById(kxsShdScore);
+                }
+            }
         }
 
     }
@@ -78,17 +136,6 @@ public class KxsShdScoreServiceImpl extends ServiceImpl<KxsShdScoreMapper, KxsSh
 
 
 
-
-
-
-
-
-
-
-
-
-
-
 
 
 

+ 50 - 0
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsShdTradeAmtServiceImpl.java

@@ -1,10 +1,15 @@
 package com.kxs.user.biz.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kxs.common.core.util.AssertUtil;
+import com.kxs.common.core.util.R;
+import com.kxs.system.api.feign.RemoteOldService;
+import com.kxs.user.api.dto.kxsapp.PrizePoolSynchronizationDTO;
 import com.kxs.user.api.vo.kxsapp.shareholder.ShareholderGetShareholderAmountVO;
 import com.kxs.user.biz.mapper.KxsShdTradeAmtMapper;
 import com.kxs.user.api.model.KxsShdTradeAmt;
@@ -13,6 +18,10 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
 
 /**
  * 股东大盘分红交易表(KxsShdTradeAmt)表服务实现类
@@ -24,6 +33,8 @@ import java.math.BigDecimal;
 @RequiredArgsConstructor
 public class KxsShdTradeAmtServiceImpl extends ServiceImpl<KxsShdTradeAmtMapper, KxsShdTradeAmt> implements KxsShdTradeAmtService {
     private final KxsShdTradeAmtMapper kxsShdTradeAmtMapper;
+    private final RemoteOldService remoteOldService;
+
     @Override
     public Object getShareholderAmount(String tradeMonth) {
         //格式校验
@@ -35,5 +46,44 @@ public class KxsShdTradeAmtServiceImpl extends ServiceImpl<KxsShdTradeAmtMapper,
         }
         return shareholderGetShareholderAmountVO;
     }
+
+    @Override
+    public void prizePoolSynchronization() {
+        LocalDateTime now = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMM");
+        String month = now.format(formatter);
+        HashMap<String, Object> param = new HashMap<>();
+        param.put("UserId",1);
+        param.put("TradeMonthOrDate",month);
+        param.put("Kind","team");
+        R result = remoteOldService.GetUserTradeAmout(param);
+        if(result.getStatus() == 1){
+            PrizePoolSynchronizationDTO data = (PrizePoolSynchronizationDTO)result.getData();
+            BigDecimal totalPosAmt = data.getTotalPosAmt();
+            BigDecimal bonusPool = totalPosAmt.multiply(new BigDecimal("1.5")).divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP);//总奖金池  * 1.5 / 10000
+            BigDecimal bonus = bonusPool.divide(new BigDecimal("3"), 2, RoundingMode.HALF_UP);//高中低奖金池计算规则 总奖金池 / 3
+            KxsShdTradeAmt kxsShdTradeAmt = kxsShdTradeAmtMapper.selectOne(Wrappers.<KxsShdTradeAmt>query().lambda().eq(KxsShdTradeAmt::getTradeMonth, month));
+            if (kxsShdTradeAmt == null){
+                kxsShdTradeAmt = new KxsShdTradeAmt();
+                kxsShdTradeAmt.setCreateTime(LocalDateTime.now());
+                kxsShdTradeAmt.setDelFlag("0");
+                kxsShdTradeAmt.setTradeAmt(totalPosAmt);//有效交易额
+                kxsShdTradeAmt.setTradeMonth(month);//月份
+                kxsShdTradeAmt.setBonusPool(bonusPool);//总奖池
+                kxsShdTradeAmt.setFirstBonus(bonus);//初级奖池
+                kxsShdTradeAmt.setCenterBonus(bonus);//中级奖池
+                kxsShdTradeAmt.setHighBonus(bonus);//高级奖池
+                kxsShdTradeAmtMapper.insert(kxsShdTradeAmt);
+            }else {
+                kxsShdTradeAmt.setTradeAmt(totalPosAmt);//有效交易额
+                kxsShdTradeAmt.setTradeMonth(month);//月份
+                kxsShdTradeAmt.setBonusPool(bonusPool);//总奖池
+                kxsShdTradeAmt.setFirstBonus(bonus);//初级奖池
+                kxsShdTradeAmt.setCenterBonus(bonus);//中级奖池
+                kxsShdTradeAmt.setHighBonus(bonus);//高级奖池
+                kxsShdTradeAmtMapper.updateById(kxsShdTradeAmt);
+            }
+        }
+    }
 }
 

+ 56 - 0
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsUserRealLevelServiceImpl.java

@@ -0,0 +1,56 @@
+package com.kxs.user.biz.service.impl;
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.common.core.constant.SecurityConstants;
+import com.kxs.common.core.util.R;
+import com.kxs.stat.api.feign.RemoteKxsStatService;
+import com.kxs.stat.api.model.KxsUserTrade;
+import com.kxs.user.api.emun.UserLevel;
+import com.kxs.user.api.model.KxsUser;
+import com.kxs.user.biz.mapper.KxsUserMapper;
+import com.kxs.user.biz.mapper.KxsUserRealLevelMapper;
+import com.kxs.user.api.model.KxsUserRealLevel;
+import com.kxs.user.biz.service.KxsUserRealLevelService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+/**
+ * 用户当前真实等级表(KxsUserRealLevel)表服务实现类
+ *
+ * @author 系统
+ * @since 2024-05-08 14:06:37
+ */
+@Service("kxsUserRealLevelService")
+@RequiredArgsConstructor
+public class KxsUserRealLevelServiceImpl extends ServiceImpl<KxsUserRealLevelMapper, KxsUserRealLevel> implements KxsUserRealLevelService {
+    private final KxsUserMapper kxsUserMapper;
+    @Override
+    public void userRealLevel(KxsUserRealLevel kxsUserRealLevel) {
+        Long userId = kxsUserRealLevel.getUserId();
+        //构造月份
+        LocalDateTime now = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
+        String month = now.format(formatter);
+        //查询记录
+        KxsUserRealLevel kxsUserRealLevelSelect = baseMapper.selectOne(Wrappers.<KxsUserRealLevel>query().lambda().eq(KxsUserRealLevel::getUserId, userId).eq(KxsUserRealLevel::getMonth, month));
+        if (kxsUserRealLevelSelect == null){
+            //如果为空则增加pid后增加数据
+            KxsUser kxsUser = kxsUserMapper.selectById(userId);
+            kxsUserRealLevel.setPid(Long.valueOf(kxsUser.getPid()));
+            baseMapper.insert(kxsUserRealLevel);
+        }else {
+            //如果不为空则修改修改时间和职级
+            kxsUserRealLevelSelect.setLevel(kxsUserRealLevel.getLevel());
+            kxsUserRealLevelSelect.setUpdateTime(LocalDateTime.now());
+            baseMapper.updateById(kxsUserRealLevelSelect);
+        }
+    }
+
+}
+

+ 18 - 0
kxs-user/kxs-user-biz/src/main/resources/mapper/KxsUserRealLevelMapper.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="com.kxs.user.biz.mapper.KxsUserRealLevelMapper">
+
+    <resultMap type="com.kxs.user.api.model.KxsUserRealLevel" id="KxsUserRealLevelMap">
+        <result column="id" property="id" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="del_flag" property="delFlag" />
+        <result column="version" property="version" />
+        <result column="month" property="month" />
+        <result column="level" property="level" />
+        <result column="user_id" property="userId" />
+        <result column="pid" property="pid" />
+
+    </resultMap>
+
+</mapper>