diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..480bdf5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,39 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+.kotlin
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
index 35410ca..13566b8 100644
--- a/.idea/.gitignore
+++ b/.idea/.gitignore
@@ -1,7 +1,7 @@
-# 默认忽略的文件
+# Default ignored files
/shelf/
/workspace.xml
-# 基于编辑器的 HTTP 客户端请求
+# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..aa00ffa
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 639900d..82dbec8 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,14 @@
-
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 35eb1dd..288b36b 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -1,6 +1,7 @@
-
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..e005c94
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,135 @@
+
+
+ 4.0.0
+
+ com.system
+ test
+ 1.0-SNAPSHOT
+
+
+ 17
+ 17
+ UTF-8
+ 1.1.1
+ 3.4.4
+ 3.0.5
+ 8.3.0
+ 1.18.38
+ 2.0.17
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${spring.boot.version}
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+ ${spring.boot.version}
+
+
+
+
+ cglib
+ cglib
+ 3.3.0
+
+
+
+ org.springframework
+ spring-aspects
+ 6.2.5
+
+
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ ${mybatis.starter.version}
+
+
+
+
+ com.mysql
+ mysql-connector-j
+ ${mysql.version}
+
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j.version}
+
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+ provided
+
+
+
+ cn.hutool
+ hutool-all
+ 5.8.39
+
+
+
+ com.alibaba
+ fastjson
+ 2.0.53
+
+
+
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+ 3.17.4
+
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+ 3.4.4
+
+
+
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-cache
+ 3.4.4
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+ 3.4.4
+
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+ ${spring.boot.version}
+
+
+
+ com.microsoft.sqlserver
+ mssql-jdbc
+ 11.2.1.jre8
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/link/TestApplication.java b/src/main/java/com/link/TestApplication.java
new file mode 100644
index 0000000..10212e7
--- /dev/null
+++ b/src/main/java/com/link/TestApplication.java
@@ -0,0 +1,18 @@
+package com.link;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@MapperScan(basePackages = "com.link.mapper", sqlSessionTemplateRef = "hljwSqlSessionTemplate")
+@MapperScan(basePackages = "com.link.mapperwechart", sqlSessionTemplateRef = "wechartSqlSessionTemplate")
+public class TestApplication {
+
+
+ public static void main(String[] args) {
+
+ System.setProperty("https.protocols", "TLSv1,TLSv1.2,TLSv1.3");
+ SpringApplication.run(TestApplication.class, args);
+ }
+}
diff --git a/src/main/java/com/link/config/HljwDataSourceConfig.java b/src/main/java/com/link/config/HljwDataSourceConfig.java
new file mode 100644
index 0000000..75eeca6
--- /dev/null
+++ b/src/main/java/com/link/config/HljwDataSourceConfig.java
@@ -0,0 +1,46 @@
+package com.link.config;
+
+
+import com.zaxxer.hikari.HikariDataSource;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.SqlSessionTemplate;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.jdbc.DataSourceBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+
+import javax.sql.DataSource;
+
+@Slf4j
+@Configuration
+public class HljwDataSourceConfig {
+
+ @Bean(name = "hljwDataSource")
+ @Primary
+ @ConfigurationProperties(prefix = "spring.datasource.hljw")
+ public DataSource hljwDataSource(){
+ HikariDataSource dataSource = DataSourceBuilder.create().type(HikariDataSource.class).build();
+ log.info("hljw DataSource initialized with pool-name: {}", dataSource.getPoolName());
+ return dataSource;
+ }
+
+ @Bean(name = "hljwSqlSessionFactory")
+ @Primary
+ public SqlSessionFactory hljwSqlSessionFactory(@Qualifier("hljwDataSource") DataSource dataSource) throws Exception {
+ SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
+ sessionFactory.setDataSource(dataSource);
+ sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:com/link/mapper/*.xml"));
+ return sessionFactory.getObject();
+ }
+
+ @Bean(name = "hljwSqlSessionTemplate")
+ @Primary
+ public SqlSessionTemplate hljwSqlSessionTemplate(@Qualifier("hljwSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
+ return new SqlSessionTemplate(sqlSessionFactory);
+ }
+}
diff --git a/src/main/java/com/link/config/WechartDataSourceConfig.java b/src/main/java/com/link/config/WechartDataSourceConfig.java
new file mode 100644
index 0000000..5d9b463
--- /dev/null
+++ b/src/main/java/com/link/config/WechartDataSourceConfig.java
@@ -0,0 +1,43 @@
+package com.link.config;
+
+
+import com.zaxxer.hikari.HikariDataSource;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.SqlSessionTemplate;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.jdbc.DataSourceBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+
+import javax.sql.DataSource;
+
+@Slf4j
+@Configuration
+public class WechartDataSourceConfig {
+
+ @Bean(name = "wechartDataSource")
+ @ConfigurationProperties(prefix = "spring.datasource.wechart")
+ public DataSource wechartDataSource(){
+ HikariDataSource dataSource = DataSourceBuilder.create().type(HikariDataSource.class).build();
+ log.info("wechart DataSource initialized with pool-name: {}", dataSource.getPoolName());
+ return dataSource;
+ }
+
+ @Bean(name = "wechartSqlSessionFactory")
+ public SqlSessionFactory wechartSqlSessionFactory(@Qualifier("wechartDataSource") DataSource dataSource) throws Exception {
+ SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
+ sessionFactory.setDataSource(dataSource);
+ sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:com/link/mapperwechart/*.xml"));
+ return sessionFactory.getObject();
+ }
+
+ @Bean(name = "wechartSqlSessionTemplate")
+ public SqlSessionTemplate wechartSqlSessionTemplate(@Qualifier("wechartSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
+ return new SqlSessionTemplate(sqlSessionFactory);
+ }
+}
diff --git a/src/main/java/com/link/controller/AnchorUserTypeStatController.java b/src/main/java/com/link/controller/AnchorUserTypeStatController.java
new file mode 100644
index 0000000..8796b8a
--- /dev/null
+++ b/src/main/java/com/link/controller/AnchorUserTypeStatController.java
@@ -0,0 +1,25 @@
+package com.link.controller;
+
+
+import com.link.domain.Result;
+import com.link.domain.dto.AnchorUserTypeStatDTO;
+import com.link.service.AnchorUserTypeStatService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/toAnchorUserTypeStat")
+public class AnchorUserTypeStatController {
+
+ @Autowired
+ private AnchorUserTypeStatService anchorUserTypeStatService;
+
+ @PostMapping("/getDetails")
+ public Result getDetails(@RequestBody AnchorUserTypeStatDTO dto) {
+ Object result = anchorUserTypeStatService.getAnchorUserTypeStat(dto.getJwCodes(),dto.getStartTime());
+ return Result.ok("success",result);
+ }
+}
diff --git a/src/main/java/com/link/controller/CRMCountController.java b/src/main/java/com/link/controller/CRMCountController.java
new file mode 100644
index 0000000..abd8881
--- /dev/null
+++ b/src/main/java/com/link/controller/CRMCountController.java
@@ -0,0 +1,21 @@
+package com.link.controller;
+
+import com.link.domain.Result;
+import com.link.domain.dto.CRMCountDTO;
+import com.link.service.CRMCountService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/toCRM")
+public class CRMCountController {
+
+ @Autowired
+ private CRMCountService crmCountService;
+
+ @PostMapping("/getCount")
+ public Result getCount(@RequestBody CRMCountDTO dto) {
+ Object result = crmCountService.getCRMCount(dto.getStartTime());
+ return Result.ok("success",result);
+ }
+}
diff --git a/src/main/java/com/link/controller/NotRegisteredController.java b/src/main/java/com/link/controller/NotRegisteredController.java
new file mode 100644
index 0000000..d65165f
--- /dev/null
+++ b/src/main/java/com/link/controller/NotRegisteredController.java
@@ -0,0 +1,25 @@
+package com.link.controller;
+
+
+import com.link.domain.Result;
+import com.link.domain.dto.NotRegisteredDTO;
+import com.link.service.NotRegisteredService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/toNotRegistered")
+public class NotRegisteredController {
+ @Autowired
+ private NotRegisteredService notRegisteredService;
+
+ @PostMapping("/getjwCodes")
+ public Result getjwCodes(@RequestBody NotRegisteredDTO dto) {
+ Object result = notRegisteredService.getNotRegistered(dto.getJwCodes());
+ System.out.println(result);
+ return Result.ok("success",result);
+ }
+}
diff --git a/src/main/java/com/link/controller/UserCountController.java b/src/main/java/com/link/controller/UserCountController.java
new file mode 100644
index 0000000..e33b960
--- /dev/null
+++ b/src/main/java/com/link/controller/UserCountController.java
@@ -0,0 +1,35 @@
+package com.link.controller;
+
+import com.link.domain.Result;
+import com.link.domain.dto.UserCountDTO;
+import com.link.service.UserCountService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/toUserCount")
+public class UserCountController {
+ @Autowired
+ private UserCountService userCountService;
+
+ @PostMapping("/toEmail")
+ public Result getEmailUserCount(@RequestBody UserCountDTO dto) {
+ Object result = userCountService.getEmailUserCount(dto.getStartTime());
+ return Result.ok("success",result);
+ }
+
+ @PostMapping("/toGoogle")
+ public Result getGoogleUserCount(@RequestBody UserCountDTO dto) {
+ Object result = userCountService.getGoogleUserCount(dto.getStartTime());
+ return Result.ok("success",result);
+ }
+
+ @PostMapping("/toMessage")
+ public Result getMessageUserCount(@RequestBody UserCountDTO dto) {
+ Object result = userCountService.getMessageUserCount(dto.getStartTime());
+ return Result.ok("success",result);
+ }
+}
diff --git a/src/main/java/com/link/domain/Result.java b/src/main/java/com/link/domain/Result.java
new file mode 100644
index 0000000..2b00826
--- /dev/null
+++ b/src/main/java/com/link/domain/Result.java
@@ -0,0 +1,108 @@
+package com.link.domain;
+
+// 请求是成功还是失败:ok error
+// 后台希望前台弹出消息:msg
+// 后台返回前台数据:Data
+// JSON格式的通用响应对象,封装的就是后台返回给前台的所有信息
+public class Result {
+ public static final int ERROR = 1;
+ public static final int OK = 200;
+
+ // 当前状态(程序员判断状态):成功、失败、未登录、没有权限
+ private Integer code;
+ // 描述信息(主要是给用户看的提示信息)
+ private String msg;
+ // 后台返回给前端的数据 Object, User、List、Map
+ private Object data;
+ // 新增:前端用于直接判断成功/失败的字段
+ private boolean success;
+
+ public Result() {
+ }
+
+ public Result(Integer code) {
+ this.code = code;
+ this.success = code == OK; // 根据状态码自动设置success
+ }
+
+ public Result(Integer code, String msg) {
+ this.code = code;
+ this.msg = msg;
+ this.success = code == OK;
+ }
+
+ public Result(Integer code, Object data) {
+ this.code = code;
+ this.data = data;
+ this.success = code == OK;
+ }
+
+ public Result(Integer code, String msg, Object data) {
+ this.code = code;
+ this.msg = msg;
+ this.data = data;
+ this.success = code == OK;
+ }
+
+ // 告诉前台成功:code
+ public static Result ok() {
+ return new Result(OK);
+ }
+
+ // 告诉前台成功:code、msg
+ public static Result ok(String msg) {
+ return new Result(OK, msg);
+ }
+
+ // 告诉前台成功:code、data
+ public static Result ok(Object data) {
+ return new Result(OK, data);
+ }
+
+ // 告诉前台成功:code、msg、data
+ public static Result ok(String msg, Object data) {
+ return new Result(OK, msg, data);
+ }
+
+
+ // 告诉前台失败:code
+ public static Result error() {
+ return new Result(ERROR);
+ }
+
+ // 告诉前台失败:code、msg
+ public static Result error(String msg) {
+ return new Result(ERROR, msg);
+ }
+
+ // Getter和Setter方法
+ public Integer getCode() {
+ return code;
+ }
+
+ public void setCode(Integer code) {
+ this.code = code;
+ this.success = code == OK; // 同步更新success状态
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public Object getData() {
+ return data;
+ }
+
+ public void setData(Object data) {
+ this.data = data;
+ }
+
+ // 添加success字段的Getter(不需要Setter,通过code自动维护)
+ public boolean isSuccess() {
+ return success;
+ }
+}
diff --git a/src/main/java/com/link/domain/dto/AnchorUserTypeStatDTO.java b/src/main/java/com/link/domain/dto/AnchorUserTypeStatDTO.java
new file mode 100644
index 0000000..43ca0ec
--- /dev/null
+++ b/src/main/java/com/link/domain/dto/AnchorUserTypeStatDTO.java
@@ -0,0 +1,19 @@
+package com.link.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AnchorUserTypeStatDTO {
+
+ private List jwCodes;
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime startTime;
+}
diff --git a/src/main/java/com/link/domain/dto/CRMCountDTO.java b/src/main/java/com/link/domain/dto/CRMCountDTO.java
new file mode 100644
index 0000000..fc9db70
--- /dev/null
+++ b/src/main/java/com/link/domain/dto/CRMCountDTO.java
@@ -0,0 +1,16 @@
+package com.link.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class CRMCountDTO {
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime startTime;
+}
diff --git a/src/main/java/com/link/domain/dto/NotRegisteredDTO.java b/src/main/java/com/link/domain/dto/NotRegisteredDTO.java
new file mode 100644
index 0000000..760577e
--- /dev/null
+++ b/src/main/java/com/link/domain/dto/NotRegisteredDTO.java
@@ -0,0 +1,15 @@
+package com.link.domain.dto;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class NotRegisteredDTO {
+ private List jwCodes;
+}
diff --git a/src/main/java/com/link/domain/dto/UserCountDTO.java b/src/main/java/com/link/domain/dto/UserCountDTO.java
new file mode 100644
index 0000000..92678da
--- /dev/null
+++ b/src/main/java/com/link/domain/dto/UserCountDTO.java
@@ -0,0 +1,16 @@
+package com.link.domain.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class UserCountDTO {
+ @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime startTime;
+}
diff --git a/src/main/java/com/link/domain/vo/AnchorUserTypeStatVO.java b/src/main/java/com/link/domain/vo/AnchorUserTypeStatVO.java
new file mode 100644
index 0000000..466e389
--- /dev/null
+++ b/src/main/java/com/link/domain/vo/AnchorUserTypeStatVO.java
@@ -0,0 +1,16 @@
+package com.link.domain.vo;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AnchorUserTypeStatVO {
+
+ private String name;
+ private String userType;
+ private Integer userCount;
+}
diff --git a/src/main/java/com/link/domain/vo/CRMCountVO.java b/src/main/java/com/link/domain/vo/CRMCountVO.java
new file mode 100644
index 0000000..5b3d4cd
--- /dev/null
+++ b/src/main/java/com/link/domain/vo/CRMCountVO.java
@@ -0,0 +1,14 @@
+package com.link.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CRMCountVO {
+
+ private Integer userCount;
+}
diff --git a/src/main/java/com/link/domain/vo/NotRegisteredVO.java b/src/main/java/com/link/domain/vo/NotRegisteredVO.java
new file mode 100644
index 0000000..d1a479e
--- /dev/null
+++ b/src/main/java/com/link/domain/vo/NotRegisteredVO.java
@@ -0,0 +1,15 @@
+package com.link.domain.vo;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class NotRegisteredVO {
+ private String jwcode;
+}
diff --git a/src/main/java/com/link/domain/vo/UserCountVO.java b/src/main/java/com/link/domain/vo/UserCountVO.java
new file mode 100644
index 0000000..9c207e5
--- /dev/null
+++ b/src/main/java/com/link/domain/vo/UserCountVO.java
@@ -0,0 +1,18 @@
+package com.link.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserCountVO {
+
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private String businessDate;
+// private LocalDateTime t1;
+
+ private Integer userCount;
+}
diff --git a/src/main/java/com/link/mapper/UserCountMapper.java b/src/main/java/com/link/mapper/UserCountMapper.java
new file mode 100644
index 0000000..4a3f0b1
--- /dev/null
+++ b/src/main/java/com/link/mapper/UserCountMapper.java
@@ -0,0 +1,19 @@
+package com.link.mapper;
+
+import com.link.domain.vo.UserCountVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Qualifier;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Mapper
+@Qualifier("hljwSqlSessionTemplate")
+public interface UserCountMapper {
+ List getEmailUserCount(@Param("startTime") LocalDateTime startTime);
+
+ List getGoogleUserCount(@Param("startTime") LocalDateTime startTime);
+
+ List getMessageUserCount(@Param("startTime") LocalDateTime startTime);
+}
diff --git a/src/main/java/com/link/mapperwechart/AnchorUserTypeStatMapper.java b/src/main/java/com/link/mapperwechart/AnchorUserTypeStatMapper.java
new file mode 100644
index 0000000..b299257
--- /dev/null
+++ b/src/main/java/com/link/mapperwechart/AnchorUserTypeStatMapper.java
@@ -0,0 +1,15 @@
+package com.link.mapperwechart;
+
+import com.link.domain.vo.AnchorUserTypeStatVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Qualifier;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Mapper
+@Qualifier("wechartSqlSessionTemplate")
+public interface AnchorUserTypeStatMapper {
+ List getAnchorUserTypeStat(@Param("jwCodes") List jwCodes, @Param("startTime") LocalDateTime startTime);
+}
diff --git a/src/main/java/com/link/mapperwechart/CRMCountMapper.java b/src/main/java/com/link/mapperwechart/CRMCountMapper.java
new file mode 100644
index 0000000..66d8cd5
--- /dev/null
+++ b/src/main/java/com/link/mapperwechart/CRMCountMapper.java
@@ -0,0 +1,14 @@
+package com.link.mapperwechart;
+
+import com.link.domain.vo.CRMCountVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Qualifier;
+
+import java.time.LocalDateTime;
+
+@Mapper
+@Qualifier("wechartSqlSessionTemplate")
+public interface CRMCountMapper {
+ CRMCountVO getCRMCount(@Param("startTime") LocalDateTime startTime);
+}
diff --git a/src/main/java/com/link/mapperwechart/NotRegisteredMapper.java b/src/main/java/com/link/mapperwechart/NotRegisteredMapper.java
new file mode 100644
index 0000000..b1fd75a
--- /dev/null
+++ b/src/main/java/com/link/mapperwechart/NotRegisteredMapper.java
@@ -0,0 +1,15 @@
+package com.link.mapperwechart;
+
+
+import com.link.domain.vo.NotRegisteredVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Qualifier;
+
+import java.util.List;
+
+@Mapper
+@Qualifier("wechartSqlSessionTemplate")
+public interface NotRegisteredMapper {
+ List getNotRegistered(@Param("jwCodes") List jwCodes);
+}
diff --git a/src/main/java/com/link/service/AnchorUserTypeStatService.java b/src/main/java/com/link/service/AnchorUserTypeStatService.java
new file mode 100644
index 0000000..f57821e
--- /dev/null
+++ b/src/main/java/com/link/service/AnchorUserTypeStatService.java
@@ -0,0 +1,11 @@
+package com.link.service;
+
+import com.link.domain.vo.AnchorUserTypeStatVO;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+public interface AnchorUserTypeStatService {
+
+ List getAnchorUserTypeStat(List jwCodes, LocalDateTime startTime);
+}
diff --git a/src/main/java/com/link/service/CRMCountService.java b/src/main/java/com/link/service/CRMCountService.java
new file mode 100644
index 0000000..8224acf
--- /dev/null
+++ b/src/main/java/com/link/service/CRMCountService.java
@@ -0,0 +1,12 @@
+package com.link.service;
+
+import com.link.domain.vo.CRMCountVO;
+
+import java.time.LocalDateTime;
+
+
+public interface CRMCountService {
+
+ CRMCountVO getCRMCount(LocalDateTime startTime);
+
+}
diff --git a/src/main/java/com/link/service/NotRegisteredService.java b/src/main/java/com/link/service/NotRegisteredService.java
new file mode 100644
index 0000000..d272806
--- /dev/null
+++ b/src/main/java/com/link/service/NotRegisteredService.java
@@ -0,0 +1,10 @@
+package com.link.service;
+
+import com.link.domain.vo.NotRegisteredVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface NotRegisteredService {
+ List getNotRegistered(List jwCodes);
+}
diff --git a/src/main/java/com/link/service/UserCountService.java b/src/main/java/com/link/service/UserCountService.java
new file mode 100644
index 0000000..f3288c3
--- /dev/null
+++ b/src/main/java/com/link/service/UserCountService.java
@@ -0,0 +1,16 @@
+package com.link.service;
+
+import com.link.domain.vo.UserCountVO;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+public interface UserCountService {
+
+ List getEmailUserCount(LocalDateTime startTime);
+
+ List getGoogleUserCount(LocalDateTime startTime);
+
+ List getMessageUserCount(LocalDateTime startTime);
+
+}
diff --git a/src/main/java/com/link/serviceImpl/AnchorUserTypeStatServiceImpl.java b/src/main/java/com/link/serviceImpl/AnchorUserTypeStatServiceImpl.java
new file mode 100644
index 0000000..17f8a5d
--- /dev/null
+++ b/src/main/java/com/link/serviceImpl/AnchorUserTypeStatServiceImpl.java
@@ -0,0 +1,22 @@
+package com.link.serviceImpl;
+
+import com.link.domain.vo.AnchorUserTypeStatVO;
+import com.link.mapperwechart.AnchorUserTypeStatMapper;
+import com.link.service.AnchorUserTypeStatService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class AnchorUserTypeStatServiceImpl implements AnchorUserTypeStatService {
+
+ @Autowired
+ private AnchorUserTypeStatMapper anchorUserTypeStatMapper;
+
+ @Override
+ public List getAnchorUserTypeStat(List jwCodes, LocalDateTime startTime) {
+ return anchorUserTypeStatMapper.getAnchorUserTypeStat(jwCodes, startTime);
+ }
+}
diff --git a/src/main/java/com/link/serviceImpl/CRMCountServiceImpl.java b/src/main/java/com/link/serviceImpl/CRMCountServiceImpl.java
new file mode 100644
index 0000000..7abaf9c
--- /dev/null
+++ b/src/main/java/com/link/serviceImpl/CRMCountServiceImpl.java
@@ -0,0 +1,23 @@
+package com.link.serviceImpl;
+
+import com.link.domain.vo.CRMCountVO;
+
+import com.link.mapperwechart.CRMCountMapper;
+import com.link.service.CRMCountService;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
+@Service
+public class CRMCountServiceImpl implements CRMCountService {
+
+ @Autowired
+ private CRMCountMapper crmCountMapper;
+
+ @Override
+ public CRMCountVO getCRMCount(LocalDateTime startTime) {
+ return crmCountMapper.getCRMCount(startTime);
+ }
+}
diff --git a/src/main/java/com/link/serviceImpl/NotRegisteredServiceImpl.java b/src/main/java/com/link/serviceImpl/NotRegisteredServiceImpl.java
new file mode 100644
index 0000000..dfe5452
--- /dev/null
+++ b/src/main/java/com/link/serviceImpl/NotRegisteredServiceImpl.java
@@ -0,0 +1,22 @@
+package com.link.serviceImpl;
+
+import com.link.domain.vo.NotRegisteredVO;
+import com.link.mapperwechart.NotRegisteredMapper;
+import com.link.service.NotRegisteredService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class NotRegisteredServiceImpl implements NotRegisteredService {
+
+ @Autowired
+ private NotRegisteredMapper notRegisteredMapper;
+ @Override
+ public List getNotRegistered(List jwCodes) {
+ List list = notRegisteredMapper.getNotRegistered(jwCodes);
+ List jwcode = list.stream().map(NotRegisteredVO::getJwcode).toList();
+ return jwcode;
+ }
+}
diff --git a/src/main/java/com/link/serviceImpl/UserCountServiceImpl.java b/src/main/java/com/link/serviceImpl/UserCountServiceImpl.java
new file mode 100644
index 0000000..eb4c4bc
--- /dev/null
+++ b/src/main/java/com/link/serviceImpl/UserCountServiceImpl.java
@@ -0,0 +1,31 @@
+package com.link.serviceImpl;
+
+import com.link.domain.vo.UserCountVO;
+import com.link.mapper.UserCountMapper;
+import com.link.service.UserCountService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class UserCountServiceImpl implements UserCountService {
+
+ @Autowired
+ private UserCountMapper userCountMapper;
+ @Override
+ public List getEmailUserCount(LocalDateTime startTime) {
+ return userCountMapper.getEmailUserCount(startTime);
+ }
+
+ @Override
+ public List getGoogleUserCount(LocalDateTime startTime) {
+ return userCountMapper.getGoogleUserCount(startTime);
+ }
+
+ @Override
+ public List getMessageUserCount(LocalDateTime startTime) {
+ return userCountMapper.getMessageUserCount(startTime);
+ }
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
new file mode 100644
index 0000000..5e8a86a
--- /dev/null
+++ b/src/main/resources/application.yml
@@ -0,0 +1,32 @@
+spring:
+ datasource:
+ hljw:
+ jdbc-url: jdbc:mysql://39.99.234.212:33061/hljw?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&connectTimeout=3000&socketTimeout=60000&autoReconnect=true&failOverReadOnly=false
+ username: 9008c85e-cb05-4eca-8321-c0443c1dc333
+ password: m0tLJcB9f8rLquPr
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ hikari:
+ pool-name: hljwHikariCP
+ maximum-pool-size: 50
+
+ wechart:
+ jdbc-url: jdbc:sqlserver://18.142.225.183:1455;databaseName=wechart;loginTimeout=30;connectTimeout=30000;encrypt=true;enabledTLSProtocols=TLSv1.2;trustServerCertificate=true
+ username: query_hz
+ password: 8HxsYzefFBsLc8kksxa
+ driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+ hikari:
+ pool-name: wechartHikariCP
+ maximum-pool-size: 50
+
+
+
+mybatis:
+ mapper-locations: classpath:mappers/*xml
+ type-aliases-package: com.link.domain
+
+logging:
+ level:
+ com.system.mapper: debug
+
+server:
+ port: 8080
\ No newline at end of file
diff --git a/src/main/resources/com/link/mapper/UserCountMapper.xml b/src/main/resources/com/link/mapper/UserCountMapper.xml
new file mode 100644
index 0000000..74df9b5
--- /dev/null
+++ b/src/main/resources/com/link/mapper/UserCountMapper.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/com/link/mapperwechart/AnchorUserTypeStatMapper.xml b/src/main/resources/com/link/mapperwechart/AnchorUserTypeStatMapper.xml
new file mode 100644
index 0000000..c2c51cc
--- /dev/null
+++ b/src/main/resources/com/link/mapperwechart/AnchorUserTypeStatMapper.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/com/link/mapperwechart/CRMCountMapper.xml b/src/main/resources/com/link/mapperwechart/CRMCountMapper.xml
new file mode 100644
index 0000000..7bb2552
--- /dev/null
+++ b/src/main/resources/com/link/mapperwechart/CRMCountMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/com/link/mapperwechart/NotRegisteredMapper.xml b/src/main/resources/com/link/mapperwechart/NotRegisteredMapper.xml
new file mode 100644
index 0000000..071368c
--- /dev/null
+++ b/src/main/resources/com/link/mapperwechart/NotRegisteredMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
\ No newline at end of file