项目初始化

master
bynt 6 months ago
parent eb2f53f174
commit 75e758f17b

56
.gitignore vendored

@ -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,20 @@
package com.baiye.constant;
/**
*
*
* @author ruoyi
*/
public final class CaptchaConstant {
/**
* redis key
*/
public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
/**
*
*/
public static final Integer CAPTCHA_EXPIRATION = 2;
}

@ -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,104 @@
package com.baiye.easyexcel.listener;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.baiye.constant.UploadTemplateHeadConstant;
import com.baiye.modules.distribute.entity.ClueEntity;
import com.baiye.modules.distribute.entity.ClueRecordEntity;
import com.baiye.modules.distribute.service.ClueService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
@Slf4j
public class ClueListener extends AnalysisEventListener<Map<Integer, String>> {
public final List<ClueEntity> rows = new ArrayList<>();
public final LinkedList<String> headInfo = new LinkedList<>();
/**
* springservice
*/
private static ClueService clueService;
private static ClueRecordEntity clueRecordEntity;
public ClueListener(ClueService clueService, ClueRecordEntity clueRecordEntity) {
this.clueService = clueService;
this.clueRecordEntity = clueRecordEntity;
}
/**
* 3000
*/
@Override
public void invoke(Map<Integer, String> data, AnalysisContext context) {
ClueEntity clueEntity = new ClueEntity();
Map<String, Object> map = new HashMap<>();
// 动态解析excel列
for (int i = 0; i < headInfo.size(); i++) {
String param = data.get(i);
switch (headInfo.get(i)) {
case UploadTemplateHeadConstant.HEAD_NID:
clueEntity.setNid(param);
break;
case UploadTemplateHeadConstant.HEAD_ORIGIN:
clueEntity.setOriginName(param);
break;
case UploadTemplateHeadConstant.HEAD_REMARK:
clueEntity.setRemark(param);
break;
case UploadTemplateHeadConstant.HEAD_DATE:
clueEntity.setClueTime(param);
break;
default:
if (StringUtils.isEmpty(param))
param = "";
map.put(headInfo.get(i), param);
}
}
clueEntity.setOtherClue(JSONUtil.toJsonStr(map));
rows.add(clueEntity);
// 保存
if (rows.size() >= 3000) {
saveData();
rows.clear();
}
}
/**
*
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
if (CollUtil.isNotEmpty(rows))
saveData();
rows.clear();
headInfo.clear();
}
/**
*
*/
@Override
public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
headMap.values().forEach(vs -> headInfo.add(vs.getStringValue()));
}
/**
*
*/
private void saveData() {
for (ClueEntity row : rows) {
row.setClueRecordId(clueRecordEntity.getClueRecordId());
row.setCreateBy(clueRecordEntity.getCreateBy());
}
clueService.clueFileUploadSaveAll(rows);
}
}

@ -0,0 +1,70 @@
package com.baiye.easyexcel.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.baiye.constant.UploadTemplateHeadConstant;
import com.baiye.modules.distribute.dto.CustomDTO;
import com.baiye.modules.distribute.dto.ReadFileDTO;
import com.baiye.modules.distribute.entity.ClueRecordEntity;
import com.baiye.modules.distribute.entity.CustomEntity;
import com.baiye.modules.distribute.service.CustomService;
import lombok.extern.slf4j.Slf4j;
import java.util.*;
@Slf4j
public class CustomListener extends AnalysisEventListener<Map<Integer, String>> {
public final List<CustomEntity> rows = new ArrayList<>();
public final LinkedList<String> headInfo = new LinkedList<>();
public Integer index = 0;
/**
* springservice
*/
private static CustomService customService;
private static ClueRecordEntity clueRecordEntity;
private static ReadFileDTO readFileDTO;
public CustomListener(CustomService customService, ClueRecordEntity clueRecordEntity, ReadFileDTO readFileDTO) {
this.customService = customService;
this.clueRecordEntity = clueRecordEntity;
this.readFileDTO = readFileDTO;
}
@Override
public void invoke(Map<Integer, String> data, AnalysisContext context) {
List<Long> userIdList = readFileDTO.getDistributorsUserIdList();
CustomDTO customDTO = new CustomDTO();
// 动态解析excel列
for (int i = 0; i < headInfo.size(); i++) {
String str = headInfo.get(i);
String param = data.get(i);
if (str.equals(UploadTemplateHeadConstant.HEAD_NID)) customDTO.setCustomNid(param);
else if (str.equals(UploadTemplateHeadConstant.HEAD_REMARK)) customDTO.setRemark(param);
else return;
}
customDTO.setDistributorId(userIdList.get(index));
customDTO.setCreateBy(clueRecordEntity.getCreateBy());
customDTO.setChannelType(2);
customDTO.setChannelName(readFileDTO.getChannelName());
customService.createByFileType(customDTO);
index = (index < userIdList.size() - 1) ? index + 1 : 0;
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
/**
*
*/
@Override
public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
headMap.values().forEach(vs -> headInfo.add(vs.getStringValue()));
}
}

@ -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,35 @@
package com.baiye.job;
import com.baiye.modules.distribute.entity.DistributeTaskEntity;
import com.baiye.modules.distribute.service.DistributeTaskService;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
*
*/
@Slf4j
@Component
public class LinkWatchJob implements SimpleJob {
@Resource
private DistributeTaskService distributeTaskService;
@Override
public void execute(ShardingContext shardingContext) {
log.info("==============定时任务开始任务名称ID{}================", shardingContext.getJobName());
String jobName = shardingContext.getJobName();
String str = jobName.substring(jobName.lastIndexOf("_") + 1);
log.info("==============定时任务开始ID{}================", str);
DistributeTaskEntity entity = distributeTaskService.getById(Long.parseLong(str));
if (entity != null) {
distributeTaskService.execute(entity);
}
}
}

@ -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,103 @@
package com.baiye.modules.distribute.dto;
import com.baiye.modules.distribute.entity.LabelEntity;
import com.baiye.validation.group.UpdateGroup;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ClueDTO {
@Schema(title = "线索ID")
@NotNull(message = "分发ID不能为空", groups = { UpdateGroup.class })
private Long clueId;
@Schema(title = "线索来源")
private String originName;
@Schema(title = "手机号")
private String nid;
@Schema(title = "线索时间")
private String clueTime;
@Schema(title = "线索备注")
private String remark;
@Schema(title = "记录ID")
private Long clueRecordId;
private String otherClue;
@Schema(title = "分配人用户ID")
private Long assignedBy;
@Schema(title = "资源标签")
private String clueLabel;
@Schema(title = "资源标签名称")
private String clueLabelName;
@Schema(title = "分配人用户名")
private String assignedName;
@Schema(title = "资源线索ID")
private Long clueStageId;
@Schema(title = "资源线索名称")
private String clueStageName;
@Schema(title = "创建者")
private Long createBy;
@Schema(title = "资源线索ID")
private Boolean isNewClue;
@Schema(title = "资源标签集合")
private List<LabelEntity> clueLabelList;
@Schema(title = "公司管理员用户ID")
private Long companyId;
@Schema(title = "性别(0-男1-女)")
private Integer sex;
@Schema(title = "客户资料")
private String customInformation;
@Schema(title = "渠道标识")
private List<String> channelIdentifying;
@Schema(title = "渠道类型渠道类型(1 手动创建 2文件上传 3飞鱼回传 4话单回传 5 api回传)")
private Integer channelType;
@Schema(title = "客户ID")
private Long customId;
public ClueDTO(Long clueId, String originName, String nid, String remark, String otherClue, Long assignedBy, String assignedName, Long createBy, Boolean isNewClue, Long companyId, Integer sex, String customInformation, List<String> channelIdentifying, Integer channelType, Long customId) {
this.clueId = clueId;
this.originName = originName;
this.nid = nid;
this.remark = remark;
this.otherClue = otherClue;
this.assignedBy = assignedBy;
this.assignedName = assignedName;
this.createBy = createBy;
this.isNewClue = isNewClue;
this.companyId = companyId;
this.sex = sex;
this.customInformation = customInformation;
this.channelIdentifying = channelIdentifying;
this.channelType = channelType;
this.customId = customId;
}
}

@ -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,83 @@
package com.baiye.modules.distribute.dto;
import com.baiye.modules.distribute.entity.CustomStoreEntity;
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;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
public class CustomDTO {
@Schema(title = "ID")
@NotNull(message = "ID不能为空", groups = { UpdateGroup.class })
private Long customId;
@Schema(title = "客户名称")
@NotBlank(message = "客户名称不能为空", groups = { CreateGroup.class, UpdateGroup.class })
private String customName;
@Schema(title = "客户联系方式")
@NotBlank(message = "客户联系方式不能为空", groups = { CreateGroup.class, UpdateGroup.class })
private String customNid;
@Schema(title = "省")
private String economize;
@Schema(title = "市")
private String market;
@Schema(title = "区")
private String distinguish;
@Schema(title = "详细地址")
private String detailAddress;
@Schema(title = "其它地址信息-定位使用")
private String otherAddressesInfo;
@Schema(title = "半径")
private String radius;
@Schema(title = "报名状态 0:待提交 1:已报名")
@NotNull(message = "状态不能为空", groups = { CreateGroup.class })
private Integer enrollStatus;
@Schema(title = "备注")
private String remark;
@Schema(description = "审核类型 2初审 3复审")
private Integer type;
@Schema(title = "客户类型 0:地理 1:基本")
@NotNull(message = "客户类型不能为空", groups = { CreateGroup.class })
private Integer customType;
@Schema(title = "门店信息")
private List<CustomStoreEntity> customStoreEntities;
@Schema(title = "创建人")
private Long createBy;
@Schema(title = "渠道类型(1 手动创建 2文件上传 3飞鱼回传 4话单回传 5 api回传)")
private Integer channelType;
@Schema(title = "渠道名称")
private String channelName;
@Schema(title = "分发员id")
private Long distributorId;
@Schema(title = "业务员ID集合")
private List<String> salesmanUserId;
@Schema(title = "客户资料")
private String customInformation;
@Schema(title = "性别(0-男1-女)")
private Integer sex;
}

@ -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,45 @@
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.util.List;
@Data
public class PushLinkDTO {
@Schema(title = "ID")
@NotNull(message = "ID不能为空", groups = { UpdateGroup.class })
private Long id;
@Schema(title = "业务名")
@NotNull(message = "业务名不能为空", groups = { CreateGroup.class })
private String name;
@Schema(title = "appKey标识")
private String appKey;
@Schema(title = "业务方、公司 用户ID")
private Long companyId;
@Schema(title = "渠道标识")
private List<String> channelIdentifyingList;
@Schema(title = "渠道链接")
private String channelUrl;
@Schema(title = "渠道类型(0-大坝1-飞鱼2-第三方)")
@NotNull(message = "请选择渠道类型", groups = { CreateGroup.class })
private Integer channelType;
@Schema(title = "状态(1-启用接收,0-拒绝接收)")
private Integer status;
@Schema(title = "创建人")
private Long createBy;
}

@ -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,93 @@
package com.baiye.modules.distribute.entity;
import com.baiye.entity.LogicDeletedBaseEntity;
import com.baiye.extend.mybatis.plus.alias.TableAlias;
import com.baiye.extend.mybatis.plus.converter.JsonStringArrayTypeHandler;
import com.baiye.validation.group.UpdateGroup;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import javax.validation.constraints.NotNull;
import java.util.List;
@Getter
@Setter
@ToString
@TableName(value = "tb_clue", autoResultMap = true)
@Schema(title = "线索")
@TableAlias("ce")
public class ClueEntity extends LogicDeletedBaseEntity {
private static final long serialVersionUID = 1L;
@TableId(type = IdType.INPUT)
@Schema(title = "线索ID")
@NotNull(message = "分发ID不能为空", groups = { UpdateGroup.class })
private Long clueId;
@Schema(title = "线索来源")
private String originName;
@Schema(title = "手机号")
private String nid;
@Schema(title = "线索时间")
private String clueTime;
@Schema(title = "线索备注")
private String remark;
@Schema(title = "记录ID")
private Long clueRecordId;
@Schema(title = "其它线索(jsonStr格式)")
private String otherClue;
@Schema(title = "分配人用户ID")
private Long assignedBy;
@Schema(title = "分配人用户名")
private String assignedName;
@Schema(title = "资源标签关联ID")
private String clueLabel;
@Schema(title = "资源所打标签信息(jsonStr格式)")
private String clueLabelName;
@Schema(title = "资源阶段关联ID")
private Long clueStageId;
@Schema(title = "资源所打的阶段名称")
private String clueStageName;
@Schema(title = "是否新线索")
private Boolean isNewClue;
@Schema(title = "是否有效")
private Boolean isEffective;
@Schema(title = "太空猫传递的线索ID")
private Long variable;
@Schema(title = "公司管理员用户ID")
private Long companyId;
@Schema(title = "性别(0-男1-女)")
private Integer sex;
@Schema(title = "客户资料")
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String customInformation;
@TableField(value = "channel_identifying", typeHandler = JsonStringArrayTypeHandler.class)
@Schema(title = "渠道标识")
private List<String> channelIdentifying;
@Schema(title = "渠道类型渠道类型(1 手动创建 2文件上传 3飞鱼回传 4话单回传 5 api回传)")
private Integer channelType;
@Schema(title = "客户ID")
private Long customId;
}

@ -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,118 @@
package com.baiye.modules.distribute.entity;
import com.baiye.entity.BaseEntity;
import com.baiye.extend.mybatis.plus.alias.TableAlias;
import com.baiye.extend.mybatis.plus.converter.JsonStringArrayTypeHandler;
import com.baiye.validation.group.CreateGroup;
import com.baiye.validation.group.UpdateGroup;
import com.baomidou.mybatisplus.annotation.TableField;
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.NotNull;
import java.util.Date;
import java.util.List;
/**
* @author Enzo
*/
@Getter
@Setter
@TableName(value = "tb_custom", autoResultMap = true)
@TableAlias("cm")
@Validated
@Schema(title = "客户表")
public class CustomEntity extends BaseEntity {
private static final long serialVersionUID = 1L;
@Schema(description = "编号")
private String batchNo;
@TableId
@Schema(title = "ID")
@NotNull(message = "ID不能为空", groups = { UpdateGroup.class })
private Long customId;
@Schema(title = "客户名称")
@NotNull(message = "客户名称不能为空", groups = { CreateGroup.class })
private String customName;
@Schema(title = "客户联系方式")
@NotNull(message = "客户联系方式不能为空", groups = { CreateGroup.class })
private String customNid;
@Schema(title = "省")
@NotNull(message = "地址不能为空", groups = { CreateGroup.class })
private String economize;
@Schema(title = "市")
@NotNull(message = "地址不能为空", groups = { CreateGroup.class })
private String market;
@Schema(title = "区")
private String distinguish;
@Schema(title = "详细地址")
@NotNull(message = "详细地址不能为空", groups = { CreateGroup.class })
private String detailAddress;
@Schema(title = "其它地址信息-定位使用")
private String otherAddressesInfo;
@Schema(title = "半径")
@NotNull(message = "半径不能为空", groups = { CreateGroup.class })
private String radius;
@Schema(title = "报名状态 0:待提交 1:已报名 2 审核通过")
@NotNull(message = "状态不能为空", groups = { CreateGroup.class })
private Integer enrollStatus;
@Schema(description = "审核类型 2初审 3复审")
private Integer type;
@Schema(description = "公司id")
private Long companyId;
@Schema(description = "录入员姓名")
private String enterName;
@Schema(description = "分发时间")
private Date distributeTime;
@Schema(title = "备注")
private String remark;
@Schema(title = "客户类型 0:地理 1:基础")
private Integer customType;
@Schema(title = "复审员id")
private Long reviewUserId;
@Schema(title = "分发员id")
private Long distributorId;
@Schema(title = "渠道类型渠道类型(1 手动创建 2文件上传 3飞鱼回传 4话单回传 5 api回传)")
private Integer channelType;
@Schema(title = "性别(0-男1-女)")
private Integer sex;
@Schema(title = "客户资料")
private String customInformation;
@Schema(title = "渠道名称")
private String channelName;
@TableField(value = "channel_identifying", typeHandler = JsonStringArrayTypeHandler.class)
@Schema(title = "渠道标识")
private List<String> channelIdentifying;
@TableField(value = "salesman_user_id", typeHandler = JsonStringArrayTypeHandler.class)
@Schema(title = "业务员ID集合")
private List<String> salesmanUserId;
}

@ -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…
Cancel
Save