Browse Source

feat: v3 同一企业,当前月给多个用户支付相同金额

shc 3 years ago
parent
commit
118806faad

+ 32 - 0
db/v2022/6single_ent_settle_same_amount_for_members_in_current_month.sql

@@ -0,0 +1,32 @@
+USE hnqzx;
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for single_ent_settle_same_amount_for_members_in_current_month
+-- ----------------------------
+DROP TABLE IF EXISTS `single_ent_settle_same_amount_for_members_in_current_month`;
+CREATE TABLE `single_ent_settle_same_amount_for_members_in_current_month`
+(
+    `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 '统计周期',
+    `member_count`            INT UNSIGNED 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/SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth.java

@@ -0,0 +1,95 @@
+package com.qunzhixinxi.hnqz.daemon.quartz.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+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_ent_settle_same_amount_for_members_in_current_month")
+public class SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth 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 Integer memberCount;
+
+	/**
+	 * 记录创建时间
+	 */
+	private LocalDateTime createTime;
+
+}

+ 9 - 0
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/mapper/SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthMapper.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.SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthMapper extends BaseMapper<SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth> {
+}

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

@@ -48,4 +48,14 @@ public interface WmScorePackageSettleNoteService extends IService<WmScorePackage
 	 * @return 运行结果
 	 */
 	List<SingleMemberSettleSameAmountInSeveralMonths> singleMemberSettleAmountOverrunInSeveralMonths(LocalDateTime startTime, LocalDateTime endTime, BigDecimal limit);
+
+	/**
+	 * 同一企业,当前月给多个用户支付相同金额
+	 *
+	 * @param startTime   开始时间
+	 * @param endTime     结束时间
+	 * @param memberCount 统计个数
+	 * @return 风控对象
+	 */
+	List<SingleMemberSettleSameAmountInSeveralMonths> singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth(LocalDateTime startTime, LocalDateTime endTime, int memberCount);
 }

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

@@ -96,7 +96,7 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 			List<SingleMemberSettleSameAmountInSeveralMonths> coll = entry.getValue().stream().filter(e -> e.getSettleAmount() != null).collect(Collectors.toList());
 
 			BigDecimal tmp = BigDecimal.ZERO;
-			for (SingleMemberSettleSameAmountInSeveralMonths e : coll){
+			for (SingleMemberSettleSameAmountInSeveralMonths e : coll) {
 				tmp = tmp.add(e.getSettleAmount());
 			}
 
@@ -107,4 +107,33 @@ public class WmScorePackageSettleNoteServiceImpl extends ServiceImpl<WmScorePack
 
 		return riskList;
 	}
+
+	/**
+	 * 同一企业,当前月给多个用户支付相同金额
+	 *
+	 * @param startTime   开始时间
+	 * @param endTime     结束时间
+	 * @param memberCount 统计个数
+	 * @return 风控对象
+	 */
+	@Override
+	public List<SingleMemberSettleSameAmountInSeveralMonths> singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth(LocalDateTime startTime, LocalDateTime endTime, int memberCount) {
+		List<SingleMemberSettleSameAmountInSeveralMonths> list = wmScorePackageSettleNoteMapper.singleMemberSettleSameAmountInSeveralMonths(startTime, endTime);
+
+		// 按照企业分组,然后按照结算金额分组,如果结算金额对应的结算记录大于1,则表明有相同的金额
+		Map<String, Map<BigDecimal, List<SingleMemberSettleSameAmountInSeveralMonths>>> collect = list.stream().collect(Collectors.groupingBy(SingleMemberSettleSameAmountInSeveralMonths::getDeptId, Collectors.groupingBy(SingleMemberSettleSameAmountInSeveralMonths::getSettleAmount)));
+
+		List<SingleMemberSettleSameAmountInSeveralMonths> riskResult = 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() > memberCount) {
+					riskResult.addAll(ent.getValue());
+				}
+			}
+
+		}
+
+		return riskResult;
+	}
 }

+ 58 - 0
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/task/SpringBeanTaskDemo.java

@@ -22,9 +22,11 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.qunzhixinxi.hnqz.daemon.quartz.constants.HnqzQuartzEnum;
+import com.qunzhixinxi.hnqz.daemon.quartz.entity.SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.SingleMemberSettleAmountOverrunInSeveralMonths;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.SingleMemberSettleSameAmountInSeveralMonths;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.WmTaskType;
+import com.qunzhixinxi.hnqz.daemon.quartz.mapper.SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthMapper;
 import com.qunzhixinxi.hnqz.daemon.quartz.mapper.SingleMemberSettleAmountOverrunInSeveralMonthsMapper;
 import com.qunzhixinxi.hnqz.daemon.quartz.mapper.SingleMemberSettleSameAmountInSeveralMonthsMapper;
 import com.qunzhixinxi.hnqz.daemon.quartz.service.*;
@@ -61,6 +63,7 @@ public class SpringBeanTaskDemo {
 	private final WmStatisticsService wmStatisticsService;
 	private final SingleMemberSettleSameAmountInSeveralMonthsMapper singleMemberSettleSameAmountInSeveralMonthsMapper;
 	private final SingleMemberSettleAmountOverrunInSeveralMonthsMapper singleMemberSettleAmountOverrunInSeveralMonthsMapper;
+	private final SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthMapper singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthMapper;
 
 //	/**
 //	 * 测试Spring Bean的演示方法
@@ -236,4 +239,59 @@ public class SpringBeanTaskDemo {
 	}
 
 
+	/**
+	 * 同一企业,当前月给多个用户支付相同金额
+	 *
+	 * @param para 参数(统计人数)
+	 * @return 运行结果
+	 */
+	@SneakyThrows
+	public String singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth(String para) {
+
+		// 校验参数
+		if (StrUtil.isBlank(para)) {
+			log.error("参数缺失");
+			return HnqzQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
+		}
+
+		int memberCount = Integer.parseInt(para.trim());
+
+		if (memberCount <= 1) {
+			log.error("参数错误");
+			return HnqzQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
+		}
+
+		// 计算查询时间
+		int period = 1;
+		LocalDate now = LocalDateTime.now().toLocalDate().with(TemporalAdjusters.firstDayOfNextMonth());
+		LocalDateTime startTime = LocalDateTime.of(now.minusMonths(period), LocalTime.MIN);
+		LocalDateTime endTime = LocalDateTime.of(now, LocalTime.MIN).minusSeconds(1);
+
+		log.info("singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth开始于:{},输入参数{}", LocalDateTime.now(), para);
+
+		List<SingleMemberSettleSameAmountInSeveralMonths> result = scorePackageSettleNoteService.singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth(startTime, endTime, memberCount);
+
+		if (CollUtil.isNotEmpty(result)) {
+			List<SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth> history = singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthMapper.selectList(Wrappers.<SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth>lambdaQuery().between(SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth::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(SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth::getRecordId).boxed().collect(Collectors.toList());
+				singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthMapper.deleteBatchIds(ids);
+			}
+
+			result.forEach(e -> {
+				SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth
+						= BeanUtil.copyProperties(e, SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth.class);
+				singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth.setPeriod(period);
+				singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth.setMemberCount(memberCount);
+				singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth.setCreateTime(LocalDateTime.now());
+				singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthMapper.insert(singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth);
+			});
+		}
+
+		return HnqzQuartzEnum.JOB_LOG_STATUS_SUCCESS.getType();
+
+	}
+
 }