代码整合(未测试)

master
yqy 1 year ago
parent f417fa315c
commit 5f44b093cd

@ -68,6 +68,7 @@ public final class PasswordUtils {
byte[] secretKeyBytes = secretKey.getBytes();
AES aes = new AES(Mode.CBC, Padding.PKCS5Padding, secretKeyBytes, secretKeyBytes);
byte[] result = aes.decrypt(Base64.decode(aesPass.getBytes(StandardCharsets.UTF_8)));
System.out.println(new String(result, StandardCharsets.UTF_8));
return new String(result, StandardCharsets.UTF_8);
}

@ -1,18 +1,20 @@
package com.baiye.aspect;
import cn.hutool.core.collection.CollUtil;
import com.baiye.exception.BadRequestException;
import com.baiye.modules.distribute.entity.ClueEntity;
import com.baiye.modules.distribute.entity.ClueRecordEntity;
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.baiye.system.service.SysUserService;
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;
@ -21,33 +23,31 @@ import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* AOP
*
* @Author YQY
* @Date 2023/8/15
*/
@Aspect
@Component
@Slf4j
@RequiredArgsConstructor
public class SysUserAspect {
@Resource
private ClueRecordService clueRecordService;
private final ClueRecordService clueRecordService;
@Resource
private ClueMapper clueMapper;
private final ClueMapper clueMapper;
@Resource
private SysUserMapper sysUserMapper;
private final SysUserMapper sysUserMapper;
@Resource
private DistributeTaskService distributeTaskService;
private final DistributeTaskService distributeTaskService;
private final LabelMapper labelMapper;
private final LabelOrganizeMapper labelOrganizeMapper;
private final ClueStageMapper clueStageMapper;
/**
*
@ -75,10 +75,11 @@ public class SysUserAspect {
SysUser sysUser = sysUserMapper.selectByUsername(username);
if (sysUser != null && sysUser.getUserId() != null) {
// 创建默认的文件记录
ClueRecordEntity entity = clueRecordService.addDefaultRecordService(sysUser.getUserId(), "资源推送");
ClueRecordEntity entity = clueRecordService.addDefaultRecordService(sysUser.getUserId(), "资源推送",
"资源推送");
// 创建默认的执行任务
distributeTaskService.addDefaultTask("资源推送", null, entity.getClueRecordId().toString(),
sysUser.getUserId());
sysUser.getUserId(), null);
}
}
}
@ -90,6 +91,7 @@ public class SysUserAspect {
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)) {
@ -98,6 +100,18 @@ public class SysUserAspect {
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));
}
}

@ -10,6 +10,7 @@ import com.example.entity.Job;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@ -30,26 +31,30 @@ public class JobApplicationRunner implements ApplicationRunner {
@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) {
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());
}
}
// 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) {
// 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());
// }
// }
}
}

@ -1,6 +1,7 @@
package com.baiye.modules.distribute.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.baiye.exception.BadRequestException;
import com.baiye.modules.distribute.service.ClueFileService;
import com.baiye.result.R;
@ -9,10 +10,16 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Map;
@ -24,6 +31,8 @@ public class ClueFileController {
private final ClueFileService clueFileService;
private final ResourceLoader resourceLoader;
@PostMapping("/fileUpload")
@Operation(summary = "文件上传资源")
public R<Object> clueFileUpload(@RequestParam("file") MultipartFile file) {
@ -34,9 +43,12 @@ public class ClueFileController {
@Operation(summary = "导出模板")
public void exportExcelTemplate(HttpServletResponse response) {
try (InputStream inputStream = getClass().getResourceAsStream("/file/template.xlsx")) {
response.setHeader("Content-Disposition", "attachment; filename=\"template.xlsx\"");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
EasyExcel.write(response.getOutputStream()).withTemplate(inputStream).sheet().doWrite(new ArrayList<>());
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(null);
final ExcelWriter write = EasyExcel.write(response.getOutputStream()).withTemplate(inputStream).build();
}
catch (IOException e) {
throw new BadRequestException("导出失败,请联系管理员");

@ -44,6 +44,7 @@ public class ClueRecordController {
qo.setCreateBy(SecurityUtils.getCurrentUserId());
qo.setAllocationStatus(0);
qo.setDistributeStatus(0);
qo.setRecordType(0);
return R.ok(clueRecordService.listSelectData(qo));
}

@ -41,4 +41,7 @@ public class ClueRecordQo {
@Schema(title = "渠道类型")
private String channelType;
@Schema(title = "记录类型 0:文件上传 1:资源推送")
private Integer recordType;
}

@ -31,7 +31,7 @@ public interface ClueRecordService extends ExtendService<ClueRecordEntity> {
/**
* ,
*/
ClueRecordEntity addDefaultRecordService(Long userId, String name);
ClueRecordEntity addDefaultRecordService(Long userId, String name, String channelIdentifying);
/**
*

@ -54,8 +54,13 @@ public interface DistributeTaskService extends ExtendService<DistributeTaskEntit
/**
*
* @param taskName
* @param prefixName
* @param recordId ID
* @param createUserId
* @param allocationBy (null)
*/
void addDefaultTask(String taskName, String prefixName, String recordId, Long userId);
void addDefaultTask(String taskName, String prefixName, String recordId, Long createUserId, Long allocationBy);
/**
* admin--

@ -46,12 +46,13 @@ public class ClueRecordServiceImpl extends ExtendServiceImpl<ClueRecordMapper, C
}
@Override
public ClueRecordEntity addDefaultRecordService(Long userId, String name) {
public ClueRecordEntity addDefaultRecordService(Long userId, String name, String channelIdentifying) {
ClueRecordEntity clueRecordEntity = new ClueRecordEntity();
clueRecordEntity.setStatus(2);
clueRecordEntity.setOldFileName(name);
clueRecordEntity.setRecordType(1);
clueRecordEntity.setCreateBy(userId);
clueRecordEntity.setChannelIdentifying(channelIdentifying);
baseMapper.insert(clueRecordEntity);
return clueRecordEntity;
}

@ -141,7 +141,7 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl<DistributeTaskM
// 删除定时任务
jobService.removeJob(PrefixKeyConstant.JOB_KEY + taskId);
}
if (timeStatus == 1 && startTime != null && !startTime.isEqual(time)) {
if (timeStatus == 1 && startTime != null && time != null && !startTime.isEqual(time)) {
// 修改定时任务
this.addJob(taskId, time, false);
}
@ -166,6 +166,16 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl<DistributeTaskM
@Override
@Transactional(rollbackFor = Exception.class)
public boolean del(Long taskId) {
// 删除时任务未执行 文件记录状态回退
DistributeTaskEntity entity = baseMapper.selectById(taskId);
if (entity.getExecuteStatus() == 0) {
String fileRecordId = entity.getFileRecordId();
List<Long> recordIdList = Arrays.stream(fileRecordId.split(","))
.map(Long::parseLong)
.collect(Collectors.toList());
clueRecordMapper.updateDistributeStatus(recordIdList, 0);
}
// 删除
int taskBool = baseMapper.deleteById(taskId);
int userBool = distributeTaskUserMapper.delete(new LambdaQueryWrapper<DistributeTaskUserEntity>()
.eq(DistributeTaskUserEntity::getDistributeTaskId, taskId));
@ -264,8 +274,17 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl<DistributeTaskM
if (taskEntity != null) {
String fileRecordId = taskEntity.getFileRecordId();
Long createBy = taskEntity.getCreateBy();
List<Long> recordIdList = new ArrayList<>();
// 任务中指定的分配人
List<DistributeTaskUserEntity> userEntities = distributeTaskUserMapper
.selectList(new LambdaQueryWrapper<DistributeTaskUserEntity>()
.eq(DistributeTaskUserEntity::getDistributeTaskId, taskEntity.getDistributeTaskId()));
if (CollUtil.isEmpty(userEntities))
throw new BadRequestException("任务无分配人");
List<Long> userIdList = userEntities.stream()
.map(DistributeTaskUserEntity::getUserId)
.collect(Collectors.toList());
// 查看任务类型 获取文件记录ID
List<Long> recordIdList = new ArrayList<>();
if (StringUtils.isNotBlank(fileRecordId)
&& (taskEntity.getDistributeTaskType() == 0 || taskEntity.getDefaultType() == 0)) {
recordIdList = Arrays.stream(fileRecordId.split(",")).map(Long::parseLong).collect(Collectors.toList());
@ -283,13 +302,6 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl<DistributeTaskM
.collect(Collectors.toList());
}
}
// 任务中指定的分配人
List<DistributeTaskUserEntity> userEntities = distributeTaskUserMapper
.selectList(new LambdaQueryWrapper<DistributeTaskUserEntity>()
.eq(DistributeTaskUserEntity::getDistributeTaskId, taskEntity.getDistributeTaskId()));
List<Long> userIdList = userEntities.stream()
.map(DistributeTaskUserEntity::getUserId)
.collect(Collectors.toList());
// 查询分配人用户信息
List<SysUser> updateSysUserList = new ArrayList<>();
List<SysUser> sysUsers = sysUserService.listByUserIds(userIdList);
@ -387,7 +399,8 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl<DistributeTaskM
}
@Override
public void addDefaultTask(String taskName, String prefixName, String recordId, Long userId) {
public void addDefaultTask(String taskName, String prefixName, String recordId, Long createUserId,
Long allocationBy) {
// 创建默认任务
DistributeTaskEntity taskEntity = new DistributeTaskEntity();
taskEntity.setDistributeTaskType(1);
@ -398,23 +411,36 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl<DistributeTaskM
taskEntity.setExecuteStatus(0);
taskEntity.setFileRecordId(recordId);
taskEntity.setDefaultType(0);
taskEntity.setCreateBy(userId);
taskEntity.setCreateBy(createUserId);
// admin管理员创建是默认开启,业务管理员创建时由于不确定是否创建了子用户,所以无法自动开启
if (createUserId == 1) {
taskEntity.setExecuteStatus(1);
}
baseMapper.insert(taskEntity);
// 任务默认下级用户平均分配
BaseMapper<SysUser> sysUserBaseMapper = sysUserService.getBaseMapper();
List<SysUser> sysUserList = sysUserBaseMapper
.selectList(new LambdaQueryWrapper<SysUser>().eq(SysUser::getWhichUserId, userId));
if (CollUtil.isNotEmpty(sysUserList)) {
List<DistributeTaskUserEntity> list = new ArrayList<>();
for (SysUser sysUser : sysUserList) {
DistributeTaskUserEntity taskUserEntity = new DistributeTaskUserEntity();
taskUserEntity.setUserId(sysUser.getUserId());
taskUserEntity.setDistributeTaskId(taskEntity.getDistributeTaskId());
list.add(taskUserEntity);
}
if (CollUtil.isNotEmpty(list))
distributeTaskUserMapper.insertBatchSomeColumn(list);
// 任务默认当前选中用户平均分配
if (createUserId == 1) {
DistributeTaskUserEntity taskUserEntity = new DistributeTaskUserEntity();
taskUserEntity.setUserId(allocationBy);
taskUserEntity.setDistributeTaskId(taskEntity.getDistributeTaskId());
distributeTaskUserMapper.insert(taskUserEntity);
}
// 任务默认下级用户平均分配
// BaseMapper<SysUser> sysUserBaseMapper = sysUserService.getBaseMapper();
// List<SysUser> sysUserList = sysUserBaseMapper
// .selectList(new LambdaQueryWrapper<SysUser>().eq(SysUser::getWhichUserId,
// userId));
// if (CollUtil.isNotEmpty(sysUserList)) {
// List<DistributeTaskUserEntity> list = new ArrayList<>();
// for (SysUser sysUser : sysUserList) {
// DistributeTaskUserEntity taskUserEntity = new DistributeTaskUserEntity();
// taskUserEntity.setUserId(sysUser.getUserId());
// taskUserEntity.setDistributeTaskId(taskEntity.getDistributeTaskId());
// list.add(taskUserEntity);
// }
// if (CollUtil.isNotEmpty(list))
// distributeTaskUserMapper.insertBatchSomeColumn(list);
// }
}
/**
@ -491,7 +517,8 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl<DistributeTaskM
if (SecurityUtils.getCurrentUserId() == 1 && CollUtil.isNotEmpty(userIdList)) {
List<DistributeTaskEntity> taskEntities = baseMapper.selectList(
new LambdaQueryWrapper<DistributeTaskEntity>().in(DistributeTaskEntity::getCreateBy, userIdList)
.eq(DistributeTaskEntity::getDefaultType, 0));
.eq(DistributeTaskEntity::getDefaultType, 0)
.ne(DistributeTaskEntity::getExecuteStatus, 0));
if (CollUtil.isNotEmpty(taskEntities)) {
List<Long> taskIds = taskEntities.stream()
.map(DistributeTaskEntity::getDistributeTaskId)
@ -505,13 +532,16 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl<DistributeTaskM
if (CollUtil.isNotEmpty(taskUserEntities)) {
Map<Long, List<DistributeTaskUserEntity>> map = taskUserEntities.stream()
.collect(Collectors.groupingBy(DistributeTaskUserEntity::getDistributeTaskId));
for (Long taskId : map.keySet()) {
if (!taskIds.contains(taskId)) {
DistributeTaskUserEntity distributeTaskUserEntity = map.get(taskId).get(0);
SysUser sysUser = sysUserService.getById(distributeTaskUserEntity.getUserId());
for (Long taskId : taskIds) {
if (!map.containsKey(taskId)) {
Map<Long, List<DistributeTaskEntity>> listMap = taskEntities.stream()
.collect(Collectors.groupingBy(DistributeTaskEntity::getDistributeTaskId));
Long createBy = listMap.get(taskId).get(0).getCreateBy();
SysUser sysUser = sysUserService.getById(createBy);
throw new BadRequestException("用户:" + sysUser.getUsername() + " 默认分发任务中无分配人,请通知整改后操作该用户");
}
}
}
else {
throw new BadRequestException("用户默认分发任务无分配用户,请检查用户的分配任务");

@ -67,7 +67,7 @@ public class OutsideReqServiceImpl implements OutsideReqService {
ClueEntity clueEntity = new ClueEntity();
clueEntity.setNid(AESUtils.encrypt(mobileDecodeStr, securityProperties.getPasswordSecretKey()));
clueEntity.setClueRecordId(linkEntity.getClueRecordId());
clueEntity.setOtherClue(JSONUtil.toJsonStr(dbPushClueDTO));
// clueEntity.setOtherClue(JSONUtil.toJsonStr(dbPushClueDTO));
clueEntity.setCreateBy(linkEntity.getCreateBy());
clueService.save(clueEntity);
// 执行任务
@ -75,10 +75,14 @@ public class OutsideReqServiceImpl implements OutsideReqService {
new LambdaQueryWrapper<DistributeTaskEntity>().eq(DistributeTaskEntity::getDefaultType, 0)
.eq(DistributeTaskEntity::getCreateBy, linkEntity.getCreateBy())
.eq(DistributeTaskEntity::getFileRecordId, linkEntity.getClueRecordId()));
distributeTaskService.execute(entity);
if (entity.getExecuteStatus() != 1 && entity.getExecuteStatus() != 3)
distributeTaskService.execute(entity);
}
}
else {
log.error("============推送手机号检验不通过============");
}
}
else {
log.info("============推送了空数据或者空手机号============");

@ -54,7 +54,7 @@ public class PushLinkServiceImpl extends ExtendServiceImpl<PushLinkMapper, PushL
dbPushUrl = dbPushUrl.concat(appKey);
// 创建记录(任务)
ClueRecordEntity clueRecordEntity = clueRecordService
.addDefaultRecordService(SecurityUtils.getCurrentUserId(), pushLinkDTO.getName());
.addDefaultRecordService(SecurityUtils.getCurrentUserId(), dtoName, dtoName);
Long recordId = clueRecordEntity.getClueRecordId();
// 插入数据
PushLinkEntity saveEntity = new PushLinkEntity();
@ -66,7 +66,7 @@ public class PushLinkServiceImpl extends ExtendServiceImpl<PushLinkMapper, PushL
// 检验数据--创建默认的执行任务
distributeTaskService.inspectUserTask(Collections.singletonList(userId));
distributeTaskService.addDefaultTask(dtoName, dbPushUrl, recordId.toString(),
SecurityUtils.getCurrentUserId());
SecurityUtils.getCurrentUserId(), userId);
}
return dbPushUrl;
}

@ -33,7 +33,7 @@ mybatis-plus:
ballcat:
security:
# 前端传输密码的 AES 加密密钥
password-secret-key: '==BallCat-Auth=='
password-secret-key: '==ad-distribute='
oauth2:
authorizationserver:
# 登陆验证码是否开启

@ -44,6 +44,9 @@
<if test="qo != null and qo.distributeStatus != null">
AND distribute_status = #{qo.distributeStatus}
</if>
<if test="qo != null and qo.recordType != null">
AND record_type = #{qo.recordType}
</if>
</select>
<update id="updateAllocationStatus">

Loading…
Cancel
Save