shc преди 3 години
родител
ревизия
f8557a726f
променени са 18 файла, в които са добавени 509 реда и са изтрити 34 реда
  1. 26 0
      db/v2022/7single_member_without_such_task_types_in_several_months.sql
  2. 5 0
      hnqz-upms/hnqz-upms-api/pom.xml
  3. 16 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth.java
  4. 16 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SingleMemberSettleAmountOverrunInSeveralMonths.java
  5. 15 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SingleMemberSettleSameAmountInSeveralMonths.java
  6. 74 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SingleMemberWithoutSuchTaskTypesInSeveralMonths.java
  7. 67 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/RiskControlController.java
  8. 9 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SingleMemberWithoutSuchTaskTypesInSeveralMonthsMapper.java
  9. 7 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SingleMemberWithoutSuchTaskTypesInSeveralMonthsService.java
  10. 16 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SingleMemberWithoutSuchTaskTypesInSeveralMonthsServiceImpl.java
  11. 1 1
      hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/controller/SysJobLogController.java
  12. 65 0
      hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/entity/SingleMemberWithoutSuchTaskTypesInSeveralMonths.java
  13. 9 0
      hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/mapper/SingleMemberWithoutSuchTaskTypesInSeveralMonthsMapper.java
  14. 8 0
      hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/mapper/WmTaskMapper.java
  15. 6 0
      hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/service/WmTaskService.java
  16. 41 1
      hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/service/impl/WmTaskServiceImpl.java
  17. 77 0
      hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/task/SpringBeanTaskDemo.java
  18. 51 32
      hnqz-visual/hnqz-daemon-quartz/src/main/resources/mapper/WmTaskMapper.xml

+ 26 - 0
db/v2022/7single_member_without_such_task_types_in_several_months.sql

@@ -0,0 +1,26 @@
+USE hnqzx;
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for single_member_without_such_task_types_in_several_months
+-- ----------------------------
+DROP TABLE IF EXISTS `single_member_without_such_task_types_in_several_months`;
+CREATE TABLE `single_member_without_such_task_types_in_several_months`
+(
+    `record_id`   INT UNSIGNED AUTO_INCREMENT COMMENT 'id',
+    `user_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 '结算企业名称',
+    `period`      INT UNSIGNED NULL COMMENT '统计周期',
+    `type_list`   VARCHAR(255) 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;

+ 5 - 0
hnqz-upms/hnqz-upms-api/pom.xml

@@ -49,5 +49,10 @@
 			<groupId>com.qunzhixinxi</groupId>
 			<artifactId>hnqz-common-feign</artifactId>
 		</dependency>
+		<dependency>
+			<groupId>com.pig4cloud.excel</groupId>
+			<artifactId>excel-spring-boot-starter</artifactId>
+			<version>0.4.1</version>
+		</dependency>
 	</dependencies>
 </project>

+ 16 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth.java

@@ -1,5 +1,6 @@
 package com.qunzhixinxi.hnqz.admin.api.entity;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -20,76 +21,91 @@ public class SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth imp
 	 * 记录id
 	 */
 	@TableId(type = IdType.AUTO)
+	@ExcelProperty("序号")
 	private Integer recordId;
 
 	/**
 	 * 结算记录id
 	 */
+	@ExcelProperty("结算记录id")
 	private Integer noteId;
 
 	/**
 	 * 真实名称
 	 */
+	@ExcelProperty("真实名称")
 	private String realname;
 
 	/**
 	 * 用户名
 	 */
+	@ExcelProperty("用户名")
 	private String username;
 
 	/**
 	 * 结算企业id
 	 */
+	@ExcelProperty("结算企业id")
 	private String deptId;
 
 	/**
 	 * 结算企业信息
 	 */
+	@ExcelProperty("结算企业信息")
 	private String deptName;
 
 	/**
 	 * 结算金额
 	 */
+	@ExcelProperty("结算金额")
 	private BigDecimal settleAmount;
 
 	/**
 	 * 提交结算时间
 	 */
+	@ExcelProperty("提交结算时间")
 	private LocalDateTime subToGigTime;
 
 	/**
 	 * 结算状态
 	 */
+	@ExcelProperty("结算状态")
 	private String settleState;
 
 	/**
 	 * 结算渠道名称
 	 */
+	@ExcelProperty("结算渠道名称")
 	private String subTypeName;
 
 	/**
 	 * 积分包名称
 	 */
+	@ExcelProperty("积分包名称")
 	private String packageName;
 
 	/**
 	 * 结算记录创建时间
 	 */
+	@ExcelProperty("结算记录创建时间")
 	private String settleNoteCreateTime;
 
 	/**
 	 * 统计周期
 	 */
+	@ExcelProperty("统计周期")
 	private Integer period;
 
 	/**
 	 * 风控人数
 	 */
+	@ExcelProperty("风控人数")
 	private Integer memberCount;
 
 	/**
 	 * 记录创建时间
 	 */
+	@ExcelProperty("记录创建时间")
 	private LocalDateTime createTime;
 
 }

+ 16 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SingleMemberSettleAmountOverrunInSeveralMonths.java

@@ -1,5 +1,6 @@
 package com.qunzhixinxi.hnqz.admin.api.entity;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -19,76 +20,91 @@ public class SingleMemberSettleAmountOverrunInSeveralMonths implements Serializa
 	 * 记录id
 	 */
 	@TableId(type = IdType.AUTO)
+	@ExcelProperty("记录id")
 	private Integer recordId;
 
 	/**
 	 * 结算记录id
 	 */
+	@ExcelProperty("结算记录id")
 	private Integer noteId;
 
 	/**
 	 * 真实名称
 	 */
+	@ExcelProperty("真实名称")
 	private String realname;
 
 	/**
 	 * 用户名
 	 */
+	@ExcelProperty("用户名")
 	private String username;
 
 	/**
 	 * 结算企业id
 	 */
+	@ExcelProperty("结算企业id")
 	private String deptId;
 
 	/**
 	 * 结算企业信息
 	 */
+	@ExcelProperty("结算企业信息")
 	private String deptName;
 
 	/**
 	 * 结算金额
 	 */
+	@ExcelProperty("结算金额")
 	private BigDecimal settleAmount;
 
 	/**
 	 * 提交结算时间
 	 */
+	@ExcelProperty("提交结算时间")
 	private LocalDateTime subToGigTime;
 
 	/**
 	 * 结算状态
 	 */
+	@ExcelProperty("结算状态")
 	private String settleState;
 
 	/**
 	 * 结算渠道名称
 	 */
+	@ExcelProperty("结算渠道名称")
 	private String subTypeName;
 
 	/**
 	 * 积分包名称
 	 */
+	@ExcelProperty("积分包名称")
 	private String packageName;
 
 	/**
 	 * 结算记录创建时间
 	 */
+	@ExcelProperty("结算记录创建时间")
 	private String settleNoteCreateTime;
 
 	/**
 	 * 统计周期
 	 */
+	@ExcelProperty("统计周期")
 	private Integer period;
 
 	/**
 	 * 结算限制
 	 */
+	@ExcelProperty("结算限制")
 	private BigDecimal platformLimit;
 
 	/**
 	 * 记录创建时间
 	 */
+	@ExcelProperty("记录创建时间")
 	private LocalDateTime createTime;
 
 }

+ 15 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SingleMemberSettleSameAmountInSeveralMonths.java

@@ -1,5 +1,6 @@
 package com.qunzhixinxi.hnqz.admin.api.entity;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -20,71 +21,85 @@ public class SingleMemberSettleSameAmountInSeveralMonths implements Serializable
 	 * 记录id
 	 */
 	@TableId(type = IdType.AUTO)
+	@ExcelProperty("记录id")
 	private Integer recordId;
 
 	/**
 	 * 结算记录id
 	 */
+	@ExcelProperty("结算记录id")
 	private Integer noteId;
 
 	/**
 	 * 真实名称
 	 */
+	@ExcelProperty("真实名称")
 	private String realname;
 
 	/**
 	 * 用户名
 	 */
+	@ExcelProperty("用户名")
 	private String username;
 
 	/**
 	 * 结算企业id
 	 */
+	@ExcelProperty("结算企业id")
 	private String deptId;
 
 	/**
 	 * 结算企业信息
 	 */
+	@ExcelProperty("结算企业信息")
 	private String deptName;
 
 	/**
 	 * 结算金额
 	 */
+	@ExcelProperty("结算金额")
 	private BigDecimal settleAmount;
 
 	/**
 	 * 提交结算时间
 	 */
+	@ExcelProperty("提交结算时间")
 	private LocalDateTime subToGigTime;
 
 	/**
 	 * 结算状态
 	 */
+	@ExcelProperty("结算状态")
 	private String settleState;
 
 	/**
 	 * 结算渠道名称
 	 */
+	@ExcelProperty("结算渠道名称")
 	private String subTypeName;
 
 	/**
 	 * 积分包名称
 	 */
+	@ExcelProperty("积分包名称")
 	private String packageName;
 
 	/**
 	 * 结算记录创建时间
 	 */
+	@ExcelProperty("结算记录创建时间")
 	private String settleNoteCreateTime;
 
 	/**
 	 * 统计周期
 	 */
+	@ExcelProperty("统计周期")
 	private Integer period;
 
 	/**
 	 * 记录创建时间
 	 */
+	@ExcelProperty("记录创建时间")
 	private LocalDateTime createTime;
 
 }

+ 74 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SingleMemberWithoutSuchTaskTypesInSeveralMonths.java

@@ -0,0 +1,74 @@
+package com.qunzhixinxi.hnqz.admin.api.entity;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+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.time.LocalDateTime;
+
+
+@Data
+@TableName(value = "single_member_without_such_task_types_in_several_months")
+public class SingleMemberWithoutSuchTaskTypesInSeveralMonths implements Serializable {
+
+	private static final long serialVersionUID = -3597822678068222296L;
+
+	/**
+	 * 记录id
+	 */
+	@TableId(type = IdType.AUTO)
+	@ExcelProperty("记录id")
+	private Integer recordId;
+
+	/**
+	 * 人员id
+	 */
+	@ExcelProperty("人员id")
+	private Integer userId;
+
+	/**
+	 * 真实名称
+	 */
+	@ExcelProperty("真实名称")
+	private String realname;
+
+	/**
+	 * 用户名
+	 */
+	@ExcelProperty("用户名")
+	private String username;
+
+	/**
+	 * 结算企业id
+	 */
+	@ExcelProperty("结算企业id")
+	private String deptId;
+
+	/**
+	 * 结算企业信息
+	 */
+	@ExcelProperty("结算企业信息")
+	private String deptName;
+
+	/**
+	 * 统计周期
+	 */
+	@ExcelProperty("统计周期")
+	private Integer period;
+
+	/**
+	 * 风控任务类型
+	 */
+	@ExcelProperty("风控任务类型")
+	private String typeList;
+
+	/**
+	 * 记录创建时间
+	 */
+	@ExcelProperty("记录创建时间")
+	private LocalDateTime createTime;
+
+}

+ 67 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/RiskControlController.java

@@ -2,12 +2,15 @@ package com.qunzhixinxi.hnqz.admin.controller;
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
 import com.qunzhixinxi.hnqz.admin.api.entity.SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth;
 import com.qunzhixinxi.hnqz.admin.api.entity.SingleMemberSettleAmountOverrunInSeveralMonths;
 import com.qunzhixinxi.hnqz.admin.api.entity.SingleMemberSettleSameAmountInSeveralMonths;
+import com.qunzhixinxi.hnqz.admin.api.entity.SingleMemberWithoutSuchTaskTypesInSeveralMonths;
 import com.qunzhixinxi.hnqz.admin.service.SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthService;
 import com.qunzhixinxi.hnqz.admin.service.SingleMemberSettleAmountOverrunInSeveralMonthsService;
 import com.qunzhixinxi.hnqz.admin.service.SingleMemberSettleSameAmountInSeveralMonthsService;
+import com.qunzhixinxi.hnqz.admin.service.SingleMemberWithoutSuchTaskTypesInSeveralMonthsService;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import lombok.AllArgsConstructor;
 import org.springframework.http.MediaType;
@@ -15,6 +18,8 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * 风险控制前端控制器
  *
@@ -30,6 +35,7 @@ public class RiskControlController {
 	private final SingleMemberSettleAmountOverrunInSeveralMonthsService singleMemberSettleAmountOverrunInSeveralMonthsService;
 	private final SingleMemberSettleSameAmountInSeveralMonthsService singleMemberSettleSameAmountInSeveralMonthsService;
 	private final SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthService singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthService;
+	private final SingleMemberWithoutSuchTaskTypesInSeveralMonthsService singleMemberWithoutSuchTaskTypesInSeveralMonthsService;
 
 	/**
 	 * 同一用户,连续2个月结算金额相同
@@ -43,6 +49,17 @@ public class RiskControlController {
 		return R.ok(page);
 	}
 
+	/**
+	 * 同一用户,连续2个月结算金额相同(导出)
+	 *
+	 * @return 风控结果
+	 */
+	@ResponseExcel(name = "SingleMemberSettleSameAmountInSeveralMonths", sheet = "风控数据")
+	@GetMapping(value = "/member/settle-same-amount/export")
+	public List<SingleMemberSettleSameAmountInSeveralMonths> exportSingleMemberSettleSameAmountInSeveralMonths() {
+
+		return singleMemberSettleSameAmountInSeveralMonthsService.list(Wrappers.<SingleMemberSettleSameAmountInSeveralMonths>lambdaQuery().orderByDesc(SingleMemberSettleSameAmountInSeveralMonths::getCreateTime));
+	}
 
 	/**
 	 * 同一企业,给2个及以上用户支付相同金额
@@ -56,6 +73,18 @@ public class RiskControlController {
 		return R.ok(page);
 	}
 
+	/**
+	 * 同一企业,给2个及以上用户支付相同金额(导出)
+	 *
+	 * @return 风控结果
+	 */
+	@ResponseExcel(name = "SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth", sheet = "风控数据")
+	@GetMapping(value = "/enterprise/settle-same-amount/export")
+	public List<SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth> exportSingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth() {
+
+		return singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthService.list(Wrappers.<SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth>lambdaQuery().orderByDesc(SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonth::getCreateTime));
+	}
+
 
 	/**
 	 * 同一用户,连续3个月结算金额超过14万
@@ -68,4 +97,42 @@ public class RiskControlController {
 		singleMemberSettleAmountOverrunInSeveralMonthsService.page(page, Wrappers.<SingleMemberSettleAmountOverrunInSeveralMonths>lambdaQuery().orderByDesc(SingleMemberSettleAmountOverrunInSeveralMonths::getCreateTime));
 		return R.ok(page);
 	}
+
+	/**
+	 * 同一用户,连续3个月结算金额超过14万(导出)
+	 *
+	 * @return 风控结果
+	 */
+	@ResponseExcel(name = "SingleMemberSettleAmountOverrunInSeveralMonths", sheet = "风控数据")
+	@GetMapping(value = "/member/settle-amount/overrun/export")
+	public List<SingleMemberSettleAmountOverrunInSeveralMonths> exportSingleMemberSettleAmountOverrunInSeveralMonths() {
+
+		return singleMemberSettleAmountOverrunInSeveralMonthsService.list(Wrappers.<SingleMemberSettleAmountOverrunInSeveralMonths>lambdaQuery().orderByDesc(SingleMemberSettleAmountOverrunInSeveralMonths::getCreateTime));
+	}
+
+
+	/**
+	 * 同一用户,连续多月没有指定任务类型
+	 *
+	 * @return 风控结果
+	 */
+	@GetMapping(value = "/member/task-type")
+	public R<?> pageSingleMemberWithoutSuchTaskTypesInSeveralMonths(Page<SingleMemberWithoutSuchTaskTypesInSeveralMonths> page) {
+
+		singleMemberWithoutSuchTaskTypesInSeveralMonthsService.page(page, Wrappers.<SingleMemberWithoutSuchTaskTypesInSeveralMonths>lambdaQuery().orderByDesc(SingleMemberWithoutSuchTaskTypesInSeveralMonths::getCreateTime));
+		return R.ok(page);
+	}
+
+	/**
+	 * 同一用户,连续多月没有指定任务类型
+	 *
+	 * @return 风控结果
+	 */
+	@ResponseExcel(name = "SingleMemberWithoutSuchTaskTypesInSeveralMonths", sheet = "风控数据")
+	@GetMapping(value = "/member/task-type/export")
+	public List<SingleMemberWithoutSuchTaskTypesInSeveralMonths> exportSingleMemberWithoutSuchTaskTypesInSeveralMonths() {
+
+		return singleMemberWithoutSuchTaskTypesInSeveralMonthsService.list(Wrappers.<SingleMemberWithoutSuchTaskTypesInSeveralMonths>lambdaQuery().orderByDesc(SingleMemberWithoutSuchTaskTypesInSeveralMonths::getCreateTime));
+
+	}
 }

+ 9 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SingleMemberWithoutSuchTaskTypesInSeveralMonthsMapper.java

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

+ 7 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SingleMemberWithoutSuchTaskTypesInSeveralMonthsService.java

@@ -0,0 +1,7 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.api.entity.SingleMemberWithoutSuchTaskTypesInSeveralMonths;
+
+public interface SingleMemberWithoutSuchTaskTypesInSeveralMonthsService extends IService<SingleMemberWithoutSuchTaskTypesInSeveralMonths> {
+}

+ 16 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SingleMemberWithoutSuchTaskTypesInSeveralMonthsServiceImpl.java

@@ -0,0 +1,16 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.api.entity.SingleMemberWithoutSuchTaskTypesInSeveralMonths;
+import com.qunzhixinxi.hnqz.admin.mapper.SingleMemberWithoutSuchTaskTypesInSeveralMonthsMapper;
+import com.qunzhixinxi.hnqz.admin.service.SingleMemberWithoutSuchTaskTypesInSeveralMonthsService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+@AllArgsConstructor
+public class SingleMemberWithoutSuchTaskTypesInSeveralMonthsServiceImpl extends ServiceImpl<SingleMemberWithoutSuchTaskTypesInSeveralMonthsMapper,
+		SingleMemberWithoutSuchTaskTypesInSeveralMonths> implements SingleMemberWithoutSuchTaskTypesInSeveralMonthsService {
+}

+ 1 - 1
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/controller/SysJobLogController.java

@@ -59,7 +59,7 @@ public class SysJobLogController {
 		sysJobLogService.page(page, Wrappers.<SysJobLog>lambdaQuery()
 				.in(SysJobLog::getJobId, 27, 28, 29, 30)
 				.like(StrUtil.isNotBlank(sysJobLog.getJobName()), SysJobLog::getJobName, sysJobLog.getJobName())
-				.like(StrUtil.isNotBlank(sysJobLog.getJobMessage()), SysJobLog::getJobMessage, sysJobLog.getJobMessage())
+				.eq(StrUtil.isNotBlank(sysJobLog.getJobLogStatus()), SysJobLog::getJobLogStatus, sysJobLog.getJobLogStatus())
 				.between(sysJobLog.getStartTime() != null && sysJobLog.getEndTime() != null, SysJobLog::getCreateTime, sysJobLog.getStartTime(), sysJobLog.getEndTime())
 		);
 

+ 65 - 0
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/entity/SingleMemberWithoutSuchTaskTypesInSeveralMonths.java

@@ -0,0 +1,65 @@
+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_member_without_such_task_types_in_several_months")
+public class SingleMemberWithoutSuchTaskTypesInSeveralMonths implements Serializable {
+
+	private static final long serialVersionUID = -3597822678068222296L;
+
+	/**
+	 * 记录id
+	 */
+	@TableId(type = IdType.AUTO)
+	private Integer recordId;
+
+	/**
+	 * 人员id
+	 */
+	private Integer userId;
+
+	/**
+	 * 真实名称
+	 */
+	private String realname;
+
+	/**
+	 * 用户名
+	 */
+	private String username;
+
+	/**
+	 * 结算企业id
+	 */
+	private String deptId;
+
+	/**
+	 * 结算企业信息
+	 */
+	private String deptName;
+
+	/**
+	 * 统计周期
+	 */
+	private Integer period;
+
+	/**
+	 * 风控人数
+	 */
+	private String typeList;
+
+	/**
+	 * 记录创建时间
+	 */
+	private LocalDateTime createTime;
+
+}

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

+ 8 - 0
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/mapper/WmTaskMapper.java

@@ -19,7 +19,12 @@ package com.qunzhixinxi.hnqz.daemon.quartz.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.WmTask;
+import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * 任务表
@@ -30,4 +35,7 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface WmTaskMapper extends BaseMapper<WmTask> {
 
+	@MapKey(value = "userId")
+	List<Map<String, Object>> listUserInfo(@Param(value = "userIds") List<Integer> userIds);
+
 }

+ 6 - 0
hnqz-visual/hnqz-daemon-quartz/src/main/java/com/qunzhixinxi/hnqz/daemon/quartz/service/WmTaskService.java

@@ -20,6 +20,10 @@ package com.qunzhixinxi.hnqz.daemon.quartz.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qunzhixinxi.hnqz.daemon.quartz.entity.WmTask;
 
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+
 /**
  * 任务表
  *
@@ -29,4 +33,6 @@ import com.qunzhixinxi.hnqz.daemon.quartz.entity.WmTask;
 public interface WmTaskService extends IService<WmTask> {
 
 	public boolean buildTaskImg(String param);
+
+	List<Map<String, Object>> singleMemberWithoutSuchTaskTypesInSeveralMonths(LocalDateTime startTime, LocalDateTime endTime, List<String> typeList);
 }

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

@@ -16,6 +16,7 @@
  */
 package com.qunzhixinxi.hnqz.daemon.quartz.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -25,14 +26,20 @@ import com.qunzhixinxi.hnqz.daemon.quartz.mapper.WmTaskMapper;
 import com.qunzhixinxi.hnqz.daemon.quartz.service.WmTaskService;
 import com.qunzhixinxi.hnqz.daemon.quartz.service.WmWkArticleService;
 import com.qunzhixinxi.hnqz.daemon.quartz.util.HttpPostUtil;
+import io.prometheus.client.Collector;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * 任务表
@@ -69,7 +76,7 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
 		if (wmTaskList.size() > 0) {
 			for (WmTask wmTask : wmTaskList) {
 				// 医院信息收集,商业公司信息收集,药店信息收集,医院信息修改,只导出审核通过的图片
-				log.warn("当前任务:{},类型是:{},当前任务审核状态是:{}",wmTask.getId(),wmTask.getTaskTypeId(),wmTask.getPlatAuditStatus());
+				log.warn("当前任务:{},类型是:{},当前任务审核状态是:{}", wmTask.getId(), wmTask.getTaskTypeId(), wmTask.getPlatAuditStatus());
 				if (taskTypeIdList.contains(Integer.parseInt(wmTask.getTaskTypeId())) && !"1".equals(wmTask.getPlatAuditStatus())) {
 					log.warn("过滤的任务类型id:【{}】", taskTypeIdList.toString());
 					continue;
@@ -86,4 +93,37 @@ public class WmTaskServiceImpl extends ServiceImpl<WmTaskMapper, WmTask> impleme
 
 		return true;
 	}
+
+	@Override
+	public List<Map<String, Object>> singleMemberWithoutSuchTaskTypesInSeveralMonths(LocalDateTime startTime, LocalDateTime endTime, List<String> typeList) {
+		// 获取时间段内的所有任务
+		List<WmTask> list = this.list(Wrappers.<WmTask>lambdaQuery().between(WmTask::getCreateTime, startTime, endTime));
+
+		Map<String, Map<String, List<WmTask>>> collect = list.stream().collect(Collectors.groupingBy(WmTask::getTaskUserId, Collectors.groupingBy(WmTask::getTaskTypeId)));
+
+		List<Integer> userIds = new ArrayList<>(collect.size());
+
+		for (Map.Entry<String, Map<String, List<WmTask>>> entry : collect.entrySet()) {
+
+			String key = entry.getKey();
+
+			Set<String> typeIds = entry.getValue().keySet();
+
+			Set<String> result = new HashSet<>(typeList);
+			result.retainAll(typeIds);
+
+			if (result.isEmpty()) {
+				userIds.add(Integer.parseInt(key));
+			}
+		}
+
+		if (CollUtil.isEmpty(userIds)) {
+			return null;
+		}
+
+		List<Map<String, Object>> userInfo = this.baseMapper.listUserInfo(userIds);
+		return userInfo;
+
+
+	}
 }

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

@@ -18,6 +18,7 @@
 package com.qunzhixinxi.hnqz.daemon.quartz.task;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.bean.copier.CopyOptions;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -25,10 +26,12 @@ 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.SingleMemberWithoutSuchTaskTypesInSeveralMonths;
 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.mapper.SingleMemberWithoutSuchTaskTypesInSeveralMonthsMapper;
 import com.qunzhixinxi.hnqz.daemon.quartz.service.*;
 import com.qunzhixinxi.hnqz.daemon.quartz.zhuqu.ZhuaquTest;
 import lombok.AllArgsConstructor;
@@ -44,6 +47,8 @@ import java.time.LocalTime;
 import java.time.temporal.TemporalAdjuster;
 import java.time.temporal.TemporalAdjusters;
 import java.util.List;
+import java.util.Map;
+import java.util.StringJoiner;
 import java.util.stream.Collectors;
 
 /**
@@ -64,6 +69,7 @@ public class SpringBeanTaskDemo {
 	private final SingleMemberSettleSameAmountInSeveralMonthsMapper singleMemberSettleSameAmountInSeveralMonthsMapper;
 	private final SingleMemberSettleAmountOverrunInSeveralMonthsMapper singleMemberSettleAmountOverrunInSeveralMonthsMapper;
 	private final SingleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthMapper singleEnterpriseSettleSameAmountForSeveralMembersInCurrentMonthMapper;
+	private final SingleMemberWithoutSuchTaskTypesInSeveralMonthsMapper singleMemberWithoutSuchTaskTypesInSeveralMonthsMapper;
 
 //	/**
 //	 * 测试Spring Bean的演示方法
@@ -294,4 +300,75 @@ public class SpringBeanTaskDemo {
 
 	}
 
+
+	/**
+	 * 同一用户,连续多月没有指定任务类型
+	 *
+	 * @param para 参数(周期和任务类型)
+	 * @return 运行结果
+	 */
+	@SneakyThrows
+	public String singleMemberWithoutSuchTaskTypesInSeveralMonths(String para) {
+
+		// 校验参数
+		if (StrUtil.isBlank(para)) {
+			log.error("参数缺失");
+			return HnqzQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
+		}
+
+		if (!para.contains(StrUtil.COMMA)) {
+			log.error("参数错误");
+			return HnqzQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
+		}
+
+		List<String> params = StrUtil.split(para, StrUtil.COMMA);
+
+		if (params.size() < 2) {
+			log.error("参数错误");
+			return HnqzQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
+		}
+
+		int period = Integer.parseInt(params.get(0));
+		if (period < 2) {
+			log.error("参数错误");
+			return HnqzQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
+		}
+
+		List<String> typeList = params.subList(1, params.size());
+
+		// 计算查询时间
+		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("singleMemberWithoutSuchTaskTypesInSeveralMonths开始于:{},输入参数{}", LocalDateTime.now(), para);
+
+		List<Map<String, Object>> result = wmTaskService.singleMemberWithoutSuchTaskTypesInSeveralMonths(startTime, endTime, typeList);
+
+		if (CollUtil.isNotEmpty(result)) {
+			List<SingleMemberWithoutSuchTaskTypesInSeveralMonths> history = singleMemberWithoutSuchTaskTypesInSeveralMonthsMapper.selectList(Wrappers.<SingleMemberWithoutSuchTaskTypesInSeveralMonths>lambdaQuery().between(SingleMemberWithoutSuchTaskTypesInSeveralMonths::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(SingleMemberWithoutSuchTaskTypesInSeveralMonths::getRecordId).boxed().collect(Collectors.toList());
+				singleMemberWithoutSuchTaskTypesInSeveralMonthsMapper.deleteBatchIds(ids);
+			}
+
+			String types = String.join(StrUtil.COMMA, typeList.toArray(new String[0]));
+
+			result.forEach(e -> {
+				SingleMemberWithoutSuchTaskTypesInSeveralMonths singleMemberWithoutSuchTaskTypesInSeveralMonths
+						= BeanUtil.mapToBean(e, SingleMemberWithoutSuchTaskTypesInSeveralMonths.class,true, new CopyOptions());
+				singleMemberWithoutSuchTaskTypesInSeveralMonths.setPeriod(period);
+				singleMemberWithoutSuchTaskTypesInSeveralMonths.setTypeList(types);
+				singleMemberWithoutSuchTaskTypesInSeveralMonths.setCreateTime(LocalDateTime.now());
+				singleMemberWithoutSuchTaskTypesInSeveralMonthsMapper.insert(singleMemberWithoutSuchTaskTypesInSeveralMonths);
+			});
+		}
+
+		return HnqzQuartzEnum.JOB_LOG_STATUS_SUCCESS.getType();
+
+	}
+
+
 }

+ 51 - 32
hnqz-visual/hnqz-daemon-quartz/src/main/resources/mapper/WmTaskMapper.xml

@@ -23,36 +23,55 @@
 
 <mapper namespace="com.qunzhixinxi.hnqz.daemon.quartz.mapper.WmTaskMapper">
 
-  <resultMap id="wmTaskMap" type="com.qunzhixinxi.hnqz.daemon.quartz.entity.WmTask">
-                  <id property="id" column="id"/>
-                        <result property="taskRuleId" column="task_rule_id"/>
-                        <result property="score" column="score"/>
-                        <result property="scorePackageDrugId" column="score_package_drug_id"/>
-                        <result property="scorePackageLevel1Id" column="score_package_level1_id"/>
-                        <result property="scorePackageId" column="score_package_id"/>
-                        <result property="taskTypeId" column="task_type_id"/>
-                        <result property="lookintoDate" column="lookinto_date"/>
-                        <result property="province" column="province"/>
-                        <result property="city" column="city"/>
-                        <result property="area" column="area"/>
-                        <result property="address" column="address"/>
-                        <result property="lookintoTypeId" column="lookinto_type_id"/>
-                        <result property="taskContentId" column="task_content_id"/>
-                        <result property="taskStatus" column="task_status"/>
-                        <result property="taskUserId" column="task_user_id"/>
-                        <result property="taskUserType" column="task_user_type"/>
-                        <result property="drugEntId" column="drug_ent_id"/>
-                        <result property="deptId" column="dept_id"/>
-                        <result property="delFlag" column="del_flag"/>
-                        <result property="enableFlag" column="enable_flag"/>
-                        <result property="tenantId" column="tenant_id"/>
-                        <result property="createTime" column="create_time"/>
-                        <result property="createUser" column="create_user"/>
-                        <result property="updateTime" column="update_time"/>
-                        <result property="updateUser" column="update_user"/>
-                        <result property="submitStatus" column="submit_status"/>
-                        <result property="shareImgUrl" column="share_img_url"/>
-                        <result property="platAuditStatus" column="plat_audit_status"/>
-	  					<result property="taskInfoImg" column="task_info_img"/>
-            </resultMap>
+	<resultMap id="wmTaskMap" type="com.qunzhixinxi.hnqz.daemon.quartz.entity.WmTask">
+		<id property="id" column="id"/>
+		<result property="taskRuleId" column="task_rule_id"/>
+		<result property="score" column="score"/>
+		<result property="scorePackageDrugId" column="score_package_drug_id"/>
+		<result property="scorePackageLevel1Id" column="score_package_level1_id"/>
+		<result property="scorePackageId" column="score_package_id"/>
+		<result property="taskTypeId" column="task_type_id"/>
+		<result property="lookintoDate" column="lookinto_date"/>
+		<result property="province" column="province"/>
+		<result property="city" column="city"/>
+		<result property="area" column="area"/>
+		<result property="address" column="address"/>
+		<result property="lookintoTypeId" column="lookinto_type_id"/>
+		<result property="taskContentId" column="task_content_id"/>
+		<result property="taskStatus" column="task_status"/>
+		<result property="taskUserId" column="task_user_id"/>
+		<result property="taskUserType" column="task_user_type"/>
+		<result property="drugEntId" column="drug_ent_id"/>
+		<result property="deptId" column="dept_id"/>
+		<result property="delFlag" column="del_flag"/>
+		<result property="enableFlag" column="enable_flag"/>
+		<result property="tenantId" column="tenant_id"/>
+		<result property="createTime" column="create_time"/>
+		<result property="createUser" column="create_user"/>
+		<result property="updateTime" column="update_time"/>
+		<result property="updateUser" column="update_user"/>
+		<result property="submitStatus" column="submit_status"/>
+		<result property="shareImgUrl" column="share_img_url"/>
+		<result property="platAuditStatus" column="plat_audit_status"/>
+		<result property="taskInfoImg" column="task_info_img"/>
+	</resultMap>
+
+
+	<select id="listUserInfo" resultType="map">
+		SELECT u.user_id AS `userId`,
+		u.username,
+		u.realname,
+		sd.dept_id AS `deptId`,
+		sd.name AS `deptName`
+		FROM sys_user u
+		LEFT JOIN sys_dept sd ON u.dept_id = sd.dept_id
+		<where>
+			sd.name NOT IN ('上海问云生物科技有限公司', '北京遥领医疗科技有限公司')
+			AND u.user_id IN
+			<foreach collection="userIds" item="id" index="idx" separator="," open="(" close=")">
+				#{id}
+			</foreach>
+		</where>
+
+	</select>
 </mapper>