优化订单查询
This commit is contained in:
@@ -90,6 +90,8 @@ public class Equipment implements Serializable {
|
||||
|
||||
@ApiModelProperty(value = "用户ID")
|
||||
private Integer userId;
|
||||
@ApiModelProperty(value = "投资人ID")
|
||||
private Integer touziUserId;
|
||||
|
||||
@ApiModelProperty(value = "排序(数字越小越靠前)")
|
||||
private Integer sortNumber;
|
||||
@@ -145,4 +147,8 @@ public class Equipment implements Serializable {
|
||||
@ApiModelProperty(value = "绑定的用户")
|
||||
@TableField(exist = false)
|
||||
private User user;
|
||||
|
||||
@ApiModelProperty(value = "绑定的用户")
|
||||
@TableField(exist = false)
|
||||
private User touziUser;
|
||||
}
|
||||
|
||||
141
src/main/java/com/gxwebsoft/apps/task/OrderTask.java
Normal file
141
src/main/java/com/gxwebsoft/apps/task/OrderTask.java
Normal file
@@ -0,0 +1,141 @@
|
||||
package com.gxwebsoft.apps.task;
|
||||
|
||||
import cn.hutool.core.date.DateField;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
|
||||
import com.baomidou.mybatisplus.annotation.SqlParser;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.gxwebsoft.apps.entity.Equipment;
|
||||
import com.gxwebsoft.apps.service.EquipmentGoodsService;
|
||||
import com.gxwebsoft.apps.service.EquipmentService;
|
||||
import com.gxwebsoft.common.core.config.MybatisPlusConfig;
|
||||
import com.gxwebsoft.common.system.entity.User;
|
||||
import com.gxwebsoft.common.system.service.UserService;
|
||||
import com.gxwebsoft.love.entity.UserPlanLog;
|
||||
import com.gxwebsoft.love.param.UserPlanLogParam;
|
||||
import com.gxwebsoft.shop.entity.Order;
|
||||
import com.gxwebsoft.shop.param.OrderParam;
|
||||
import com.gxwebsoft.shop.service.OrderService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.gxwebsoft.common.core.constants.OrderConstants.*;
|
||||
|
||||
/**
|
||||
* 定时任务:订单处理
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class OrderTask {
|
||||
|
||||
@Resource
|
||||
private OrderService orderService;
|
||||
|
||||
@Resource
|
||||
private EquipmentService equipmentService;
|
||||
|
||||
@Resource
|
||||
private EquipmentGoodsService goodsService;
|
||||
|
||||
@Resource
|
||||
private UserService userService;
|
||||
|
||||
/**
|
||||
* 删除30分钟未下单的订单
|
||||
*/
|
||||
@Scheduled(cron="0 0/30 * * * ? ")
|
||||
public void removeTimeoutOrder() {
|
||||
Date newDate = DateUtil.offset(DateUtil.date(), DateField.MINUTE, -30);
|
||||
LambdaQueryWrapper<Order> wrapper = Wrappers.lambdaQuery(Order.class)
|
||||
.eq(Order::getPayStatus, PAY_STATUS_NO_PAY)
|
||||
.lt(Order::getCreateTime, newDate);
|
||||
|
||||
boolean remove = orderService.remove(wrapper);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算分润
|
||||
*/
|
||||
@Scheduled(cron="0 0/30 * * * ? ")
|
||||
@Transactional
|
||||
public void CalcProfit() {
|
||||
log.info("开始计算分润");
|
||||
// 查询所有未结算订单
|
||||
LambdaQueryWrapper<Order> wrapper = Wrappers.lambdaQuery(Order.class)
|
||||
.eq(Order::getIsSettled, ORDER_SETTLED_NO)
|
||||
.eq(Order::getPayStatus, PAY_STATUS_SUCCESS)
|
||||
.eq(Order::getOrderStatus, ORDER_STATUS_COMPLETED);
|
||||
|
||||
List<Order> orderList = orderService.list(wrapper);
|
||||
|
||||
// 查询所有关联的设备
|
||||
Set<Integer> equipmentIds = new HashSet<>();
|
||||
Set<String> tuijianUserPhones = new HashSet<>();
|
||||
|
||||
for (Order order : orderList) {
|
||||
equipmentIds.add(order.getEquipmentId());
|
||||
if(order.getDealerPhone() != null){
|
||||
tuijianUserPhones.add(order.getDealerPhone());
|
||||
}
|
||||
}
|
||||
List<Equipment> equipmentList = equipmentService.list(Wrappers.lambdaQuery(Equipment.class).in(Equipment::getEquipmentId, equipmentIds));
|
||||
Map<Integer, Equipment> equipmentMap = new HashMap<>();
|
||||
Set<Integer> touziUserIds = new HashSet<>();
|
||||
for (Equipment equipment : equipmentList) {
|
||||
equipmentMap.put(equipment.getEquipmentId(),equipment);
|
||||
if(equipment.getTouziUserId() != null) {
|
||||
touziUserIds.add(equipment.getTouziUserId());
|
||||
}
|
||||
}
|
||||
|
||||
// 查询所有投资人
|
||||
Map<Integer, User> touziUserMap = new HashMap<>();
|
||||
if(CollectionUtils.isNotEmpty(touziUserIds)){
|
||||
List<User> list = userService.list(Wrappers.lambdaQuery(User.class).in(User::getUserId, touziUserIds));
|
||||
for (User user : list) {
|
||||
touziUserMap.put(user.getUserId(), user);
|
||||
}
|
||||
}
|
||||
|
||||
// 查询所有推荐人
|
||||
Map<String, User> tuijianUserMap = new HashMap<>();
|
||||
if(CollectionUtils.isNotEmpty(tuijianUserPhones)){
|
||||
List<User> tuijianUserList = userService.list(Wrappers.lambdaQuery(User.class).in(User::getPhone, tuijianUserPhones));
|
||||
for (User user : tuijianUserList) {
|
||||
tuijianUserMap.put(user.getPhone(), user);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 开始结算
|
||||
for (Order order : orderList) {
|
||||
// 计算投资人收益
|
||||
Equipment equipment = equipmentMap.get(order.getEquipment());
|
||||
User touziUser = touziUserMap.get(equipment.getTouziUserId());
|
||||
if(touziUser != null){
|
||||
|
||||
}
|
||||
//获取推荐人身份、 计算推荐人收益
|
||||
User tuijianUser = tuijianUserMap.get(order.getDealerPhone());
|
||||
if(tuijianUser != null){
|
||||
|
||||
}
|
||||
// 计算门店收益
|
||||
|
||||
// 计算区域经理收益
|
||||
System.out.println(equipment);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -38,9 +38,10 @@ public class MybatisPlusConfig {
|
||||
// String device_id = request.getHeader("device-id");
|
||||
// System.out.println("device_id = " + device_id);
|
||||
// 从设备请求头拿ID
|
||||
try {
|
||||
String DeviceID = request.getHeader("Device-ID");
|
||||
if (StrUtil.isNotBlank(DeviceID)) {
|
||||
return new LongValue(10048);
|
||||
return new LongValue(6);
|
||||
}
|
||||
// 从请求头拿ID
|
||||
final String tenantId = request.getHeader("tenantId");
|
||||
@@ -48,6 +49,11 @@ public class MybatisPlusConfig {
|
||||
return new LongValue(tenantId);
|
||||
}
|
||||
return getLoginUserTenantId();
|
||||
|
||||
}catch (Exception e){
|
||||
return new LongValue(6);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -19,6 +19,8 @@ public class OrderConstants {
|
||||
// 收货状态
|
||||
public static final Integer RECEIPT_STATUS_NO = 10; // 未收货
|
||||
public static final Integer RECEIPT_STATUS_YES = 20; // 已收货
|
||||
public static final Integer RECEIPT_STATUS_APPLY = 21; // 申请
|
||||
public static final Integer RECEIPT_STATUS_reject = 22; // 已驳回退租
|
||||
public static final Integer RECEIPT_STATUS_RETURN = 30; // 已退货
|
||||
|
||||
// 订单状态
|
||||
@@ -33,5 +35,4 @@ public class OrderConstants {
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ public class AlipayConfigUtil {
|
||||
*/
|
||||
public JSONObject payment(Integer tenantId) {
|
||||
System.out.println("tenantId = " + tenantId);
|
||||
String key = "cache".concat(tenantId.toString()).concat(":setting:payment");
|
||||
String key = "setting:payment:" + tenantId;
|
||||
System.out.println("key = " + key);
|
||||
String cache = stringRedisTemplate.opsForValue().get(key);
|
||||
if (cache == null) {
|
||||
|
||||
@@ -177,7 +177,7 @@ public class OpenEquipmentController extends BaseController {
|
||||
}
|
||||
|
||||
// 生成支付宝小程序码
|
||||
private String createQrcode(Equipment equipment) throws AlipayApiException{
|
||||
private String createQrcode(Equipment equipment) throws AlipayApiException {
|
||||
// 实例化客户端
|
||||
DefaultAlipayClient alipayClient = alipayConfig.alipayClient(getTenantId());
|
||||
|
||||
@@ -211,10 +211,10 @@ public class OpenEquipmentController extends BaseController {
|
||||
final String equipmentCode = equipment.getEquipmentCode();
|
||||
final Order order = orderService.getById(orderId);
|
||||
Equipment one = equipmentService.getByEquipmentCode(equipmentCode);
|
||||
if(one == null){
|
||||
if (one == null) {
|
||||
return fail("设备不存在");
|
||||
}
|
||||
if(!one.getUserId().equals(0)){
|
||||
if (!one.getUserId().equals(0)) {
|
||||
return fail("该设备已被绑定");
|
||||
}
|
||||
// 绑定设备
|
||||
@@ -261,10 +261,10 @@ public class OpenEquipmentController extends BaseController {
|
||||
Equipment old = equipmentService.getById(oid);
|
||||
// 订单信息
|
||||
Order order = orderService.getById(orderId);
|
||||
if(one == null){
|
||||
if (one == null) {
|
||||
return fail("设备不存在");
|
||||
}
|
||||
if(!one.getUserId().equals(0)){
|
||||
if (!one.getUserId().equals(0)) {
|
||||
return fail("该设备已被绑定");
|
||||
}
|
||||
|
||||
@@ -306,7 +306,7 @@ public class OpenEquipmentController extends BaseController {
|
||||
|
||||
@ApiOperation("重置")
|
||||
@PostMapping("/receipt")
|
||||
public ApiResult<?> receipt(@RequestBody Order order){
|
||||
public ApiResult<?> receipt(@RequestBody Order order) {
|
||||
// 验证签名
|
||||
isCheckSign();
|
||||
orderService.updateById(order);
|
||||
@@ -315,14 +315,19 @@ public class OpenEquipmentController extends BaseController {
|
||||
|
||||
@ApiModelProperty("退租")
|
||||
@PostMapping("/rentingOut")
|
||||
public ApiResult<?> rentingOut(@RequestBody Order order){
|
||||
public ApiResult<?> rentingOut(@RequestBody Order order) {
|
||||
|
||||
// 验证签名
|
||||
isCheckSign();
|
||||
final int count = orderRefundService.count(new LambdaQueryWrapper<OrderRefund>().eq(OrderRefund::getOrderId, order.getOrderId()));
|
||||
if(count > 0){
|
||||
OrderRefund refund = orderRefundService.getOne(new LambdaQueryWrapper<OrderRefund>()
|
||||
.eq(OrderRefund::getOrderId, order.getOrderId()));
|
||||
|
||||
if (refund != null) {
|
||||
if (refund.getAuditStatus() != 30) {
|
||||
return fail("申请成功,请等待客服人员审核");
|
||||
}
|
||||
final OrderRefund refund = new OrderRefund();
|
||||
}else {
|
||||
refund = new OrderRefund();
|
||||
refund.setOrderId(order.getOrderId());
|
||||
refund.setOrderGoodsId(order.getGoodsId());
|
||||
refund.setUserId(getLoginUserId());
|
||||
@@ -330,10 +335,15 @@ public class OpenEquipmentController extends BaseController {
|
||||
refund.setApplyDesc("申请退租");
|
||||
refund.setRefundMoney(new BigDecimal(0));
|
||||
refund.setMerchantCode(order.getMerchantCode());
|
||||
if (orderRefundService.save(refund)) {
|
||||
return success("申请成功,请等待客服人员审核");
|
||||
}
|
||||
return fail("退租失败");
|
||||
refund.setAuditStatus(10);
|
||||
orderRefundService.saveOrUpdate(refund);
|
||||
// 更新订单状态
|
||||
Order updateOrder = new Order();
|
||||
updateOrder.setReceiptStatus(RECEIPT_STATUS_APPLY);
|
||||
updateOrder.setOrderId(order.getOrderId());
|
||||
orderService.updateById(updateOrder);
|
||||
return success("申请成功,请等待客服人员审核");
|
||||
}
|
||||
|
||||
// @ApiModelProperty("退租")
|
||||
|
||||
@@ -5,7 +5,10 @@ import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.extra.qrcode.QrCodeUtil;
|
||||
import cn.hutool.extra.qrcode.QrConfig;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.gxwebsoft.apps.entity.BcAgent;
|
||||
import com.gxwebsoft.apps.entity.Equipment;
|
||||
import com.gxwebsoft.apps.entity.EquipmentGoods;
|
||||
import com.gxwebsoft.apps.entity.EquipmentOrderGoods;
|
||||
import com.gxwebsoft.apps.param.BcAgentParam;
|
||||
@@ -18,6 +21,7 @@ import com.gxwebsoft.common.core.web.*;
|
||||
import com.gxwebsoft.common.system.entity.User;
|
||||
import com.gxwebsoft.common.system.service.UserService;
|
||||
import com.gxwebsoft.shop.entity.Order;
|
||||
import com.gxwebsoft.shop.entity.OrderGoods;
|
||||
import com.gxwebsoft.shop.entity.UserReferee;
|
||||
import com.gxwebsoft.shop.param.OrderGoodsParam;
|
||||
import com.gxwebsoft.shop.param.OrderParam;
|
||||
@@ -34,7 +38,9 @@ import javax.imageio.ImageIO;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -78,22 +84,38 @@ public class OrderController extends BaseController {
|
||||
param.setMerchantCode(getMerchantCode());
|
||||
}
|
||||
// 云芯威项目查询关联设备
|
||||
if(getTenantId().equals(6)){
|
||||
if (getTenantId().equals(6)) {
|
||||
// 查询订单的关联商品
|
||||
List<Order> list = orderService.listRel(param);
|
||||
Set<Integer> equipmentIds = new HashSet<>();
|
||||
Set<Integer> orderIds = new HashSet<>();
|
||||
for (Order order : list) {
|
||||
equipmentIds.add(order.getEquipmentId());
|
||||
orderIds.add(order.getOrderId());
|
||||
}
|
||||
List<Equipment> equipmentList = equipmentService.list(Wrappers.lambdaQuery(Equipment.class).in(Equipment::getEquipmentId, equipmentIds));
|
||||
List<EquipmentOrderGoods> equipmentOrderGoodsList = equipmentOrderGoodsService.list(Wrappers.lambdaQuery(EquipmentOrderGoods.class).in(EquipmentOrderGoods::getOrderId, orderIds));
|
||||
Map<Integer, List<Equipment>> equipmentCollect = equipmentList.stream().collect(Collectors.groupingBy(Equipment::getEquipmentId));
|
||||
Map<Integer, List<EquipmentOrderGoods>> equipmentOrderGoodsCollect = equipmentOrderGoodsList.stream().collect(Collectors.groupingBy(EquipmentOrderGoods::getOrderId));
|
||||
|
||||
// 查询订单的设备
|
||||
for (Order order : list) {
|
||||
final OrderGoodsParam orderGoodsParam = new OrderGoodsParam();
|
||||
orderGoodsParam.setOrderId(order.getOrderId());
|
||||
order.setGoodsList(orderGoodsService.listRel(orderGoodsParam));
|
||||
order.setEquipmentGoods(equipmentOrderGoodsService.getOne(new LambdaQueryWrapper<EquipmentOrderGoods>().eq(EquipmentOrderGoods::getOrderId,order.getOrderId())));
|
||||
order.setEquipment(equipmentService.getById(order.getEquipmentId()));
|
||||
List<EquipmentOrderGoods> equipmentOrderGoods = equipmentOrderGoodsCollect.get(order.getOrderId());
|
||||
if(CollectionUtils.isNotEmpty(equipmentOrderGoods)){
|
||||
order.setEquipmentGoods(equipmentOrderGoods.get(0));
|
||||
}
|
||||
List<Equipment> equipment = equipmentCollect.get(order.getEquipmentId());
|
||||
if(CollectionUtils.isNotEmpty(equipment)){
|
||||
order.setEquipment(equipment.get(0));
|
||||
}
|
||||
}
|
||||
PageParam<Order, OrderParam> page = new PageParam<>(param);
|
||||
return success(new PageResult<>(list, page.getTotal()));
|
||||
}
|
||||
// 贵港自然资源报餐
|
||||
if(getTenantId().equals(10048) && getAppId() != null){
|
||||
if (getTenantId().equals(10048) && getAppId() != null) {
|
||||
param.setUserId(getLoginUserId());
|
||||
final Boolean agent = param.getAgent();
|
||||
if (agent != null) {
|
||||
@@ -127,10 +149,10 @@ public class OrderController extends BaseController {
|
||||
@PostMapping("/listByIds")
|
||||
public ApiResult<List<Order>> listByIds(@RequestBody List<Integer> orderIds) {
|
||||
System.out.println("按订单集查询 = " + orderIds);
|
||||
if(orderIds.size() > 0){
|
||||
if (orderIds.size() > 0) {
|
||||
return success(orderService.listByIds(orderIds));
|
||||
}
|
||||
return fail("订单不存在",null);
|
||||
return fail("订单不存在", null);
|
||||
|
||||
|
||||
//
|
||||
@@ -167,8 +189,8 @@ public class OrderController extends BaseController {
|
||||
final List<Order> list = orderService.listRel(order);
|
||||
|
||||
// 是否查询订单商品
|
||||
if(order.getShowGoodsList()){
|
||||
list.forEach(d->{
|
||||
if (order.getShowGoodsList()) {
|
||||
list.forEach(d -> {
|
||||
final OrderGoodsParam ogp = new OrderGoodsParam();
|
||||
ogp.setOrderId(d.getOrderId());
|
||||
ogp.setTemporary(1);
|
||||
@@ -188,7 +210,7 @@ public class OrderController extends BaseController {
|
||||
Order order = orderService.getByIdRel(id);
|
||||
// 云芯威关联设备查询
|
||||
if (!order.getGoodsId().equals(0) || !order.getEquipmentId().equals(0)) {
|
||||
order.setEquipmentGoods(equipmentOrderGoodsService.getOne(new LambdaQueryWrapper<EquipmentOrderGoods>().eq(EquipmentOrderGoods::getOrderId,order.getOrderId())));
|
||||
order.setEquipmentGoods(equipmentOrderGoodsService.getOne(new LambdaQueryWrapper<EquipmentOrderGoods>().eq(EquipmentOrderGoods::getOrderId, order.getOrderId())));
|
||||
order.setEquipment(equipmentService.getById(order.getEquipmentId()));
|
||||
}
|
||||
return success(order);
|
||||
@@ -240,7 +262,7 @@ public class OrderController extends BaseController {
|
||||
// 添加推荐人关系
|
||||
if (order.getDealerId() != null) {
|
||||
final User dealer = userService.getById(order.getDealerId());
|
||||
if(dealer == null){
|
||||
if (dealer == null) {
|
||||
return fail("推荐人的用户ID不存在");
|
||||
}
|
||||
final UserReferee referee = new UserReferee();
|
||||
@@ -250,10 +272,10 @@ public class OrderController extends BaseController {
|
||||
}
|
||||
}
|
||||
// 是否存入星期值(10048)
|
||||
if(order.getDeliveryTime() != null){
|
||||
if (order.getDeliveryTime() != null) {
|
||||
order.setWeek(DateUtil.dayOfWeek(order.getDeliveryTime()) - 1);
|
||||
}
|
||||
return success("添加成功",order);
|
||||
return success("添加成功", order);
|
||||
}
|
||||
return fail("添加失败");
|
||||
}
|
||||
@@ -315,7 +337,7 @@ public class OrderController extends BaseController {
|
||||
|
||||
@ApiOperation("支付成功")
|
||||
@PostMapping("/setPayStatus")
|
||||
public ApiResult<?> setPayStatus(@RequestBody Order order){
|
||||
public ApiResult<?> setPayStatus(@RequestBody Order order) {
|
||||
if (orderService.updateById(order)) {
|
||||
return success("设置成功");
|
||||
}
|
||||
@@ -334,7 +356,7 @@ public class OrderController extends BaseController {
|
||||
param.setPayStatus(PAY_STATUS_SUCCESS);
|
||||
param.setDeleted(0);
|
||||
final List<Order> list = orderService.listRel(param);
|
||||
if(list.size() == 0){
|
||||
if (list.size() == 0) {
|
||||
return fail("今日无报餐记录");
|
||||
}
|
||||
final Order order = list.get(0);
|
||||
@@ -355,6 +377,6 @@ public class OrderController extends BaseController {
|
||||
// 附带小logo
|
||||
config.setImg(bufferedImage);
|
||||
QrCodeUtil.generate(orderNo, config, FileUtil.file(filePath));
|
||||
return success("请求成功",qrcodeUrl);
|
||||
return success("请求成功", qrcodeUrl);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -174,6 +174,9 @@ public class Order implements Serializable {
|
||||
@ApiModelProperty(value = "是否临时报餐")
|
||||
private Integer isTemporary;
|
||||
|
||||
@ApiModelProperty(value = "推荐人手机号")
|
||||
private String dealerPhone;
|
||||
|
||||
@ApiModelProperty(value = "用户ID")
|
||||
private Integer userId;
|
||||
|
||||
|
||||
@@ -5,10 +5,10 @@ spring:
|
||||
datasource:
|
||||
url: jdbc:mysql://47.119.165.234:3308/open_ws?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
|
||||
username: open_ws
|
||||
password: A6k4GHifNWWhjcde
|
||||
# password: A6k4GHifNWWhjcde
|
||||
# url: jdbc:mysql://47.119.165.234:3308/open_ws?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
|
||||
# username: open_ws
|
||||
# password: DzAmFiZfPJ6ZGApm
|
||||
password: DzAmFiZfPJ6ZGApm
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.alibaba.druid.pool.DruidDataSource
|
||||
|
||||
|
||||
Reference in New Issue
Block a user