From 5f44b093cd4d0734f45c0d8edcb380ecb82372fa Mon Sep 17 00:00:00 2001 From: yqy Date: Mon, 28 Aug 2023 14:29:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=95=B4=E5=90=88(=E6=9C=AA?= =?UTF-8?q?=E6=B5=8B=E8=AF=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baiye/security/util/PasswordUtils.java | 1 + .../java/com/baiye/aspect/SysUserAspect.java | 52 +++++++---- .../com/baiye/job/JobApplicationRunner.java | 45 +++++----- .../controller/ClueFileController.java | 18 +++- .../controller/ClueRecordController.java | 1 + .../modules/distribute/qo/ClueRecordQo.java | 3 + .../distribute/service/ClueRecordService.java | 2 +- .../service/DistributeTaskService.java | 7 +- .../service/impl/ClueRecordServiceImpl.java | 3 +- .../impl/DistributeTaskServiceImpl.java | 90 ++++++++++++------- .../service/impl/OutsideReqServiceImpl.java | 8 +- .../service/impl/PushLinkServiceImpl.java | 4 +- admin/src/main/resources/application.yml | 2 +- .../resources/mapper/ClueRecordMapper.xml | 3 + 14 files changed, 159 insertions(+), 80 deletions(-) diff --git a/ad-distribute-security/security-oauth2-core/src/main/java/com/baiye/security/util/PasswordUtils.java b/ad-distribute-security/security-oauth2-core/src/main/java/com/baiye/security/util/PasswordUtils.java index 5f5df96..0be4c53 100644 --- a/ad-distribute-security/security-oauth2-core/src/main/java/com/baiye/security/util/PasswordUtils.java +++ b/ad-distribute-security/security-oauth2-core/src/main/java/com/baiye/security/util/PasswordUtils.java @@ -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); } diff --git a/admin/src/main/java/com/baiye/aspect/SysUserAspect.java b/admin/src/main/java/com/baiye/aspect/SysUserAspect.java index 3f0d913..424ae62 100644 --- a/admin/src/main/java/com/baiye/aspect/SysUserAspect.java +++ b/admin/src/main/java/com/baiye/aspect/SysUserAspect.java @@ -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 userList = sysUserMapper .selectList(new LambdaQueryWrapper().eq(SysUser::getWhichUserId, obj)); if (CollUtil.isNotEmpty(userList)) { @@ -98,6 +100,18 @@ public class SysUserAspect { clueMapper.delete(new LambdaQueryWrapper().in(ClueEntity::getAssignedBy, userIdList)); } clueMapper.delete(new LambdaQueryWrapper().eq(ClueEntity::getAssignedBy, obj)); + + // 删除用户的任务和上传记录 + BaseMapper taskMapper = distributeTaskService.getBaseMapper(); + taskMapper + .delete(new LambdaQueryWrapper().eq(DistributeTaskEntity::getCreateBy, obj)); + BaseMapper clueRecordMapper = clueRecordService.getBaseMapper(); + clueRecordMapper.delete(new LambdaQueryWrapper().eq(ClueRecordEntity::getCreateBy, obj)); + // 删除用户标签和标签组 - 阶段信息 + labelMapper.delete(new LambdaQueryWrapper().eq(LabelEntity::getCreateBy, obj)); + labelOrganizeMapper + .delete(new LambdaQueryWrapper().eq(LabelOrganizeEntity::getCreateBy, obj)); + clueStageMapper.delete(new LambdaQueryWrapper().eq(ClueStageEntity::getCreateBy, obj)); } } diff --git a/admin/src/main/java/com/baiye/job/JobApplicationRunner.java b/admin/src/main/java/com/baiye/job/JobApplicationRunner.java index 0234362..3d37730 100644 --- a/admin/src/main/java/com/baiye/job/JobApplicationRunner.java +++ b/admin/src/main/java/com/baiye/job/JobApplicationRunner.java @@ -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 distributeTaskEntities = distributeTaskMapper.selectList( - new LambdaQueryWrapper().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 distributeTaskEntities = + // distributeTaskMapper.selectList( + // new + // LambdaQueryWrapper().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()); + // } + // } } } diff --git a/admin/src/main/java/com/baiye/modules/distribute/controller/ClueFileController.java b/admin/src/main/java/com/baiye/modules/distribute/controller/ClueFileController.java index ee0b286..27b0f24 100644 --- a/admin/src/main/java/com/baiye/modules/distribute/controller/ClueFileController.java +++ b/admin/src/main/java/com/baiye/modules/distribute/controller/ClueFileController.java @@ -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 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("导出失败,请联系管理员"); diff --git a/admin/src/main/java/com/baiye/modules/distribute/controller/ClueRecordController.java b/admin/src/main/java/com/baiye/modules/distribute/controller/ClueRecordController.java index 9b9aceb..8c0a07a 100644 --- a/admin/src/main/java/com/baiye/modules/distribute/controller/ClueRecordController.java +++ b/admin/src/main/java/com/baiye/modules/distribute/controller/ClueRecordController.java @@ -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)); } diff --git a/admin/src/main/java/com/baiye/modules/distribute/qo/ClueRecordQo.java b/admin/src/main/java/com/baiye/modules/distribute/qo/ClueRecordQo.java index c6a541e..bfe51bd 100644 --- a/admin/src/main/java/com/baiye/modules/distribute/qo/ClueRecordQo.java +++ b/admin/src/main/java/com/baiye/modules/distribute/qo/ClueRecordQo.java @@ -41,4 +41,7 @@ public class ClueRecordQo { @Schema(title = "渠道类型") private String channelType; + @Schema(title = "记录类型 0:文件上传 1:资源推送") + private Integer recordType; + } diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/ClueRecordService.java b/admin/src/main/java/com/baiye/modules/distribute/service/ClueRecordService.java index 8416dd5..fad07a2 100644 --- a/admin/src/main/java/com/baiye/modules/distribute/service/ClueRecordService.java +++ b/admin/src/main/java/com/baiye/modules/distribute/service/ClueRecordService.java @@ -31,7 +31,7 @@ public interface ClueRecordService extends ExtendService { /** * 新增用户时,为业务管理员创建默认的记录 */ - ClueRecordEntity addDefaultRecordService(Long userId, String name); + ClueRecordEntity addDefaultRecordService(Long userId, String name, String channelIdentifying); /** * 下拉列表 diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/DistributeTaskService.java b/admin/src/main/java/com/baiye/modules/distribute/service/DistributeTaskService.java index 476b657..15b4cbe 100644 --- a/admin/src/main/java/com/baiye/modules/distribute/service/DistributeTaskService.java +++ b/admin/src/main/java/com/baiye/modules/distribute/service/DistributeTaskService.java @@ -54,8 +54,13 @@ public interface DistributeTaskService extends ExtendService 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() .eq(DistributeTaskUserEntity::getDistributeTaskId, taskId)); @@ -264,8 +274,17 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl recordIdList = new ArrayList<>(); + // 任务中指定的分配人 + List userEntities = distributeTaskUserMapper + .selectList(new LambdaQueryWrapper() + .eq(DistributeTaskUserEntity::getDistributeTaskId, taskEntity.getDistributeTaskId())); + if (CollUtil.isEmpty(userEntities)) + throw new BadRequestException("任务无分配人"); + List userIdList = userEntities.stream() + .map(DistributeTaskUserEntity::getUserId) + .collect(Collectors.toList()); // 查看任务类型 获取文件记录ID + List 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 userEntities = distributeTaskUserMapper - .selectList(new LambdaQueryWrapper() - .eq(DistributeTaskUserEntity::getDistributeTaskId, taskEntity.getDistributeTaskId())); - List userIdList = userEntities.stream() - .map(DistributeTaskUserEntity::getUserId) - .collect(Collectors.toList()); // 查询分配人用户信息 List updateSysUserList = new ArrayList<>(); List sysUsers = sysUserService.listByUserIds(userIdList); @@ -387,7 +399,8 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl sysUserBaseMapper = sysUserService.getBaseMapper(); - List sysUserList = sysUserBaseMapper - .selectList(new LambdaQueryWrapper().eq(SysUser::getWhichUserId, userId)); - if (CollUtil.isNotEmpty(sysUserList)) { - List 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 sysUserBaseMapper = sysUserService.getBaseMapper(); + // List sysUserList = sysUserBaseMapper + // .selectList(new LambdaQueryWrapper().eq(SysUser::getWhichUserId, + // userId)); + // if (CollUtil.isNotEmpty(sysUserList)) { + // List 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 taskEntities = baseMapper.selectList( new LambdaQueryWrapper().in(DistributeTaskEntity::getCreateBy, userIdList) - .eq(DistributeTaskEntity::getDefaultType, 0)); + .eq(DistributeTaskEntity::getDefaultType, 0) + .ne(DistributeTaskEntity::getExecuteStatus, 0)); if (CollUtil.isNotEmpty(taskEntities)) { List taskIds = taskEntities.stream() .map(DistributeTaskEntity::getDistributeTaskId) @@ -505,13 +532,16 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl> 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> 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("用户默认分发任务无分配用户,请检查用户的分配任务"); diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/OutsideReqServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/OutsideReqServiceImpl.java index 37120ff..5505ba3 100644 --- a/admin/src/main/java/com/baiye/modules/distribute/service/impl/OutsideReqServiceImpl.java +++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/OutsideReqServiceImpl.java @@ -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().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("============推送了空数据或者空手机号============"); diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/PushLinkServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/PushLinkServiceImpl.java index 64c383b..1bd5dcb 100644 --- a/admin/src/main/java/com/baiye/modules/distribute/service/impl/PushLinkServiceImpl.java +++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/PushLinkServiceImpl.java @@ -54,7 +54,7 @@ public class PushLinkServiceImpl extends ExtendServiceImpl AND distribute_status = #{qo.distributeStatus} + + AND record_type = #{qo.recordType} +