项目初始化
parent
eb2f53f174
commit
75e758f17b
@ -1,26 +1,42 @@
|
||||
# ---> Java
|
||||
# Compiled class file
|
||||
*.class
|
||||
HELP.md
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
|
||||
# Log file
|
||||
*.log
|
||||
### STS ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
# BlueJ files
|
||||
*.ctxt
|
||||
### IntelliJ IDEA ###
|
||||
.idea
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
# Mobile Tools for Java (J2ME)
|
||||
.mtj.tmp/
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
# Package Files #
|
||||
*.jar
|
||||
*.war
|
||||
*.nar
|
||||
*.ear
|
||||
*.zip
|
||||
*.tar.gz
|
||||
*.rar
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||
hs_err_pid*
|
||||
replay_pid*
|
||||
|
||||
### custom ###
|
||||
.flattened-pom.xml
|
||||
/**/application-local.yml
|
||||
/logs/
|
||||
|
||||
/log/
|
||||
*/log/
|
||||
|
@ -0,0 +1,161 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>marketing-platform</artifactId>
|
||||
<groupId>com.baiye</groupId>
|
||||
<version>1.1.0</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>admin</artifactId>
|
||||
|
||||
<properties>
|
||||
<knife4j.version>3.0.3</knife4j.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<!-- 基于 spring authorization server 的授权服务器 -->
|
||||
<dependency>
|
||||
<groupId>com.baiye</groupId>
|
||||
<artifactId>security-oauth2-authorization-server</artifactId>
|
||||
<version>1.1.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.baiye</groupId>
|
||||
<artifactId>admin-websocket</artifactId>
|
||||
<version>1.1.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.baiye</groupId>
|
||||
<artifactId>admin-core</artifactId>
|
||||
<version>1.1.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.baiye</groupId>
|
||||
<artifactId>marketing-platform-starter-job</artifactId>
|
||||
<version>1.1.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.baiye</groupId>
|
||||
<artifactId>common-redis</artifactId>
|
||||
<version>1.1.0</version>
|
||||
</dependency>
|
||||
|
||||
<!--mysql驱动-->
|
||||
<dependency>
|
||||
<groupId>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- openapi 扩展处理 -->
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>com.baiye</groupId>-->
|
||||
<!-- <artifactId>ballcat-extend-openapi</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
<!-- springdoc swagger-ui -->
|
||||
<dependency>
|
||||
<groupId>org.springdoc</groupId>
|
||||
<artifactId>springdoc-openapi-ui</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springdoc</groupId>
|
||||
<artifactId>springdoc-openapi-security</artifactId>
|
||||
</dependency>
|
||||
<!-- swagger 增强版 ui -->
|
||||
<dependency>
|
||||
<groupId>com.github.xiaoymin</groupId>
|
||||
<artifactId>knife4j-springdoc-ui</artifactId>
|
||||
<version>${knife4j.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Java图形验证码 -->
|
||||
<dependency>
|
||||
<groupId>com.github.whvcse</groupId>
|
||||
<artifactId>easy-captcha</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- API, java.xml.bind module -->
|
||||
<!-- add it when jdk11 -->
|
||||
<dependency>
|
||||
<groupId>jakarta.xml.bind</groupId>
|
||||
<artifactId>jakarta.xml.bind-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jaxb</groupId>
|
||||
<artifactId>jaxb-runtime</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!--hutool-->
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
</dependency>
|
||||
<!--easyexcel-->
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>easyexcel</artifactId>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-test</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.baiye</groupId>
|
||||
<artifactId>marketing-platform-starter-easyexcel</artifactId>
|
||||
<version>1.1.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.baiye</groupId>
|
||||
<artifactId>common-idempotent</artifactId>
|
||||
</dependency>
|
||||
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>repackage</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
@ -0,0 +1,24 @@
|
||||
package com.baiye;
|
||||
|
||||
import org.ballcat.springsecurity.oauth2.server.authorization.annotation.EnableOauth2AuthorizationServer;
|
||||
import org.ballcat.springsecurity.oauth2.server.resource.annotation.EnableOauth2ResourceServer;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
/**
|
||||
* @author Hccake
|
||||
*/
|
||||
@EnableOauth2AuthorizationServer
|
||||
@EnableOauth2ResourceServer
|
||||
@MapperScan({ "com.baiye.**.mapper" })
|
||||
@SpringBootApplication
|
||||
@EnableScheduling
|
||||
public class AdminApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(AdminApplication.class, args);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,118 @@
|
||||
//package com.baiye.aspect;
|
||||
//
|
||||
//import cn.hutool.core.collection.CollUtil;
|
||||
//import com.baiye.modules.distribute.entity.*;
|
||||
//import com.baiye.modules.distribute.mapper.ClueMapper;
|
||||
//import com.baiye.modules.distribute.mapper.ClueStageMapper;
|
||||
//import com.baiye.modules.distribute.mapper.LabelMapper;
|
||||
//import com.baiye.modules.distribute.mapper.LabelOrganizeMapper;
|
||||
//import com.baiye.modules.distribute.service.ClueRecordService;
|
||||
//import com.baiye.modules.distribute.service.DistributeTaskService;
|
||||
//import com.baiye.security.util.SecurityUtils;
|
||||
//import com.baiye.system.mapper.SysUserMapper;
|
||||
//import com.baiye.system.model.dto.SysUserDTO;
|
||||
//import com.baiye.system.model.entity.SysUser;
|
||||
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
//import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
//import lombok.RequiredArgsConstructor;
|
||||
//import lombok.extern.slf4j.Slf4j;
|
||||
//import org.aspectj.lang.JoinPoint;
|
||||
//import org.aspectj.lang.annotation.AfterReturning;
|
||||
//import org.aspectj.lang.annotation.Aspect;
|
||||
//import org.aspectj.lang.annotation.Before;
|
||||
//import org.aspectj.lang.annotation.Pointcut;
|
||||
//import org.springframework.stereotype.Component;
|
||||
//
|
||||
//import java.util.List;
|
||||
//import java.util.stream.Collectors;
|
||||
//
|
||||
///**
|
||||
// * 系统用户方法AOP
|
||||
// */
|
||||
//@Aspect
|
||||
//@Component
|
||||
//@Slf4j
|
||||
//@RequiredArgsConstructor
|
||||
//public class SysUserAspect {
|
||||
//
|
||||
// private final ClueRecordService clueRecordService;
|
||||
//
|
||||
// private final ClueMapper clueMapper;
|
||||
//
|
||||
// private final SysUserMapper sysUserMapper;
|
||||
//
|
||||
// private final DistributeTaskService distributeTaskService;
|
||||
//
|
||||
// private final LabelMapper labelMapper;
|
||||
//
|
||||
// private final LabelOrganizeMapper labelOrganizeMapper;
|
||||
//
|
||||
// private final ClueStageMapper clueStageMapper;
|
||||
//
|
||||
// /**
|
||||
// * 配置切入点
|
||||
// */
|
||||
// @Pointcut("execution(* com.baiye.system.service.impl.SysUserServiceImpl.addSysUser(..))")
|
||||
// public void asyncAddSysUser() {
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 配置切入点
|
||||
// */
|
||||
// @Pointcut("execution(* com.baiye.system.service.impl.SysUserServiceImpl.deleteByUserId(..))")
|
||||
// public void asyncDeleteByUserId() {
|
||||
// }
|
||||
//
|
||||
// @AfterReturning("asyncAddSysUser()")
|
||||
// public void beforeAddSysUser(JoinPoint joinPoint) {
|
||||
// log.info("==========创建用户开始执行AOP切入业务==========");
|
||||
// // 获取目标对象方法参数,添加业务管理员账号的默认上传记录
|
||||
// if (SecurityUtils.getCurrentUserId() == 1) {
|
||||
// Object[] args = joinPoint.getArgs();
|
||||
// if (args[0] != null && args[0] instanceof SysUserDTO) {
|
||||
// SysUserDTO sysUserDTO = (SysUserDTO) args[0];
|
||||
// String username = sysUserDTO.getUsername();
|
||||
// SysUser sysUser = sysUserMapper.selectByUsername(username);
|
||||
// if (sysUser != null && sysUser.getUserId() != null) {
|
||||
// // 创建默认的文件记录
|
||||
// ClueRecordEntity entity = clueRecordService.addDefaultRecordService(sysUser.getUserId(), "资源推送",
|
||||
// "资源推送");
|
||||
// // 创建默认的执行任务
|
||||
// distributeTaskService.addDefaultTask("资源推送", null, entity.getClueRecordId().toString(),
|
||||
// sysUser.getUserId(), null);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// @Before("asyncDeleteByUserId()")
|
||||
// public void beforeDeleteByUserId(JoinPoint joinPoint) {
|
||||
// log.info("==========删除用户开始执行AOP切入业务==========");
|
||||
// Object[] args = joinPoint.getArgs();
|
||||
// Object obj = args[0];
|
||||
// if (obj instanceof Long) {
|
||||
// // 查询下级是否有子用户
|
||||
// List<SysUser> userList = sysUserMapper
|
||||
// .selectList(new LambdaQueryWrapper<SysUser>().eq(SysUser::getWhichUserId, obj));
|
||||
// if (CollUtil.isNotEmpty(userList)) {
|
||||
// List<Long> userIdList = userList.stream().map(SysUser::getUserId).collect(Collectors.toList());
|
||||
// userIdList.add((Long) obj);
|
||||
// clueMapper.delete(new LambdaQueryWrapper<ClueEntity>().in(ClueEntity::getAssignedBy, userIdList));
|
||||
// }
|
||||
// clueMapper.delete(new LambdaQueryWrapper<ClueEntity>().eq(ClueEntity::getAssignedBy, obj));
|
||||
//
|
||||
// // 删除用户的任务和上传记录
|
||||
// BaseMapper<DistributeTaskEntity> taskMapper = distributeTaskService.getBaseMapper();
|
||||
// taskMapper
|
||||
// .delete(new LambdaQueryWrapper<DistributeTaskEntity>().eq(DistributeTaskEntity::getCreateBy, obj));
|
||||
// BaseMapper<ClueRecordEntity> clueRecordMapper = clueRecordService.getBaseMapper();
|
||||
// clueRecordMapper.delete(new LambdaQueryWrapper<ClueRecordEntity>().eq(ClueRecordEntity::getCreateBy, obj));
|
||||
// // 删除用户标签和标签组 - 阶段信息
|
||||
// labelMapper.delete(new LambdaQueryWrapper<LabelEntity>().eq(LabelEntity::getCreateBy, obj));
|
||||
// labelOrganizeMapper
|
||||
// .delete(new LambdaQueryWrapper<LabelOrganizeEntity>().eq(LabelOrganizeEntity::getCreateBy, obj));
|
||||
// clueStageMapper.delete(new LambdaQueryWrapper<ClueStageEntity>().eq(ClueStageEntity::getCreateBy, obj));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//}
|
@ -0,0 +1,37 @@
|
||||
package com.baiye.captcha;
|
||||
|
||||
import com.baiye.exception.BadRequestException;
|
||||
import com.baiye.result.R;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.ballcat.security.captcha.IValidateCodeService;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 验证码生成
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/captcha")
|
||||
@Tag(name = "验证码")
|
||||
public class CaptchaController {
|
||||
|
||||
private final IValidateCodeService codeService;
|
||||
|
||||
@GetMapping("/code")
|
||||
@Operation(summary = "获取验证码")
|
||||
public R<Object> getCode() {
|
||||
Map<String,Object> captcha;
|
||||
try {
|
||||
captcha = this.codeService.createCapcha();
|
||||
} catch (Exception e) {
|
||||
throw new BadRequestException("生成验证码错误");
|
||||
}
|
||||
return R.ok(captcha);
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
package com.baiye.captcha.config;
|
||||
|
||||
import com.wf.captcha.base.Captcha;
|
||||
|
||||
import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptEngineManager;
|
||||
import javax.script.ScriptException;
|
||||
|
||||
/**
|
||||
* 验证码源码复制重写{@link ArithmeticCaptchaRewrite} 待修改
|
||||
*/
|
||||
public abstract class ArithmeticCaptchaAbstractRewrite extends Captcha {
|
||||
private String arithmeticString;
|
||||
|
||||
public ArithmeticCaptchaAbstractRewrite() {
|
||||
this.setLen(2);
|
||||
}
|
||||
|
||||
protected char[] alphas() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
for (int i = 0; i < this.len; ++i) {
|
||||
sb.append(num(10));
|
||||
if (i < this.len - 1) {
|
||||
sb.append("+");
|
||||
}
|
||||
}
|
||||
|
||||
ScriptEngineManager manager = new ScriptEngineManager();
|
||||
ScriptEngine engine = manager.getEngineByName("javascript");
|
||||
|
||||
try {
|
||||
this.chars = String.valueOf(engine.eval(sb.toString().replaceAll("x", "*")));
|
||||
} catch (ScriptException var5) {
|
||||
var5.printStackTrace();
|
||||
}
|
||||
|
||||
sb.append("=?");
|
||||
this.arithmeticString = sb.toString();
|
||||
return this.chars.toCharArray();
|
||||
}
|
||||
|
||||
public String getArithmeticString() {
|
||||
this.checkAlpha();
|
||||
return this.arithmeticString;
|
||||
}
|
||||
|
||||
public void setArithmeticString(String arithmeticString) {
|
||||
this.arithmeticString = arithmeticString;
|
||||
}
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
package com.baiye.captcha.config;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
|
||||
/**
|
||||
* 验证码源码复制重写{@link ArithmeticCaptchaAbstractRewrite} 待修改
|
||||
*/
|
||||
public class ArithmeticCaptchaRewrite extends ArithmeticCaptchaAbstractRewrite {
|
||||
public ArithmeticCaptchaRewrite() {
|
||||
}
|
||||
|
||||
public ArithmeticCaptchaRewrite(int width, int height) {
|
||||
this();
|
||||
this.setWidth(width);
|
||||
this.setHeight(height);
|
||||
}
|
||||
|
||||
public ArithmeticCaptchaRewrite(int width, int height, int len) {
|
||||
this(width, height);
|
||||
this.setLen(len);
|
||||
}
|
||||
|
||||
public ArithmeticCaptchaRewrite(int width, int height, int len, Font font) {
|
||||
this(width, height, len);
|
||||
this.setFont(font);
|
||||
}
|
||||
|
||||
public boolean out(OutputStream out) {
|
||||
this.checkAlpha();
|
||||
return this.graphicsImage(this.getArithmeticString().toCharArray(), out);
|
||||
}
|
||||
|
||||
public String toBase64() {
|
||||
return this.toBase64("data:image/png;base64,");
|
||||
}
|
||||
|
||||
private boolean graphicsImage(char[] strs, OutputStream out) {
|
||||
try {
|
||||
BufferedImage bi = new BufferedImage(this.width, this.height, 1);
|
||||
Graphics2D g2d = (Graphics2D)bi.getGraphics();
|
||||
g2d.setColor(Color.WHITE);
|
||||
g2d.fillRect(0, 0, this.width, this.height);
|
||||
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||
this.drawOval(2, g2d);
|
||||
g2d.setFont(this.getFont());
|
||||
FontMetrics fontMetrics = g2d.getFontMetrics();
|
||||
int fW = this.width / strs.length;
|
||||
int fSp = (fW - (int)fontMetrics.getStringBounds("8", g2d).getWidth()) / 2;
|
||||
|
||||
for(int i = 0; i < strs.length; ++i) {
|
||||
g2d.setColor(this.color());
|
||||
int fY = this.height - (this.height - (int)fontMetrics.getStringBounds(String.valueOf(strs[i]), g2d).getHeight() >> 1);
|
||||
g2d.drawString(String.valueOf(strs[i]), i * fW + fSp + 3, fY - 3);
|
||||
}
|
||||
|
||||
g2d.dispose();
|
||||
ImageIO.write(bi, "png", out);
|
||||
out.flush();
|
||||
boolean var20 = true;
|
||||
return var20;
|
||||
} catch (IOException var18) {
|
||||
var18.printStackTrace();
|
||||
} finally {
|
||||
try {
|
||||
out.close();
|
||||
} catch (IOException var17) {
|
||||
var17.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package com.baiye.captcha.config;
|
||||
|
||||
import com.baiye.captcha.enums.CaptchaEnum;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* 验证码配置
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@Configuration
|
||||
public class CaptchaConfig {
|
||||
/**
|
||||
* 验证码配置
|
||||
*/
|
||||
private CaptchaEnum codeType = CaptchaEnum.arithmetic;
|
||||
/**
|
||||
* 验证码有效期 分钟
|
||||
*/
|
||||
private Long expiration = 2L;
|
||||
/**
|
||||
* 验证码内容长度
|
||||
*/
|
||||
private int length = 2;
|
||||
/**
|
||||
* 验证码宽度
|
||||
*/
|
||||
private int width = 111;
|
||||
/**
|
||||
* 验证码高度
|
||||
*/
|
||||
private int height = 36;
|
||||
/**
|
||||
* 验证码字体
|
||||
*/
|
||||
private String fontName;
|
||||
/**
|
||||
* 字体大小
|
||||
*/
|
||||
private int fontSize = 25;
|
||||
|
||||
public CaptchaEnum getCodeType() {
|
||||
return codeType;
|
||||
}
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
package com.baiye.captcha.config;
|
||||
|
||||
import com.baiye.captcha.enums.CaptchaEnum;
|
||||
import com.wf.captcha.*;
|
||||
import com.wf.captcha.base.Captcha;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @description 验证码文本生成器
|
||||
*/
|
||||
@Component
|
||||
public class KaptchaTextCreator {
|
||||
|
||||
private final CaptchaConfig captchaConfig;
|
||||
|
||||
public KaptchaTextCreator(CaptchaConfig captchaConfig) {
|
||||
this.captchaConfig = captchaConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取验证码生产类
|
||||
*
|
||||
* @return /
|
||||
*/
|
||||
public Captcha getCaptcha() {
|
||||
if (Objects.isNull(captchaConfig)) {
|
||||
if (Objects.isNull(captchaConfig.getCodeType())) {
|
||||
captchaConfig.setCodeType(CaptchaEnum.arithmetic);
|
||||
}
|
||||
}
|
||||
return switchCaptcha(captchaConfig);
|
||||
}
|
||||
|
||||
/**
|
||||
* 依据配置信息生产验证码
|
||||
*
|
||||
* @param captchaConfig 验证码配置信息
|
||||
* @return /
|
||||
*/
|
||||
private Captcha switchCaptcha(CaptchaConfig captchaConfig) {
|
||||
Captcha captcha;
|
||||
synchronized (this) {
|
||||
switch (captchaConfig.getCodeType()) {
|
||||
case arithmetic:
|
||||
// 算术类型 https://gitee.com/whvse/EasyCaptcha
|
||||
//captcha = new ArithmeticCaptcha(captchaConfig.getWidth(), captchaConfig.getHeight());
|
||||
captcha = new ArithmeticCaptchaRewrite(captchaConfig.getWidth(), captchaConfig.getHeight());
|
||||
// 几位数运算,默认是两位
|
||||
captcha.setLen(captchaConfig.getLength());
|
||||
break;
|
||||
case chinese:
|
||||
captcha = new ChineseCaptcha(captchaConfig.getWidth(), captchaConfig.getHeight());
|
||||
captcha.setLen(captchaConfig.getLength());
|
||||
break;
|
||||
case chinese_gif:
|
||||
captcha = new ChineseGifCaptcha(captchaConfig.getWidth(), captchaConfig.getHeight());
|
||||
captcha.setLen(captchaConfig.getLength());
|
||||
break;
|
||||
case gif:
|
||||
captcha = new GifCaptcha(captchaConfig.getWidth(), captchaConfig.getHeight());
|
||||
captcha.setLen(captchaConfig.getLength());
|
||||
break;
|
||||
case spec:
|
||||
captcha = new SpecCaptcha(captchaConfig.getWidth(), captchaConfig.getHeight());
|
||||
captcha.setLen(captchaConfig.getLength());
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("验证码配置信息错误!正确配置查看 CaptchaEnum ");
|
||||
}
|
||||
}
|
||||
if(StringUtils.isNotBlank(captchaConfig.getFontName())){
|
||||
captcha.setFont(new Font(captchaConfig.getFontName(), Font.PLAIN, captchaConfig.getFontSize()));
|
||||
}
|
||||
return captcha;
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.baiye.captcha.enums;
|
||||
|
||||
public enum CaptchaEnum {
|
||||
/**
|
||||
* 算数
|
||||
*/
|
||||
arithmetic,
|
||||
/**
|
||||
* 中文
|
||||
*/
|
||||
chinese,
|
||||
/**
|
||||
* 中文闪图
|
||||
*/
|
||||
chinese_gif,
|
||||
/**
|
||||
* 闪图
|
||||
*/
|
||||
gif,
|
||||
|
||||
spec
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package com.baiye.captcha.impl;
|
||||
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.baiye.constant.CaptchaConstant;
|
||||
import com.baiye.captcha.config.KaptchaTextCreator;
|
||||
import com.baiye.exception.BadRequestException;
|
||||
import com.baiye.util.RedisUtils;
|
||||
import com.wf.captcha.base.Captcha;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.ballcat.security.captcha.IValidateCodeService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* @description 验证码业务处理实现类
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class ValidateCodeServiceImpl implements IValidateCodeService {
|
||||
|
||||
private final RedisUtils redisUtils;
|
||||
|
||||
private final KaptchaTextCreator kaptchaTextCreator;
|
||||
|
||||
|
||||
@Override
|
||||
public Map<String, Object> createCapcha() {
|
||||
// 获取验证码
|
||||
Captcha captcha = this.kaptchaTextCreator.getCaptcha();
|
||||
// 生成一个唯一的id
|
||||
String uuid = CaptchaConstant.CAPTCHA_CODE_KEY + IdUtil.simpleUUID();
|
||||
// 保存到redis中
|
||||
this.redisUtils.set(uuid, captcha.text(), CaptchaConstant.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("uuid", uuid);
|
||||
map.put("img", captcha.toBase64());
|
||||
return map;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkCapcha(String key, String code) {
|
||||
if (CharSequenceUtil.isBlank(code)) {
|
||||
throw new BadRequestException("验证码不能为空");
|
||||
}
|
||||
String captcha = (String) redisUtils.get(key);
|
||||
if (CharSequenceUtil.isBlank(captcha)) {
|
||||
throw new BadRequestException("验证码已失效");
|
||||
}
|
||||
redisUtils.del(key);
|
||||
if (!code.equalsIgnoreCase(captcha)) {
|
||||
throw new BadRequestException("验证码错误");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package com.baiye.constant;
|
||||
|
||||
/**
|
||||
* @Author YQY
|
||||
* @Date 2023/8/17
|
||||
*/
|
||||
public class PrefixKeyConstant {
|
||||
|
||||
public static final String JOB_KEY = "ad_distribute_distributeTask_id_";
|
||||
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package com.baiye.constant;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/11/6
|
||||
*/
|
||||
public class ResponseConstant {
|
||||
|
||||
public static final int SUCCESS = 200;
|
||||
|
||||
|
||||
|
||||
public static final int OCENA_NO_PERMISSION = 40002;
|
||||
|
||||
public static final int OCEAN_FAIL = 200;
|
||||
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package com.baiye.constant;
|
||||
|
||||
/**
|
||||
* 上传文件模板头信息常量
|
||||
*/
|
||||
public class UploadTemplateHeadConstant {
|
||||
|
||||
public static final String HEAD_NID = "手机号";
|
||||
|
||||
public static final String HEAD_ORIGIN = "渠道来源";
|
||||
|
||||
public static final String HEAD_REMARK = "备注";
|
||||
|
||||
public static final String HEAD_DATE = "日期(****/**/** 00:00:00)";
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package com.baiye.constant;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
*/
|
||||
public class UrlConstant {
|
||||
|
||||
public static String CONNECT_OAUTH2_AUTHORIZE_URL = "https://ad.oceanengine.com/openapi/audit/oauth.html?app_id=%s&state=%s&material_auth=1&redirect_uri=%s&material_auth=1";
|
||||
public static String OAUTH2_ACCESS_TOKEN_URL = "https://ad.oceanengine.com/open_api/oauth2/access_token/";
|
||||
public static String OAUTH2_REFRESH_TOKEN_URL = "https://ad.oceanengine.com/open_api/oauth2/refresh_token/";
|
||||
public static String OAUTH2_AUTH_ADVERTISER_URL = "https://ad.oceanengine.com/open_api/oauth2/advertiser/get/?access_token=%s&app_id=%s&secret=%s";
|
||||
|
||||
public static String SYNC_CLUE_URL = "https://ad.oceanengine.com/open_api/2/tools/clue/get/";
|
||||
public static String GET_ADVERTISER = "https://ad.oceanengine.com/open_api/2/majordomo/advertiser/select/";
|
||||
|
||||
public static String CALL_BACK_CLUE_URL="https://ad.oceanengine.com/open_api/2/tools/clue/callback/";
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package com.baiye.easyexcel.dto;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnore;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.*;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class ClueListenerDto {
|
||||
|
||||
@ExcelProperty(value = "手机号")
|
||||
private String nid;
|
||||
|
||||
@ExcelProperty(value = "渠道来源")
|
||||
private String originName;
|
||||
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
@ExcelProperty(value = "日期(****/**/** 00:00:00)")
|
||||
private Date clueTime;
|
||||
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
package com.baiye.event.system;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baiye.modules.distribute.entity.*;
|
||||
import com.baiye.modules.distribute.mapper.ClueMapper;
|
||||
import com.baiye.modules.distribute.mapper.ClueStageMapper;
|
||||
import com.baiye.modules.distribute.mapper.LabelMapper;
|
||||
import com.baiye.modules.distribute.mapper.LabelOrganizeMapper;
|
||||
import com.baiye.modules.distribute.service.ClueRecordService;
|
||||
import com.baiye.modules.distribute.service.DistributeTaskService;
|
||||
import com.baiye.security.util.SecurityUtils;
|
||||
import com.baiye.system.event.UserCreatedEvent;
|
||||
import com.baiye.system.event.UserDelEvent;
|
||||
import com.baiye.system.model.entity.SysUser;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* ApplicationEventPublisher使用 用户操作监听类
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
public class UserEventListener {
|
||||
|
||||
private final ClueRecordService clueRecordService;
|
||||
|
||||
private final DistributeTaskService distributeTaskService;
|
||||
|
||||
private final LabelMapper labelMapper;
|
||||
|
||||
private final LabelOrganizeMapper labelOrganizeMapper;
|
||||
|
||||
private final ClueStageMapper clueStageMapper;
|
||||
|
||||
private final ClueMapper clueMapper;
|
||||
|
||||
@EventListener(UserCreatedEvent.class)
|
||||
public void createUser(UserCreatedEvent userCreatedEvent) {
|
||||
log.info("==========创建用户 监听方法执行==========");
|
||||
SysUser sysUser = userCreatedEvent.getSysUser();
|
||||
if (SecurityUtils.getCurrentUserId() == 1 && sysUser != null) {
|
||||
// 创建默认的文件记录
|
||||
ClueRecordEntity entity = clueRecordService.addDefaultRecordService(sysUser.getUserId(), "资源推送", "资源推送");
|
||||
// 创建默认的执行任务
|
||||
distributeTaskService.addDefaultTask("资源推送", null, entity.getClueRecordId().toString(), sysUser.getUserId(), null);
|
||||
}
|
||||
}
|
||||
|
||||
@EventListener(UserDelEvent.class)
|
||||
public void delUser(UserDelEvent userDelEvent) {
|
||||
log.info("==========删除用户 监听方法执行==========");
|
||||
List<Long> delUserIdList = userDelEvent.getUserIdList();
|
||||
if (CollUtil.isNotEmpty(delUserIdList)) {
|
||||
//1、删除资源
|
||||
clueMapper.delete(new LambdaQueryWrapper<ClueEntity>().in(ClueEntity::getAssignedBy, delUserIdList));
|
||||
//2、删除用户的任务和上传记录
|
||||
BaseMapper<DistributeTaskEntity> taskMapper = distributeTaskService.getBaseMapper();
|
||||
taskMapper.delete(new LambdaQueryWrapper<DistributeTaskEntity>().eq(DistributeTaskEntity::getCreateBy, delUserIdList));
|
||||
BaseMapper<ClueRecordEntity> clueRecordMapper = clueRecordService.getBaseMapper();
|
||||
clueRecordMapper.delete(new LambdaQueryWrapper<ClueRecordEntity>().eq(ClueRecordEntity::getCreateBy, delUserIdList));
|
||||
//3、 删除用户标签和标签组 - 阶段信息
|
||||
labelMapper.delete(new LambdaQueryWrapper<LabelEntity>().eq(LabelEntity::getCreateBy, delUserIdList));
|
||||
labelOrganizeMapper.delete(new LambdaQueryWrapper<LabelOrganizeEntity>().eq(LabelOrganizeEntity::getCreateBy, delUserIdList));
|
||||
clueStageMapper.delete(new LambdaQueryWrapper<ClueStageEntity>().eq(ClueStageEntity::getCreateBy, delUserIdList));
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package com.baiye.job;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baiye.modules.distribute.service.DistributeReportService;
|
||||
import com.dangdang.ddframe.job.api.ShardingContext;
|
||||
import com.dangdang.ddframe.job.api.simple.SimpleJob;
|
||||
import com.example.jobInstance.ElasticSimpleJob;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/8/14 导入分配统计 0/5 * * * * ?
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
@ElasticSimpleJob(jobName = "DistributeRecordReportJob", cron = "0 30 23 * * ?")
|
||||
public class DistributeRecordReportJob implements SimpleJob {
|
||||
|
||||
@Resource
|
||||
private DistributeReportService distributeReportService;
|
||||
|
||||
@Override
|
||||
public void execute(ShardingContext shardingContext) {
|
||||
log.info("流量分布定时任务开始-----{}", DateUtil.date());
|
||||
distributeReportService.distributeReport();
|
||||
log.info("流量分布定时任务结束-----{}", DateUtil.date());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package com.baiye.job;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baiye.constant.PrefixKeyConstant;
|
||||
import com.baiye.modules.distribute.entity.DistributeTaskEntity;
|
||||
import com.baiye.modules.distribute.mapper.DistributeTaskMapper;
|
||||
import com.baiye.utils.DateTimeToCronUtils;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.example.entity.Job;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
import org.springframework.boot.ApplicationRunner;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 项目启动后执行 把定时任务加入到zookeeper中
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class JobApplicationRunner implements ApplicationRunner {
|
||||
|
||||
@Resource
|
||||
private DistributeTaskMapper distributeTaskMapper;
|
||||
|
||||
@Resource
|
||||
private MyJobService jobService;
|
||||
|
||||
@Override
|
||||
public void run(ApplicationArguments args) {
|
||||
log.info("==============项目启动,自动添加业务中定时任务==============");
|
||||
List<DistributeTaskEntity> distributeTaskEntities = distributeTaskMapper.selectList(
|
||||
new LambdaQueryWrapper<DistributeTaskEntity>().eq(DistributeTaskEntity::getDistributeTaskType, 1)
|
||||
.eq(DistributeTaskEntity::getTimeStatus, 1)
|
||||
.ne(DistributeTaskEntity::getExecuteStatus, 0));
|
||||
|
||||
if (CollUtil.isNotEmpty(distributeTaskEntities)) {
|
||||
for (DistributeTaskEntity distributeTaskEntity : distributeTaskEntities) {
|
||||
if (distributeTaskEntity != null && distributeTaskEntity.getStartTime() != null) {
|
||||
Job job = new Job();
|
||||
job.setJobName(PrefixKeyConstant.JOB_KEY + distributeTaskEntity.getDistributeTaskId());
|
||||
String cron = DateTimeToCronUtils.getCron(distributeTaskEntity.getStartTime(),
|
||||
DateTimeToCronUtils.EVERYDAY);
|
||||
job.setCron(cron);
|
||||
job.setJobClass("com.baiye.job.LinkWatchJob");
|
||||
jobService.addJob(job);
|
||||
// 暂停
|
||||
if (distributeTaskEntity.getExecuteStatus() == 3)
|
||||
jobService.pauseJob(job.getJobName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package com.baiye.job;
|
||||
|
||||
import com.example.serive.impl.JobServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @Author YQY
|
||||
* @Date 2023/8/17
|
||||
*/
|
||||
@Service
|
||||
public class MyJobService extends JobServiceImpl {
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package com.baiye.job;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baiye.modules.distribute.service.OceanEngineClueService;
|
||||
import com.dangdang.ddframe.job.api.ShardingContext;
|
||||
import com.dangdang.ddframe.job.api.simple.SimpleJob;
|
||||
import com.example.jobInstance.ElasticSimpleJob;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/11/3
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
@ElasticSimpleJob(jobName = "OceanEngineClueJob", cron = "0 0/15 * * * ?")
|
||||
public class OceanEngineClueJob implements SimpleJob {
|
||||
|
||||
@Resource
|
||||
private OceanEngineClueService oceanEngineClueService;
|
||||
|
||||
@Override
|
||||
public void execute(ShardingContext shardingContext) {
|
||||
Date currentTime = DateUtil.date();
|
||||
Date startTime = DateUtil.beginOfMinute(DateUtil.offsetMinute(currentTime, -15));
|
||||
Date endTime = DateUtil.endOfMinute(DateUtil.offsetMinute(currentTime, -1));
|
||||
oceanEngineClueService.getFeiYuSource(startTime, endTime);
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package com.baiye.modules.auth;
|
||||
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class AccessTokenRequest extends BaseModel {
|
||||
private String appId;
|
||||
|
||||
private String secret;
|
||||
|
||||
private String grantType;
|
||||
|
||||
private String authCode;
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package com.baiye.modules.auth;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class AccessTokenResponse extends OceanEngineResponse<AccessTokenResponse.Data> {
|
||||
|
||||
@lombok.Data
|
||||
public static class Data {
|
||||
|
||||
@JsonProperty("access_token")
|
||||
private String accessToken;
|
||||
|
||||
@JsonProperty("expires_in")
|
||||
private Long expiresIn;
|
||||
|
||||
@JsonProperty("refresh_token")
|
||||
private String refreshToken;
|
||||
|
||||
@JsonProperty("advertiser_id")
|
||||
private Long advertiserId;
|
||||
|
||||
@JsonProperty("advertiser_ids")
|
||||
private List<String> advertiserIds;
|
||||
|
||||
@JsonProperty("refresh_token_expires_in")
|
||||
private Long refreshTokenExpiresIn;
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package com.baiye.modules.auth;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class AuthAdvertiserRequest extends BaseModel {
|
||||
|
||||
private String accessToken;
|
||||
|
||||
private String appId;
|
||||
|
||||
private String secret;
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.baiye.modules.auth;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class AuthAdvertiserResponse extends OceanEngineResponse<AuthAdvertiserResponse.Data> {
|
||||
@lombok.Data
|
||||
public static class Data {
|
||||
List<AuthAdvertiserInfo> list;
|
||||
}
|
||||
|
||||
@lombok.Data
|
||||
public static class AuthAdvertiserInfo {
|
||||
@JsonProperty("advertiser_id")
|
||||
private Long advertiserId;
|
||||
|
||||
@JsonProperty("advertiserName")
|
||||
private String advertiserName;
|
||||
|
||||
@JsonProperty("account_role")
|
||||
private String accountRole;
|
||||
|
||||
@JsonProperty("advertiser_role")
|
||||
private Integer advertiserRole;
|
||||
|
||||
@JsonProperty("is_valid")
|
||||
private Boolean isValid;
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package com.baiye.modules.auth;
|
||||
|
||||
|
||||
import com.google.gson.FieldNamingPolicy;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2022-9-14
|
||||
*/
|
||||
public class BaseModel {
|
||||
/**
|
||||
* Returns a JSON string corresponding to object state
|
||||
*
|
||||
* @return JSON representation
|
||||
*/
|
||||
|
||||
public String toJson() {
|
||||
GsonBuilder gsonBuilder = new GsonBuilder();
|
||||
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
|
||||
Gson gson = gsonBuilder.create();
|
||||
return gson.toJson(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return toJson();
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.baiye.modules.auth;
|
||||
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class OceanEngineResponse<T> {
|
||||
private T data;
|
||||
|
||||
@JsonProperty("code")
|
||||
private int code;
|
||||
|
||||
@JsonProperty("message")
|
||||
private String message;
|
||||
|
||||
@JsonProperty("request_id")
|
||||
private String requestId = CharSequenceUtil.EMPTY;
|
||||
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package com.baiye.modules.auth;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class RefreshTokenRequest extends BaseModel {
|
||||
private String appId;
|
||||
|
||||
private String secret;
|
||||
|
||||
private String grantType;
|
||||
|
||||
private String refreshToken;
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package com.baiye.modules.auth;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class RefreshTokenResponse extends OceanEngineResponse<RefreshTokenResponse.Data> {
|
||||
|
||||
@lombok.Data
|
||||
public static class Data {
|
||||
@JsonProperty("access_token")
|
||||
private String accessToken;
|
||||
|
||||
@JsonProperty("expires_in")
|
||||
private Long expiresIn;
|
||||
|
||||
@JsonProperty("refresh_token")
|
||||
private String refreshToken;
|
||||
|
||||
@JsonProperty("refresh_token_expires_in")
|
||||
private Long refreshTokenExpiresIn;
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.baiye.modules.auth;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/3/4
|
||||
*/
|
||||
@Data
|
||||
public class SendClueResponse {
|
||||
|
||||
@SerializedName("code")
|
||||
@JsonProperty("code")
|
||||
private int code;
|
||||
|
||||
@SerializedName("is_exist")
|
||||
@JsonProperty("is_exist")
|
||||
private Boolean isExist;
|
||||
|
||||
@SerializedName("message")
|
||||
@JsonProperty("message")
|
||||
private String message;
|
||||
}
|
@ -0,0 +1,96 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baiye.common.excel.annotation.ResponseExcel;
|
||||
import com.baiye.constant.DefaultNumberConstants;
|
||||
import com.baiye.domain.PageParam;
|
||||
import com.baiye.domain.PageResult;
|
||||
import com.baiye.modules.distribute.dto.ClueDTO;
|
||||
import com.baiye.modules.distribute.entity.ClueEntity;
|
||||
import com.baiye.modules.distribute.qo.ClueQo;
|
||||
import com.baiye.modules.distribute.service.ClueService;
|
||||
import com.baiye.modules.distribute.vo.ClueVO;
|
||||
import com.baiye.notify.event.UserAnnouncementReadEvent;
|
||||
import com.baiye.result.BaseResultCode;
|
||||
import com.baiye.result.R;
|
||||
import com.baiye.security.util.SecurityUtils;
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import com.google.common.collect.Lists;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@Tag(name = "资源管理")
|
||||
@RequestMapping("/clue")
|
||||
public class ClueController {
|
||||
|
||||
private final ClueService clueService;
|
||||
|
||||
|
||||
private final ApplicationContext publisher;
|
||||
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "分页查询资源")
|
||||
public R<PageResult<ClueVO>> getClueRecordPage(@Validated PageParam pageParam, ClueQo qo) {
|
||||
setQueryQo(qo);
|
||||
return R.ok(clueService.queryPage(pageParam, qo));
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
@Operation(summary = "修改资源详细信息", description = "修改资源详细信息")
|
||||
public R<Object> update(@Validated({UpdateGroup.class}) @RequestBody ClueDTO clueEntity) {
|
||||
publisher.publishEvent(new UserAnnouncementReadEvent(clueEntity.getClueId(), SecurityUtils.getCurrentUserId()));
|
||||
return clueService.update(clueEntity) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改失败");
|
||||
}
|
||||
|
||||
@PostMapping("/updateClue")
|
||||
@Operation(summary = "修改资源", description = "修改资源")
|
||||
public R<Object> updateClue(@Validated({UpdateGroup.class}) @RequestBody ClueEntity clueEntity) {
|
||||
clueEntity.setIsNewClue(Boolean.FALSE);
|
||||
publisher.publishEvent(new UserAnnouncementReadEvent(clueEntity.getClueId(), SecurityUtils.getCurrentUserId()));
|
||||
return clueService.updateById(clueEntity) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改失败");
|
||||
}
|
||||
|
||||
@GetMapping("/details/{id}")
|
||||
@Operation(summary = "ID查询详情")
|
||||
public R<ClueVO> getClueDetails(@PathVariable("id") Long clueId, ClueQo qo) {
|
||||
return R.ok(clueService.details(clueId, qo));
|
||||
}
|
||||
|
||||
@Operation(summary = "修改是否有效")
|
||||
@GetMapping("/changeIsEffective")
|
||||
public R<Object> update(Long id, Integer effective) {
|
||||
clueService.changeEffective(id, effective);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@ResponseExcel(name = "线索表单")
|
||||
@GetMapping("/export")
|
||||
public List<ClueVO> exportClueData(ClueQo qo) {
|
||||
setQueryQo(qo);
|
||||
List<ClueVO> list = clueService.queryList(qo);
|
||||
return CollUtil.isEmpty(list) ? Lists.newArrayList(new ClueVO()) : list;
|
||||
}
|
||||
|
||||
private void setQueryQo(ClueQo qo) {
|
||||
if (ObjectUtil.isNotNull(qo.getSalesmanType())) {
|
||||
if (qo.getSalesmanType() == DefaultNumberConstants.FOUR_NUMBER) {
|
||||
qo.setAssignedBy(SecurityUtils.getCurrentUserId());
|
||||
}
|
||||
if (qo.getSalesmanType() == DefaultNumberConstants.ZERO_NUMBER) {
|
||||
qo.setCompanyId(SecurityUtils.getCurrentUserId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import com.baiye.exception.BadRequestException;
|
||||
import com.baiye.modules.distribute.dto.ReadFileDTO;
|
||||
import com.baiye.modules.distribute.service.ClueFileService;
|
||||
import com.baiye.result.R;
|
||||
import com.baiye.validation.group.CreateGroup;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.*;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@Tag(name = "资源文件管理")
|
||||
@RequestMapping("/clueFile")
|
||||
public class ClueFileController {
|
||||
|
||||
private final ClueFileService clueFileService;
|
||||
|
||||
@PostMapping("/detection")
|
||||
@Operation(summary = "校验表头信息")
|
||||
public R<Map<String, Object>> detection(@RequestParam("file") MultipartFile file) {
|
||||
return R.ok(clueFileService.detection(file));
|
||||
}
|
||||
|
||||
@PostMapping("/readFile")
|
||||
@Operation(summary = "读取文件信息")
|
||||
public R<Object> readFile(@Validated({CreateGroup.class}) @RequestBody ReadFileDTO readFileDTO) {
|
||||
clueFileService.readFile(readFileDTO);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@GetMapping("/export")
|
||||
@Operation(summary = "导出模板")
|
||||
public void exportExcelTemplate(HttpServletResponse response) {
|
||||
try (InputStream inputStream = getClass().getResourceAsStream("/file/template.xlsx")) {
|
||||
String fileName = URLEncoder.encode("template.xlsx", "UTF-8");
|
||||
response.setContentType("application/vnd.ms-excel");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
|
||||
EasyExcel.write(response.getOutputStream()).withTemplate(inputStream).sheet().doWrite(new ArrayList<>());
|
||||
}catch (IOException e) {
|
||||
throw new BadRequestException("导出失败,请联系管理员");
|
||||
}
|
||||
}
|
||||
|
||||
@GetMapping("/generate")
|
||||
@Operation(summary = "生成秘钥")
|
||||
public R<Map<String, Object>> generateSecretKey() {
|
||||
return R.ok(clueFileService.generateSecretKey());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.domain.SelectData;
|
||||
import com.baiye.modules.distribute.service.ClueRecordService;
|
||||
import com.baiye.modules.distribute.vo.ClueRecordVO;
|
||||
import com.baiye.modules.distribute.qo.ClueRecordQo;
|
||||
import com.baiye.domain.PageParam;
|
||||
import com.baiye.domain.PageResult;
|
||||
import com.baiye.result.BaseResultCode;
|
||||
import com.baiye.result.R;
|
||||
import com.baiye.security.util.SecurityUtils;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@Tag(name = "文件上传记录API")
|
||||
@RequestMapping("/clueRecord")
|
||||
public class ClueRecordController {
|
||||
|
||||
private final ClueRecordService clueRecordService;
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "分页查询导入记录")
|
||||
public R<PageResult<ClueRecordVO>> getClueRecordPage(@Validated PageParam pageParam, ClueRecordQo qo) {
|
||||
return R.ok(clueRecordService.queryPage(pageParam, qo));
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
@Operation(summary = "ID删除记录并删除本地文件")
|
||||
public R<Void> deleteByUserId(@PathVariable("id") Long clueRecordId) {
|
||||
return clueRecordService.deleteByUserId(clueRecordId) ? R.ok()
|
||||
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "删除文件失败");
|
||||
}
|
||||
|
||||
@GetMapping("/select")
|
||||
@Operation(summary = "下拉列表数据")
|
||||
public R<List<SelectData<Void>>> listSelectData(ClueRecordQo qo) {
|
||||
qo.setCreateBy(SecurityUtils.getCurrentUserId());
|
||||
qo.setAllocationStatus(0);
|
||||
qo.setDistributeStatus(0);
|
||||
qo.setRecordType(0);
|
||||
return R.ok(clueRecordService.listSelectData(qo));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.modules.distribute.entity.ClueStageEntity;
|
||||
import com.baiye.modules.distribute.service.ClueStageService;
|
||||
import com.baiye.result.BaseResultCode;
|
||||
import com.baiye.result.R;
|
||||
import com.baiye.validation.group.CreateGroup;
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@Tag(name = "资源阶段API")
|
||||
@RequestMapping("/clueStage")
|
||||
public class ClueStageController {
|
||||
|
||||
private final ClueStageService clueStageService;
|
||||
|
||||
@GetMapping("/list")
|
||||
@Operation(summary = "列表")
|
||||
public R<Object> list() {
|
||||
return R.ok(clueStageService.listData());
|
||||
}
|
||||
|
||||
@PostMapping("/add")
|
||||
@Operation(summary = "新增线索阶段", description = "新增线索阶段")
|
||||
public R<Object> save(@Validated({ CreateGroup.class }) @RequestBody ClueStageEntity clueStageEntity) {
|
||||
return clueStageService.save(clueStageEntity) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "添加失败");
|
||||
}
|
||||
|
||||
@PostMapping("/addList")
|
||||
@Operation(summary = "批量新增线索阶段", description = "批量新增线索阶段")
|
||||
public R<Object> addList(@Valid @RequestBody List<ClueStageEntity> clueStageEntity) {
|
||||
return clueStageService.saveBatch(clueStageEntity) ? R.ok()
|
||||
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "添加失败");
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
@Operation(summary = "修改线索阶段", description = "修改线索阶段")
|
||||
public R<Object> update(@Validated({ UpdateGroup.class }) @RequestBody ClueStageEntity clueStageEntity) {
|
||||
return clueStageService.updateById(clueStageEntity) ? R.ok()
|
||||
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改失败");
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
@Operation(summary = "ID删除线索阶段")
|
||||
public R<Void> deleteByUserId(@PathVariable("id") Long id) {
|
||||
return clueStageService.removeById(id) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "删除失败");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,154 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baiye.common.excel.annotation.ResponseExcel;
|
||||
import com.baiye.constant.DefaultNumberConstants;
|
||||
import com.baiye.domain.PageParam;
|
||||
import com.baiye.domain.PageResult;
|
||||
import com.baiye.modules.distribute.converter.CustomConverter;
|
||||
import com.baiye.modules.distribute.dto.ChangeCustomDTO;
|
||||
import com.baiye.modules.distribute.dto.CreateCustomDTO;
|
||||
import com.baiye.modules.distribute.dto.CustomDTO;
|
||||
import com.baiye.modules.distribute.entity.CustomEntity;
|
||||
import com.baiye.modules.distribute.qo.CustomQo;
|
||||
import com.baiye.modules.distribute.service.CustomService;
|
||||
import com.baiye.modules.distribute.vo.CustomVO;
|
||||
import com.baiye.operation.annotation.DeleteOperationLogging;
|
||||
import com.baiye.result.BaseResultCode;
|
||||
import com.baiye.result.R;
|
||||
import com.baiye.security.util.SecurityUtils;
|
||||
import com.baiye.system.checker.AdminUserChecker;
|
||||
import com.baiye.system.service.SysUserService;
|
||||
import com.baiye.validation.group.CreateGroup;
|
||||
import com.baiye.validation.group.SubmitGroup;
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@Tag(name = "客户管理")
|
||||
@RequestMapping("/custom")
|
||||
public class CustomController {
|
||||
|
||||
private final CustomService customService;
|
||||
|
||||
private final SysUserService sysUserService;
|
||||
|
||||
private final AdminUserChecker adminUserChecker;
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "分页查询客户信息")
|
||||
public R<PageResult<CustomVO>> queryPage(@Validated PageParam pageParam, CustomQo qo) {
|
||||
setQueryQo(qo);
|
||||
return R.ok(customService.queryPage(pageParam, qo));
|
||||
}
|
||||
|
||||
@PostMapping("/add")
|
||||
@Operation(summary = "新增客户", description = "新增客户")
|
||||
public R<Object> save(@Validated({CreateGroup.class}) @RequestBody CustomDTO customDTO) {
|
||||
return customService.add(customDTO) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "添加失败");
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/manual/create")
|
||||
@Operation(summary = "手动创建线索", description = "新增客户")
|
||||
public R<Object> manualCreate(@Validated({CreateGroup.class}) @RequestBody CreateCustomDTO createCustomDTO) {
|
||||
|
||||
return Boolean.TRUE.equals(customService.createByType(createCustomDTO)) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "添加失败");
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
@Operation(summary = "修改客户", description = "修改客户")
|
||||
public R<Object> update(@Validated({UpdateGroup.class}) @RequestBody CustomDTO customDTO) {
|
||||
return customService.update(customDTO) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改失败");
|
||||
}
|
||||
|
||||
@GetMapping("/details")
|
||||
@Operation(summary = "ID查询详情")
|
||||
public R<CustomVO> getClueDetails(@RequestParam("id") Long id) {
|
||||
return R.ok(customService.details(id));
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
@DeleteOperationLogging(msg = "删除表单信息")
|
||||
@Operation(summary = "通过id删除系统角色", description = "通过id删除系统角色")
|
||||
public R<Boolean> removeById(@PathVariable("id") Long id) {
|
||||
Boolean result = customService.deleteApprovalFormById(id);
|
||||
return Boolean.TRUE.equals(result) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "删除表单失败");
|
||||
}
|
||||
|
||||
@PostMapping("/audit")
|
||||
@Operation(summary = "审核表单")
|
||||
public R<String> audit(@Validated({SubmitGroup.class}) @RequestBody ChangeCustomDTO dto) {
|
||||
Boolean result = customService.auditFormById(dto);
|
||||
return Boolean.TRUE.equals(result) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "审核失败");
|
||||
}
|
||||
|
||||
@ResponseExcel(name = "客户表单")
|
||||
@GetMapping("/export")
|
||||
public List<CustomVO> exportI18nData(CustomQo customQo) {
|
||||
setQueryQo(customQo);
|
||||
List<CustomEntity> list = customService.queryList(customQo);
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
// 转换为 excel vo 对象
|
||||
return list.stream().map(CustomConverter.INSTANCE::poToExcelVo).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/reAudit")
|
||||
@Operation(summary = "表单重审")
|
||||
public R<Boolean> reAudit(@Validated({UpdateGroup.class}) @RequestBody ChangeCustomDTO dto) {
|
||||
Boolean result = customService.reAuditFormById(dto);
|
||||
return Boolean.TRUE.equals(result) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "审核失败");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void setQueryQo(CustomQo customQo) {
|
||||
Integer salesmanType = customQo.getSalesmanType();
|
||||
// 查询属于自己的信息
|
||||
if (!adminUserChecker.isAdminUser(sysUserService.findById
|
||||
(SecurityUtils.getCurrentUserId()))) {
|
||||
customQo.setCompanyId(SecurityUtils.getWhichUserId());
|
||||
}
|
||||
if (ObjectUtil.isNotNull(salesmanType)) {
|
||||
if (salesmanType == DefaultNumberConstants.ONE_NUMBER) {
|
||||
// 查询当前用户自己的
|
||||
customQo.setCreateBy(SecurityUtils.getCurrentUserId());
|
||||
}
|
||||
if (salesmanType == DefaultNumberConstants.TWO_NUMBER) {
|
||||
// 查询分发员
|
||||
customQo.setDistributorId(SecurityUtils.getCurrentUserId());
|
||||
customQo.setType(2);
|
||||
}
|
||||
if (salesmanType == DefaultNumberConstants.THREE_NUMBER) {
|
||||
// 只查询复审员
|
||||
customQo.setReviewUserId(SecurityUtils.getCurrentUserId());
|
||||
customQo.setType(3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@GetMapping("/recallForm")
|
||||
@Operation(summary = "表单撤回")
|
||||
public R<Boolean> recallForm(Long id) {
|
||||
Boolean result = customService.recallFormById(id);
|
||||
return Boolean.TRUE.equals(result) ? R.ok() : R.failed(BaseResultCode.LOGIC_CHECK_ERROR, "表单撤回失败");
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.domain.PageParam;
|
||||
import com.baiye.domain.PageResult;
|
||||
import com.baiye.modules.distribute.entity.DirectClueUserEntity;
|
||||
import com.baiye.modules.distribute.qo.DirectClueQo;
|
||||
import com.baiye.modules.distribute.service.DirectClueService;
|
||||
import com.baiye.modules.distribute.vo.DirectClueVO;
|
||||
import com.baiye.result.R;
|
||||
import com.baiye.security.util.SecurityUtils;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@Tag(name = "直达线索")
|
||||
@RequestMapping("/directClue")
|
||||
public class DirectClueController {
|
||||
|
||||
private final DirectClueService directClueService;
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "分页查询资源")
|
||||
public R<PageResult<DirectClueVO>> getClueRecordPage(@Validated PageParam pageParam, DirectClueQo qo) {
|
||||
Long salesmanUserId = qo.getSalesmanUserId();
|
||||
Long distributeUserId = qo.getDistributeUserId();
|
||||
if (salesmanUserId == null && distributeUserId == null) qo.setCreateBy(SecurityUtils.getCurrentUserId());
|
||||
else qo.setCreateBy(SecurityUtils.getWhichUserId());
|
||||
|
||||
return R.ok(directClueService.queryPage(pageParam, qo));
|
||||
}
|
||||
|
||||
@PostMapping("/distribute")
|
||||
@Operation(summary = "分发员分发")
|
||||
public R<Object> distribute(@Valid @RequestBody List<DirectClueUserEntity> directClueUserList) {
|
||||
return R.ok(directClueService.distribute(directClueUserList));
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.modules.distribute.service.DistributeReportService;
|
||||
import com.baiye.result.R;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/8/11
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@Tag(name = "分配信息统计")
|
||||
@RequestMapping("/report")
|
||||
public class DistributeReportController {
|
||||
|
||||
private final DistributeReportService distributeReportService;
|
||||
|
||||
@GetMapping("/report")
|
||||
public void distributeReport() {
|
||||
distributeReportService.distributeReport();
|
||||
}
|
||||
|
||||
@GetMapping("/flow")
|
||||
@Operation(summary = "流量分布统计")
|
||||
public R<Object> reportFlow(@RequestParam(value = "userId", required = false) Long userId,
|
||||
@RequestParam(value = "channel", required = false) String channel,
|
||||
@RequestParam(value = "type", required = true) Integer type) {
|
||||
return R.ok(distributeReportService.reportFlow(userId, channel, type));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.domain.PageParam;
|
||||
import com.baiye.domain.PageResult;
|
||||
import com.baiye.modules.distribute.dto.DistributeTaskDTO;
|
||||
import com.baiye.modules.distribute.entity.DistributeTaskEntity;
|
||||
import com.baiye.modules.distribute.qo.DistributeTaskQo;
|
||||
import com.baiye.modules.distribute.service.DistributeTaskService;
|
||||
import com.baiye.modules.distribute.vo.DistributeTaskVO;
|
||||
import com.baiye.result.BaseResultCode;
|
||||
import com.baiye.result.R;
|
||||
import com.baiye.security.util.SecurityUtils;
|
||||
import com.baiye.validation.group.CreateGroup;
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@Tag(name = "分发任务管理")
|
||||
@RequestMapping("/distributeTask")
|
||||
public class DistributeTaskController {
|
||||
|
||||
private final DistributeTaskService distributeTaskService;
|
||||
|
||||
@PostMapping("/add")
|
||||
@Operation(summary = "新增分发任务", description = "新增分发任务")
|
||||
public R<Object> save(@Validated({ CreateGroup.class }) @RequestBody DistributeTaskDTO distributeTaskDTO) {
|
||||
return distributeTaskService.add(distributeTaskDTO) ? R.ok()
|
||||
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "添加失败");
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "分页查询分配任务")
|
||||
public R<PageResult<DistributeTaskVO>> getClueRecordPage(@Validated PageParam pageParam, DistributeTaskQo qo) {
|
||||
qo.setCreateBy(SecurityUtils.getCurrentUserId());
|
||||
return R.ok(distributeTaskService.queryPage(pageParam, qo));
|
||||
}
|
||||
|
||||
@GetMapping("/details")
|
||||
@Operation(summary = "ID查询详情")
|
||||
public R<DistributeTaskVO> getClueRecordPage(@RequestParam("id") Long id) {
|
||||
return R.ok(distributeTaskService.details(id));
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
@Operation(summary = "修改分发任务", description = "修改分发任务")
|
||||
public R<Object> update(@Validated({ UpdateGroup.class }) @RequestBody DistributeTaskDTO distributeTaskDTO) {
|
||||
return distributeTaskService.update(distributeTaskDTO) ? R.ok()
|
||||
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改失败");
|
||||
}
|
||||
|
||||
@PostMapping("/updateData")
|
||||
@Operation(summary = "修改", description = "修改")
|
||||
public R<Object> updateData(
|
||||
@Validated({ UpdateGroup.class }) @RequestBody DistributeTaskEntity distributeTaskEntity) {
|
||||
return distributeTaskService.updateData(distributeTaskEntity) ? R.ok()
|
||||
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改失败");
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
@Operation(summary = "ID删除任务")
|
||||
public R<Void> deleteByUserId(@PathVariable("id") Long taskId) {
|
||||
return distributeTaskService.del(taskId) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "删除失败");
|
||||
}
|
||||
|
||||
@GetMapping("/executeTask")
|
||||
@Operation(summary = "执行任务")
|
||||
public R<Boolean> executeTask(@RequestParam("id") Long taskId) {
|
||||
return distributeTaskService.executeTask(taskId) ? R.ok()
|
||||
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "执行失败");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.domain.PageParam;
|
||||
import com.baiye.domain.PageResult;
|
||||
import com.baiye.modules.distribute.qo.FileContrastQo;
|
||||
import com.baiye.modules.distribute.service.FileContrastService;
|
||||
import com.baiye.modules.distribute.vo.FileContrastVO;
|
||||
import com.baiye.result.R;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2024-3-13
|
||||
*/
|
||||
|
||||
@RestController
|
||||
@Tag(name = "文件对比")
|
||||
@RequestMapping("/api/file/contrast")
|
||||
@RequiredArgsConstructor
|
||||
public class FileContrastController {
|
||||
|
||||
private final FileContrastService fileContrastService;
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "分页查询", description = "分页查询")
|
||||
public R<PageResult<FileContrastVO>> getSysConfigPage(@Validated PageParam pageParam, FileContrastQo fileContrastQo) {
|
||||
return R.ok(fileContrastService.queryPage(pageParam, fileContrastQo));
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "创建任务")
|
||||
@PostMapping("/create")
|
||||
public R<Object> createTask(@RequestParam("files") List<MultipartFile> files,
|
||||
@RequestParam(value = "taskName") String taskName) {
|
||||
return Boolean.TRUE.equals(fileContrastService.createTask(files, taskName)) ? R.ok() : R.failed("上传失败");
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "追加任务资源")
|
||||
@PostMapping("/addition")
|
||||
public R<Object> additionTaskSource(@RequestParam("files") List<MultipartFile> files,
|
||||
@RequestParam(value = "taskId") Long taskId) {
|
||||
return Boolean.TRUE.equals(fileContrastService.additionTaskSource(files, taskId)) ? R.ok() : R.failed("上传失败");
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "任务对比")
|
||||
@PostMapping("/build")
|
||||
public R<Object> createTask(@RequestParam("files") List<MultipartFile> files,
|
||||
@RequestParam(value = "taskId") Long taskId) {
|
||||
return Boolean.TRUE.equals(fileContrastService.buildContrast(files, taskId)) ? R.ok() : R.failed("上传失败");
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.domain.PageParam;
|
||||
import com.baiye.domain.PageResult;
|
||||
import com.baiye.modules.distribute.qo.FileContrastQo;
|
||||
import com.baiye.modules.distribute.service.FileContrastRecordService;
|
||||
import com.baiye.modules.distribute.vo.FileContrastRecordVO;
|
||||
import com.baiye.result.R;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2024-3-13
|
||||
*/
|
||||
|
||||
@RestController
|
||||
@Tag(name = "文件对比")
|
||||
@RequestMapping("/api/file/contrast/record")
|
||||
@RequiredArgsConstructor
|
||||
public class FileContrastRecordController {
|
||||
|
||||
private final FileContrastRecordService fileContrastRecordService;
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "分页查询", description = "分页查询")
|
||||
public R<PageResult<FileContrastRecordVO>> getSysConfigPage(@Validated PageParam pageParam, FileContrastQo fileContrastQo) {
|
||||
return R.ok(fileContrastRecordService.queryPage(pageParam, fileContrastQo));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.modules.distribute.qo.HomePageQo;
|
||||
import com.baiye.modules.distribute.service.HomepageService;
|
||||
import com.baiye.result.R;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/12/6
|
||||
* 首页统计
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/api/homePage")
|
||||
public class HomepageController {
|
||||
|
||||
private final HomepageService homepageService;
|
||||
|
||||
@GetMapping("/base")
|
||||
@Operation(description = "今日实时")
|
||||
public R<Object> baseCount() {
|
||||
return R.ok(homepageService.baseCount());
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/enter")
|
||||
@Operation(description = "渠道录入--管理员")
|
||||
public R<Object> channelEnterClue(@RequestBody HomePageQo homePageQo) {
|
||||
return R.ok(homepageService.channelEnterClue(homePageQo));
|
||||
}
|
||||
|
||||
@PostMapping("/assigned")
|
||||
@Operation(description = "渠道分发--管理员")
|
||||
public R<Object> channelAssignedClue(@RequestBody HomePageQo homePageQo) {
|
||||
return R.ok(homepageService.channelAssignedClue(homePageQo));
|
||||
}
|
||||
|
||||
@PostMapping("/export")
|
||||
@Operation(summary = "导出")
|
||||
public void channelClueExport(HttpServletResponse response, @RequestBody HomePageQo homePageQo) {
|
||||
homepageService.channelClueExport(response, homePageQo);
|
||||
}
|
||||
|
||||
@PostMapping("/distributors")
|
||||
@Operation(summary = "分发员")
|
||||
public R<Object> distributorsEnterClue(@RequestBody HomePageQo homePageQo) {
|
||||
return R.ok(homepageService.distributorsEnterClue(homePageQo));
|
||||
}
|
||||
|
||||
@PostMapping("/salesman")
|
||||
@Operation(summary = "业务员")
|
||||
public R<Object> salesmanEnterClue(@RequestBody HomePageQo homePageQo) {
|
||||
return R.ok(homepageService.salesmanEnterClue(homePageQo));
|
||||
}
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.domain.PageParam;
|
||||
import com.baiye.modules.distribute.entity.LabelOrganizeEntity;
|
||||
import com.baiye.modules.distribute.service.LabelOrganizeService;
|
||||
import com.baiye.modules.distribute.qo.LabelOrganizeQo;
|
||||
import com.baiye.result.BaseResultCode;
|
||||
import com.baiye.result.R;
|
||||
import com.baiye.validation.group.CreateGroup;
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author YQY
|
||||
* @date 2021-12-10
|
||||
*/
|
||||
@Tag(name = "标签组管理")
|
||||
@RestController
|
||||
@RequestMapping("/labelOrganize")
|
||||
@RequiredArgsConstructor
|
||||
public class LabelOrganizeController {
|
||||
|
||||
private final LabelOrganizeService labelOrganizeService;
|
||||
|
||||
@PostMapping("/add")
|
||||
@Operation(summary = "新增标签组和标签", description = "新增标签组和标签")
|
||||
public R<Object> save(@Validated({ CreateGroup.class }) @RequestBody LabelOrganizeEntity labelOrganizeEntity) {
|
||||
labelOrganizeService.add(labelOrganizeEntity);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
@Operation(summary = "修改标签组", description = "修改标签组")
|
||||
public R<Object> update(@Validated({ UpdateGroup.class }) @RequestBody LabelOrganizeEntity labelOrganizeEntity) {
|
||||
return labelOrganizeService.update(labelOrganizeEntity) ? R.ok()
|
||||
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改标签组失败");
|
||||
}
|
||||
|
||||
@DeleteMapping("/del")
|
||||
@Operation(summary = "删除标签组", description = "删除标签组")
|
||||
public R<Object> del(@RequestBody Set<Long> ids) {
|
||||
return labelOrganizeService.del(ids) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "删除标签组失败");
|
||||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
@Operation(summary = "查询标签组列表", description = "查询标签组列表")
|
||||
public R<Object> listLabelOrganize(LabelOrganizeQo labelOrganizeQo) {
|
||||
return R.ok(labelOrganizeService.listLabelOrganize(labelOrganizeQo));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "分页查询标签组", description = "分页查询标签组")
|
||||
public R<Object> queryAll(@Validated PageParam pageParam, LabelOrganizeQo labelOrganizeQo) {
|
||||
return R.ok(labelOrganizeService.queryPage(pageParam, labelOrganizeQo));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baiye.modules.auth.SendClueResponse;
|
||||
import com.baiye.modules.distribute.dto.PushClueDTO;
|
||||
import com.baiye.modules.distribute.service.BuildModelService;
|
||||
import com.baiye.modules.distribute.service.TripartiteService;
|
||||
import com.baiye.result.R;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2023-12-6
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/v1/build")
|
||||
public class ModelCallbackController {
|
||||
|
||||
private final BuildModelService buildModelService;
|
||||
|
||||
/**
|
||||
* 推送资源
|
||||
*/
|
||||
@PostMapping("/model/callback")
|
||||
public SendClueResponse pushClue( @RequestBody String body) {
|
||||
|
||||
SendClueResponse response = new SendClueResponse();
|
||||
// PushClueDTO clueDTO = BeanUtil.toBean(body, PushClueDTO.class);
|
||||
// return Boolean.TRUE.equals(buildModelService.callbackByNid(clueDTO)) ? R.ok("success") : R.failed("message callback failed");
|
||||
log.info("=============== the body {} ==============", JSONUtil.toJsonStr(body));
|
||||
response.setIsExist(Boolean.FALSE);
|
||||
response.setCode(200);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.domain.PageParam;
|
||||
import com.baiye.domain.PageResult;
|
||||
import com.baiye.modules.distribute.dto.OceanEngineTokenDto;
|
||||
import com.baiye.modules.distribute.qo.OceanEnginQo;
|
||||
import com.baiye.modules.distribute.service.OceanEngineClueService;
|
||||
import com.baiye.modules.distribute.service.OceanEngineService;
|
||||
import com.baiye.modules.distribute.vo.OceanEnginVO;
|
||||
import com.baiye.result.R;
|
||||
import com.baiye.security.util.SecurityUtils;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* 巨量广告投放
|
||||
*
|
||||
* @author Enzo
|
||||
* @date : 2022/9/14
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/api/oceanEngine")
|
||||
public class OceanEngineController {
|
||||
|
||||
private final OceanEngineService oceanEngineService;
|
||||
|
||||
@GetMapping(value = "/url")
|
||||
public R<String> query(String authorizeName) {
|
||||
return R.ok(oceanEngineService.buildAuthorizationUrl(SecurityUtils.getCurrentUserId(), authorizeName));
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "分页查询", description = "分页查询")
|
||||
public R<PageResult<OceanEnginVO>> getSysConfigPage(@Validated PageParam pageParam, OceanEnginQo oceanEnginQo) {
|
||||
return R.ok(oceanEngineService.queryPage(pageParam, oceanEnginQo));
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/add")
|
||||
public ResponseEntity<Object> save(@Validated @RequestBody OceanEngineTokenDto oceanEngineTokenDto) {
|
||||
oceanEngineTokenDto.setUserId(SecurityUtils.getCurrentUserId());
|
||||
String url = oceanEngineService.save(oceanEngineTokenDto);
|
||||
return new ResponseEntity<>(url, HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("update")
|
||||
public ResponseEntity<Object> update(Integer status, Long id) {
|
||||
oceanEngineService.updateAuthorizationStatus(status, id);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
|
||||
@GetMapping(value = "/callback")
|
||||
public ResponseEntity<Void> callback(@RequestParam("state") String state, @RequestParam("auth_code") String authCode,
|
||||
HttpServletResponse response) throws IOException {
|
||||
log.info("================== the state as {},authCode as {} ================", state, authCode);
|
||||
oceanEngineService.processRequest(state, authCode);
|
||||
response.sendRedirect("https://byffp.top/dashboard");
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.modules.distribute.dto.DBPushClueDTO;
|
||||
import com.baiye.modules.distribute.dto.ReceivePushLeadsDTO;
|
||||
import com.baiye.modules.distribute.service.OutsideReqService;
|
||||
import com.baiye.result.BaseResultCode;
|
||||
import com.baiye.result.R;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/outside")
|
||||
public class OutsideReqController {
|
||||
|
||||
private final OutsideReqService outsideReqService;
|
||||
|
||||
/**
|
||||
* 推送资源
|
||||
*/
|
||||
@PostMapping("/pushClue/{appKey}")
|
||||
public R<Object> pushClue(@PathVariable("appKey") String appKey, @RequestBody DBPushClueDTO DBPushClueDTO) {
|
||||
outsideReqService.pushClue(appKey, DBPushClueDTO);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 接收外部推送的公共接口
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/pushLeads")
|
||||
public R<Object> externalPushClue(@RequestBody ReceivePushLeadsDTO receivePushLeadsDTO) {
|
||||
return outsideReqService.externalPushClue(receivePushLeadsDTO) ? R.ok()
|
||||
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "删除文件失败");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.domain.PageParam;
|
||||
import com.baiye.domain.PageResult;
|
||||
import com.baiye.modules.distribute.entity.PushConfigEntity;
|
||||
import com.baiye.modules.distribute.qo.SendClueQo;
|
||||
import com.baiye.modules.distribute.service.PushClueService;
|
||||
import com.baiye.modules.distribute.service.PushConfigService;
|
||||
import com.baiye.modules.distribute.vo.PushClueInfoVo;
|
||||
import com.baiye.result.R;
|
||||
import com.baiye.security.util.SecurityUtils;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2023-12-6
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/push/clue")
|
||||
public class PushClueController {
|
||||
|
||||
private final PushConfigService pushConfigService;
|
||||
|
||||
|
||||
private final PushClueService pushClueService;
|
||||
|
||||
@PostMapping("/config/add")
|
||||
@Operation(summary = "新增配置")
|
||||
public R<Object> addConfig(@RequestBody PushConfigEntity pushConfigEntity) {
|
||||
pushConfigService.addConfig(pushConfigEntity);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@GetMapping("/config/query")
|
||||
@Operation(summary = "新增配置")
|
||||
public R<Object> queryConfig() {
|
||||
return R.ok(pushConfigService.queryByUserId(SecurityUtils.getCurrentUserId()));
|
||||
}
|
||||
|
||||
@PostMapping("/config/update")
|
||||
@Operation(summary = "修改配置信息")
|
||||
public R<Object> updateConfig(@RequestBody PushConfigEntity pushConfigEntity) {
|
||||
pushConfigService.updateConfig(pushConfigEntity);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "分页查询资源")
|
||||
public R<PageResult<PushClueInfoVo>> getClueRecordPage(@Validated PageParam pageParam, SendClueQo qo) {
|
||||
qo.setAssignedBy(SecurityUtils.getCurrentUserId());
|
||||
|
||||
return R.ok(pushClueService.queryPage(pageParam, qo));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.domain.PageParam;
|
||||
import com.baiye.domain.PageResult;
|
||||
import com.baiye.modules.distribute.dto.PushLinkDTO;
|
||||
import com.baiye.modules.distribute.qo.PushLinkQo;
|
||||
import com.baiye.modules.distribute.service.PushLinkService;
|
||||
import com.baiye.modules.distribute.vo.PushLinkVO;
|
||||
import com.baiye.result.BaseResultCode;
|
||||
import com.baiye.result.R;
|
||||
import com.baiye.security.util.SecurityUtils;
|
||||
import com.baiye.validation.group.CreateGroup;
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@Tag(name = "推送配置")
|
||||
@RequestMapping("/pushLink")
|
||||
public class PushLinkController {
|
||||
|
||||
private final PushLinkService pushLinkService;
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "分页查询")
|
||||
public R<PageResult<PushLinkVO>> getClueRecordPage(@Validated PageParam pageParam, PushLinkQo qo) {
|
||||
qo.setCreateBy(SecurityUtils.getCurrentUserId());
|
||||
return R.ok(pushLinkService.queryPage(pageParam, qo));
|
||||
}
|
||||
|
||||
@PostMapping("/add")
|
||||
@Operation(summary = "新增(生成)链接", description = "新增(生成)链接")
|
||||
public R<String> save(@Validated({ CreateGroup.class }) @RequestBody PushLinkDTO pushLinkDTO) {
|
||||
return R.ok(pushLinkService.add(pushLinkDTO));
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/detail")
|
||||
@Operation(summary = "链接详情", description = "链接详情")
|
||||
public R<PushLinkVO> detail(Long id) {
|
||||
return R.ok(pushLinkService.pushDetail(id));
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/update")
|
||||
@Operation(summary = "修改链接", description = "修改链接")
|
||||
public R<Object> update(@Validated({UpdateGroup.class}) @RequestBody PushLinkDTO pushLinkDTO) {
|
||||
return pushLinkService.update(pushLinkDTO) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改失败");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.domain.PageParam;
|
||||
import com.baiye.domain.PageResult;
|
||||
import com.baiye.modules.distribute.dto.StoreDTO;
|
||||
import com.baiye.modules.distribute.entity.StoreEntity;
|
||||
import com.baiye.modules.distribute.qo.StoreQo;
|
||||
import com.baiye.modules.distribute.service.StoreService;
|
||||
import com.baiye.modules.distribute.vo.StoreVO;
|
||||
import com.baiye.result.R;
|
||||
import com.baiye.validation.group.CreateGroup;
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/9/5
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@Tag(name = "门店管理")
|
||||
@RequestMapping("/store")
|
||||
public class StoreController {
|
||||
|
||||
private final StoreService storeService;
|
||||
|
||||
@GetMapping("/queryPage")
|
||||
@Operation(summary = "分页查询门店")
|
||||
public R<PageResult<StoreVO>> queryStorePage(@Validated PageParam pageParam, StoreQo storeQo) {
|
||||
return R.ok(storeService.queryStorePage(pageParam, storeQo));
|
||||
}
|
||||
|
||||
@GetMapping("/queryAll")
|
||||
@Operation(summary = "不分页查询门店")
|
||||
public R<List<StoreVO>> queryStore(StoreQo storeQo) {
|
||||
return R.ok(storeService.queryStore(storeQo));
|
||||
}
|
||||
|
||||
@GetMapping("/queryRange")
|
||||
@Operation(summary = "查询范围内所有的门店")
|
||||
public R<List<StoreDTO>> queryRangeStore(@RequestParam("longitude") Double longitude,
|
||||
@RequestParam("latitude") Double latitude,
|
||||
@RequestParam("distance") Double distance) {
|
||||
return R.ok(storeService.queryRangeStore(longitude, latitude, distance));
|
||||
}
|
||||
|
||||
@PostMapping("/add")
|
||||
@Operation(summary = "新增门店信息")
|
||||
public R<Object> addStore(@Validated({CreateGroup.class}) @RequestBody StoreEntity storeEntity) {
|
||||
storeService.addStore(storeEntity);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
@Operation(summary = "修改门店信息")
|
||||
public R<Object> updateStore(@Validated({UpdateGroup.class}) @RequestBody StoreEntity storeEntity) {
|
||||
storeService.updateStore(storeEntity);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
@Operation(summary = "删除门店信息")
|
||||
public R<Object> deleteStore(@PathVariable("id") Long storeId) {
|
||||
storeService.deleteStore(storeId);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@GetMapping("/reservation")
|
||||
@Operation(summary = "门店预约")
|
||||
public R<LinkedList<Map<String, Object>>> queryStoreReservation(@RequestParam(value = "startTime", required = false) String startTime,
|
||||
@RequestParam(value = "endTime", required = false) String endTime,
|
||||
@RequestParam("storeId") Long storeId) {
|
||||
return R.ok(storeService.queryStoreReservation(startTime, endTime, storeId));
|
||||
}
|
||||
|
||||
@GetMapping("/export")
|
||||
@Operation(summary = "门店预约详情导出")
|
||||
public void exportStoreDetails(HttpServletResponse response,
|
||||
@RequestParam(value = "startTime", required = false) String startTime,
|
||||
@RequestParam(value = "endTime", required = false) String endTime,
|
||||
@RequestParam("storeId") Long storeId) throws IOException {
|
||||
storeService.exportStoreDetails(response, startTime, endTime, storeId);
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.modules.distribute.service.StoreUserService;
|
||||
import com.baiye.result.R;
|
||||
import com.baiye.system.model.dto.SysUserNameRoleDTO;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
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;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/9/15
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@Tag(name = "门店用户管理")
|
||||
@RequestMapping("/storeUser")
|
||||
public class StoreUserController {
|
||||
private final StoreUserService storeUserService;
|
||||
|
||||
@GetMapping("/queryAll")
|
||||
@Operation(summary = "查询门店业务员角色")
|
||||
public R<List<SysUserNameRoleDTO>> queryStore() {
|
||||
return R.ok(storeUserService.listByRoleCode());
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import com.baiye.modules.distribute.entity.TagEntity;
|
||||
import com.baiye.modules.distribute.service.TagService;
|
||||
import com.baiye.result.R;
|
||||
import com.baiye.validation.group.CreateGroup;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2023-12-6
|
||||
*/
|
||||
|
||||
@RestController
|
||||
@Tag(name = "标签管理")
|
||||
@RequestMapping("/api/tag")
|
||||
@RequiredArgsConstructor
|
||||
public class TagController {
|
||||
|
||||
private final TagService tagService;
|
||||
|
||||
@PostMapping("/add")
|
||||
public R<Object> add(@Validated({CreateGroup.class}) @RequestBody TagEntity entity) {
|
||||
tagService.create(entity);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
public R<Object> update(@RequestBody List<TagEntity> list) {
|
||||
tagService.update(list);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
public R<List<TagEntity>> list(@RequestParam(value = "routeStatus", required = false) Integer routeStatus,
|
||||
@RequestParam(value = "isSalesman", required = false) Boolean isSalesman) {
|
||||
return R.ok(tagService.selectList(routeStatus, isSalesman));
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package com.baiye.modules.distribute.controller;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baiye.modules.distribute.dto.PushClueDTO;
|
||||
import com.baiye.modules.distribute.service.TripartiteService;
|
||||
import com.baiye.result.R;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2023-12-6
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/v1/tripartite")
|
||||
public class TripartiteController {
|
||||
|
||||
private final TripartiteService tripartiteService;
|
||||
|
||||
/**
|
||||
* 推送资源
|
||||
*/
|
||||
@PostMapping("/push/clue/{appKey}")
|
||||
public R<String> pushClue(@PathVariable("appKey") String appKey, @RequestBody PushClueDTO dto) {
|
||||
log.info("=============== the push appKey {},body {} ==============", appKey, JSONUtil.toJsonStr(dto));
|
||||
return Boolean.TRUE.equals(tripartiteService.callbackByAppKeyAndNid
|
||||
(appKey, dto)) ? R.ok("success") : R.failed("message callback failed");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package com.baiye.modules.distribute.converter;
|
||||
|
||||
import com.baiye.modules.distribute.dto.ClueDTO;
|
||||
import com.baiye.modules.distribute.entity.ClueEntity;
|
||||
import com.baiye.modules.distribute.vo.ClueVO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
@Mapper
|
||||
public interface ClueConverter {
|
||||
|
||||
ClueConverter INSTANCE = Mappers.getMapper(ClueConverter.class);
|
||||
|
||||
/**
|
||||
* 修改DTO 转 PO
|
||||
* @param dto 修改DTO
|
||||
* @return ClueEntity PO
|
||||
*/
|
||||
ClueEntity dtoToPo(ClueDTO dto);
|
||||
|
||||
|
||||
/**
|
||||
* 实体转vo
|
||||
* @param entity
|
||||
* @return
|
||||
*/
|
||||
ClueVO poToExcelVo(ClueEntity entity);
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.baiye.modules.distribute.converter;
|
||||
|
||||
import com.baiye.modules.distribute.dto.CreateCustomDTO;
|
||||
import com.baiye.modules.distribute.dto.CustomDTO;
|
||||
import com.baiye.modules.distribute.entity.CustomEntity;
|
||||
import com.baiye.modules.distribute.vo.CustomVO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
@Mapper
|
||||
public interface CustomConverter {
|
||||
|
||||
CustomConverter INSTANCE = Mappers.getMapper(CustomConverter.class);
|
||||
|
||||
/**
|
||||
* 修改DTO 转 PO
|
||||
* @param dto 修改DTO
|
||||
* @return ClueEntity PO
|
||||
*/
|
||||
CustomEntity dtoToPo(CustomDTO dto);
|
||||
|
||||
/**
|
||||
* 修改DTO 转 PO
|
||||
* @param dto 修改DTO
|
||||
* @return ClueEntity PO
|
||||
*/
|
||||
CustomEntity dtoToPo(CreateCustomDTO dto);
|
||||
|
||||
|
||||
/**
|
||||
* 实体转vo
|
||||
* @param entity
|
||||
* @return
|
||||
*/
|
||||
CustomVO poToExcelVo(CustomEntity entity);
|
||||
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package com.baiye.modules.distribute.converter;
|
||||
|
||||
import com.baiye.modules.distribute.dto.DirectClueDTO;
|
||||
import com.baiye.modules.distribute.entity.DirectClueEntity;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
@Mapper
|
||||
public interface DirectClueConverter {
|
||||
|
||||
DirectClueConverter INSTANCE = Mappers.getMapper(DirectClueConverter.class);
|
||||
|
||||
/**
|
||||
* 修改DTO 转 PO
|
||||
* @param dto 修改DTO
|
||||
* @return ClueEntity PO
|
||||
*/
|
||||
DirectClueEntity dtoToPo(DirectClueDTO dto);
|
||||
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package com.baiye.modules.distribute.converter;
|
||||
|
||||
import com.baiye.modules.distribute.entity.FileContrastRecordEntity;
|
||||
import com.baiye.modules.distribute.entity.FileContrastSourceEntity;
|
||||
import com.baiye.modules.distribute.vo.FileContrastRecordVO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2024-3-13
|
||||
*/
|
||||
@Mapper
|
||||
public interface FileContrasRecordConverter {
|
||||
|
||||
FileContrasRecordConverter INSTANCE = Mappers.getMapper(FileContrasRecordConverter.class);
|
||||
|
||||
|
||||
/**
|
||||
* 实体转vo
|
||||
*
|
||||
* @param entity
|
||||
* @return
|
||||
*/
|
||||
FileContrastRecordVO entityToVo(FileContrastRecordEntity entity);
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package com.baiye.modules.distribute.converter;
|
||||
|
||||
import com.baiye.modules.distribute.entity.FileContrastEntity;
|
||||
import com.baiye.modules.distribute.vo.FileContrastVO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2024-3-13
|
||||
*/
|
||||
@Mapper
|
||||
public interface FileContrastConverter {
|
||||
|
||||
FileContrastConverter INSTANCE = Mappers.getMapper(FileContrastConverter.class);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 实体转vo
|
||||
*
|
||||
* @param entity
|
||||
* @return
|
||||
*/
|
||||
FileContrastVO entityToVo(FileContrastEntity entity);
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.baiye.modules.distribute.converter;
|
||||
|
||||
import com.baiye.modules.distribute.entity.OceanEngineToken;
|
||||
import com.baiye.modules.distribute.vo.OceanEnginVO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2023-11-6
|
||||
*/
|
||||
@Mapper
|
||||
public interface OceanEngineConverter {
|
||||
|
||||
OceanEngineConverter INSTANCE = Mappers.getMapper(OceanEngineConverter.class);
|
||||
|
||||
/**
|
||||
* 实体转Vo
|
||||
* @param token
|
||||
* @return
|
||||
*/
|
||||
OceanEnginVO entityToVo(OceanEngineToken token);
|
||||
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package com.baiye.modules.distribute.converter;
|
||||
|
||||
import com.baiye.modules.distribute.entity.PushClueInfoEntity;
|
||||
import com.baiye.modules.distribute.vo.PushClueInfoVo;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
@Mapper
|
||||
public interface PushClueConverter {
|
||||
|
||||
PushClueConverter INSTANCE = Mappers.getMapper(PushClueConverter.class);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param clueInfo
|
||||
* @return
|
||||
*/
|
||||
PushClueInfoVo poToPageVo(PushClueInfoEntity clueInfo);
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package com.baiye.modules.distribute.converter;
|
||||
|
||||
import com.baiye.modules.distribute.dto.PushLinkDTO;
|
||||
import com.baiye.modules.distribute.entity.PushLinkEntity;
|
||||
import com.baiye.modules.distribute.vo.PushLinkVO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
@Mapper
|
||||
public interface PushLinkConverter {
|
||||
|
||||
PushLinkConverter INSTANCE = Mappers.getMapper(PushLinkConverter.class);
|
||||
|
||||
/**
|
||||
* 修改DTO 转 PO
|
||||
* @param dto 修改DTO
|
||||
* @return ClueEntity PO
|
||||
*/
|
||||
PushLinkEntity dtoToPo(PushLinkDTO dto);
|
||||
|
||||
|
||||
/**
|
||||
* 实体转vo
|
||||
* @param entity
|
||||
* @return
|
||||
*/
|
||||
PushLinkVO entityToVo(PushLinkEntity entity);
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2023/12/7
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
public class CallbackCustomDTO {
|
||||
|
||||
private Integer sex;
|
||||
|
||||
private String remark;
|
||||
|
||||
private Long companyId;
|
||||
|
||||
private String enterName;
|
||||
|
||||
private String customName;
|
||||
|
||||
private Integer customType;
|
||||
|
||||
private String customNid;
|
||||
|
||||
private Integer channelType;
|
||||
|
||||
private Long reportUserId;
|
||||
|
||||
private Long distributeId;
|
||||
|
||||
private String channelName;
|
||||
|
||||
private List<String> identifying;
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import com.baiye.validation.group.SubmitGroup;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class ChangeCustomDTO {
|
||||
|
||||
/**
|
||||
* 客户ID
|
||||
*/
|
||||
@NotNull(message = "ID不能为空", groups = { SubmitGroup.class })
|
||||
private Long customId;
|
||||
|
||||
/**
|
||||
* 状态: 0-地理分发 1-基础分发 2-复审
|
||||
*/
|
||||
@NotNull(message = "状态不能为空", groups = { SubmitGroup.class })
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 复审员用户ID
|
||||
*/
|
||||
private Long reviewUserId;
|
||||
|
||||
/**
|
||||
* 业务员用户ID
|
||||
*/
|
||||
private List<Long> salesmanUserId;
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import com.baiye.validation.group.CreateGroup;
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* @Author YQY
|
||||
* @Date 2023/8/15
|
||||
*/
|
||||
@Data
|
||||
public class ClueStageDTO {
|
||||
|
||||
@Schema(title = "ID")
|
||||
@NotNull(message = "ID不能为空", groups = { UpdateGroup.class })
|
||||
private Long clueStageId;
|
||||
|
||||
@Schema(title = "线索阶段名称")
|
||||
@NotNull(message = "线索阶段名称不能为空", groups = { CreateGroup.class })
|
||||
private String name;
|
||||
|
||||
@Schema(title = "线索阶段排序")
|
||||
@NotNull(message = "线索阶段排序不能为空", groups = { CreateGroup.class })
|
||||
private Integer sort;
|
||||
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springdoc.api.annotations.ParameterObject;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2023-10-20
|
||||
*/
|
||||
@Data
|
||||
@Schema(title = "对比dto")
|
||||
@ParameterObject
|
||||
public class ContrastDTO {
|
||||
private String nid;
|
||||
|
||||
private String remark;
|
||||
|
||||
private String isRepeat;
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import com.baiye.validation.group.CreateGroup;
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2023-12-6
|
||||
*/
|
||||
@Data
|
||||
public class CreateCustomDTO {
|
||||
|
||||
|
||||
public CreateCustomDTO() {
|
||||
}
|
||||
|
||||
@Schema(title = "客户名称")
|
||||
private String customName;
|
||||
|
||||
@Schema(title = "客户联系方式")
|
||||
@NotBlank(message = "客户联系方式不能为空", groups = {CreateGroup.class, UpdateGroup.class})
|
||||
private String customNid;
|
||||
|
||||
@Schema(title = "备注")
|
||||
private String remark;
|
||||
|
||||
|
||||
@Schema(title = "渠道类型")
|
||||
private Integer channelType;
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import com.baiye.validation.group.CreateGroup;
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class CustomStoreDTO {
|
||||
|
||||
@Schema(title = "ID")
|
||||
@NotNull(message = "ID不能为空", groups = { UpdateGroup.class })
|
||||
private Long customStoreId;
|
||||
|
||||
@Schema(title = "门店ID")
|
||||
@NotNull(message = "门店ID不能为空", groups = { CreateGroup.class })
|
||||
private Long storeId;
|
||||
|
||||
@Schema(title = "客户ID")
|
||||
@NotNull(message = "客户ID不能为空", groups = { CreateGroup.class })
|
||||
private Long customId;
|
||||
|
||||
@Schema(title = "门店名称")
|
||||
@NotNull(message = "门店名称不能为空", groups = { CreateGroup.class })
|
||||
private String storeName;
|
||||
|
||||
@Schema(title = "预约时间")
|
||||
@NotNull(message = "预约时间不能为空", groups = { CreateGroup.class })
|
||||
private String reservationTime;
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class DBPushClueDTO {
|
||||
|
||||
/**
|
||||
* 手机号
|
||||
*/
|
||||
private String mobile;
|
||||
|
||||
/**
|
||||
* 人工评级
|
||||
*/
|
||||
private String empClientTypeName;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 人工评级推送的手机号, mobile就不是手机号字段了
|
||||
*/
|
||||
private String called;
|
||||
|
||||
/**
|
||||
* 太空猫传递的线索ID
|
||||
*/
|
||||
private Long variable;
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class DirectClueDTO {
|
||||
|
||||
@Schema(title = "ID")
|
||||
@NotNull(message = "ID不能为空", groups = { UpdateGroup.class })
|
||||
private Long directClueId;
|
||||
|
||||
@Schema(title = "有效状态 0:有效 1:无效")
|
||||
private Integer effectiveStatus;
|
||||
|
||||
@Schema(title = "标签")
|
||||
private List<String> clueLabel;
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class DistributeDTO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 6275518278441151400L;
|
||||
|
||||
@NotEmpty(message = "部门不能为空")
|
||||
private List<Long> deptIds;
|
||||
|
||||
@NotEmpty(message = "资源不能为空")
|
||||
private List<Long> resourceList;
|
||||
|
||||
@Schema(title = "是否权重分配")
|
||||
private Boolean isWeight;
|
||||
|
||||
@Schema(title = "权重")
|
||||
private List<Double> weights;
|
||||
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class DistributeResponseDTO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 2772000439619817023L;
|
||||
|
||||
@Schema(title = "部门id集合")
|
||||
private Long deptId;
|
||||
|
||||
@Schema(title = "分配资源")
|
||||
private List<Long> responseList;
|
||||
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import com.baiye.validation.group.CreateGroup;
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springdoc.api.annotations.ParameterObject;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.hutool.core.date.DatePattern.NORM_DATETIME_PATTERN;
|
||||
|
||||
/**
|
||||
* @Author YQY
|
||||
* @Date 2023/8/11
|
||||
*/
|
||||
@Data
|
||||
@Schema(title = "分发任务查询对象")
|
||||
@ParameterObject
|
||||
public class DistributeTaskDTO {
|
||||
|
||||
@Schema(title = "分发任务ID")
|
||||
@NotNull(message = "分发ID不能为空", groups = { UpdateGroup.class })
|
||||
private Long distributeTaskId;
|
||||
|
||||
@Schema(title = "分发类型 0:手动分发 1:自动分发")
|
||||
@NotNull(message = "分发类型不能为空", groups = { CreateGroup.class })
|
||||
private Integer distributeTaskType;
|
||||
|
||||
@Schema(title = "任务名称")
|
||||
@NotBlank(message = "任务名称不能为空", groups = { CreateGroup.class })
|
||||
private String taskName;
|
||||
|
||||
@Schema(title = "分发规则 0:平均 1:权重")
|
||||
@NotNull(message = "请选择分发规则", groups = { CreateGroup.class })
|
||||
private Integer ruleStatus;
|
||||
|
||||
@Schema(title = "分发时间 0:实时 1:定时")
|
||||
private Integer timeStatus;
|
||||
|
||||
@Schema(title = "定时开始时间")
|
||||
@DateTimeFormat(pattern = NORM_DATETIME_PATTERN)
|
||||
@JsonFormat(pattern = NORM_DATETIME_PATTERN)
|
||||
private LocalDateTime startTime;
|
||||
|
||||
@Schema(title = "文件规则前缀")
|
||||
private String fileRulePrefix;
|
||||
|
||||
@Schema(title = "上传文件记录ID “,”相隔")
|
||||
private List<Long> fileRecordIdList;
|
||||
|
||||
@Schema(title = "分发任务人员和权重")
|
||||
@NotEmpty(message = "分发任务人员不能为空", groups = { CreateGroup.class })
|
||||
private List<DistributeTaskUserDTO> users;
|
||||
|
||||
@Schema(title = "执行状态 0:未执行 1:执行中 2:已执行 3:暂停")
|
||||
private Integer executeStatus;
|
||||
|
||||
@Schema(title = "任务默认类型 0:默认 1:非默认")
|
||||
private Integer defaultType;
|
||||
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author YQY
|
||||
* @Date 2023/8/11
|
||||
*/
|
||||
@Data
|
||||
public class DistributeTaskUserDTO {
|
||||
|
||||
@Schema(title = "用户id")
|
||||
private Long userId;
|
||||
|
||||
@Schema(title = "权重值")
|
||||
private Integer weight;
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springdoc.api.annotations.ParameterObject;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/9/13
|
||||
*/
|
||||
@Data
|
||||
@Schema(title = "门店管理dto")
|
||||
@ParameterObject
|
||||
public class FileContrastDTO {
|
||||
|
||||
private MultipartFile[] files;
|
||||
|
||||
|
||||
@NotEmpty(message = "用户id不能为空")
|
||||
private List<Long> userIds;
|
||||
|
||||
@NotBlank(message = "任务名称不能为空")
|
||||
private String taskName;
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/12/6
|
||||
*/
|
||||
@Data
|
||||
public class HomePageDTO {
|
||||
|
||||
private String createTime;
|
||||
|
||||
private Long assignedBy;
|
||||
|
||||
private String assignedName;
|
||||
|
||||
private Long createBy;
|
||||
|
||||
private String enterName;
|
||||
|
||||
private Integer num;
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import cn.hutool.core.text.CharSequenceUtil;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/11/10
|
||||
*/
|
||||
@Data
|
||||
public class OceanEngineResponseDTO {
|
||||
private Object data;
|
||||
|
||||
@JsonProperty("code")
|
||||
private Integer code;
|
||||
|
||||
@JsonProperty("message")
|
||||
private String message;
|
||||
|
||||
@JsonProperty("request_id")
|
||||
private String requestId = CharSequenceUtil.EMPTY;
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2023-11-2
|
||||
*/
|
||||
@Data
|
||||
public class OceanEngineTokenDto implements Serializable {
|
||||
private static final long serialVersionUID = -7107014280197393381L;
|
||||
private Long userId;
|
||||
|
||||
private Long expiresIn;
|
||||
|
||||
private Long companyId;
|
||||
|
||||
private Integer status;
|
||||
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DatePattern.NORM_DATETIME_PATTERN, timezone = "GMT+8")
|
||||
private Date authorizeTime;
|
||||
|
||||
@NotBlank
|
||||
private String authorizeName;
|
||||
|
||||
private Long refreshTokenExpiresIn;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2023-12-6
|
||||
*/
|
||||
@Data
|
||||
public class PushClueDTO {
|
||||
|
||||
|
||||
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 人工审核推送手机号, mobile就不是手机号字段了
|
||||
*/
|
||||
private String called;
|
||||
|
||||
/**
|
||||
* 话单id
|
||||
*/
|
||||
private String recId;
|
||||
|
||||
/**
|
||||
* 太空猫传递的线索ID
|
||||
*/
|
||||
private Long variable;
|
||||
|
||||
/**
|
||||
* nid
|
||||
*/
|
||||
private String mobile;
|
||||
|
||||
|
||||
private String empClientTypeName;
|
||||
|
||||
|
||||
private Map<String, String> clientVariables;
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import com.baiye.validation.group.CreateGroup;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class ReadFileDTO {
|
||||
|
||||
@Schema(title = "记录ID")
|
||||
private Long recordId;
|
||||
|
||||
@Schema(title = "渠道名称")
|
||||
@NotBlank(message = "渠道名称不能为空", groups = {CreateGroup.class})
|
||||
private String channelName;
|
||||
|
||||
@Schema(title = "分发人用户ID集合")
|
||||
@NotEmpty(message = "用户不能为空", groups = {CreateGroup.class})
|
||||
private List<Long> distributorsUserIdList;
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author YQY
|
||||
* @Date 2023/8/10
|
||||
*/
|
||||
@Data
|
||||
public class ReceivePushLeadsDTO {
|
||||
|
||||
private String appKey;
|
||||
|
||||
private List<String> clueList;
|
||||
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springdoc.api.annotations.ParameterObject;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/9/13
|
||||
*/
|
||||
@Data
|
||||
@Schema(title = "门店管理dto")
|
||||
@ParameterObject
|
||||
public class StoreDTO {
|
||||
@Schema(description = "门店名称")
|
||||
private String storeName;
|
||||
@Schema(description = "门店id")
|
||||
private Long id;
|
||||
@Schema(description = "纬度")
|
||||
private BigDecimal latitude;
|
||||
@Schema(description = "经度")
|
||||
private BigDecimal longitude;
|
||||
@Schema(description = "联系方式")
|
||||
private String nid;
|
||||
@Schema(description = "门店地址")
|
||||
private String address;
|
||||
@Schema(description = "距离/米")
|
||||
private Double distance;
|
||||
@Schema(description = "序号")
|
||||
private Integer index;
|
||||
@Schema(description = "区")
|
||||
private String county;
|
||||
@Schema(description = "详情")
|
||||
private String detail;
|
||||
@Schema(description = "营业开始时间")
|
||||
private String tradeStartTime;
|
||||
@Schema(description = "营业结束时间")
|
||||
private String tradeEndTime;
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springdoc.api.annotations.ParameterObject;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date 2023-10-20
|
||||
*/
|
||||
@Data
|
||||
@Schema(title = "门店管理dto")
|
||||
@ParameterObject
|
||||
public class StoreUserDTO {
|
||||
@Schema(description = "门店名称")
|
||||
private String storeName;
|
||||
|
||||
@Schema(description = "用户id")
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "用户id")
|
||||
private Long storeId;
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.baiye.modules.distribute.dto;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2024/3/4
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
public class TripartiteDTO {
|
||||
|
||||
@SerializedName("timestamp")
|
||||
private Long timestamp;
|
||||
|
||||
@SerializedName("request_id")
|
||||
private String requestId;
|
||||
|
||||
@SerializedName("nid")
|
||||
private String nid;
|
||||
|
||||
@SerializedName("other_info")
|
||||
private String otherInfo;
|
||||
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
package com.baiye.modules.distribute.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baiye.entity.BaseEntity;
|
||||
import com.baiye.extend.mybatis.plus.alias.TableAlias;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @Author YQY
|
||||
* @Date 2023/8/1
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("tb_clue_record")
|
||||
@Schema(title = "线索上传文件记录")
|
||||
@TableAlias("cr")
|
||||
public class ClueRecordEntity extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId
|
||||
@Schema(title = "线索上传文件记录ID")
|
||||
private Long clueRecordId;
|
||||
|
||||
@Schema(title = "上传状态 0:上传中 1:上传失败 2:上传成功")
|
||||
private Integer status = 0;
|
||||
|
||||
@Schema(title = "上传文件名")
|
||||
private String oldFileName;
|
||||
|
||||
@Schema(title = "存入路径")
|
||||
private String url;
|
||||
|
||||
@Schema(title = "备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(title = "渠道类型")
|
||||
private String channelType;
|
||||
|
||||
@Schema(title = "渠道标识")
|
||||
private String channelIdentifying;
|
||||
|
||||
@Schema(title = "成功条数")
|
||||
private Integer successNum = 0;
|
||||
|
||||
@Schema(title = "失败条数")
|
||||
private Integer failNum = 0;
|
||||
|
||||
@Schema(title = "分配状态: 0:未分配 1:已分配")
|
||||
private Integer allocationStatus = 0;
|
||||
|
||||
@Schema(title = "记录类型 0:文件上传 1:资源推送")
|
||||
private Integer recordType = 0;
|
||||
|
||||
@Schema(title = "分发状态 0:未分发 1:已分发")
|
||||
private Integer distributeStatus = 0;
|
||||
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package com.baiye.modules.distribute.entity;
|
||||
|
||||
import com.baiye.entity.BaseEntity;
|
||||
import com.baiye.validation.group.CreateGroup;
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@TableName("tb_clue_stage")
|
||||
@Schema(title = "线索阶段表")
|
||||
@Validated
|
||||
public class ClueStageEntity extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId
|
||||
@Schema(title = "ID")
|
||||
@NotNull(message = "ID不能为空", groups = { UpdateGroup.class })
|
||||
private Long clueStageId;
|
||||
|
||||
@Schema(title = "线索阶段名称")
|
||||
@NotNull(message = "线索阶段名称不能为空", groups = { CreateGroup.class })
|
||||
private String name;
|
||||
|
||||
@Schema(title = "线索阶段排序")
|
||||
@NotNull(message = "线索阶段排序不能为空", groups = { CreateGroup.class })
|
||||
private Integer sort;
|
||||
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package com.baiye.modules.distribute.entity;
|
||||
|
||||
import com.baiye.entity.BaseEntity;
|
||||
import com.baiye.validation.group.UpdateGroup;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("tb_custom_store")
|
||||
@Validated
|
||||
@Schema(title = "客户表门店关联表")
|
||||
public class CustomStoreEntity extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId
|
||||
@Schema(title = "ID")
|
||||
@NotNull(message = "ID不能为空", groups = { UpdateGroup.class })
|
||||
private Long customStoreId;
|
||||
|
||||
@Schema(title = "门店ID")
|
||||
@NotNull(message = "门店不能为空")
|
||||
private Long storeId;
|
||||
|
||||
@Schema(title = "客户ID")
|
||||
private Long customId;
|
||||
|
||||
@Schema(title = "门店名称")
|
||||
@NotBlank(message = "门店名称不能为空")
|
||||
private String storeName;
|
||||
|
||||
@Schema(title = "预约日期")
|
||||
private LocalDateTime reservationDate;
|
||||
|
||||
@Schema(title = "预约时间")
|
||||
private String reservationTime;
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
package com.baiye.modules.distribute.entity;
|
||||
|
||||
import com.baiye.entity.BaseEntity;
|
||||
import com.baiye.extend.mybatis.plus.alias.TableAlias;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("tb_direct_clue")
|
||||
@TableAlias("dc")
|
||||
@Schema(title = "直达线索表")
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class DirectClueEntity extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId
|
||||
@Schema(title = "直达线索ID")
|
||||
private Long directClueId;
|
||||
|
||||
@Schema(title = "编号")
|
||||
private String batchNo;
|
||||
|
||||
@Schema(title = "客户名称")
|
||||
private String customName;
|
||||
|
||||
@Schema(title = "nid")
|
||||
private String nid;
|
||||
|
||||
@Schema(title = "来源 0:巨量")
|
||||
private Integer originType;
|
||||
|
||||
@Schema(title = "有效状态 0:有效 1:无效")
|
||||
private Integer effectiveStatus;
|
||||
|
||||
@Schema(title = "资源标签")
|
||||
private String clueLabelName;
|
||||
|
||||
@Schema(title = "分发状态 0:未分发 1:已分发")
|
||||
private Integer distributeType;
|
||||
|
||||
@Schema(title = "分发日期")
|
||||
private LocalDateTime distributeDate;
|
||||
|
||||
@Schema(title = "资源分发的分发员用户ID")
|
||||
private Long distributeUserId;
|
||||
|
||||
@Schema(title = "其它线索信息")
|
||||
private String otherClue;
|
||||
|
||||
public DirectClueEntity(String customName, String nid, String otherClue) {
|
||||
this.customName = customName;
|
||||
this.nid = nid;
|
||||
this.otherClue = otherClue;
|
||||
}
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package com.baiye.modules.distribute.entity;
|
||||
|
||||
import com.baiye.validation.group.CreateGroup;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("tb_direct_clue_user")
|
||||
@Schema(title = "直达线索表")
|
||||
public class DirectClueUserEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId
|
||||
@Schema(title = "直达线索用户关联表ID")
|
||||
private Long id;
|
||||
|
||||
@Schema(title = "线索ID")
|
||||
@NotNull(message = "线索不能为空", groups = CreateGroup.class)
|
||||
private Long clueId;
|
||||
|
||||
@Schema(title = "用户ID")
|
||||
@NotNull(message = "用户不能为空", groups = CreateGroup.class)
|
||||
private Long userId;
|
||||
|
||||
@Schema(title = "用户名")
|
||||
private String userName;
|
||||
}
|
@ -0,0 +1,70 @@
|
||||
package com.baiye.modules.distribute.entity;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/8/11
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@TableName("tb_distribute_report_channel")
|
||||
@Schema(title = "导入线索分配统计-渠道")
|
||||
public class DistributeReportChannelEntity implements Serializable {
|
||||
|
||||
@TableId
|
||||
@Schema(title = "ID")
|
||||
private Long id;
|
||||
|
||||
@Schema(title = "用户id")
|
||||
private Long userId;
|
||||
|
||||
@Schema(title = "用户名")
|
||||
private String username;
|
||||
|
||||
@Schema(title = "渠道")
|
||||
private String channel;
|
||||
|
||||
@Schema(title = "当日量")
|
||||
private Integer todayNum = 0;
|
||||
|
||||
@Schema(title = "总量")
|
||||
private Integer totalNum = 0;
|
||||
|
||||
@Schema(title = "分配量")
|
||||
private Integer distributeNum = 0;
|
||||
|
||||
@Schema(title = "占比")
|
||||
private double ratio;
|
||||
|
||||
@Schema(title = "日环比")
|
||||
private double ratioDay;
|
||||
|
||||
@Schema(title = "统计日期")
|
||||
private Date createTime;
|
||||
|
||||
public DistributeReportChannelEntity createDistributeReportChannel(Long userId, String username, String channel,
|
||||
Integer todayNum, Integer totalNum, Integer distributeNum, Double ratio, Double ratioDay) {
|
||||
this.setUserId(userId);
|
||||
this.setUsername(username);
|
||||
this.setChannel(channel);
|
||||
this.setTodayNum(todayNum);
|
||||
this.setTotalNum(totalNum);
|
||||
this.setDistributeNum(distributeNum);
|
||||
this.setRatio(ratio);
|
||||
this.setRatioDay(ratioDay);
|
||||
this.setCreateTime(DateUtil.date());
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
package com.baiye.modules.distribute.entity;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/8/11
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@TableName("tb_distribute_report")
|
||||
@Schema(title = "导入线索分配统计")
|
||||
public class DistributeReportEntity implements Serializable {
|
||||
|
||||
@TableId
|
||||
@Schema(title = "ID")
|
||||
private Long id;
|
||||
|
||||
@Schema(title = "用户id")
|
||||
private Long userId;
|
||||
|
||||
@Schema(title = "用户名")
|
||||
private String username;
|
||||
|
||||
@Schema(title = "渠道")
|
||||
private String channel;
|
||||
|
||||
@Schema(title = "总量")
|
||||
private Integer todayNum = 0;
|
||||
|
||||
@Schema(title = "占比")
|
||||
private double ratio;
|
||||
|
||||
@Schema(title = "日环比")
|
||||
private double ratioDay;
|
||||
|
||||
@Schema(title = "统计日期")
|
||||
private Date createTime;
|
||||
|
||||
public DistributeReportEntity createDistributeReport(Long userId, String username, String channel, Integer todayNum,
|
||||
Double ratio, Double ratioDay) {
|
||||
this.setUserId(userId);
|
||||
this.setUsername(username);
|
||||
this.setChannel(channel);
|
||||
this.setTodayNum(todayNum);
|
||||
this.setRatio(ratio);
|
||||
this.setRatioDay(ratioDay);
|
||||
this.setCreateTime(DateUtil.date());
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
package com.baiye.modules.distribute.entity;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author wjt
|
||||
* @date 2023/8/11
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@TableName("tb_distribute_report_user")
|
||||
@Schema(title = "导入线索分配统计-用户")
|
||||
public class DistributeReportUserEntity implements Serializable {
|
||||
|
||||
@TableId
|
||||
@Schema(title = "ID")
|
||||
private Long id;
|
||||
|
||||
@Schema(title = "用户id")
|
||||
private Long userId;
|
||||
|
||||
@Schema(title = "用户名")
|
||||
private String username;
|
||||
|
||||
@Schema(title = "当日量")
|
||||
private Integer todayNum = 0;
|
||||
|
||||
@Schema(title = "总量")
|
||||
private Integer totalNum = 0;
|
||||
|
||||
@Schema(title = "分配量")
|
||||
private Integer distributeNum = 0;
|
||||
|
||||
@Schema(title = "占比")
|
||||
private double ratio;
|
||||
|
||||
@Schema(title = "日环比")
|
||||
private double ratioDay;
|
||||
|
||||
@Schema(title = "统计日期")
|
||||
private Date createTime;
|
||||
|
||||
public DistributeReportUserEntity createDistributeReportUser(Long userId, String username, Integer todayNum,
|
||||
Integer totalNum, Integer distributeNum, Double ratio, Double ratioDay) {
|
||||
this.setUserId(userId);
|
||||
this.setUsername(username);
|
||||
this.setTodayNum(todayNum);
|
||||
this.setTotalNum(totalNum);
|
||||
this.setDistributeNum(distributeNum);
|
||||
this.setRatio(ratio);
|
||||
this.setRatioDay(ratioDay);
|
||||
this.setCreateTime(DateUtil.date());
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
package com.baiye.modules.distribute.entity;
|
||||
|
||||
import com.baiye.entity.BaseEntity;
|
||||
import com.baiye.extend.mybatis.plus.alias.TableAlias;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* @Author YQY
|
||||
* @Date 2023/8/11
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@TableName("tb_distribute_task")
|
||||
@Schema(title = "分发任务")
|
||||
@TableAlias("dt")
|
||||
public class DistributeTaskEntity extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId
|
||||
@Schema(title = "分发任务ID")
|
||||
private Long distributeTaskId;
|
||||
|
||||
@Schema(title = "分发类型 0:手动分发 1:自动分发")
|
||||
private Integer distributeTaskType;
|
||||
|
||||
@Schema(title = "任务名称")
|
||||
private String taskName;
|
||||
|
||||
@Schema(title = "分发规则 0:平均 1:权重")
|
||||
private Integer ruleStatus;
|
||||
|
||||
@Schema(title = "分发时间 0:实时 1:定时")
|
||||
private Integer timeStatus;
|
||||
|
||||
@Schema(title = "定时开始时间")
|
||||
private LocalDateTime startTime;
|
||||
|
||||
@Schema(title = "文件规则前缀")
|
||||
private String fileRulePrefix;
|
||||
|
||||
@Schema(title = "上传文件记录ID “,”相隔")
|
||||
private String fileRecordId;
|
||||
|
||||
@Schema(title = "执行状态 0:未执行 1:执行中 2:已执行 3:暂停")
|
||||
private Integer executeStatus;
|
||||
|
||||
@Schema(title = "任务默认类型 0:默认 1:非默认")
|
||||
private Integer defaultType;
|
||||
|
||||
@Schema(title = "任务执行次数")
|
||||
private Integer executeNum;
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.baiye.modules.distribute.entity;
|
||||
|
||||
import com.baiye.entity.BaseEntity;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
/**
|
||||
* @Author YQY
|
||||
* @Date 2023/8/11
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@TableName("tb_distribute_task_user")
|
||||
@Schema(title = "分发任务用户权重表")
|
||||
public class DistributeTaskUserEntity extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId
|
||||
@Schema(title = "ID")
|
||||
private Long id;
|
||||
|
||||
@Schema(title = "分发任务ID")
|
||||
private Long distributeTaskId;
|
||||
|
||||
@Schema(title = "用户ID")
|
||||
private Long userId;
|
||||
|
||||
@Schema(title = "权重值")
|
||||
private Integer weight;
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue