Browse Source

feat: v2.2 同一用户,连续3个月结算金额超过14万

shc 3 năm trước cách đây
mục cha
commit
6658edb78c

+ 32 - 0
db/v2022/5single_member_settle_amount_overrun_in_several_months.sql

@@ -0,0 +1,32 @@
+USE hnqzx;
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for single_member_settle_amount_overrun_in_several_months
+-- ----------------------------
+DROP TABLE IF EXISTS `single_member_settle_amount_overrun_in_several_months`;
+CREATE TABLE `single_member_settle_amount_overrun_in_several_months`
+(
+    `record_id`               INT UNSIGNED AUTO_INCREMENT COMMENT 'id',
+    `note_id`                 INT UNSIGNED NULL COMMENT '积分包计算记录id',
+    `realname`                VARCHAR(32)  NULL COMMENT '用户名称',
+    `username`                VARCHAR(11)  NULL COMMENT '用户名',
+    `dept_id`                 INT          NULL COMMENT '结算企业id',
+    `dept_name`               VARCHAR(64)  NULL COMMENT '结算企业名称',
+    `settle_amount`           DECIMAL      NULL COMMENT '结算金额',
+    `sub_to_gig_time`         DATETIME     NULL COMMENT '结算时间',
+    `settle_state`            VARCHAR(16)  NULL COMMENT '结算企业名称',
+    `sub_type_name`           VARCHAR(16)  NULL COMMENT '结算渠道名称',
+    `package_name`            VARCHAR(64)  NULL COMMENT '积分包名称',
+    `settle_note_create_time` DATETIME     NULL COMMENT '结算记录创建时间',
+    `period`                  INT UNSIGNED NULL COMMENT '统计周期',
+    `platform_limit`          DECIMAL      NULL COMMENT '结算限制',
+    `create_time`             DATETIME     NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    PRIMARY KEY (`record_id`) USING BTREE
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4 COMMENT ='单人连续多月结算额超标';
+
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 95 - 0
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/entity/SingleMemberSettleAmountOverrunInSeveralMonths.java

@@ -0,0 +1,95 @@
+package com.qunzhixinxi.hnqz.daemon.quartz.entity;
+
+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 lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@TableName(value = "single_member_settle_amount_overrun_in_several_months")
+public class SingleMemberSettleAmountOverrunInSeveralMonths implements Serializable {
+
+	private static final long serialVersionUID = -3597822678068222296L;
+
+	/**
+	 * 记录id
+	 */
+	@TableId(type = IdType.AUTO)
+	private Integer recordId;
+
+	/**
+	 * 结算记录id
+	 */
+	private Integer noteId;
+
+	/**
+	 * 真实名称
+	 */
+	private String realname;
+
+	/**
+	 * 用户名
+	 */
+	private String username;
+
+	/**
+	 * 结算企业id
+	 */
+	private String deptId;
+
+	/**
+	 * 结算企业信息
+	 */
+	private String deptName;
+
+	/**
+	 * 结算金额
+	 */
+	private BigDecimal settleAmount;
+
+	/**
+	 * 提交结算时间
+	 */
+	private LocalDateTime subToGigTime;
+
+	/**
+	 * 结算状态
+	 */
+	private String settleState;
+
+	/**
+	 * 结算渠道名称
+	 */
+	private String subTypeName;
+
+	/**
+	 * 积分包名称
+	 */
+	private String packageName;
+
+	/**
+	 * 结算记录创建时间
+	 */
+	private String settleNoteCreateTime;
+
+	/**
+	 * 统计周期
+	 */
+	private Integer period;
+
+	/**
+	 * 结算限制
+	 */
+	private BigDecimal platformLimit;
+
+	/**
+	 * 记录创建时间
+	 */
+	private LocalDateTime createTime;
+
+}

+ 9 - 0
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/mapper/SingleMemberSettleAmountOverrunInSeveralMonthsMapper.java

@@ -0,0 +1,9 @@
+package com.qunzhixinxi.hnqz.daemon.quartz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qunzhixinxi.hnqz.daemon.quartz.entity.SingleMemberSettleAmountOverrunInSeveralMonths;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SingleMemberSettleAmountOverrunInSeveralMonthsMapper extends BaseMapper<SingleMemberSettleAmountOverrunInSeveralMonths> {
+}

+ 10 - 0
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/service/WmScorePackageSettleNoteService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.SingleMemberSettleSameAmountInSeveralMonths;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.SingleMemberSettleSameAmountInSeveralMonths;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.WmScorePackageSettleNote;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.WmScorePackageSettleNote;
 
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.List;
 
 
@@ -38,4 +39,13 @@ public interface WmScorePackageSettleNoteService extends IService<WmScorePackage
 	List<SingleMemberSettleSameAmountInSeveralMonths> singleMemberSettleSameAmountInSeveralMonths(LocalDateTime startTime, LocalDateTime endTime);
 	List<SingleMemberSettleSameAmountInSeveralMonths> singleMemberSettleSameAmountInSeveralMonths(LocalDateTime startTime, LocalDateTime endTime);
 
 
 
 
+	/**
+	 * 同一用户,连续多月结算金额超过限额
+	 *
+	 * @param startTime 开始时间
+	 * @param endTime   结束时间
+	 * @param limit     限额
+	 * @return 运行结果
+	 */
+	List<SingleMemberSettleSameAmountInSeveralMonths> singleMemberSettleAmountOverrunInSeveralMonths(LocalDateTime startTime, LocalDateTime endTime, BigDecimal limit);
 }
 }

