Merge #44 into master from cc_20251208_visit
fix:我的铺位导出
* cc_20251208_visit: (39 commits squashed)
- feat:拜访记录
- fix:拜访详情接口新增字段
- fix:新增状态转义字段
- fix:惩处单查询提供惩处待处理、惩处已处理状态筛选
- fix
- fix:管理员能查看所有加盟商
- fix:去掉部分字段非空校验
- fix:空校验
- Merge branch 'master' into cc_20251208_visit
# Conflicts:
#	coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java
#	coolstore-partner-dao/src/main/java/com/cool/store/dao/store/StoreMasterSignerInfoDAO.java
#	coolstore-partner-service/src/main/java/com/cool/store/service/impl/UserAuthMappingServiceImpl.java
- fix
- fix:拜访记录失效延时消息
- fix:拜访记录统计
- fix:拜访记录统计新增筛选条件
- fix:字段转义
- feat:拜访调整
- feat:拜访调整_过滤我的
- feat:拜访调整_过滤我的
- feat:拜访字段调整
- feat:拜访字段调整
- Merge branch 'master' into cc_20251208_visit
- fix:拜访我的加盟商取消管辖权限过滤
- Merge branch 'master' into cc_20251208_visit
- fix:新增已分配招商经理的线索查询接口;拜访记录列表接口新增字段
- fix:新增字段
- fix:新老加盟商判断逻辑修复;统计接口新增筛选条件
- fix:过滤未分配招商经理的线索
- Merge branch 'master' into cc_20251208_visit
# Conflicts:
#	coolstore-partner-dao/src/main/resources/mapper/LineInfoMapper.xml
- Merge branch 'master' into cc_20251208_visit
- Merge branch 'master' into cc_20251208_visit
- fix:拜访记录导出
- fix:拜访记录导出限制
- fix:拜访记录导出限制
- fix:铺位导出
- fix:铺位及拜访记录导出加锁时机修改
- fix:铺位导出新增字段
- fix:铺位导出新增字段
- fix
- fix:我的铺位导出
- Merge branch 'master' into cc_20251208_visit
# Conflicts:
#	coolstore-partner-common/src/main/java/com/cool/store/constants/RedisConstant.java
#	coolstore-partner-common/src/main/java/com/cool/store/enums/FileTypeEnum.java
#	coolstore-partner-service/src/main/java/com/cool/store/service/ExportRealizeService.java
#	coolstore-partner-service/src/main/java/com/cool/store/service/ExportService.java
#	coolstore-partner-service/src/main/java/com/cool/store/service/impl/ExportRealizeServiceImpl.java
#	coolstore-partner-service/src/main/java/com/cool/store/service/impl/ExportServiceImpl.java
#	coolstore-partner-web/src/main/java/com/cool/store/controller/webb/ExportController.java
Signed-off-by: 王非凡 <accounts_67eba0c5fee9c49c80c8e2b4@mail.teambition.com>
Merged-by: 正新 <accounts_6964c7bcd2a2c377c5bbd01b@mail.teambition.com>
CR-link: https://codeup.aliyun.com/692ea314dec569489f6f167c/hangzhou/java/custom_zxjp/change/44
This commit is contained in:
@@ -351,4 +351,9 @@ public class RedisConstant {
|
|||||||
* 全部铺位导出锁
|
* 全部铺位导出锁
|
||||||
*/
|
*/
|
||||||
public static final String POINT_EXPORT_LOCK = "point_export_lock";
|
public static final String POINT_EXPORT_LOCK = "point_export_lock";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 我的铺位导出锁
|
||||||
|
*/
|
||||||
|
public static final String MY_POINT_EXPORT_LOCK = "my_point_export_lock";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ public enum FileTypeEnum {
|
|||||||
TP_PENALTY_ERROR_EXPORT("tpPenaltyErrorExport", "十二分惩处申请单导入错误列表"),
|
TP_PENALTY_ERROR_EXPORT("tpPenaltyErrorExport", "十二分惩处申请单导入错误列表"),
|
||||||
VISIT_RECORD_EXPORT("visitRecordExport", "拜访记录列表"),
|
VISIT_RECORD_EXPORT("visitRecordExport", "拜访记录列表"),
|
||||||
POINT_EXPORT("pointExport", "铺位管理列表"),
|
POINT_EXPORT("pointExport", "铺位管理列表"),
|
||||||
|
MY_POINT_EXPORT("myPointExport", "我的铺位管理列表"),
|
||||||
;
|
;
|
||||||
private String fileType;
|
private String fileType;
|
||||||
private String desc;
|
private String desc;
|
||||||
|
|||||||
@@ -85,6 +85,15 @@ public class PointInfoDAO {
|
|||||||
return pointInfoMapper.getMyPointPage(eid,request);
|
return pointInfoMapper.getMyPointPage(eid,request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取我的铺位数量
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Long getMyPointCount(String eid, PointPageRequest request) {
|
||||||
|
return pointInfoMapper.getMyPointCount(eid,request);
|
||||||
|
}
|
||||||
|
|
||||||
public Map<Long, Integer> getSelectedShopNumMap(List<Long> lineIds) {
|
public Map<Long, Integer> getSelectedShopNumMap(List<Long> lineIds) {
|
||||||
if(CollectionUtils.isEmpty(lineIds)){
|
if(CollectionUtils.isEmpty(lineIds)){
|
||||||
return Maps.newHashMap();
|
return Maps.newHashMap();
|
||||||
|
|||||||
@@ -34,6 +34,13 @@ public interface PointInfoMapper extends Mapper<PointInfoDO> {
|
|||||||
*/
|
*/
|
||||||
Page<PCPointListDTO> getMyPointPage(@Param("eid") String eid,@Param("request") PointPageRequest request);
|
Page<PCPointListDTO> getMyPointPage(@Param("eid") String eid,@Param("request") PointPageRequest request);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取我的铺位
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Long getMyPointCount(@Param("eid") String eid, @Param("request") PointPageRequest request);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取线索选择门店数
|
* 获取线索选择门店数
|
||||||
* @param lineIds
|
* @param lineIds
|
||||||
|
|||||||
@@ -130,6 +130,61 @@
|
|||||||
</if>
|
</if>
|
||||||
order by a.id desc
|
order by a.id desc
|
||||||
</select>
|
</select>
|
||||||
|
<select id="getMyPointCount" resultType="java.lang.Long">
|
||||||
|
select COUNT(1)
|
||||||
|
from xfsg_point_info a
|
||||||
|
left join xfsg_shop_info b on a.shop_id = b.id
|
||||||
|
left join store_${eid} c on b.shop_code = c.store_num
|
||||||
|
where a.deleted = 0
|
||||||
|
<if test="request.developmentManager!=null and request.developmentManager!=''">
|
||||||
|
and a.development_manager = #{request.developmentManager}
|
||||||
|
</if>
|
||||||
|
<if test="request.keyword != null and request.keyword != ''">
|
||||||
|
and (a.point_code like concat('%', #{request.keyword}, '%') or a.point_name like concat('%',
|
||||||
|
#{request.keyword},
|
||||||
|
'%'))
|
||||||
|
</if>
|
||||||
|
<if test="request.developmentStartTime != null and request.developmentStartTime != ''">
|
||||||
|
and a.development_time >= #{request.developmentStartTime}
|
||||||
|
</if>
|
||||||
|
<if test="request.developmentEndTime != null and request.developmentEndTime != ''">
|
||||||
|
<![CDATA[and a.development_time <= #{request.developmentEndTime}]]>
|
||||||
|
</if>
|
||||||
|
<if test="request.pointStatusList != null and request.pointStatusList.size() > 0">
|
||||||
|
and a.point_status in
|
||||||
|
<foreach collection="request.pointStatusList" item="pointStatus" open="(" close=")" separator=",">
|
||||||
|
#{pointStatus}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
<if test="request.storageStatus != null">
|
||||||
|
and a.storage_status = #{request.storageStatus}
|
||||||
|
</if>
|
||||||
|
<if test="request.operateUserId != null and request.operateUserId != ''">
|
||||||
|
and a.operate_user_id = #{request.operateUserId}
|
||||||
|
</if>
|
||||||
|
<if test="request.createStartTime != null and request.createStartTime != ''">
|
||||||
|
and a.create_time >= #{request.createStartTime}
|
||||||
|
</if>
|
||||||
|
<if test="request.createEndTime != null and request.createEndTime != ''">
|
||||||
|
<![CDATA[and a.create_time <= #{request.createEndTime}]]>
|
||||||
|
</if>
|
||||||
|
<if test="request.regionIds != null and request.regionIds.size() > 0">
|
||||||
|
and a.region_id in
|
||||||
|
<foreach collection="request.regionIds" item="regionId" index="index" open="(" separator="," close=")">
|
||||||
|
#{regionId}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
<if test="request.authRegionIds != null and request.authRegionIds.size() > 0">
|
||||||
|
and a.region_id in
|
||||||
|
<foreach collection="request.authRegionIds" item="regionId" index="index" open="(" separator="," close=")">
|
||||||
|
#{regionId}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
<if test="request.areaCode!=null and request.areaCode!=''">
|
||||||
|
and (a.province_code = #{request.areaCode} or a.city_code = #{request.areaCode} or a.district_code =
|
||||||
|
#{request.areaCode})
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
<select id="getSelectedShopNum" resultType="com.cool.store.dto.point.LineCountDTO">
|
<select id="getSelectedShopNum" resultType="com.cool.store.dto.point.LineCountDTO">
|
||||||
select
|
select
|
||||||
line_id as lineId,
|
line_id as lineId,
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.cool.store.entity.LineInfoDO;
|
|||||||
import com.cool.store.entity.PointInfoDO;
|
import com.cool.store.entity.PointInfoDO;
|
||||||
import com.cool.store.request.AllPointPageRequest;
|
import com.cool.store.request.AllPointPageRequest;
|
||||||
import com.cool.store.request.FranchiseReportRequest;
|
import com.cool.store.request.FranchiseReportRequest;
|
||||||
|
import com.cool.store.request.PointPageRequest;
|
||||||
import com.cool.store.request.visit.VisitRecordQueryRequest;
|
import com.cool.store.request.visit.VisitRecordQueryRequest;
|
||||||
import com.cool.store.response.BranchShopResponse;
|
import com.cool.store.response.BranchShopResponse;
|
||||||
import com.cool.store.response.FranchiseReportResponse;
|
import com.cool.store.response.FranchiseReportResponse;
|
||||||
@@ -42,4 +43,6 @@ public interface ExportRealizeService {
|
|||||||
void exportVisitRecord(VisitRecordQueryRequest request, ImportTaskDO importTaskDO);
|
void exportVisitRecord(VisitRecordQueryRequest request, ImportTaskDO importTaskDO);
|
||||||
|
|
||||||
void exportPoint(AllPointPageRequest request, ImportTaskDO importTaskDO);
|
void exportPoint(AllPointPageRequest request, ImportTaskDO importTaskDO);
|
||||||
|
|
||||||
|
void myExportPoint(PointPageRequest request, String userId, ImportTaskDO importTaskDO);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,4 +60,12 @@ public interface ExportService {
|
|||||||
* @return 记录总数
|
* @return 记录总数
|
||||||
*/
|
*/
|
||||||
Long pointExport(AllPointPageRequest request, LoginUserInfo user);
|
Long pointExport(AllPointPageRequest request, LoginUserInfo user);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 我的铺位导出
|
||||||
|
* @param request 查询Request
|
||||||
|
* @param user 当前用户
|
||||||
|
* @return 记录总数
|
||||||
|
*/
|
||||||
|
Long myPointExport(PointPageRequest request, LoginUserInfo user);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -162,6 +162,13 @@ public interface PointService {
|
|||||||
*/
|
*/
|
||||||
PageInfo<PointPageVO> getMyPointPage(PointPageRequest request, String userId);
|
PageInfo<PointPageVO> getMyPointPage(PointPageRequest request, String userId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取我的铺位数量
|
||||||
|
* @param request
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Long getMyPointCount(PointPageRequest request, String userId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取团队铺位
|
* 获取团队铺位
|
||||||
* @param request
|
* @param request
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import com.cool.store.exception.ServiceException;
|
|||||||
import com.cool.store.mapper.*;
|
import com.cool.store.mapper.*;
|
||||||
import com.cool.store.request.AllPointPageRequest;
|
import com.cool.store.request.AllPointPageRequest;
|
||||||
import com.cool.store.request.FranchiseReportRequest;
|
import com.cool.store.request.FranchiseReportRequest;
|
||||||
|
import com.cool.store.request.PointPageRequest;
|
||||||
import com.cool.store.request.visit.VisitRecordQueryRequest;
|
import com.cool.store.request.visit.VisitRecordQueryRequest;
|
||||||
import com.cool.store.response.BranchShopResponse;
|
import com.cool.store.response.BranchShopResponse;
|
||||||
import com.cool.store.response.FranchiseReportResponse;
|
import com.cool.store.response.FranchiseReportResponse;
|
||||||
@@ -767,11 +768,7 @@ public class ExportRealizeServiceImpl implements ExportRealizeService {
|
|||||||
request.setPageNum(pageNum);
|
request.setPageNum(pageNum);
|
||||||
request.setPageSize(pageSize);
|
request.setPageSize(pageSize);
|
||||||
List<PointPageVO> list = pointService.getTeamPointPage(request).getList();
|
List<PointPageVO> list = pointService.getTeamPointPage(request).getList();
|
||||||
List<Long> pointIds = CollStreamUtil.toList(list, PointPageVO::getPointId);
|
return convertAndFillPointExport(list);
|
||||||
Map<Long, PointFinancialDataDO> pointMap = pointFinancialDataDAO.getMapByPointIds(pointIds);
|
|
||||||
List<PointExportVO> result = BeanUtil.toList(list, PointExportVO.class);
|
|
||||||
result.forEach(v -> BeanUtil.copyPropertiesIgnoreId(pointMap.get(v.getPointId()), v));
|
|
||||||
return result;
|
|
||||||
},
|
},
|
||||||
FileTypeEnum.POINT_EXPORT.getDesc(),
|
FileTypeEnum.POINT_EXPORT.getDesc(),
|
||||||
FileTypeEnum.POINT_EXPORT.getDesc());
|
FileTypeEnum.POINT_EXPORT.getDesc());
|
||||||
@@ -786,6 +783,39 @@ public class ExportRealizeServiceImpl implements ExportRealizeService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Async("generalThreadPool")
|
||||||
|
public void myExportPoint(PointPageRequest request, String userId, ImportTaskDO importTaskDO) {
|
||||||
|
String url = "";
|
||||||
|
try {
|
||||||
|
url = easyExcelUtil.exportExcelInBatches(PointExportVO.class,
|
||||||
|
(pageNum, pageSize) -> {
|
||||||
|
request.setPageNum(pageNum);
|
||||||
|
request.setPageSize(pageSize);
|
||||||
|
List<PointPageVO> list = pointService.getMyPointPage(request, userId).getList();
|
||||||
|
return convertAndFillPointExport(list);
|
||||||
|
},
|
||||||
|
FileTypeEnum.MY_POINT_EXPORT.getDesc(),
|
||||||
|
FileTypeEnum.MY_POINT_EXPORT.getDesc());
|
||||||
|
importTaskDO.setStatus(ImportStatusEnum.success.getCode());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("拜访记录导出失败", e);
|
||||||
|
importTaskDO.setStatus(ImportStatusEnum.fail.getCode());
|
||||||
|
} finally {
|
||||||
|
importTaskDO.setFileUrl(url);
|
||||||
|
importTaskMapper.update(eid, importTaskDO);
|
||||||
|
redisUtilPool.delKey(RedisConstant.MY_POINT_EXPORT_LOCK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<PointExportVO> convertAndFillPointExport(List<PointPageVO> list) {
|
||||||
|
List<Long> pointIds = CollStreamUtil.toList(list, PointPageVO::getPointId);
|
||||||
|
Map<Long, PointFinancialDataDO> pointMap = pointFinancialDataDAO.getMapByPointIds(pointIds);
|
||||||
|
List<PointExportVO> result = BeanUtil.toList(list, PointExportVO.class);
|
||||||
|
result.forEach(v -> BeanUtil.copyPropertiesIgnoreId(pointMap.get(v.getPointId()), v));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private String toString(Object o) {
|
private String toString(Object o) {
|
||||||
if (o == null) {
|
if (o == null) {
|
||||||
return "";
|
return "";
|
||||||
|
|||||||
@@ -267,5 +267,32 @@ public class ExportServiceImpl implements ExportService {
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long myPointExport(PointPageRequest request, LoginUserInfo user) {
|
||||||
|
Long count = pointService.getMyPointCount(request, user.getUserId());
|
||||||
|
if (count.intValue() > CommonConstants.MAX_EXPORT_SIZE_PRO) {
|
||||||
|
throw new ServiceException(ErrorCodeEnum.EXPORT_LIMIT_100000);
|
||||||
|
}
|
||||||
|
if (Long.valueOf(0).equals(count)) {
|
||||||
|
log.error("导出数据为空");
|
||||||
|
return 0L;
|
||||||
|
}
|
||||||
|
boolean lock = redisUtilPool.setNxExpire(RedisConstant.MY_POINT_EXPORT_LOCK, RedisConstant.MY_POINT_EXPORT_LOCK, 30 * 60 * 1000);
|
||||||
|
if (!lock) {
|
||||||
|
throw new ServiceException(ErrorCodeEnum.EXPORT_TASK_LIMIT);
|
||||||
|
}
|
||||||
|
ImportTaskDO importTaskDO = new ImportTaskDO();
|
||||||
|
importTaskDO.setStatus(ImportStatusEnum.Ongoing.getCode());
|
||||||
|
importTaskDO.setFileName(FileTypeEnum.MY_POINT_EXPORT.getDesc() + DateUtils.parseDateToStr(DateUtils.SPECIAL_DATE_START_1, new Date()));
|
||||||
|
importTaskDO.setIsImport(Boolean.FALSE);
|
||||||
|
importTaskDO.setFileType(FileTypeEnum.MY_POINT_EXPORT.getFileType());
|
||||||
|
importTaskDO.setCreateUserId(user.getUserId());
|
||||||
|
importTaskDO.setCreateTime(new Date().getTime());
|
||||||
|
importTaskDO.setCreateName(user.getName());
|
||||||
|
importTaskMapper.insert(eid, importTaskDO);
|
||||||
|
exportRealizeService.myExportPoint(request, user.getUserId(), importTaskDO);
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -657,7 +657,7 @@ public class PointServiceImpl implements PointService {
|
|||||||
Boolean isAdmin = sysRoleService.checkIsAdmin(userId);
|
Boolean isAdmin = sysRoleService.checkIsAdmin(userId);
|
||||||
List<SysRoleDO> sysRoleDOList = sysRoleMapper.listRoleByUserId(userId);
|
List<SysRoleDO> sysRoleDOList = sysRoleMapper.listRoleByUserId(userId);
|
||||||
//如果不是管理员 招商经理 大区经理 返回空
|
//如果不是管理员 招商经理 大区经理 返回空
|
||||||
if (!isAdmin && !sysRoleDOList.stream().anyMatch(x -> x.getId().equals(UserRoleEnum.INVESTMENT_MANGER.getCode()) || x.getRoleEnum().equals(UserRoleEnum.REGION_MANAGER.getDesc()))) {
|
if (!isAdmin && !sysRoleDOList.stream().anyMatch(x -> x.getId().equals(UserRoleEnum.INVESTMENT_MANGER.getCode()) || x.getId().equals(UserRoleEnum.REGION_MANAGER.getCode()))) {
|
||||||
return new PageInfo();
|
return new PageInfo();
|
||||||
}
|
}
|
||||||
if (!isAdmin) {
|
if (!isAdmin) {
|
||||||
@@ -684,6 +684,27 @@ public class PointServiceImpl implements PointService {
|
|||||||
return resultPage;
|
return resultPage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long getMyPointCount(PointPageRequest request, String userId) {
|
||||||
|
Boolean isAdmin = sysRoleService.checkIsAdmin(userId);
|
||||||
|
List<SysRoleDO> sysRoleDOList = sysRoleMapper.listRoleByUserId(userId);
|
||||||
|
//如果不是管理员 招商经理 大区经理 返回空
|
||||||
|
if (!isAdmin && !sysRoleDOList.stream().anyMatch(x -> x.getId().equals(UserRoleEnum.INVESTMENT_MANGER.getCode()) || x.getRoleEnum().equals(UserRoleEnum.REGION_MANAGER.getDesc()))) {
|
||||||
|
return 0L;
|
||||||
|
}
|
||||||
|
if (!isAdmin) {
|
||||||
|
request.setAuthRegionIds(userAuthMappingService.getAuthRegionIdByUserId(userId,Boolean.TRUE));
|
||||||
|
}
|
||||||
|
if (CollectionUtils.isNotEmpty(request.getRegionIds())) {
|
||||||
|
if (request.getRegionIds().contains(CommonConstants.ROOT_DEPT_ID_STR)) {
|
||||||
|
request.setRegionIds(null);
|
||||||
|
} else {
|
||||||
|
request.setRegionIds(regionService.getSubRegionIdsByRegionIds(request.getRegionIds()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pointInfoDAO.getMyPointCount(enterpriseId, request);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageInfo<PointPageVO> getTeamPointPage(AllPointPageRequest request) {
|
public PageInfo<PointPageVO> getTeamPointPage(AllPointPageRequest request) {
|
||||||
if (!sysRoleService.checkIsAdmin(request.getCurUserId())) {
|
if (!sysRoleService.checkIsAdmin(request.getCurUserId())) {
|
||||||
|
|||||||
@@ -88,4 +88,10 @@ public class ExportController {
|
|||||||
public ResponseResult<Long> pointExport(@RequestBody AllPointPageRequest request) {
|
public ResponseResult<Long> pointExport(@RequestBody AllPointPageRequest request) {
|
||||||
return ResponseResult.success(exportService.pointExport(request, CurrentUserHolder.getUser()));
|
return ResponseResult.success(exportService.pointExport(request, CurrentUserHolder.getUser()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/myPointExport")
|
||||||
|
@ApiOperation("我的铺位导出")
|
||||||
|
public ResponseResult<Long> myPointExport(@RequestBody PointPageRequest request) {
|
||||||
|
return ResponseResult.success(exportService.myPointExport(request, CurrentUserHolder.getUser()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user