资料库代码提交
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
package com.njcn.supervision.service.databank;
|
||||
|
||||
import com.njcn.supervision.pojo.param.databank.LibAlgorithmParam;
|
||||
import com.njcn.supervision.pojo.po.databank.LibAlgorithm;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* Description:
|
||||
* Date: 2024/9/10 14:16【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
public interface LibAlgorithmService extends IService<LibAlgorithm>{
|
||||
|
||||
|
||||
LibAlgorithm add(LibAlgorithmParam libAlgorithmParam);
|
||||
|
||||
String updateAlgorithmLibrary(LibAlgorithmParam.LibAlgorithmParamUpdate paramUpdate);
|
||||
|
||||
List<LibAlgorithm> queryAll();
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.njcn.supervision.service.databank;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.njcn.supervision.pojo.param.databank.LibCaseParam;
|
||||
import com.njcn.supervision.pojo.po.databank.LibCase;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
/**
|
||||
*
|
||||
* Description:
|
||||
* Date: 2024/9/10 14:17【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
public interface LibCaseService extends IService<LibCase>{
|
||||
|
||||
|
||||
LibCase add(LibCaseParam libCaseParam);
|
||||
|
||||
String updateCaseLibrary(LibCaseParam.LibCaseParamUpdate paramUpdate);
|
||||
|
||||
Page<LibCase> pageQuery(LibCaseParam.LibCaseParamQuery param);
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.njcn.supervision.service.databank;
|
||||
|
||||
import com.njcn.supervision.pojo.param.databank.LibStandardParam;
|
||||
import com.njcn.supervision.pojo.po.databank.LibStandard;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* Description:
|
||||
* Date: 2024/9/10 14:17【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
public interface LibStandardService extends IService<LibStandard>{
|
||||
|
||||
|
||||
LibStandard add(LibStandardParam libStandardParam);
|
||||
|
||||
String updateStandardLibrary(LibStandardParam.LibStandardParamUpdate paramUpdate);
|
||||
|
||||
List<LibStandard> queryAll();
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.njcn.supervision.service.databank;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.njcn.supervision.pojo.param.databank.LibTemplateParam;
|
||||
import com.njcn.supervision.pojo.po.databank.LibTemplate;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
/**
|
||||
*
|
||||
* Description:
|
||||
* Date: 2024/9/10 14:17【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
public interface LibTemplateService extends IService<LibTemplate>{
|
||||
|
||||
|
||||
LibTemplate add(LibTemplateParam libTemplateParam);
|
||||
|
||||
String updateTemplate(LibTemplateParam.LibTemplateParamUpdate paramUpdate);
|
||||
|
||||
Page<LibTemplate> pageQuery(LibTemplateParam.LibTemplateParamQuery param);
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
package com.njcn.supervision.service.databank.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
||||
import com.njcn.common.pojo.exception.BusinessException;
|
||||
import com.njcn.supervision.enums.SupervisionResponseEnum;
|
||||
import com.njcn.supervision.mapper.databank.LibAlgorithmMapper;
|
||||
import com.njcn.supervision.pojo.param.databank.LibAlgorithmParam;
|
||||
import com.njcn.supervision.pojo.po.databank.LibAlgorithm;
|
||||
import com.njcn.supervision.service.databank.LibAlgorithmService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
*
|
||||
* Description:
|
||||
* Date: 2024/9/10 14:16【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class LibAlgorithmServiceImpl extends ServiceImpl<LibAlgorithmMapper, LibAlgorithm> implements LibAlgorithmService {
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public LibAlgorithm add(LibAlgorithmParam libAlgorithmParam) {
|
||||
|
||||
checkName(libAlgorithmParam,false);
|
||||
LibAlgorithm libAlgorithm = new LibAlgorithm();
|
||||
BeanUtils.copyProperties(libAlgorithmParam, libAlgorithm);
|
||||
libAlgorithm.setStatus(1);
|
||||
if(StringUtils.isEmpty(libAlgorithmParam.getPid())){
|
||||
libAlgorithm.setPid("0");
|
||||
libAlgorithm.setPids("0");
|
||||
}else {
|
||||
LibAlgorithm fatherLibAlgorithm = this.lambdaQuery().eq(LibAlgorithm::getId, libAlgorithmParam.getPid()).one();
|
||||
libAlgorithm.setPids(fatherLibAlgorithm.getPids() + "," + libAlgorithm.getPid());
|
||||
}
|
||||
|
||||
|
||||
this.save(libAlgorithm);
|
||||
return libAlgorithm;
|
||||
|
||||
}
|
||||
|
||||
private void checkName(LibAlgorithmParam libAlgorithmParam, boolean isExcludeSelf) {
|
||||
|
||||
String pid =StringUtils.isEmpty(libAlgorithmParam.getPid())?"0":libAlgorithmParam.getPid();
|
||||
|
||||
LambdaQueryWrapper<LibAlgorithm> sgUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sgUserLambdaQueryWrapper
|
||||
.eq(LibAlgorithm::getName, libAlgorithmParam.getName())
|
||||
.eq(LibAlgorithm::getPid,pid)
|
||||
.eq(LibAlgorithm::getStatus, DataStateEnum.ENABLE.getCode());
|
||||
//更新的时候,需排除当前记录
|
||||
if (isExcludeSelf) {
|
||||
if (libAlgorithmParam instanceof LibAlgorithmParam.LibAlgorithmParamUpdate) {
|
||||
sgUserLambdaQueryWrapper.ne(LibAlgorithm::getId, (( LibAlgorithmParam.LibAlgorithmParamUpdate) libAlgorithmParam).getId());
|
||||
}
|
||||
}
|
||||
int countByAccount = this.count(sgUserLambdaQueryWrapper);
|
||||
//大于等于1个则表示重复
|
||||
if (countByAccount >= 1) {
|
||||
throw new BusinessException(SupervisionResponseEnum.NAME_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String updateAlgorithmLibrary(LibAlgorithmParam.LibAlgorithmParamUpdate paramUpdate) {
|
||||
checkName(paramUpdate,true);
|
||||
LibAlgorithm libAlgorithm = new LibAlgorithm();
|
||||
BeanUtil.copyProperties(paramUpdate, libAlgorithm);
|
||||
this.updateById(libAlgorithm);
|
||||
return libAlgorithm.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<LibAlgorithm> queryAll() {
|
||||
|
||||
List<LibAlgorithm> libAlgorithmList = this.lambdaQuery().eq(LibAlgorithm::getStatus,1).list();
|
||||
List<LibAlgorithm> tree = libAlgorithmList.stream().filter(item -> item.getPid().equals("0")).peek(item -> {
|
||||
item.setChildren(getChildren(item, libAlgorithmList));
|
||||
}).collect(Collectors.toList());
|
||||
return tree;
|
||||
}
|
||||
private List<LibAlgorithm> getChildren(LibAlgorithm libAlgorithm, List<LibAlgorithm> all) {
|
||||
return all.stream().filter(item -> item.getPid().equals(libAlgorithm.getId())).peek(item -> {
|
||||
item.setChildren(getChildren(item, all));
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
package com.njcn.supervision.service.databank.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
||||
import com.njcn.common.pojo.exception.BusinessException;
|
||||
import com.njcn.supervision.enums.SupervisionResponseEnum;
|
||||
import com.njcn.supervision.mapper.databank.LibCaseMapper;
|
||||
import com.njcn.supervision.pojo.param.databank.LibCaseParam;
|
||||
import com.njcn.supervision.pojo.po.databank.LibCase;
|
||||
import com.njcn.supervision.service.databank.LibCaseService;
|
||||
import com.njcn.web.factory.PageFactory;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
*
|
||||
* Description:
|
||||
* Date: 2024/9/10 14:17【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
@Service
|
||||
public class LibCaseServiceImpl extends ServiceImpl<LibCaseMapper, LibCase> implements LibCaseService {
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public LibCase add(LibCaseParam libCaseParam) {
|
||||
checkName(libCaseParam,false);
|
||||
LibCase libCase = new LibCase();
|
||||
BeanUtils.copyProperties(libCaseParam, libCase);
|
||||
libCase.setStatus(1);
|
||||
this.save(libCase);
|
||||
return libCase;
|
||||
|
||||
}
|
||||
|
||||
private void checkName(LibCaseParam libCaseParam, boolean isExcludeSelf) {
|
||||
|
||||
|
||||
LambdaQueryWrapper<LibCase> sgUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sgUserLambdaQueryWrapper
|
||||
.eq(LibCase::getName, libCaseParam.getName())
|
||||
.eq(LibCase::getStatus, DataStateEnum.ENABLE.getCode());
|
||||
//更新的时候,需排除当前记录
|
||||
if (isExcludeSelf) {
|
||||
if (libCaseParam instanceof LibCaseParam.LibCaseParamUpdate) {
|
||||
sgUserLambdaQueryWrapper.ne(LibCase::getId, (( LibCaseParam.LibCaseParamUpdate) libCaseParam).getId());
|
||||
}
|
||||
}
|
||||
int countByAccount = this.count(sgUserLambdaQueryWrapper);
|
||||
//大于等于1个则表示重复
|
||||
if (countByAccount >= 1) {
|
||||
throw new BusinessException(SupervisionResponseEnum.NAME_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String updateCaseLibrary(LibCaseParam.LibCaseParamUpdate paramUpdate) {
|
||||
|
||||
checkName(paramUpdate,true);
|
||||
|
||||
LibCase libCase = new LibCase();
|
||||
BeanUtil.copyProperties(paramUpdate, libCase);
|
||||
this.updateById(libCase);
|
||||
return libCase.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<LibCase> pageQuery(LibCaseParam.LibCaseParamQuery param) {
|
||||
QueryWrapper<LibCase> queryWrapper = new QueryWrapper<>();
|
||||
|
||||
queryWrapper.eq("lib_case.status",1);
|
||||
//添加上时间范围
|
||||
queryWrapper.between("lib_case.Create_Time",
|
||||
DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime())),
|
||||
DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime())));
|
||||
queryWrapper.orderByDesc("lib_case.Update_Time");
|
||||
Page<LibCase> page = this.baseMapper.page(new Page<>(PageFactory.getPageNum(param), PageFactory.getPageSize(param)), queryWrapper);
|
||||
return page;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
package com.njcn.supervision.service.databank.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
||||
import com.njcn.common.pojo.exception.BusinessException;
|
||||
import com.njcn.supervision.enums.SupervisionResponseEnum;
|
||||
import com.njcn.supervision.mapper.databank.LibStandardMapper;
|
||||
import com.njcn.supervision.pojo.param.databank.LibStandardParam;
|
||||
import com.njcn.supervision.pojo.po.databank.LibStandard;
|
||||
import com.njcn.supervision.service.databank.LibStandardService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
*
|
||||
* Description:
|
||||
* Date: 2024/9/10 14:17【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
@Service
|
||||
public class LibStandardServiceImpl extends ServiceImpl<LibStandardMapper, LibStandard> implements LibStandardService {
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public LibStandard add(LibStandardParam libStandardParam) {
|
||||
|
||||
checkName(libStandardParam,false);
|
||||
LibStandard libStandard = new LibStandard();
|
||||
BeanUtils.copyProperties(libStandardParam, libStandard);
|
||||
libStandard.setStatus(1);
|
||||
if(StringUtils.isEmpty(libStandardParam.getPid())){
|
||||
libStandard.setPid("0");
|
||||
libStandard.setPids("0");
|
||||
}else {
|
||||
LibStandard fatherLibStandard = this.lambdaQuery().eq(LibStandard::getId, libStandardParam.getPid()).one();
|
||||
libStandard.setPids(fatherLibStandard.getPids() + "," + libStandardParam.getPid());
|
||||
}
|
||||
|
||||
|
||||
this.save(libStandard);
|
||||
return libStandard;
|
||||
|
||||
}
|
||||
|
||||
private void checkName(LibStandardParam libStandardParam, boolean isExcludeSelf) {
|
||||
|
||||
String pid =StringUtils.isEmpty(libStandardParam.getPid())?"0":libStandardParam.getPid();
|
||||
|
||||
LambdaQueryWrapper<LibStandard> sgUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sgUserLambdaQueryWrapper
|
||||
.eq(LibStandard::getName, libStandardParam.getName())
|
||||
.eq(LibStandard::getPid,pid)
|
||||
.eq(LibStandard::getStatus, DataStateEnum.ENABLE.getCode());
|
||||
//更新的时候,需排除当前记录
|
||||
if (isExcludeSelf) {
|
||||
if (libStandardParam instanceof LibStandardParam.LibStandardParamUpdate) {
|
||||
sgUserLambdaQueryWrapper.ne(LibStandard::getId, (( LibStandardParam.LibStandardParamUpdate) libStandardParam).getId());
|
||||
}
|
||||
}
|
||||
int countByAccount = this.count(sgUserLambdaQueryWrapper);
|
||||
//大于等于1个则表示重复
|
||||
if (countByAccount >= 1) {
|
||||
throw new BusinessException(SupervisionResponseEnum.NAME_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String updateStandardLibrary(LibStandardParam.LibStandardParamUpdate paramUpdate) {
|
||||
checkName(paramUpdate,true);
|
||||
|
||||
LibStandard libStandard = new LibStandard();
|
||||
BeanUtil.copyProperties(paramUpdate, libStandard);
|
||||
this.updateById(libStandard);
|
||||
return libStandard.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<LibStandard> queryAll() {
|
||||
List<LibStandard> libStandardList = this.lambdaQuery().eq(LibStandard::getStatus,1).list();
|
||||
List<LibStandard> tree = libStandardList.stream().filter(item -> item.getPid().equals("0")).peek(item -> {
|
||||
item.setChildren(getChildren(item, libStandardList));
|
||||
}).collect(Collectors.toList());
|
||||
return tree;
|
||||
}
|
||||
|
||||
private List<LibStandard> getChildren(LibStandard libStandard, List<LibStandard> all) {
|
||||
return all.stream().filter(item -> item.getPid().equals(libStandard.getId())).peek(item -> {
|
||||
item.setChildren(getChildren(item, all));
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package com.njcn.supervision.service.databank.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
||||
import com.njcn.common.pojo.exception.BusinessException;
|
||||
import com.njcn.supervision.enums.SupervisionResponseEnum;
|
||||
import com.njcn.supervision.mapper.databank.LibTemplateMapper;
|
||||
import com.njcn.supervision.pojo.param.databank.LibTemplateParam;
|
||||
import com.njcn.supervision.pojo.po.databank.LibTemplate;
|
||||
import com.njcn.supervision.service.databank.LibTemplateService;
|
||||
import com.njcn.web.factory.PageFactory;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
*
|
||||
* Description:
|
||||
* Date: 2024/9/10 14:17【需求编号】
|
||||
*
|
||||
* @author clam
|
||||
* @version V1.0.0
|
||||
*/
|
||||
@Service
|
||||
public class LibTemplateServiceImpl extends ServiceImpl<LibTemplateMapper, LibTemplate> implements LibTemplateService {
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public LibTemplate add(LibTemplateParam libTemplateParam) {
|
||||
checkName(libTemplateParam,false);
|
||||
LibTemplate libTemplate = new LibTemplate();
|
||||
BeanUtils.copyProperties(libTemplateParam, libTemplate);
|
||||
libTemplate.setStatus(1);
|
||||
this.save(libTemplate);
|
||||
return libTemplate;
|
||||
}
|
||||
|
||||
private void checkName(LibTemplateParam libTemplateParam, boolean isExcludeSelf) {
|
||||
|
||||
|
||||
LambdaQueryWrapper<LibTemplate> sgUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sgUserLambdaQueryWrapper
|
||||
.eq(LibTemplate::getName, libTemplateParam.getName())
|
||||
.eq(LibTemplate::getStatus, DataStateEnum.ENABLE.getCode());
|
||||
//更新的时候,需排除当前记录
|
||||
if (isExcludeSelf) {
|
||||
if (libTemplateParam instanceof LibTemplateParam.LibTemplateParamUpdate) {
|
||||
sgUserLambdaQueryWrapper.ne(LibTemplate::getId, (( LibTemplateParam.LibTemplateParamUpdate) libTemplateParam).getId());
|
||||
}
|
||||
}
|
||||
int countByAccount = this.count(sgUserLambdaQueryWrapper);
|
||||
//大于等于1个则表示重复
|
||||
if (countByAccount >= 1) {
|
||||
throw new BusinessException(SupervisionResponseEnum.NAME_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String updateTemplate(LibTemplateParam.LibTemplateParamUpdate paramUpdate) {
|
||||
checkName(paramUpdate,true);
|
||||
|
||||
LibTemplate libTemplate = new LibTemplate();
|
||||
BeanUtil.copyProperties(paramUpdate, libTemplate);
|
||||
this.updateById(libTemplate);
|
||||
return libTemplate.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<LibTemplate> pageQuery(LibTemplateParam.LibTemplateParamQuery param) {
|
||||
QueryWrapper<LibTemplate> queryWrapper = new QueryWrapper<>();
|
||||
|
||||
queryWrapper.eq("lib_template.status",1);
|
||||
//添加上时间范围
|
||||
queryWrapper.between("lib_template.Create_Time",
|
||||
DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime())),
|
||||
DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime())));
|
||||
queryWrapper.orderByDesc("lib_template.Update_Time");
|
||||
Page<LibTemplate> page = this.baseMapper.page(new Page<>(PageFactory.getPageNum(param), PageFactory.getPageSize(param)), queryWrapper);
|
||||
return page;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user