+ 37 - 3
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/service/impl/WmScorePackageSettleNoteServiceImpl.java

@@ -14,6 +14,7 @@ import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -63,9 +64,9 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 
 
 		List<SingleMemberSettleSameAmountInSeveralMonths> duplicated = new ArrayList<>(list.size());
 		List<SingleMemberSettleSameAmountInSeveralMonths> duplicated = new ArrayList<>(list.size());
 
 
-		for (Map.Entry<String, Map<BigDecimal, List<SingleMemberSettleSameAmountInSeveralMonths>>> entry : collect.entrySet()){
-			for (Map.Entry<BigDecimal, List<SingleMemberSettleSameAmountInSeveralMonths>> ent : entry.getValue().entrySet()){
-				if (ent.getValue().size() > 1){
+		for (Map.Entry<String, Map<BigDecimal, List<SingleMemberSettleSameAmountInSeveralMonths>>> entry : collect.entrySet()) {
+			for (Map.Entry<BigDecimal, List<SingleMemberSettleSameAmountInSeveralMonths>> ent : entry.getValue().entrySet()) {
+				if (ent.getValue().size() > 1) {
 					duplicated.addAll(ent.getValue());
 					duplicated.addAll(ent.getValue());
 				}
 				}
 			}
 			}
@@ -73,4 +74,37 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 
 
 		return duplicated;
 		return duplicated;
 	}
 	}
+
+	/**
+	 * 同一用户,连续多月结算金额超过限额
+	 *
+	 * @param startTime 开始时间
+	 * @param endTime   结束时间
+	 * @param limit     限额
+	 * @return 运行结果
+	 */
+	@Override
+	public List<SingleMemberSettleSameAmountInSeveralMonths> singleMemberSettleAmountOverrunInSeveralMonths(LocalDateTime startTime, LocalDateTime endTime, BigDecimal limit) {
+		List<SingleMemberSettleSameAmountInSeveralMonths> list = wmScorePackageSettleNoteMapper.singleMemberSettleSameAmountInSeveralMonths(startTime, endTime);
+
+		Map<String, List<SingleMemberSettleSameAmountInSeveralMonths>> collect = list.stream().collect(Collectors.groupingBy(SingleMemberSettleSameAmountInSeveralMonths::getUsername));
+
+		List<SingleMemberSettleSameAmountInSeveralMonths> riskList = new ArrayList<>(list.size());
+
+		for (Map.Entry<String, List<SingleMemberSettleSameAmountInSeveralMonths>> entry : collect.entrySet()) {
+
+			List<SingleMemberSettleSameAmountInSeveralMonths> coll = entry.getValue().stream().filter(e -> e.getSettleAmount() != null).collect(Collectors.toList());
+
+			BigDecimal tmp = BigDecimal.ZERO;
+			for (SingleMemberSettleSameAmountInSeveralMonths e : coll){
+				tmp = tmp.add(e.getSettleAmount());
+			}
+
+			if (limit.subtract(tmp).doubleValue() < 0.01) {
+				riskList.addAll(entry.getValue());
+			}
+		}
+
+		return riskList;
+	}
 }
 }

+ 28 - 23
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/task/SpringBeanTaskDemo.java

@@ -17,12 +17,15 @@
 
 
 package com.qunzhixinxi.hnqz.daemon.quartz.task;
 package com.qunzhixinxi.hnqz.daemon.quartz.task;
 
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.qunzhixinxi.hnqz.daemon.quartz.constants.HnqzQuartzEnum;
 import com.qunzhixinxi.hnqz.daemon.quartz.constants.HnqzQuartzEnum;
