|
@@ -0,0 +1,356 @@
|
|
|
+package com.yx.face.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
+import cn.hutool.core.lang.Validator;
|
|
|
+import cn.hutool.core.util.DesensitizedUtil;
|
|
|
+import cn.hutool.core.util.IdcardUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.yx.face.boot.restful.RestDTO;
|
|
|
+import com.yx.face.boot.restful.RestResult;
|
|
|
+import com.yx.face.boot.uitls.ClassUtil;
|
|
|
+import com.yx.face.dao.AdminDao;
|
|
|
+import com.yx.face.dao.FaceDeviceDao;
|
|
|
+import com.yx.face.dao.UserBlackListDao;
|
|
|
+import com.yx.face.dao.UserBlackTaskDao;
|
|
|
+import com.yx.face.model.black.*;
|
|
|
+import com.yx.face.model.entity.Admin;
|
|
|
+import com.yx.face.model.entity.FaceDevice;
|
|
|
+import com.yx.face.model.entity.UserBlackList;
|
|
|
+import com.yx.face.model.entity.UserBlackTask;
|
|
|
+import com.yx.face.service.AdminService;
|
|
|
+import com.yx.face.service.UserBlackTaskService;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import org.jetbrains.annotations.NotNull;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * <p>
|
|
|
+ * 黑名单任务列表 服务实现类
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * @author wxg
|
|
|
+ * @since 2024-08-31
|
|
|
+ */
|
|
|
+@Service
|
|
|
+@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
|
|
+public class UserBlackTaskServiceImpl extends ServiceImpl<UserBlackTaskDao, UserBlackTask> implements UserBlackTaskService {
|
|
|
+
|
|
|
+ private final UserBlackTaskDao userBlackTaskDao;
|
|
|
+ private final UserBlackListDao userBlackListDao;
|
|
|
+ private final AdminService adminService;
|
|
|
+ private final AdminDao adminDao;
|
|
|
+ private final FaceDeviceDao faceDeviceDao;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean insert(UserBlackTaskDto dto) {
|
|
|
+ Admin admin = adminService.get();
|
|
|
+ this.check(dto,admin);
|
|
|
+ for (Integer adminId : dto.getAdminIdList()) {
|
|
|
+ UserBlackTask userBlackTask = new UserBlackTask();
|
|
|
+ userBlackTask.setTaskName(dto.getTaskName());
|
|
|
+ userBlackTask.setPersonNum(dto.getBlackPersonDtoList().size());
|
|
|
+ userBlackTask.setAdminId(adminId);
|
|
|
+ userBlackTask.setEnterAdminId(admin.getId());
|
|
|
+ userBlackTaskDao.insert(userBlackTask);
|
|
|
+
|
|
|
+ List<UserBlackList> userBlackListList = BeanUtil.copyToList(dto.getBlackPersonDtoList(), UserBlackList.class);
|
|
|
+ for (UserBlackList userBlackList : userBlackListList) {
|
|
|
+ userBlackList.setAdminId(adminId);
|
|
|
+ userBlackList.setEnterAdminId(admin.getId());
|
|
|
+ userBlackList.setUserBlackTaskId(userBlackTask.getId());
|
|
|
+ }
|
|
|
+ userBlackListDao.insertList(userBlackListList);
|
|
|
+
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ private void check(UserBlackTaskDto dto,Admin admin) {
|
|
|
+
|
|
|
+ if(5 == admin.getType()){
|
|
|
+ dto.setAdminIdList(CollUtil.toList(admin.getId()));
|
|
|
+ }else {
|
|
|
+ ClassUtil.throwBusinessException(CollUtil.isEmpty(dto.getAdminIdList()),"请传入需要绑定的账号列表");
|
|
|
+ }
|
|
|
+
|
|
|
+ for (BlackPersonDto blackPersonDto : dto.getBlackPersonDtoList()) {
|
|
|
+ ClassUtil.throwBusinessException(!IdcardUtil.isValidCard(blackPersonDto.getIdNumber()),blackPersonDto.getIdNumber()+":请传入正确的身份证号码");
|
|
|
+ ClassUtil.throwBusinessException(!Validator.isMobile(blackPersonDto.getPhone()),blackPersonDto.getPhone()+":请传入正确的手机号");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public List<AdminLessVo> adminList() {
|
|
|
+ Admin admin = adminService.get();
|
|
|
+ return getLessVos(admin);
|
|
|
+ }
|
|
|
+
|
|
|
+ @NotNull
|
|
|
+ private List<AdminLessVo> getLessVos(Admin admin) {
|
|
|
+ LambdaQueryWrapper<Admin> wrapper = this.getAdminWrapper(admin);
|
|
|
+ List<Admin> adminList = adminDao.selectList(wrapper);
|
|
|
+ adminList.add(admin);
|
|
|
+
|
|
|
+ List<AdminLessVo> adminLessVoList = adminList.stream().map(p -> new AdminLessVo(p.getId(), p.getUsername())).sorted((p1,p2)->{
|
|
|
+ if(p1.getAdminId() < p2.getAdminId()){
|
|
|
+ return -1;
|
|
|
+ }else if(p1.getAdminId() > p2.getAdminId()){
|
|
|
+ return 1;
|
|
|
+ }else {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ return adminLessVoList;
|
|
|
+ }
|
|
|
+
|
|
|
+ private LambdaQueryWrapper<Admin> getAdminWrapper(Admin admin) {
|
|
|
+ LambdaQueryWrapper<Admin> wrapper = new LambdaQueryWrapper<>();
|
|
|
+ if(1 == admin.getType()){
|
|
|
+ wrapper.ne(Admin::getType,1);
|
|
|
+ }else if(2 == admin.getType()){
|
|
|
+ wrapper.in(Admin::getType,CollUtil.toList(3,4,5));
|
|
|
+ wrapper.eq(Admin::getProvinceId,admin.getProvinceId());
|
|
|
+ }else if(3 == admin.getType()){
|
|
|
+ wrapper.in(Admin::getType,CollUtil.toList(4,5));
|
|
|
+ wrapper.eq(Admin::getProvinceId,admin.getProvinceId());
|
|
|
+ wrapper.eq(Admin::getTagId,admin.getTagId());
|
|
|
+ }else if(4 == admin.getType()){
|
|
|
+ wrapper.in(Admin::getType,CollUtil.toList(5));
|
|
|
+ wrapper.eq(Admin::getCityId,admin.getCityId());
|
|
|
+ wrapper.eq(Admin::getTagId,admin.getTagId());
|
|
|
+ }else if(5 == admin.getType()){
|
|
|
+ wrapper.eq(Admin::getId,-1);
|
|
|
+ }
|
|
|
+ return wrapper;
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public IPage<UserBlackTaskVo> getPageList(RestDTO<UserBlackTaskSearch> dto) {
|
|
|
+ List<AdminLessVo> adminLessVoList = this.adminList();
|
|
|
+ LambdaQueryWrapper<UserBlackTask> wrapper = this.getWrapper(dto.getData(),adminLessVoList);
|
|
|
+ Page<UserBlackTask> page = new Page<>(dto.getPageNum(), dto.getPageSize());
|
|
|
+ IPage<UserBlackTask> pageList = userBlackTaskDao.selectPage(page, wrapper);
|
|
|
+ Map<Integer,String> adminMap = adminLessVoList.stream().collect(Collectors.toMap(AdminLessVo::getAdminId,AdminLessVo::getUsername));
|
|
|
+ Map<Integer,String> enterAdminMap = this.getEnterAdminMap(pageList,UserBlackTask::getEnterAdminId);
|
|
|
+ IPage<UserBlackTaskVo> convert = pageList.convert(object -> {
|
|
|
+ UserBlackTaskVo vo = BeanUtil.copyProperties(object, UserBlackTaskVo.class);
|
|
|
+ vo.setUserBlackTaskId(object.getId());
|
|
|
+ vo.setUsername(adminMap.get(object.getAdminId()));
|
|
|
+ vo.setEnterUsername(enterAdminMap.get(object.getEnterAdminId()));
|
|
|
+ vo.setCanDelete(adminMap.containsKey(object.getEnterAdminId()));
|
|
|
+ return vo;
|
|
|
+ });
|
|
|
+ return convert;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private <T> Map<Integer, String> getEnterAdminMap(IPage<T> pageList,Function<T, Integer> function) {
|
|
|
+ List<T> records = pageList.getRecords();
|
|
|
+ if(CollUtil.isEmpty(records)){
|
|
|
+ return new HashMap<>();
|
|
|
+ }
|
|
|
+ List<Integer> enterAdminIdList = records.stream().map(function).collect(Collectors.toList());
|
|
|
+ if(CollUtil.isEmpty(enterAdminIdList)){
|
|
|
+ return new HashMap<>();
|
|
|
+ }
|
|
|
+ List<Admin> adminList = adminDao.selectBatchIds(enterAdminIdList);
|
|
|
+ return adminList.stream().collect(Collectors.toMap(Admin::getId, Admin::getUsername));
|
|
|
+ }
|
|
|
+
|
|
|
+ private LambdaQueryWrapper<UserBlackTask> getWrapper(UserBlackTaskSearch data,List<AdminLessVo> adminLessVoList) {
|
|
|
+ LambdaQueryWrapper<UserBlackTask> wrapper = new LambdaQueryWrapper<>();
|
|
|
+ wrapper.in(UserBlackTask::getAdminId,adminLessVoList.stream().map(AdminLessVo::getAdminId).collect(Collectors.toList()));
|
|
|
+ wrapper.like(StrUtil.isNotBlank(data.getTaskName()),UserBlackTask::getTaskName,data.getTaskName());
|
|
|
+ wrapper.eq(data.getAdminId() != null,UserBlackTask::getAdminId,data.getAdminId());
|
|
|
+ wrapper.eq(data.getEnterAdminId() != null,UserBlackTask::getEnterAdminId,data.getEnterAdminId());
|
|
|
+ wrapper.ge(StrUtil.isNotBlank(data.getStartTime()),UserBlackTask::getCreateTime, data.getStartTime());
|
|
|
+ wrapper.le(StrUtil.isNotBlank(data.getEndTime()),UserBlackTask::getCreateTime, data.getEndTime());
|
|
|
+ wrapper.orderByDesc(UserBlackTask::getId);
|
|
|
+ return wrapper;
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public Boolean delete(Long userBlackTaskId) {
|
|
|
+ UserBlackTask userBlackTask = userBlackTaskDao.selectById(userBlackTaskId);
|
|
|
+ ClassUtil.checkData(userBlackTask,"任务不存在");
|
|
|
+ List<AdminLessVo> adminLessVoList = this.adminList();
|
|
|
+ List<Integer> adminIdList = adminLessVoList.stream().map(AdminLessVo::getAdminId).collect(Collectors.toList());
|
|
|
+ ClassUtil.throwBusinessException(!adminIdList.contains(userBlackTask.getEnterAdminId()),"没有权限移除该任务");
|
|
|
+
|
|
|
+ userBlackTaskDao.deleteById(userBlackTaskId);
|
|
|
+
|
|
|
+
|
|
|
+ UserBlackList userBlackList = new UserBlackList();
|
|
|
+ userBlackList.setUserBlackTaskId(userBlackTaskId);
|
|
|
+ userBlackListDao.delete(userBlackList);
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<AdminLessVo> enterAdminList() {
|
|
|
+ Admin admin = adminService.get();
|
|
|
+ return getAdminLessVos(admin);
|
|
|
+ }
|
|
|
+ @NotNull
|
|
|
+ private List<AdminLessVo> getAdminLessVos(Admin admin) {
|
|
|
+ List<AdminLessVo> adminLessVoList = getLessVos(admin);
|
|
|
+ List<AdminLessVo> result = this.get(admin);
|
|
|
+ adminLessVoList.addAll(result);
|
|
|
+
|
|
|
+ return adminLessVoList.stream().sorted(Comparator.comparing(AdminLessVo::getAdminId)).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private List<AdminLessVo> get(Admin admin) {
|
|
|
+ if(1 == admin.getType()){
|
|
|
+ return new LinkedList<>();
|
|
|
+ }
|
|
|
+ LambdaQueryWrapper<Admin> wrapper = new LambdaQueryWrapper<>();
|
|
|
+ wrapper.select(Admin::getId,Admin::getUsername);
|
|
|
+ wrapper.and(wrapper1->{
|
|
|
+ if (admin.getType() >=2){
|
|
|
+ wrapper1.eq(Admin::getType,1);
|
|
|
+ }
|
|
|
+ if (admin.getType() >=3){
|
|
|
+ wrapper1.or(wrapper2->{
|
|
|
+ wrapper2.eq(Admin::getType,2);
|
|
|
+ wrapper2.eq(Admin::getProvinceId,admin.getProvinceId());
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+ if (admin.getType() >=4){
|
|
|
+ wrapper1.or(wrapper2->{
|
|
|
+ wrapper2.eq(Admin::getType,3);
|
|
|
+ wrapper2.eq(Admin::getTagId,admin.getTagId());
|
|
|
+ wrapper2.eq(Admin::getProvinceId,admin.getProvinceId());
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+ if (admin.getType() >=5){
|
|
|
+ wrapper1.or(wrapper2->{
|
|
|
+ wrapper2.eq(Admin::getType,4);
|
|
|
+ wrapper2.eq(Admin::getTagId,admin.getTagId());
|
|
|
+ wrapper2.eq(Admin::getCityId,admin.getCityId());
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ List<Admin> adminList = adminDao.selectList(wrapper);
|
|
|
+ return adminList.stream().map(p->new AdminLessVo(p.getId(),p.getUsername())).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public IPage<UserBlackVo> userGetPageList(RestDTO<UserBlackSearch> dto) {
|
|
|
+ List<AdminLessVo> adminLessVoList = this.adminList();
|
|
|
+ UserBlackSearch data = dto.getData();
|
|
|
+ List<Long> taskIds = null;
|
|
|
+ if(StrUtil.isNotBlank(data.getTaskName())){
|
|
|
+ taskIds = userBlackTaskDao.selectList(new LambdaQueryWrapper<UserBlackTask>().like(UserBlackTask::getTaskName,data.getTaskName())).stream().map(UserBlackTask::getId).collect(Collectors.toList());
|
|
|
+ if(CollectionUtil.isEmpty(taskIds)){
|
|
|
+ return new Page<>();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ LambdaQueryWrapper<UserBlackList> wrapper = this.getWrapper(data,adminLessVoList,taskIds);
|
|
|
+ Page<UserBlackList> page = new Page<>(dto.getPageNum(), dto.getPageSize());
|
|
|
+ IPage<UserBlackList> pageList = userBlackListDao.selectPage(page, wrapper);
|
|
|
+ Map<Integer,String> adminMap = adminLessVoList.stream().collect(Collectors.toMap(AdminLessVo::getAdminId,AdminLessVo::getUsername));
|
|
|
+ Map<Integer,String> enterAdminMap = this.getEnterAdminMap(pageList,UserBlackList::getEnterAdminId);
|
|
|
+ Map<Long,String> taskMap = this.getTaskMap(pageList,UserBlackList::getUserBlackTaskId);
|
|
|
+ IPage<UserBlackVo> convert = pageList.convert(object -> {
|
|
|
+ UserBlackVo vo = BeanUtil.copyProperties(object, UserBlackVo.class);
|
|
|
+ vo.setUserBlackListId(Long.valueOf(object.getId()));
|
|
|
+ vo.setUsername(adminMap.get(object.getAdminId()));
|
|
|
+ vo.setEnterUsername(enterAdminMap.get(object.getEnterAdminId()));
|
|
|
+ vo.setCanDelete(adminMap.containsKey(object.getEnterAdminId()));
|
|
|
+ vo.setTaskName(taskMap.get(object.getUserBlackTaskId()));
|
|
|
+ vo.setName(DesensitizedUtil.chineseName(vo.getName()));
|
|
|
+ vo.setPhone(DesensitizedUtil.mobilePhone(vo.getPhone()));
|
|
|
+ vo.setIdNumber(DesensitizedUtil.idCardNum(vo.getIdNumber(),4,4));
|
|
|
+ return vo;
|
|
|
+ });
|
|
|
+ return convert;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private <T> Map<Long, String> getTaskMap(IPage<T> pageList, Function<T, Long> function) {
|
|
|
+ List<T> records = pageList.getRecords();
|
|
|
+ if(CollUtil.isEmpty(records)){
|
|
|
+ return new HashMap<>();
|
|
|
+ }
|
|
|
+ List<Long> taskIdList = records.stream().map(function).collect(Collectors.toList());
|
|
|
+ if(CollUtil.isEmpty(taskIdList)){
|
|
|
+ return new HashMap<>();
|
|
|
+ }
|
|
|
+ return userBlackTaskDao.selectBatchIds(taskIdList).stream().collect(Collectors.toMap(UserBlackTask::getId,UserBlackTask::getTaskName));
|
|
|
+ }
|
|
|
+
|
|
|
+ private LambdaQueryWrapper<UserBlackList> getWrapper(UserBlackSearch data, List<AdminLessVo> adminLessVoList, List<Long> taskIds) {
|
|
|
+ LambdaQueryWrapper<UserBlackList> wrapper = new LambdaQueryWrapper<>();
|
|
|
+ wrapper.in(UserBlackList::getAdminId,adminLessVoList.stream().map(AdminLessVo::getAdminId).collect(Collectors.toList()));
|
|
|
+ wrapper.like(StrUtil.isNotBlank(data.getName()),UserBlackList::getName,data.getName());
|
|
|
+ wrapper.like(StrUtil.isNotBlank(data.getIdNumber()),UserBlackList::getIdNumber,data.getIdNumber());
|
|
|
+ wrapper.like(StrUtil.isNotBlank(data.getPhone()),UserBlackList::getPhone,data.getPhone());
|
|
|
+ wrapper.eq(data.getAdminId() != null,UserBlackList::getAdminId,data.getAdminId());
|
|
|
+ wrapper.eq(data.getEnterAdminId() != null,UserBlackList::getEnterAdminId,data.getEnterAdminId());
|
|
|
+ wrapper.eq(data.getUserBlackTaskId() != null,UserBlackList::getUserBlackTaskId,data.getUserBlackTaskId());
|
|
|
+ wrapper.in(CollUtil.isNotEmpty(taskIds),UserBlackList::getUserBlackTaskId,taskIds);
|
|
|
+ wrapper.orderByDesc(UserBlackList::getId);
|
|
|
+ return wrapper;
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public Boolean userDelete(Long userBlackListId) {
|
|
|
+ UserBlackList userBlackList = userBlackListDao.selectById(userBlackListId);
|
|
|
+ ClassUtil.checkData(userBlackList,"黑名单用户不存在");
|
|
|
+ List<AdminLessVo> adminLessVoList = this.adminList();
|
|
|
+ List<Integer> adminIdList = adminLessVoList.stream().map(AdminLessVo::getAdminId).collect(Collectors.toList());
|
|
|
+ ClassUtil.throwBusinessException(!adminIdList.contains(userBlackList.getEnterAdminId()),"没有权限移除该任务");
|
|
|
+
|
|
|
+ userBlackListDao.deleteById(userBlackListId);
|
|
|
+
|
|
|
+ if(userBlackList.getUserBlackTaskId() != null){
|
|
|
+ synchronized (this){
|
|
|
+ UserBlackTask userBlackTask = userBlackTaskDao.selectById(userBlackList.getUserBlackTaskId());
|
|
|
+ userBlackTask.setPersonNum(userBlackTask.getPersonNum() - 1);
|
|
|
+ if(userBlackTask.getPersonNum() <= 0){
|
|
|
+ userBlackTaskDao.deleteById(userBlackTask.getId());
|
|
|
+ }else {
|
|
|
+ userBlackTaskDao.updateById(userBlackTask);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public RestResult<List<DeviceBlackVo>> getBlackList(DeviceBlackDto dto) {
|
|
|
+ FaceDevice faceDevice = faceDeviceDao.selectOne(
|
|
|
+ Wrappers.<FaceDevice>lambdaQuery().eq(FaceDevice::getSn, dto.getSn()).last("limit 1")
|
|
|
+ );
|
|
|
+ ClassUtil.checkData(faceDevice, "设备不存在");
|
|
|
+ Admin admin = adminDao.selectById(faceDevice.getAdminId());
|
|
|
+ List<AdminLessVo> adminLessVos = getAdminLessVos(admin);
|
|
|
+ List<UserBlackList> userBlackListList = userBlackListDao.selectList(
|
|
|
+ Wrappers.<UserBlackList>lambdaQuery()
|
|
|
+ .in(UserBlackList::getAdminId, adminLessVos.stream().map(AdminLessVo::getAdminId).collect(Collectors.toList()))
|
|
|
+ );
|
|
|
+
|
|
|
+ List<DeviceBlackVo> blackVos = userBlackListList.stream().map(p -> new DeviceBlackVo(p.getName(), p.getPhone(), p.getIdNumber())).distinct().collect(Collectors.toList());
|
|
|
+ return RestResult.ok(blackVos);
|
|
|
+ }
|
|
|
+}
|