mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-06-12 19:29:52 +08:00
update 查询会员余额明细添加字段
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package com.jsowell.api.uniapp;
|
package com.jsowell.api.uniapp;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
@@ -18,6 +19,7 @@ import com.jsowell.pile.service.IMemberBasicInfoService;
|
|||||||
import com.jsowell.pile.service.IMemberPlateNumberRelationService;
|
import com.jsowell.pile.service.IMemberPlateNumberRelationService;
|
||||||
import com.jsowell.pile.vo.uniapp.InvoiceTitleVO;
|
import com.jsowell.pile.vo.uniapp.InvoiceTitleVO;
|
||||||
import com.jsowell.pile.vo.uniapp.MemberVO;
|
import com.jsowell.pile.vo.uniapp.MemberVO;
|
||||||
|
import com.jsowell.pile.vo.uniapp.MemberWalletInfoVO;
|
||||||
import com.jsowell.service.MemberService;
|
import com.jsowell.service.MemberService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
@@ -185,14 +187,15 @@ public class MemberController extends BaseController {
|
|||||||
*/
|
*/
|
||||||
@PostMapping("/getMemberBalanceChanges")
|
@PostMapping("/getMemberBalanceChanges")
|
||||||
public RestApiResponse<?> getMemberBalanceChanges(HttpServletRequest request, @RequestBody UniAppQueryMemberBalanceDTO dto) {
|
public RestApiResponse<?> getMemberBalanceChanges(HttpServletRequest request, @RequestBody UniAppQueryMemberBalanceDTO dto) {
|
||||||
logger.info("查询用户账户余额变动信息 params:{}", dto.toString() );
|
logger.info("查询用户账户余额变动信息 params:{}", JSON.toJSONString(dto));
|
||||||
RestApiResponse<?> response = null;
|
RestApiResponse<?> response = null;
|
||||||
try {
|
try {
|
||||||
String memberId = getMemberIdByAuthorization(request);
|
String memberId = getMemberIdByAuthorization(request);
|
||||||
dto.setMemberId(memberId);
|
dto.setMemberId(memberId);
|
||||||
PageResponse pageResponse = memberService.getMemberBalanceChanges(dto);
|
// PageResponse pageResponse = memberService.getMemberBalanceChanges(dto);
|
||||||
// PageResponse pageResponse = memberService.getMemberWalletLog(dto);
|
// PageResponse pageResponse = memberService.getMemberWalletLog(dto);
|
||||||
response = new RestApiResponse<>(pageResponse);
|
MemberWalletInfoVO memberWalletInfo = memberService.getMemberWalletInfo(dto);
|
||||||
|
response = new RestApiResponse<>(memberWalletInfo);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("查询用户账户余额变动信息 error:", e);
|
logger.error("查询用户账户余额变动信息 error:", e);
|
||||||
response = new RestApiResponse<>(ReturnCodeEnum.CODE_GET_BALANCE_CHANGES_ERROR);
|
response = new RestApiResponse<>(ReturnCodeEnum.CODE_GET_BALANCE_CHANGES_ERROR);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.jsowell.service;
|
package com.jsowell.service;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.PageUtil;
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.alibaba.fastjson2.TypeReference;
|
import com.alibaba.fastjson2.TypeReference;
|
||||||
@@ -32,10 +33,8 @@ import com.jsowell.pile.dto.*;
|
|||||||
import com.jsowell.pile.service.*;
|
import com.jsowell.pile.service.*;
|
||||||
import com.jsowell.pile.transaction.dto.MemberTransactionDTO;
|
import com.jsowell.pile.transaction.dto.MemberTransactionDTO;
|
||||||
import com.jsowell.pile.transaction.service.TransactionService;
|
import com.jsowell.pile.transaction.service.TransactionService;
|
||||||
import com.jsowell.pile.vo.uniapp.InvoiceTitleVO;
|
import com.jsowell.pile.vo.base.StationInfoVO;
|
||||||
import com.jsowell.pile.vo.uniapp.MemberVO;
|
import com.jsowell.pile.vo.uniapp.*;
|
||||||
import com.jsowell.pile.vo.uniapp.MemberWalletLogVO;
|
|
||||||
import com.jsowell.pile.vo.uniapp.OrderVO;
|
|
||||||
import com.jsowell.wxpay.service.WxAppletRemoteService;
|
import com.jsowell.wxpay.service.WxAppletRemoteService;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.compress.utils.Lists;
|
import org.apache.commons.compress.utils.Lists;
|
||||||
@@ -80,6 +79,9 @@ public class MemberService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IMemberInvoiceTitleService memberInvoiceTitleService;
|
private IMemberInvoiceTitleService memberInvoiceTitleService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMemberWalletInfoService memberWalletInfoService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private PileRemoteService pileRemoteService;
|
private PileRemoteService pileRemoteService;
|
||||||
|
|
||||||
@@ -290,14 +292,12 @@ public class MemberService {
|
|||||||
return pageResponse;
|
return pageResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public MemberWalletInfoVO getMemberWalletInfo(UniAppQueryMemberBalanceDTO dto) throws ParseException {
|
||||||
* 获取会员钱包明细
|
MemberWalletInfoVO vo = new MemberWalletInfoVO();
|
||||||
* @return
|
vo.setMemberId(dto.getMemberId());
|
||||||
*/
|
// 获取分页信息
|
||||||
public PageResponse getMemberWalletLog (UniAppQueryMemberBalanceDTO dto) throws ParseException {
|
long pageNum = dto.getPageNum() == 0 ? 1L : dto.getPageNum();
|
||||||
// 获取分页信息以及memberId
|
long pageSize = dto.getPageSize() == 0 ? 10L : dto.getPageSize();
|
||||||
int pageNum = dto.getPageNum() == 0 ? 1 : dto.getPageNum();
|
|
||||||
int pageSize = dto.getPageSize() == 0 ? 10 : dto.getPageSize();
|
|
||||||
String tradeDate = dto.getTradeDate();
|
String tradeDate = dto.getTradeDate();
|
||||||
// 获取年、月
|
// 获取年、月
|
||||||
String[] split = StringUtils.split(tradeDate, "-");
|
String[] split = StringUtils.split(tradeDate, "-");
|
||||||
@@ -311,13 +311,27 @@ public class MemberService {
|
|||||||
lastDay = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, date);
|
lastDay = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, date);
|
||||||
dto.setTradeDate(tradeDate);
|
dto.setTradeDate(tradeDate);
|
||||||
dto.setEndDate(lastDay);
|
dto.setEndDate(lastDay);
|
||||||
|
|
||||||
|
// 查询会员钱包信息表,获取 本金余额
|
||||||
|
MemberWalletInfo memberWalletInfo = memberWalletInfoService.selectByMemberId(dto.getMemberId());
|
||||||
|
if (memberWalletInfo == null) {
|
||||||
|
// 用户未注册小程序
|
||||||
|
throw new BusinessException(ReturnCodeEnum.CODE_AUTHENTICATION_ERROR);
|
||||||
|
}
|
||||||
|
// 当前余额
|
||||||
|
vo.setCurrentBalance(memberWalletInfo.getPrincipalBalance().add(memberWalletInfo.getGiftBalance()));
|
||||||
|
|
||||||
// 根据日期查询会员钱包变动明细
|
// 根据日期查询会员钱包变动明细
|
||||||
// 分页
|
// 分页
|
||||||
PageHelper.startPage(pageNum, pageSize);
|
// PageHelper.startPage(pageNum, pageSize);
|
||||||
List<MemberWalletLogVO> list = memberBasicInfoService.getMemberWalletDetail(dto);
|
List<MemberWalletLogVO> list = memberBasicInfoService.getMemberWalletDetail(dto);
|
||||||
PageInfo<MemberWalletLogVO> pageInfo = new PageInfo<>(list);
|
// 总支出
|
||||||
|
BigDecimal totalConsumption = list.stream().map(MemberWalletLogVO::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
vo.setTotalConsumption(totalConsumption);
|
||||||
|
|
||||||
|
// PageInfo<MemberWalletLogVO> pageInfo = new PageInfo<>(list);
|
||||||
// 获取 type 和 subType 的对应信息
|
// 获取 type 和 subType 的对应信息
|
||||||
for (MemberWalletLogVO walletLogVO : pageInfo.getList()) {
|
for (MemberWalletLogVO walletLogVO : list) {
|
||||||
// 将负数转为正数
|
// 将负数转为正数
|
||||||
walletLogVO.setAmount(BigDecimal.valueOf(Math.abs(walletLogVO.getAmount().doubleValue())).setScale(2, BigDecimal.ROUND_HALF_UP));
|
walletLogVO.setAmount(BigDecimal.valueOf(Math.abs(walletLogVO.getAmount().doubleValue())).setScale(2, BigDecimal.ROUND_HALF_UP));
|
||||||
String subType = walletLogVO.getSubType();
|
String subType = walletLogVO.getSubType();
|
||||||
@@ -328,16 +342,75 @@ public class MemberService {
|
|||||||
// walletLogVO.setTotalAccountAmount(walletLogVO.getPrincipalBalance().add(walletLogVO.getGiftBalance()));
|
// walletLogVO.setTotalAccountAmount(walletLogVO.getPrincipalBalance().add(walletLogVO.getGiftBalance()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<MemberWalletLogVO> collect = list.stream()
|
||||||
|
.skip((pageNum - 1) * pageSize)
|
||||||
|
.limit(pageSize)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
int total = list.size();
|
||||||
|
int pages = PageUtil.totalPage(total, dto.getPageSize());
|
||||||
|
// 返回结果集
|
||||||
PageResponse pageResponse = PageResponse.builder()
|
PageResponse pageResponse = PageResponse.builder()
|
||||||
.pageSize(pageSize)
|
.pageNum(Integer.parseInt(String.valueOf(pageNum)))
|
||||||
.pageNum(pageNum)
|
.pageSize(Integer.parseInt(String.valueOf(pageSize)))
|
||||||
.list(pageInfo.getList())
|
.list(collect)
|
||||||
.pages(pageInfo.getPages())
|
.pages(pages)
|
||||||
.total(pageInfo.getTotal())
|
.total(total)
|
||||||
|
|
||||||
.build();
|
.build();
|
||||||
return pageResponse;
|
|
||||||
|
vo.setPageResponse(pageResponse);
|
||||||
|
return vo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取会员钱包明细
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
// public PageResponse getMemberWalletLog (UniAppQueryMemberBalanceDTO dto) throws ParseException {
|
||||||
|
// // 获取分页信息以及memberId
|
||||||
|
// int pageNum = dto.getPageNum() == 0 ? 1 : dto.getPageNum();
|
||||||
|
// int pageSize = dto.getPageSize() == 0 ? 10 : dto.getPageSize();
|
||||||
|
// String tradeDate = dto.getTradeDate();
|
||||||
|
// // 获取年、月
|
||||||
|
// String[] split = StringUtils.split(tradeDate, "-");
|
||||||
|
// int year = Integer.parseInt(split[0]);
|
||||||
|
// int month = Integer.parseInt(split[1]);
|
||||||
|
// // 根据年月获取当月第一天和最后一天
|
||||||
|
// tradeDate = DateUtils.getFirstDay(year, month, DateUtils.YYYY_MM_DD);
|
||||||
|
// String lastDay = DateUtils.getLastDay(year, month, DateUtils.YYYY_MM_DD);
|
||||||
|
// // sql语句查询日期需要多加一天
|
||||||
|
// Date date = DateUtils.addDays(DateUtils.parseDate(lastDay, DateUtils.YYYY_MM_DD), 1);
|
||||||
|
// lastDay = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, date);
|
||||||
|
// dto.setTradeDate(tradeDate);
|
||||||
|
// dto.setEndDate(lastDay);
|
||||||
|
// // 根据日期查询会员钱包变动明细
|
||||||
|
// // 分页
|
||||||
|
// PageHelper.startPage(pageNum, pageSize);
|
||||||
|
// List<MemberWalletLogVO> list = memberBasicInfoService.getMemberWalletDetail(dto);
|
||||||
|
// PageInfo<MemberWalletLogVO> pageInfo = new PageInfo<>(list);
|
||||||
|
// // 获取 type 和 subType 的对应信息
|
||||||
|
// for (MemberWalletLogVO walletLogVO : pageInfo.getList()) {
|
||||||
|
// // 将负数转为正数
|
||||||
|
// walletLogVO.setAmount(BigDecimal.valueOf(Math.abs(walletLogVO.getAmount().doubleValue())).setScale(2, BigDecimal.ROUND_HALF_UP));
|
||||||
|
// String subType = walletLogVO.getSubType();
|
||||||
|
// String subTypeValue = BalanceChangesEnum.getValueByCode(subType);
|
||||||
|
// if (StringUtils.isNotBlank(subTypeValue)) {
|
||||||
|
// walletLogVO.setSubType(subTypeValue);
|
||||||
|
// }
|
||||||
|
// // walletLogVO.setTotalAccountAmount(walletLogVO.getPrincipalBalance().add(walletLogVO.getGiftBalance()));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// PageResponse pageResponse = PageResponse.builder()
|
||||||
|
// .pageSize(pageSize)
|
||||||
|
// .pageNum(pageNum)
|
||||||
|
// .list(pageInfo.getList())
|
||||||
|
// .pages(pageInfo.getPages())
|
||||||
|
// .total(pageInfo.getTotal())
|
||||||
|
// .build();
|
||||||
|
// return pageResponse;
|
||||||
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户绑定车牌号
|
* 用户绑定车牌号
|
||||||
* @param dto
|
* @param dto
|
||||||
|
|||||||
@@ -3,9 +3,13 @@ package com.jsowell.web.controller.pile;
|
|||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.jsowell.common.constant.Constants;
|
import com.jsowell.common.constant.Constants;
|
||||||
import com.jsowell.common.core.domain.AjaxResult;
|
import com.jsowell.common.core.domain.AjaxResult;
|
||||||
|
import com.jsowell.common.enums.ykc.OrderPayModeEnum;
|
||||||
|
import com.jsowell.common.enums.ykc.PayModeEnum;
|
||||||
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
|
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
|
||||||
import com.jsowell.common.exception.BusinessException;
|
import com.jsowell.common.exception.BusinessException;
|
||||||
|
import com.jsowell.common.util.id.IdUtils;
|
||||||
import com.jsowell.pile.dto.GenerateOrderDTO;
|
import com.jsowell.pile.dto.GenerateOrderDTO;
|
||||||
|
import com.jsowell.pile.dto.PayOrderDTO;
|
||||||
import com.jsowell.pile.dto.QueryPileDTO;
|
import com.jsowell.pile.dto.QueryPileDTO;
|
||||||
import com.jsowell.pile.dto.UpdateFirmwareDTO;
|
import com.jsowell.pile.dto.UpdateFirmwareDTO;
|
||||||
import com.jsowell.service.OrderService;
|
import com.jsowell.service.OrderService;
|
||||||
@@ -17,6 +21,8 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程控制controller
|
* 远程控制controller
|
||||||
*/
|
*/
|
||||||
@@ -58,16 +64,27 @@ public class PileRemoteController {
|
|||||||
*/
|
*/
|
||||||
@PostMapping("/remoteStartChargingForWeb")
|
@PostMapping("/remoteStartChargingForWeb")
|
||||||
public AjaxResult remoteStartCharging(@RequestBody GenerateOrderDTO dto) {
|
public AjaxResult remoteStartCharging(@RequestBody GenerateOrderDTO dto) {
|
||||||
// pileRemoteService.remoteStartCharging(queryPileDTO.getPileSn(), queryPileDTO.getConnectorCode());
|
|
||||||
// 生成订单并远程启动充电
|
// 生成订单并远程启动充电
|
||||||
dto.setStartMode(Constants.ZERO);
|
// dto.setStartMode(Constants.ZERO);
|
||||||
String orderCode = null;
|
// String orderCode = null;
|
||||||
|
String transactionCode = null;
|
||||||
try {
|
try {
|
||||||
orderCode = orderService.generateOrder(dto);
|
transactionCode = IdUtils.generateTransactionCode(dto.getPileSn(), dto.getConnectorCode());
|
||||||
|
pileRemoteService.remoteStartCharging(dto.getPileSn(), dto.getConnectorCode(), transactionCode, new BigDecimal("500"));
|
||||||
|
// // 生成订单
|
||||||
|
// orderCode = orderService.generateOrder(dto);
|
||||||
|
// // 支付订单
|
||||||
|
// PayOrderDTO payOrderDTO = new PayOrderDTO();
|
||||||
|
// payOrderDTO.setPayMode(OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue());
|
||||||
|
// payOrderDTO.setOrderCode(orderCode);
|
||||||
|
// payOrderDTO.setStartMode(Constants.ZERO);
|
||||||
|
//
|
||||||
|
// orderService.payOrder(payOrderDTO);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return AjaxResult.success(ImmutableMap.of("orderCode", orderCode));
|
return AjaxResult.success(ImmutableMap.of("orderCode", transactionCode));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ public interface IMemberWalletInfoService {
|
|||||||
|
|
||||||
MemberWalletInfo selectByPrimaryKey(Integer id);
|
MemberWalletInfo selectByPrimaryKey(Integer id);
|
||||||
|
|
||||||
|
MemberWalletInfo selectByMemberId(String memberId);
|
||||||
|
|
||||||
int updateByPrimaryKeySelective(MemberWalletInfo record);
|
int updateByPrimaryKeySelective(MemberWalletInfo record);
|
||||||
|
|
||||||
int updateByPrimaryKey(MemberWalletInfo record);
|
int updateByPrimaryKey(MemberWalletInfo record);
|
||||||
|
|||||||
@@ -33,6 +33,11 @@ public class MemberWalletInfoServiceImpl implements IMemberWalletInfoService {
|
|||||||
return memberWalletInfoMapper.selectByPrimaryKey(id);
|
return memberWalletInfoMapper.selectByPrimaryKey(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MemberWalletInfo selectByMemberId(String memberId) {
|
||||||
|
return memberWalletInfoMapper.selectByMemberId(memberId);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int updateByPrimaryKeySelective(MemberWalletInfo record) {
|
public int updateByPrimaryKeySelective(MemberWalletInfo record) {
|
||||||
return memberWalletInfoMapper.updateByPrimaryKeySelective(record);
|
return memberWalletInfoMapper.updateByPrimaryKeySelective(record);
|
||||||
|
|||||||
@@ -619,8 +619,8 @@ public class PileBasicInfoServiceImpl implements IPileBasicInfoService {
|
|||||||
List<PileInfoVO> pileInfoVOS = queryPileDetailList(stationIdList);
|
List<PileInfoVO> pileInfoVOS = queryPileDetailList(stationIdList);
|
||||||
// 对集合根据pileSn进行去重
|
// 对集合根据pileSn进行去重
|
||||||
ArrayList<PileInfoVO> pileInfoList = pileInfoVOS.stream()
|
ArrayList<PileInfoVO> pileInfoList = pileInfoVOS.stream()
|
||||||
.collect(Collectors.collectingAndThen(Collectors.toCollection(()
|
.collect(Collectors.collectingAndThen(Collectors.toCollection(
|
||||||
-> new TreeSet<>(Comparator.comparing(PileInfoVO::getPileSn))), ArrayList::new));
|
() -> new TreeSet<>(Comparator.comparing(PileInfoVO::getPileSn))), ArrayList::new));
|
||||||
// 桩总数
|
// 桩总数
|
||||||
generalInfo.setTotalPileQuantity(String.valueOf(pileInfoList.size()));
|
generalInfo.setTotalPileQuantity(String.valueOf(pileInfoList.size()));
|
||||||
// 总充电订单数 3.0 --> 3
|
// 总充电订单数 3.0 --> 3
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.jsowell.pile.vo.uniapp;
|
||||||
|
|
||||||
|
import com.jsowell.common.core.page.PageResponse;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 会员钱包明细VO
|
||||||
|
*
|
||||||
|
* @author Lemon
|
||||||
|
* @Date 2023/7/24 14:36
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class MemberWalletInfoVO {
|
||||||
|
/**
|
||||||
|
* 会员id
|
||||||
|
*/
|
||||||
|
private String memberId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当前余额
|
||||||
|
*/
|
||||||
|
private BigDecimal currentBalance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 总消费
|
||||||
|
*/
|
||||||
|
private BigDecimal totalConsumption;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页对象list
|
||||||
|
*/
|
||||||
|
private PageResponse pageResponse;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user