+import com.qunzhixinxi.hnqz.daemon.quartz.entity.SingleMemberSettleAmountOverrunInSeveralMonths;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.SingleMemberSettleSameAmountInSeveralMonths;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.SingleMemberSettleSameAmountInSeveralMonths;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.WmTaskType;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.WmTaskType;
+import com.qunzhixinxi.hnqz.daemon.quartz.mapper.SingleMemberSettleAmountOverrunInSeveralMonthsMapper;
 import com.qunzhixinxi.hnqz.daemon.quartz.mapper.SingleMemberSettleSameAmountInSeveralMonthsMapper;
 import com.qunzhixinxi.hnqz.daemon.quartz.mapper.SingleMemberSettleSameAmountInSeveralMonthsMapper;
 import com.qunzhixinxi.hnqz.daemon.quartz.service.*;
 import com.qunzhixinxi.hnqz.daemon.quartz.service.*;
 import com.qunzhixinxi.hnqz.daemon.quartz.zhuqu.ZhuaquTest;
 import com.qunzhixinxi.hnqz.daemon.quartz.zhuqu.ZhuaquTest;
@@ -57,6 +60,7 @@ public class SpringBeanTaskDemo {
 	private final WmWkArticleService wmWkArticleService;
 	private final WmWkArticleService wmWkArticleService;
 	private final WmStatisticsService wmStatisticsService;
 	private final WmStatisticsService wmStatisticsService;
 	private final SingleMemberSettleSameAmountInSeveralMonthsMapper singleMemberSettleSameAmountInSeveralMonthsMapper;
 	private final SingleMemberSettleSameAmountInSeveralMonthsMapper singleMemberSettleSameAmountInSeveralMonthsMapper;
+	private final SingleMemberSettleAmountOverrunInSeveralMonthsMapper singleMemberSettleAmountOverrunInSeveralMonthsMapper;
 
 
 //	/**
 //	/**
 //	 * 测试Spring Bean的演示方法
 //	 * 测试Spring Bean的演示方法
@@ -143,9 +147,6 @@ public class SpringBeanTaskDemo {
 		LocalDateTime startTime = LocalDateTime.of(now.minusMonths(period), LocalTime.MIN);
 		LocalDateTime startTime = LocalDateTime.of(now.minusMonths(period), LocalTime.MIN);
 		LocalDateTime endTime = LocalDateTime.of(now, LocalTime.MIN).minusSeconds(1);
 		LocalDateTime endTime = LocalDateTime.of(now, LocalTime.MIN).minusSeconds(1);
 
 
-		System.out.println(startTime);
-		System.out.println(endTime);
-
 		log.info("singleMemberSettleSameAmountInSeveralMonths开始于:{},输入参数{}", LocalDateTime.now(), para);
 		log.info("singleMemberSettleSameAmountInSeveralMonths开始于:{},输入参数{}", LocalDateTime.now(), para);
 
 
 		List<SingleMemberSettleSameAmountInSeveralMonths> result = scorePackageSettleNoteService.singleMemberSettleSameAmountInSeveralMonths(startTime, endTime);
 		List<SingleMemberSettleSameAmountInSeveralMonths> result = scorePackageSettleNoteService.singleMemberSettleSameAmountInSeveralMonths(startTime, endTime);
@@ -182,14 +183,14 @@ public class SpringBeanTaskDemo {
 			return HnqzQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
 			return HnqzQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
 		}
 		}
 
 
-		if (!para.contains(StrUtil.COMMA)){
+		if (!para.contains(StrUtil.COMMA)) {
 			log.error("参数错误");
 			log.error("参数错误");
 			return HnqzQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
 			return HnqzQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
 		}
 		}
 
 
 		List<String> params = StrUtil.split(para.trim(), StrUtil.COMMA);
 		List<String> params = StrUtil.split(para.trim(), StrUtil.COMMA);
 
 
-		if (params.size() != 2){
+		if (params.size() != 2) {
 			log.error("参数错误");
 			log.error("参数错误");
 			return HnqzQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
 			return HnqzQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
 		}
 		}
@@ -208,24 +209,28 @@ public class SpringBeanTaskDemo {
 		LocalDateTime endTime = LocalDateTime.of(now, LocalTime.MIN).minusSeconds(1);
 		LocalDateTime endTime = LocalDateTime.of(now, LocalTime.MIN).minusSeconds(1);
 
 
 		log.info("singleMemberSettleAmountOverrunInSeveralMonths开始于:{},输入参数{}", LocalDateTime.now(), para);
 		log.info("singleMemberSettleAmountOverrunInSeveralMonths开始于:{},输入参数{}", LocalDateTime.now(), para);
-		//
-		// List<SingleMemberSettleSameAmountInSeveralMonths> result = scorePackageSettleNoteService.singleMemberSettleAmountOverrunInSeveralMonths(startTime, endTime, limit);
-		//
-		// if (CollUtil.isNotEmpty(result)) {
-		// 	List<SingleMemberSettleSameAmountInSeveralMonths> history = singleMemberSettleSameAmountInSeveralMonthsMapper.selectList(Wrappers.<SingleMemberSettleSameAmountInSeveralMonths>lambdaQuery().between(SingleMemberSettleSameAmountInSeveralMonths::getCreateTime, LocalDateTime.of(LocalDate.now(), LocalTime.MIN), LocalDateTime.of(LocalDate.now(), LocalTime.MAX)));
-		// 	// 删除历史记录
-		// 	log.warn("删除当期的历史记录:{}", history);
-		// 	if (CollUtil.isNotEmpty(history)) {
-		// 		List<Integer> ids = history.stream().mapToInt(SingleMemberSettleSameAmountInSeveralMonths::getRecordId).boxed().collect(Collectors.toList());
-		// 		singleMemberSettleSameAmountInSeveralMonthsMapper.deleteBatchIds(ids);
-		// 	}
-		//
-		// 	result.forEach(e -> {
-		// 		e.setPeriod(period);
-		// 		singleMemberSettleSameAmountInSeveralMonthsMapper.insert(e);
-		// 	});
-		// }
-		//
+
+		List<SingleMemberSettleSameAmountInSeveralMonths> result = scorePackageSettleNoteService.singleMemberSettleAmountOverrunInSeveralMonths(startTime, endTime, limit);
+
+		if (CollUtil.isNotEmpty(result)) {
+			List<SingleMemberSettleAmountOverrunInSeveralMonths> history = singleMemberSettleAmountOverrunInSeveralMonthsMapper.selectList(Wrappers.<SingleMemberSettleAmountOverrunInSeveralMonths>lambdaQuery().between(SingleMemberSettleAmountOverrunInSeveralMonths::getCreateTime, LocalDateTime.of(LocalDate.now(), LocalTime.MIN), LocalDateTime.of(LocalDate.now(), LocalTime.MAX)));
+			// 删除历史记录
+			log.warn("删除当期的历史记录:{}", history);
+			if (CollUtil.isNotEmpty(history)) {
+				List<Integer> ids = history.stream().mapToInt(SingleMemberSettleAmountOverrunInSeveralMonths::getRecordId).boxed().collect(Collectors.toList());
+				singleMemberSettleAmountOverrunInSeveralMonthsMapper.deleteBatchIds(ids);
+			}
+
+			result.forEach(e -> {
+				SingleMemberSettleAmountOverrunInSeveralMonths singleMemberSettleAmountOverrunInSeveralMonths
+						= BeanUtil.copyProperties(e, SingleMemberSettleAmountOverrunInSeveralMonths.class);
+				singleMemberSettleAmountOverrunInSeveralMonths.setPeriod(period);
+				singleMemberSettleAmountOverrunInSeveralMonths.setPlatformLimit(limit);
+				singleMemberSettleAmountOverrunInSeveralMonths.setCreateTime(LocalDateTime.now());
+				singleMemberSettleAmountOverrunInSeveralMonthsMapper.insert(singleMemberSettleAmountOverrunInSeveralMonths);
+			});
+		}
+
 		return HnqzQuartzEnum.JOB_LOG_STATUS_SUCCESS.getType();
 		return HnqzQuartzEnum.JOB_LOG_STATUS_SUCCESS.getType();
 
 
 	}
 	}

+ 1 - 0
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/util/SpringBeanTaskInvok.java

@@ -72,6 +72,7 @@ public class SpringBeanTaskInvok implements ITaskInvok {
 		}
 		}
 		catch (InvocationTargetException e) {
 		catch (InvocationTargetException e) {
 			log.error("定时任务spring bean反射执行异常,执行任务:{}", sysJob.getClassName());
 			log.error("定时任务spring bean反射执行异常,执行任务:{}", sysJob.getClassName());
+			e.printStackTrace();
 			throw new TaskException("定时任务spring bean反射执行异常,执行任务:" + sysJob.getClassName());
 			throw new TaskException("定时任务spring bean反射执行异常,执行任务:" + sysJob.getClassName());
 		}
 		}
 	}
 	}