From 55a2ff1f9a3f7c65a89688b6e7f5dcc3bf99c898 Mon Sep 17 00:00:00 2001 From: yqy Date: Tue, 17 Oct 2023 15:28:33 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=85=85=E5=80=BC=E6=89=A3?= =?UTF-8?q?=E8=B4=B9(=E6=9C=AA=E6=B5=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/checker/AdminUserChecker.java | 7 ++ .../system/checker/AdminUserCheckerImpl.java | 9 +- .../baiye/system/mapper/SysUserMapper.java | 25 +++++- .../baiye/system/service/SysUserService.java | 8 +- .../service/impl/SysUserServiceImpl.java | 89 ++++++++++++------- .../main/resources/mapper/SysUserMapper.xml | 69 ++++++++++++-- .../system/controller/SysUserController.java | 7 ++ .../baiye/system/model/dto/SysUserDTO.java | 4 +- .../baiye/system/model/entity/SysUser.java | 4 - .../system/model/vo/SysUserBalanceVO.java | 34 +++++++ .../baiye/system/model/vo/SysUserPageVO.java | 8 +- .../service/impl/ClueFileServiceImpl.java | 6 +- .../impl/DistributeTaskServiceImpl.java | 58 ++++-------- .../service/impl/OutsideReqServiceImpl.java | 50 ++--------- .../service/impl/PushLinkServiceImpl.java | 3 +- .../task/DistributeTaskSyncServiceImpl.java | 38 ++++++++ .../main/java/com/baiye/task/SyncTask.java | 36 -------- .../com/baiye/task/SyncTaskServiceImpl.java | 70 +++++++++++++++ .../service/DistributeTaskSyncService.java | 12 +++ .../baiye/task/service/SyncTaskService.java | 13 +++ admin/src/main/resources/application-dev.yml | 2 +- admin/src/main/resources/application-prod.yml | 2 +- admin/src/main/resources/application-test.yml | 2 +- 23 files changed, 379 insertions(+), 177 deletions(-) create mode 100644 ad-distribute-system/system-model/src/main/java/com/baiye/system/model/vo/SysUserBalanceVO.java create mode 100644 admin/src/main/java/com/baiye/task/DistributeTaskSyncServiceImpl.java delete mode 100644 admin/src/main/java/com/baiye/task/SyncTask.java create mode 100644 admin/src/main/java/com/baiye/task/SyncTaskServiceImpl.java create mode 100644 admin/src/main/java/com/baiye/task/service/DistributeTaskSyncService.java create mode 100644 admin/src/main/java/com/baiye/task/service/SyncTaskService.java diff --git a/ad-distribute-system/system-biz/src/main/java/com/baiye/system/checker/AdminUserChecker.java b/ad-distribute-system/system-biz/src/main/java/com/baiye/system/checker/AdminUserChecker.java index 8a97b13..7882723 100644 --- a/ad-distribute-system/system-biz/src/main/java/com/baiye/system/checker/AdminUserChecker.java +++ b/ad-distribute-system/system-biz/src/main/java/com/baiye/system/checker/AdminUserChecker.java @@ -18,6 +18,13 @@ public interface AdminUserChecker { */ boolean isAdminUser(SysUser user); + /** + * 校验用户是否为超级管理员 + * @param userId 用户ID + * @return boolean + */ + boolean isAdminUser(Long userId); + /** * 修改权限校验 * @param targetUser 目标用户 diff --git a/ad-distribute-system/system-biz/src/main/java/com/baiye/system/checker/AdminUserCheckerImpl.java b/ad-distribute-system/system-biz/src/main/java/com/baiye/system/checker/AdminUserCheckerImpl.java index 00c433d..38b7770 100644 --- a/ad-distribute-system/system-biz/src/main/java/com/baiye/system/checker/AdminUserCheckerImpl.java +++ b/ad-distribute-system/system-biz/src/main/java/com/baiye/system/checker/AdminUserCheckerImpl.java @@ -2,7 +2,6 @@ package com.baiye.system.checker; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.text.CharSequenceUtil; -import com.baiye.enums.SalesManEnum; import com.baiye.security.util.SecurityUtils; import com.baiye.system.model.entity.SysUser; import com.baiye.system.properties.SystemProperties; @@ -14,8 +13,6 @@ import java.util.Set; /** * 超级管理员账户规则配置 - * - * @author lingting 2020-06-24 21:00:15 */ @Service @RequiredArgsConstructor @@ -33,6 +30,12 @@ public class AdminUserCheckerImpl implements AdminUserChecker { && administrator.getUsername().equals(user.getUsername()); } + @Override + public boolean isAdminUser(Long userId) { + SystemProperties.Administrator administrator = systemProperties.getAdministrator(); + return administrator.getUserId() == userId; + } + @Override public boolean hasModifyPermission(SysUser targetUser) { // 如果需要修改的用户是超级管理员,则只能本人修改 diff --git a/ad-distribute-system/system-biz/src/main/java/com/baiye/system/mapper/SysUserMapper.java b/ad-distribute-system/system-biz/src/main/java/com/baiye/system/mapper/SysUserMapper.java index 9d5bf60..c55bb5d 100644 --- a/ad-distribute-system/system-biz/src/main/java/com/baiye/system/mapper/SysUserMapper.java +++ b/ad-distribute-system/system-biz/src/main/java/com/baiye/system/mapper/SysUserMapper.java @@ -1,6 +1,7 @@ package com.baiye.system.mapper; import com.baiye.system.model.dto.SysUserNameRoleDTO; +import com.baiye.system.model.vo.SysUserBalanceVO; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -22,6 +23,7 @@ import org.apache.ibatis.annotations.Param; import java.util.Collection; import java.util.List; +import java.util.Map; /** * 系统用户表 @@ -178,6 +180,27 @@ public interface SysUserMapper extends ExtendMapper { return SqlHelper.retBool(count); } - List> listSelectSonListData(@Param("userId") Long userId); + List> listSelectSonListData(@Param("userId") Long userId, @Param("roleCodes") Collection roleCodes); + /** + * 余额充值 + */ + int recharge(@Param("userId") Long userId, @Param("rechargeClueNum") Integer rechargeClueNum); + + /** + * 余额扣费 + */ + int charging(@Param("map") Map map); + + /** + * 查询用户余额 + */ + Integer findUserBalance(@Param("userId") Long userId); + + /** + * 查询用户余额 + */ + List listUserBalance(@Param("userIdList") Collection userIdList); + + void updateDistributeNum(@Param("map") Map map); } diff --git a/ad-distribute-system/system-biz/src/main/java/com/baiye/system/service/SysUserService.java b/ad-distribute-system/system-biz/src/main/java/com/baiye/system/service/SysUserService.java index 57229c3..66cd168 100644 --- a/ad-distribute-system/system-biz/src/main/java/com/baiye/system/service/SysUserService.java +++ b/ad-distribute-system/system-biz/src/main/java/com/baiye/system/service/SysUserService.java @@ -210,14 +210,18 @@ public interface SysUserService extends ExtendService { /** * 余额数量检测-扣减 总分发量计数 * @param map 用户分发数量 - * @param bool 是否是admin * @return true余额充足 false余额不足 */ - boolean detectionAvailableNumUpdate(Map map, boolean bool); + boolean detectionAvailableNumUpdate(Map map); /** * 余额数量检测 * @return nickname:余额不足的用户昵称 null:查询用户都有余额 */ String detectionAvailableNum(List userIds); + + /** + * 余额充值 + */ + boolean recharge(SysUserDTO sysUserDTO); } diff --git a/ad-distribute-system/system-biz/src/main/java/com/baiye/system/service/impl/SysUserServiceImpl.java b/ad-distribute-system/system-biz/src/main/java/com/baiye/system/service/impl/SysUserServiceImpl.java index a7166ad..7d013c8 100644 --- a/ad-distribute-system/system-biz/src/main/java/com/baiye/system/service/impl/SysUserServiceImpl.java +++ b/ad-distribute-system/system-biz/src/main/java/com/baiye/system/service/impl/SysUserServiceImpl.java @@ -1,6 +1,7 @@ package com.baiye.system.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; @@ -8,6 +9,7 @@ import com.baiye.enums.SalesManEnum; import com.baiye.exception.BadRequestException; import com.baiye.system.checker.AdminUserChecker; import com.baiye.system.converter.SysUserConverter; +import com.baiye.system.enums.RoleCodeEnum; import com.baiye.system.event.UserCreatedEvent; import com.baiye.system.event.UserDelEvent; import com.baiye.system.event.UserOrganizationChangeEvent; @@ -15,6 +17,7 @@ import com.baiye.system.mapper.SysUserMapper; import com.baiye.system.model.dto.SysUserNameRoleDTO; import com.baiye.system.model.dto.SysUserScope; import com.baiye.system.model.entity.SysRole; +import com.baiye.system.model.vo.SysUserBalanceVO; import com.baiye.system.properties.FileProperties; import com.baiye.system.service.SysMenuService; import com.baiye.system.service.SysUserRoleService; @@ -35,7 +38,6 @@ import com.baiye.system.model.entity.SysMenu; import com.baiye.system.model.entity.SysUser; import com.baiye.system.model.qo.SysUserQO; import com.baiye.system.model.vo.SysUserPageVO; -import com.baiye.system.service.SysRoleService; import com.baiye.system.service.SysUserService; import com.baiye.extend.mybatis.plus.service.impl.ExtendServiceImpl; import lombok.RequiredArgsConstructor; @@ -69,8 +71,6 @@ public class SysUserServiceImpl extends ExtendServiceImpl sysUsers = baseMapper.selectList(new LambdaQueryWrapper<>()); List userAll = Convert.toList(SysUserPageVO.class, sysUsers); - Map> userGroup = userAll.stream() - .collect(Collectors.groupingBy(SysUserPageVO::getWhichUserId)); + Map> userGroup = userAll.stream().collect(Collectors.groupingBy(SysUserPageVO::getWhichUserId)); - result.getRecords().forEach(user -> { + for (SysUserPageVO user : result.getRecords()) { List byWhichUserId = userGroup.get(user.getUserId()); if (CollUtil.isNotEmpty(byWhichUserId)) { user.setChildren(byWhichUserId); } - }); + user.setRoleCode(null); + } return result; } @Override public PageResult queryAll(PageParam pageParam, SysUserQO qo) { - return baseMapper.queryPage(pageParam, qo); + PageResult result = baseMapper.queryPage(pageParam, qo); + + for (SysUserPageVO user : result.getRecords()) { + List of = ListUtil.of(RoleCodeEnum.find(15L), RoleCodeEnum.find(23L)); + if (of.contains(user.getRoleCode())) user.setIsSalesman(true); + user.setRoleCode(null); + } + return result; } /** @@ -193,7 +200,6 @@ public class SysUserServiceImpl extends ExtendServiceImpl { @@ -457,7 +463,12 @@ public class SysUserServiceImpl extends ExtendServiceImpl> listSelectSonListData() { - return baseMapper.listSelectSonListData(SecurityUtils.getCurrentUserId()); + Long userId = SecurityUtils.getCurrentUserId(); + if (adminUserChecker.isAdminUser(userId)) { + return baseMapper.listSelectSonListData(userId, null); + } + List list = ListUtil.of(RoleCodeEnum.find(15L), RoleCodeEnum.find(23L)); + return baseMapper.listSelectSonListData(userId, list); } @Override @@ -467,39 +478,57 @@ public class SysUserServiceImpl extends ExtendServiceImpl map, boolean bool) { - if (CollUtil.isNotEmpty(map)) throw new BadRequestException("用户不能为空"); - List sysUserList = this.listByIds(map.keySet()); + public synchronized boolean detectionAvailableNumUpdate(Map map) { + if (CollUtil.isEmpty(map)) throw new BadRequestException("用户不能为空"); + List sysUserList = baseMapper.listUserBalance(map.keySet()); Long whichUserId = sysUserList.get(0).getWhichUserId(); - SysUser sysUser = baseMapper.selectById(whichUserId); - for (SysUser user : sysUserList) { - Integer clueNum = map.get(user.getUserId()); - // 非admin下发时 并且 公司管理员账号开启了计费模式(检测余额数量是否充足) - if (!bool && sysUser.getChargingStatus() == 1) { - Integer residueClueNum = user.getResidueClueNum(); - if (residueClueNum < clueNum) throw new BadRequestException(user.getNickname() + "用户余额不足!!"); - user.setResidueClueNum(residueClueNum - clueNum); + if (!adminUserChecker.isAdminUser(whichUserId)) { + SysUser sysUser = baseMapper.selectById(whichUserId); + if (sysUser.getChargingStatus() == 1) { + // 检测余额是否充足 + for (SysUserBalanceVO user : sysUserList) { + Integer clueNum = map.get(user.getUserId()); + // 非admin下发时 并且 公司管理员账号开启了计费模式(检测余额数量是否充足) + Integer residueClueNum = user.getResidueClueNum(); + if (residueClueNum < clueNum) throw new BadRequestException(user.getUsername() + "-用户余额不足"); + } + baseMapper.charging(map);// 扣费 } - user.setDistributeNum(user.getDistributeNum() + clueNum); } - this.updateBatchById(sysUserList); + baseMapper.updateDistributeNum(map);// 修改分发数量 return true; } @Override public String detectionAvailableNum(List userIds) { - if (CollUtil.isNotEmpty(userIds)) throw new BadRequestException("用户不能为空"); - List sysUsers = this.listByUserIds(userIds); + if (CollUtil.isEmpty(userIds)) throw new BadRequestException("用户不能为空"); + List sysUsers = baseMapper.listUserBalance(userIds); Long whichUserId = sysUsers.get(0).getWhichUserId(); - if (whichUserId != 1) { - SysUser whichUser = baseMapper.selectById(whichUserId); - for (SysUser sysUser : sysUsers) { - if (whichUser.getChargingStatus() == 1 && sysUser.getResidueClueNum() <= 0) - return sysUser.getNickname(); + SysUser whichUser = baseMapper.selectById(whichUserId); + for (SysUserBalanceVO sysUser : sysUsers) { + if (!adminUserChecker.isAdminUser(whichUserId) && whichUser.getChargingStatus() == 1 && sysUser.getResidueClueNum() <= 0) { + return sysUser.getUsername(); } } return null; } + @Override + @Transactional(rollbackFor = Exception.class) + public synchronized boolean recharge(SysUserDTO sysUserDTO) { + Long currentUserId = SecurityUtils.getCurrentUserId(); + Integer rechargeClueNum = sysUserDTO.getRechargeClueNum(); + if (!adminUserChecker.isAdminUser(currentUserId)) { + Integer userBalance = baseMapper.findUserBalance(currentUserId); + if (userBalance < rechargeClueNum) throw new BadRequestException("余额不足"); + + Map map = new HashMap<>(); + map.put(currentUserId, rechargeClueNum); + baseMapper.charging(map); + } + log.info("用户{},给{}充值,条数:{}", currentUserId, sysUserDTO.getUserId(), rechargeClueNum); + return SqlHelper.retBool(baseMapper.recharge(sysUserDTO.getUserId(), rechargeClueNum)); + } + } diff --git a/ad-distribute-system/system-biz/src/main/resources/mapper/SysUserMapper.xml b/ad-distribute-system/system-biz/src/main/resources/mapper/SysUserMapper.xml index f342026..09b2e1b 100644 --- a/ad-distribute-system/system-biz/src/main/resources/mapper/SysUserMapper.xml +++ b/ad-distribute-system/system-biz/src/main/resources/mapper/SysUserMapper.xml @@ -27,10 +27,13 @@ @@ -69,7 +72,7 @@ + + + update sys_user + set residue_clue_num = residue_clue_num + #{rechargeClueNum} + where user_id = #{userId} + + + + + + UPDATE sys_user SET residue_clue_num = residue_clue_num - #{value} WHERE user_id = #{key} + + + + + + UPDATE sys_user SET distribute_num = distribute_num + #{value} WHERE user_id = #{key} + + + + + + + diff --git a/ad-distribute-system/system-controller/src/main/java/com/baiye/system/controller/SysUserController.java b/ad-distribute-system/system-controller/src/main/java/com/baiye/system/controller/SysUserController.java index 241f73c..ba85e7f 100644 --- a/ad-distribute-system/system-controller/src/main/java/com/baiye/system/controller/SysUserController.java +++ b/ad-distribute-system/system-controller/src/main/java/com/baiye/system/controller/SysUserController.java @@ -287,4 +287,11 @@ public class SysUserController { return R.ok(objectName); } + @Operation(summary = "充值", description = "充值") + @PostMapping("/recharge") + public R recharge(@RequestBody SysUserDTO sysUserDTO){ + return sysUserService.recharge(sysUserDTO) ? R.ok() + : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "充值失败"); + } + } diff --git a/ad-distribute-system/system-model/src/main/java/com/baiye/system/model/dto/SysUserDTO.java b/ad-distribute-system/system-model/src/main/java/com/baiye/system/model/dto/SysUserDTO.java index 2f59ef2..a3c04d4 100644 --- a/ad-distribute-system/system-model/src/main/java/com/baiye/system/model/dto/SysUserDTO.java +++ b/ad-distribute-system/system-model/src/main/java/com/baiye/system/model/dto/SysUserDTO.java @@ -103,7 +103,7 @@ public class SysUserDTO { @Schema(title = "计费状态 0不计费 1计费") private Integer chargingStatus; - @Schema(title = "剩余线索数量") - private Integer residueClueNum; + @Schema(title = "充值数量") + private Integer rechargeClueNum; } diff --git a/ad-distribute-system/system-model/src/main/java/com/baiye/system/model/entity/SysUser.java b/ad-distribute-system/system-model/src/main/java/com/baiye/system/model/entity/SysUser.java index da7adf8..60e4207 100644 --- a/ad-distribute-system/system-model/src/main/java/com/baiye/system/model/entity/SysUser.java +++ b/ad-distribute-system/system-model/src/main/java/com/baiye/system/model/entity/SysUser.java @@ -107,8 +107,4 @@ public class SysUser extends LogicDeletedBaseEntity { @Schema(title = "计费状态 0不计费 1计费") private Integer chargingStatus; - - @Schema(title = "剩余线索数量") - private Integer residueClueNum; - } diff --git a/ad-distribute-system/system-model/src/main/java/com/baiye/system/model/vo/SysUserBalanceVO.java b/ad-distribute-system/system-model/src/main/java/com/baiye/system/model/vo/SysUserBalanceVO.java new file mode 100644 index 0000000..e7b8ccc --- /dev/null +++ b/ad-distribute-system/system-model/src/main/java/com/baiye/system/model/vo/SysUserBalanceVO.java @@ -0,0 +1,34 @@ +package com.baiye.system.model.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 用户余额VO + */ +@Data +@Schema(title = "用户余额VO") +public class SysUserBalanceVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(title = "用户ID") + private Long userId; + + @Schema(title = "登录账号") + private String username; + + @Schema(title = "创建者(父ID)") + private Long whichUserId; + + @Schema(title = "计费状态 0不计费 1计费") + private Integer chargingStatus; + + @Schema(title = "剩余线索数量") + private Integer residueClueNum; + +} diff --git a/ad-distribute-system/system-model/src/main/java/com/baiye/system/model/vo/SysUserPageVO.java b/ad-distribute-system/system-model/src/main/java/com/baiye/system/model/vo/SysUserPageVO.java index 4388436..86e0e6a 100644 --- a/ad-distribute-system/system-model/src/main/java/com/baiye/system/model/vo/SysUserPageVO.java +++ b/ad-distribute-system/system-model/src/main/java/com/baiye/system/model/vo/SysUserPageVO.java @@ -10,8 +10,6 @@ import java.util.List; /** * 系统用户表 - * - * @author ballcat code generator 2019-09-12 20:39:31 */ @Data @Schema(title = "系统用户VO") @@ -105,6 +103,12 @@ public class SysUserPageVO implements Serializable { private List children; + @Schema(title = "角色标识") + private String roleCode; + + @Schema(title = "是否是专员") + private Boolean isSalesman = false; + @Schema(title = "计费状态 0不计费 1计费") private Integer chargingStatus; diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/ClueFileServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/ClueFileServiceImpl.java index fa09c2a..7f31f6c 100644 --- a/admin/src/main/java/com/baiye/modules/distribute/service/impl/ClueFileServiceImpl.java +++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/ClueFileServiceImpl.java @@ -13,7 +13,7 @@ import com.baiye.modules.distribute.service.ClueFileService; import com.baiye.modules.distribute.service.ClueRecordService; import com.baiye.security.util.SecurityUtils; import com.baiye.system.properties.FileProperties; -import com.baiye.task.SyncTask; +import com.baiye.task.service.SyncTaskService; import com.baiye.util.AppUtils; import com.baiye.util.FileUtil; import com.baiye.util.RsaUtil; @@ -42,7 +42,7 @@ public class ClueFileServiceImpl implements ClueFileService { private final UserSecretKeyMapper userSecretKeyMapper; - private final SyncTask syncTask; + private final SyncTaskService syncTaskService; @Override public Map detection(MultipartFile multipartFile) { @@ -82,7 +82,7 @@ public class ClueFileServiceImpl implements ClueFileService { public void readFile(Long recordId) { ClueRecordEntity clueRecordEntity = clueRecordService.getById(recordId); // 异步读取资源 - syncTask.clueUpload(clueRecordEntity); + syncTaskService.clueUpload(clueRecordEntity); } @Override diff --git a/admin/src/main/java/com/baiye/modules/distribute/service/impl/DistributeTaskServiceImpl.java b/admin/src/main/java/com/baiye/modules/distribute/service/impl/DistributeTaskServiceImpl.java index cfbe90f..78416ee 100644 --- a/admin/src/main/java/com/baiye/modules/distribute/service/impl/DistributeTaskServiceImpl.java +++ b/admin/src/main/java/com/baiye/modules/distribute/service/impl/DistributeTaskServiceImpl.java @@ -24,8 +24,10 @@ import com.baiye.modules.distribute.service.ClueService; import com.baiye.modules.distribute.service.DistributeTaskService; import com.baiye.modules.distribute.vo.DistributeTaskVO; import com.baiye.security.util.SecurityUtils; +import com.baiye.system.checker.AdminUserChecker; import com.baiye.system.model.entity.SysUser; import com.baiye.system.service.SysUserService; +import com.baiye.task.service.DistributeTaskSyncService; import com.baiye.utils.AssignDataUtil; import com.baiye.utils.DateTimeToCronUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -55,6 +57,10 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl sysUsers = sysUserService.listByUserIds(userIdList); - Map> userIdMap = sysUsers.stream() - .collect(Collectors.groupingBy(SysUser::getUserId)); + Map> userIdMap = sysUsers.stream().collect(Collectors.groupingBy(SysUser::getUserId)); // 获取文件中未分配的资源 List clueIds = clueService.findUndistributedClueIds(recordIdList); // 分配 @@ -293,7 +298,7 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl responseDTOS = AssignDataUtil.assignData(distributeDTO); // 查询业务管理员用户的默认文件记录 Map> map = null; - if (createBy == 1) { + if (adminUserChecker.isAdminUser(createBy)) { List recordEntities = clueRecordMapper.selectList( new LambdaQueryWrapper().in(ClueRecordEntity::getCreateBy, userIdList) .eq(ClueRecordEntity::getRecordType, DefaultNumberConstants.ONE_NUMBER)); @@ -310,7 +315,7 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl userIds = userList.stream().map(DistributeTaskUserDTO::getUserId).collect(Collectors.toList()); String nickName = sysUserService.detectionAvailableNum(userIds); @@ -463,9 +465,7 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl taskIds = taskEntities.stream() - .map(DistributeTaskEntity::getDistributeTaskId) - .collect(Collectors.toList()); + List taskIds = taskEntities.stream().map(DistributeTaskEntity::getDistributeTaskId).collect(Collectors.toList()); if (taskIds.size() < userIdList.size()) { throw new BadRequestException("用户默认分发任务无分配用户,请检查用户的分配任务"); } @@ -477,14 +477,12 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl> listMap = taskEntities.stream() - .collect(Collectors.groupingBy(DistributeTaskEntity::getDistributeTaskId)); + 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("用户默认分发任务无分配用户,请检查用户的分配任务"); } @@ -493,24 +491,4 @@ public class DistributeTaskServiceImpl extends ExtendServiceImpl userIdList) { - List taskEntities = baseMapper - .selectList(new LambdaQueryWrapper().eq(DistributeTaskEntity::getDefaultType, 0) - .in(DistributeTaskEntity::getCreateBy, userIdList)); - if (CollUtil.isNotEmpty(taskEntities)) { - for (DistributeTaskEntity distributeTaskEntity : taskEntities) { - Integer executeStatus = distributeTaskEntity.getExecuteStatus(); - Integer distributeTaskType = distributeTaskEntity.getDistributeTaskType(); - Integer timeStatus = distributeTaskEntity.getTimeStatus(); - if ((distributeTaskType == 1 && timeStatus == 0) && executeStatus != 0 && executeStatus != 3) { - this.execute(distributeTaskEntity); - } - } - } - } - } 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 403fa44..8af0c37 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 @@ -6,22 +6,16 @@ import com.baiye.modules.distribute.dto.ClueDTO; import com.baiye.modules.distribute.dto.DBPushClueDTO; import com.baiye.modules.distribute.dto.ReceivePushLeadsDTO; import com.baiye.modules.distribute.entity.ClueEntity; -import com.baiye.modules.distribute.entity.DistributeTaskEntity; -import com.baiye.modules.distribute.entity.PushLinkEntity; import com.baiye.modules.distribute.entity.UserSecretKeyEntity; -import com.baiye.modules.distribute.mapper.DistributeTaskMapper; import com.baiye.modules.distribute.mapper.UserSecretKeyMapper; import com.baiye.modules.distribute.service.ClueService; -import com.baiye.modules.distribute.service.DistributeTaskService; import com.baiye.modules.distribute.service.OutsideReqService; -import com.baiye.modules.distribute.service.PushLinkService; -import com.baiye.util.AESUtils; +import com.baiye.task.service.SyncTaskService; import com.baiye.util.MobileUtil; import com.baiye.util.RsaUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.ballcat.security.properties.SecurityProperties; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -37,13 +31,7 @@ public class OutsideReqServiceImpl implements OutsideReqService { private final UserSecretKeyMapper userSecretKeyMapper; - private final PushLinkService pushLinkService; - - private final SecurityProperties securityProperties; - - private final DistributeTaskMapper distributeTaskMapper; - - private final DistributeTaskService distributeTaskService; + private final SyncTaskService syncTaskService; @Override public void pushClue(String appKey, DBPushClueDTO dbPushClueDTO) { @@ -53,38 +41,17 @@ public class OutsideReqServiceImpl implements OutsideReqService { try { byte[] mobileDecode = Base64.getDecoder().decode(dbPushClueDTO.getMobile()); mobileDecodeStr = new String(mobileDecode, StandardCharsets.UTF_8); - } - catch (Exception e) { + } catch (Exception e) { log.error("============推送解码手机号失败============"); } boolean bool = MobileUtil.checkPhone(mobileDecodeStr); if (bool) { - // 查询appKey映射的记录 - PushLinkEntity linkEntity = pushLinkService.getByAppKey(appKey); - if (linkEntity != null) { - // 添加资源信息 - ClueEntity clueEntity = new ClueEntity(); - clueEntity.setNid(AESUtils.encrypt(mobileDecodeStr, securityProperties.getPasswordSecretKey())); - clueEntity.setClueRecordId(linkEntity.getClueRecordId()); - // clueEntity.setOtherClue(JSONUtil.toJsonStr(dbPushClueDTO)); - clueEntity.setCreateBy(linkEntity.getCreateBy()); - clueService.save(clueEntity); - // 执行任务 - DistributeTaskEntity entity = distributeTaskMapper.selectOne( - new LambdaQueryWrapper().eq(DistributeTaskEntity::getDefaultType, 0) - .eq(DistributeTaskEntity::getCreateBy, linkEntity.getCreateBy()) - .eq(DistributeTaskEntity::getFileRecordId, linkEntity.getClueRecordId())); - if (entity.getExecuteStatus() != 0 && entity.getExecuteStatus() != 3) - distributeTaskService.execute(entity); - - } - } - else { + syncTaskService.pushClueExecuteTask(appKey, mobileDecodeStr); + } else { log.error("============推送手机号检验不通过============"); } - } - else { + } else { log.info("============推送了空数据或者空手机号============"); } } @@ -95,15 +62,14 @@ public class OutsideReqServiceImpl implements OutsideReqService { List clueList = receivePushLeadsDTO.getClueList(); UserSecretKeyEntity entity = userSecretKeyMapper - .selectOne(new LambdaQueryWrapper().eq(UserSecretKeyEntity::getAppKey, appKey)); + .selectOne(new LambdaQueryWrapper().eq(UserSecretKeyEntity::getAppKey, appKey)); if (entity != null && CollUtil.isNotEmpty(clueList)) { List clueEntityList = new ArrayList<>(); for (String clueStr : clueList) { String jsonStr = null; try { jsonStr = RsaUtil.decryptByPrivateKey(clueStr, RsaUtil.getPrivateKey(entity.getPrivateKey())); - } - catch (Exception e) { + } catch (Exception e) { log.error("解密失败"); } ClueDTO clueDTO = JSONUtil.toBean(jsonStr, ClueDTO.class); 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 96f7518..5afb4fa 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 @@ -65,8 +65,7 @@ public class PushLinkServiceImpl extends ExtendServiceImpl userIdList, DistributeTaskService distributeTaskService) { + List taskEntities = distributeTaskMapper + .selectList(new LambdaQueryWrapper().eq(DistributeTaskEntity::getDefaultType, 0) + .in(DistributeTaskEntity::getCreateBy, userIdList)); + if (CollUtil.isNotEmpty(taskEntities)) { + for (DistributeTaskEntity distributeTaskEntity : taskEntities) { + Integer executeStatus = distributeTaskEntity.getExecuteStatus(); + Integer distributeTaskType = distributeTaskEntity.getDistributeTaskType(); + Integer timeStatus = distributeTaskEntity.getTimeStatus(); + if ((distributeTaskType == 1 && timeStatus == 0) && executeStatus != 0 && executeStatus != 3) { + distributeTaskService.execute(distributeTaskEntity); + } + } + } + } +} diff --git a/admin/src/main/java/com/baiye/task/SyncTask.java b/admin/src/main/java/com/baiye/task/SyncTask.java deleted file mode 100644 index 81a941c..0000000 --- a/admin/src/main/java/com/baiye/task/SyncTask.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.baiye.task; - -import com.alibaba.excel.EasyExcelFactory; -import com.baiye.easyexcel.listener.ClueListener; -import com.baiye.modules.distribute.entity.ClueRecordEntity; -import com.baiye.modules.distribute.service.ClueService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.io.FileInputStream; -import java.io.FileNotFoundException; - -@Component -@Slf4j -public class SyncTask { - - @Resource - private ClueService clueService; - - /** - * 异步读取资源文件 - */ - @Async - public void clueUpload(ClueRecordEntity clueRecordEntity) { - try { - FileInputStream file = new FileInputStream(clueRecordEntity.getUrl()); - EasyExcelFactory.read(file, new ClueListener(clueService, clueRecordEntity)).build().readAll(); - } - catch (FileNotFoundException e) { - log.error("========文件读取错误: {}==========", e.getMessage()); - } - } - -} diff --git a/admin/src/main/java/com/baiye/task/SyncTaskServiceImpl.java b/admin/src/main/java/com/baiye/task/SyncTaskServiceImpl.java new file mode 100644 index 0000000..18a58c7 --- /dev/null +++ b/admin/src/main/java/com/baiye/task/SyncTaskServiceImpl.java @@ -0,0 +1,70 @@ +package com.baiye.task; + +import com.alibaba.excel.EasyExcelFactory; +import com.baiye.easyexcel.listener.ClueListener; +import com.baiye.modules.distribute.entity.ClueEntity; +import com.baiye.modules.distribute.entity.ClueRecordEntity; +import com.baiye.modules.distribute.entity.DistributeTaskEntity; +import com.baiye.modules.distribute.entity.PushLinkEntity; +import com.baiye.modules.distribute.mapper.DistributeTaskMapper; +import com.baiye.modules.distribute.service.ClueService; +import com.baiye.modules.distribute.service.DistributeTaskService; +import com.baiye.modules.distribute.service.PushLinkService; +import com.baiye.task.service.SyncTaskService; +import com.baiye.util.AESUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.ballcat.security.properties.SecurityProperties; +import org.springframework.stereotype.Component; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; + +@Component +@RequiredArgsConstructor +@Slf4j +public class SyncTaskServiceImpl implements SyncTaskService { + + private final PushLinkService pushLinkService; + + private final SecurityProperties securityProperties; + + private final ClueService clueService; + + private final DistributeTaskMapper distributeTaskMapper; + + private final DistributeTaskService distributeTaskService; + + @Override + public void pushClueExecuteTask(String appKey, String mobile) { + // 查询appKey映射的记录 + PushLinkEntity linkEntity = pushLinkService.getByAppKey(appKey); + if (linkEntity != null) { + // 添加资源信息 + ClueEntity clueEntity = new ClueEntity(); + clueEntity.setNid(AESUtils.encrypt(mobile, securityProperties.getPasswordSecretKey())); + clueEntity.setClueRecordId(linkEntity.getClueRecordId()); + // clueEntity.setOtherClue(JSONUtil.toJsonStr(dbPushClueDTO)); + clueEntity.setCreateBy(linkEntity.getCreateBy()); + clueService.save(clueEntity); + // 执行任务 + DistributeTaskEntity entity = distributeTaskMapper.selectOne( + new LambdaQueryWrapper().eq(DistributeTaskEntity::getDefaultType, 0) + .eq(DistributeTaskEntity::getCreateBy, linkEntity.getCreateBy()) + .eq(DistributeTaskEntity::getFileRecordId, linkEntity.getClueRecordId())); + if (entity.getExecuteStatus() != 0 && entity.getExecuteStatus() != 3) distributeTaskService.execute(entity); + } + } + + @Override + public void clueUpload(ClueRecordEntity clueRecordEntity) { + try { + FileInputStream file = new FileInputStream(clueRecordEntity.getUrl()); + EasyExcelFactory.read(file, new ClueListener(clueService, clueRecordEntity)).build().readAll(); + } + catch (FileNotFoundException e) { + log.error("========文件读取错误: {}==========", e.getMessage()); + } + } +} diff --git a/admin/src/main/java/com/baiye/task/service/DistributeTaskSyncService.java b/admin/src/main/java/com/baiye/task/service/DistributeTaskSyncService.java new file mode 100644 index 0000000..3c5f388 --- /dev/null +++ b/admin/src/main/java/com/baiye/task/service/DistributeTaskSyncService.java @@ -0,0 +1,12 @@ +package com.baiye.task.service; + +import com.baiye.modules.distribute.service.DistributeTaskService; +import org.springframework.scheduling.annotation.Async; + +import java.util.List; + +public interface DistributeTaskSyncService { + + @Async + void executeTask(List userIdList, DistributeTaskService distributeTaskService); +} diff --git a/admin/src/main/java/com/baiye/task/service/SyncTaskService.java b/admin/src/main/java/com/baiye/task/service/SyncTaskService.java new file mode 100644 index 0000000..b72b083 --- /dev/null +++ b/admin/src/main/java/com/baiye/task/service/SyncTaskService.java @@ -0,0 +1,13 @@ +package com.baiye.task.service; + +import com.baiye.modules.distribute.entity.ClueRecordEntity; +import org.springframework.scheduling.annotation.Async; + +public interface SyncTaskService { + + @Async + void pushClueExecuteTask(String appKey, String mobile); + + @Async + void clueUpload(ClueRecordEntity clueRecordEntity); +} diff --git a/admin/src/main/resources/application-dev.yml b/admin/src/main/resources/application-dev.yml index 46b7b61..e67ab2b 100644 --- a/admin/src/main/resources/application-dev.yml +++ b/admin/src/main/resources/application-dev.yml @@ -1,6 +1,6 @@ spring: datasource: - url: jdbc:mysql://39.100.77.21:3306/ad_distribute?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai + url: jdbc:mysql://39.100.77.21:3306/ad_distribute?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root password: y7z7noq2 redis: diff --git a/admin/src/main/resources/application-prod.yml b/admin/src/main/resources/application-prod.yml index 9d23a80..4436a2a 100644 --- a/admin/src/main/resources/application-prod.yml +++ b/admin/src/main/resources/application-prod.yml @@ -1,6 +1,6 @@ spring: datasource: - url: jdbc:mysql://localhost:3306/ad_distribute?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai + url: jdbc:mysql://localhost:3306/ad_distribute?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root password: 7f2vvawx redis: diff --git a/admin/src/main/resources/application-test.yml b/admin/src/main/resources/application-test.yml index cacd694..f2e02e6 100644 --- a/admin/src/main/resources/application-test.yml +++ b/admin/src/main/resources/application-test.yml @@ -1,6 +1,6 @@ spring: datasource: - url: jdbc:mysql://39.100.77.21:3306/ad_distribute?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai + url: jdbc:mysql://39.100.77.21:3306/ad_distribute?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root password: y7z7noq2 redis: