新增通过采购订单明细id获取明细
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
package com.zt.plat.module.contractorder.api;
|
||||
|
||||
import com.zt.plat.framework.common.pojo.CommonResult;
|
||||
import com.zt.plat.module.contractorder.api.dto.order.OrderDTO;
|
||||
import com.zt.plat.module.contractorder.enums.ApiConstants;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@FeignClient(name = ApiConstants.NAME)
|
||||
@Tag(name = "RPC 服务 - 订单")
|
||||
public interface OrderApi {
|
||||
String PREFIX = ApiConstants.PREFIX + "/order";
|
||||
@PostMapping(PREFIX + "/order-by-order-ids")
|
||||
@Operation(summary = "通过订单id获取订单信息", description = "通过订单编号获取订单信息")
|
||||
CommonResult<List<OrderDTO>> getOrderByOrderIds(@RequestBody List<Long> ids);
|
||||
|
||||
@PostMapping(PREFIX + "/order-by-order-nos")
|
||||
@Operation(summary = "通过订单号批量获取订单信息", description = "通过订单编号获取订单信息")
|
||||
CommonResult<List<OrderDTO>> getOrderByOrderNos(@RequestBody List<String> orderNoS);
|
||||
}
|
||||
@@ -99,6 +99,11 @@ public class OrdDtlDTO {
|
||||
*/
|
||||
private String taxNum;
|
||||
|
||||
/**
|
||||
* 税率 Y
|
||||
*/
|
||||
private BigDecimal taxRte;
|
||||
|
||||
// ========================== 采购订单特有属性(PrchOrdDtlDTO 独有)==========================
|
||||
/**
|
||||
* 含税单价;推送ERP(必须)
|
||||
@@ -271,10 +276,6 @@ public class OrdDtlDTO {
|
||||
*/
|
||||
private BigDecimal gross;
|
||||
|
||||
/**
|
||||
* 税率 Y
|
||||
*/
|
||||
private BigDecimal taxRte;
|
||||
|
||||
/**
|
||||
* 价格条件详情;推送ERP(必须):JSON
|
||||
|
||||
@@ -0,0 +1,291 @@
|
||||
package com.zt.plat.module.contractorder.api.dto.order;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class OrderDTO {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
private Long id;
|
||||
/**
|
||||
* ERP订单号
|
||||
*/
|
||||
@TableField("ORD_SAP_NUM")
|
||||
private String orderSAPNumber;
|
||||
/**
|
||||
* 订单号
|
||||
*/
|
||||
@TableField("SYS_ORD_NUM")
|
||||
private String systemOrderNumber;
|
||||
/**
|
||||
* 公司名称
|
||||
*/
|
||||
@TableField("CPN_NAME")
|
||||
private String cpName;
|
||||
/**
|
||||
* 公司编码;推送ERP(必须)
|
||||
*/
|
||||
@TableField("CPN_NUM")
|
||||
private String cpNum;
|
||||
/**
|
||||
* 客商编码;推送ERP(必须)
|
||||
*/
|
||||
@TableField("SPLR_NUM")
|
||||
private String supplierNumber;
|
||||
/**
|
||||
* 客商名称
|
||||
*/
|
||||
@TableField("SPLR_NAME")
|
||||
private String supplierName;
|
||||
/**
|
||||
* 订单类型(字典:PRCH_ORD_TP);推送ERP(必须)
|
||||
*/
|
||||
@TableField("TP")
|
||||
private String type;
|
||||
/**
|
||||
* 凭证日期;推送ERP(必须)
|
||||
*/
|
||||
@TableField("VCHR_DT")
|
||||
private LocalDateTime voucherDate;
|
||||
/**
|
||||
* 采购组织编码;推送ERP(必须)
|
||||
*/
|
||||
@TableField("PRCH_ORGZ_CD")
|
||||
private String purchaseOrganizationCustomsDeclaration;
|
||||
/**
|
||||
* 收货工厂名称
|
||||
*/
|
||||
@TableField("RCV_FACT_NAME")
|
||||
private String receiveFactoryName;
|
||||
/**
|
||||
* 收货工厂编码;推送ERP(必须)
|
||||
*/
|
||||
@TableField("RCV_FACT_NUM")
|
||||
private String receiveFactoryNumber;
|
||||
/**
|
||||
* 收货库位名称
|
||||
*/
|
||||
@TableField("RCV_WRH_NAME")
|
||||
private String receiveWarehouseName;
|
||||
/**
|
||||
* 收货库位编码;推送ERP
|
||||
*/
|
||||
@TableField("RCV_WRH_NUM")
|
||||
private String receiveWarehouseNumber;
|
||||
/**
|
||||
* 采购组编码(字典:PRCH_GRP_TP);推送ERP(必须)
|
||||
*/
|
||||
@TableField("PRCH_GRP")
|
||||
private String purchaseGroup;
|
||||
/**
|
||||
* 货币码(字典:CUR);推送ERP(必须)
|
||||
*/
|
||||
@TableField("CUR_NUM")
|
||||
private String currencyNumber;
|
||||
/**
|
||||
* 汇率;推送ERP
|
||||
*/
|
||||
@TableField("EXCH_RTE")
|
||||
private BigDecimal exchangeRate;
|
||||
/**
|
||||
* 合同纸质合同号;推送ERP(必须)
|
||||
*/
|
||||
@TableField("PPR_CTRT_NUM")
|
||||
private String paperContractNumber;
|
||||
/**
|
||||
* 小协议号;推送ERP
|
||||
*/
|
||||
@TableField("AGR_NUM")
|
||||
private String agreementNumber;
|
||||
/**
|
||||
* 备注;推送ERP
|
||||
*/
|
||||
@TableField("RMK")
|
||||
private String remark;
|
||||
/**
|
||||
* 代理方编码;推送ERP
|
||||
*/
|
||||
@TableField("AGT_NUM")
|
||||
private String agentNumber;
|
||||
/**
|
||||
* 代理方名称
|
||||
*/
|
||||
@TableField("AGT_NAME")
|
||||
private String agentName;
|
||||
/**
|
||||
* 系统合同编号
|
||||
*/
|
||||
@TableField("CTRT_NUM")
|
||||
private String contractNumber;
|
||||
/**
|
||||
* 物料编码
|
||||
*/
|
||||
@TableField("MTRL_NUM")
|
||||
private String materialNumber;
|
||||
/**
|
||||
* 物料名称
|
||||
*/
|
||||
@TableField("MTRL_NAME")
|
||||
private String materialName;
|
||||
/**
|
||||
* 合同名称
|
||||
*/
|
||||
@TableField("CTRT_NAME")
|
||||
private String contractName;
|
||||
/**
|
||||
* 小户头号
|
||||
*/
|
||||
@TableField("TNT_NUM")
|
||||
private String tenantNumber;
|
||||
/**
|
||||
* ERP公司编号
|
||||
*/
|
||||
@TableField("ERP_PRCH_CPN_NUM")
|
||||
private String erpPurchaseCompanyNumber;
|
||||
/**
|
||||
* ERP公司名称
|
||||
*/
|
||||
@TableField("ERP_PRCH_CPN_NAME")
|
||||
private String erpPurchaseCompanyName;
|
||||
/**
|
||||
* ERP客商公司编码
|
||||
*/
|
||||
@TableField("ERP_SALE_CPN_NUM")
|
||||
private String erpSalesCompanyNumber;
|
||||
/**
|
||||
* ERP客商公司名称
|
||||
*/
|
||||
@TableField("ERP_SALE_CPN_NAME")
|
||||
private String erpSalesCompanyName;
|
||||
/**
|
||||
* 采购组织名称
|
||||
*/
|
||||
@TableField("PRCH_ORGZ_NAME")
|
||||
private String purchaseOrganizationName;
|
||||
/**
|
||||
* ERP状态(字典: ERP_REQ_STS)
|
||||
*/
|
||||
@TableField("ERP_STS")
|
||||
private String erpStatus;
|
||||
/**
|
||||
* 请求ERP失败原因
|
||||
*/
|
||||
@TableField("CAUS")
|
||||
private String cause;
|
||||
/**
|
||||
* 订单状态(字典:PRCH_ORD_STS)
|
||||
*/
|
||||
@TableField("STS")
|
||||
private String status;
|
||||
/**
|
||||
* 采购组名称
|
||||
*/
|
||||
@TableField("PRCH_GRP_NAME")
|
||||
private String purchaseGroupName;
|
||||
|
||||
/**
|
||||
* 流程实例编号
|
||||
*/
|
||||
@TableField("PRCS_INSC_ID")
|
||||
private String processInstanceId;
|
||||
|
||||
/**
|
||||
* 流程当前任务节点id
|
||||
*/
|
||||
@TableField("TSK_NDE_ID")
|
||||
private String taskId;
|
||||
|
||||
/**
|
||||
* 审批意见
|
||||
*/
|
||||
@TableField("RVW_ONN")
|
||||
private String reviewOpinion;
|
||||
|
||||
/**
|
||||
* 是否需要审批
|
||||
*/
|
||||
@TableField("IS_PUSH")
|
||||
private int isPush;
|
||||
|
||||
/**
|
||||
* 计量单位
|
||||
*/
|
||||
@TableField("UNT")
|
||||
private String unt;
|
||||
|
||||
/**
|
||||
* 物料字典
|
||||
*
|
||||
*/
|
||||
@TableField("MTRL_TP")
|
||||
private String mtrlTp;
|
||||
|
||||
/**
|
||||
* 订单分类
|
||||
*
|
||||
*/
|
||||
@TableField("SPLY_BSN_TP")
|
||||
private String splyBsnTp;
|
||||
/**
|
||||
* 产品组编码
|
||||
*
|
||||
*/
|
||||
@TableField("PDT_GRP_CDG")
|
||||
private String pdtGrpCdg;
|
||||
/**
|
||||
* 产品组名
|
||||
*/
|
||||
@TableField("PDT_GRP_NAME")
|
||||
private String pdtGrpName;
|
||||
/**
|
||||
* 分销聚道编码
|
||||
*
|
||||
*/
|
||||
@TableField("SALE_ACS_CDG")
|
||||
private String saleAcsCdg;
|
||||
/**
|
||||
* 分销聚道名称
|
||||
*
|
||||
*/
|
||||
@TableField("SALE_ACS_NAME")
|
||||
private String saleAcsName;
|
||||
/**
|
||||
* 销售组织编码
|
||||
*
|
||||
*/
|
||||
@TableField("SALE_ORGZ_CD")
|
||||
private String saleOrgzCd;
|
||||
/**
|
||||
* 销售组织名称
|
||||
*
|
||||
*/
|
||||
@TableField("SALE_ORGZ_NAME")
|
||||
private String saleOrgzName;
|
||||
/**
|
||||
* 付款方名称
|
||||
*
|
||||
*/
|
||||
@TableField("PYER_NAME")
|
||||
private String payerName;
|
||||
/**
|
||||
* 付款方编码
|
||||
*
|
||||
*/
|
||||
@TableField("PYER_NUM")
|
||||
private String payerNum;
|
||||
|
||||
/**
|
||||
* 订单明细
|
||||
*/
|
||||
private List<OrdDtlDTO> OrdDtlDTOS;
|
||||
}
|
||||
@@ -0,0 +1,204 @@
|
||||
package com.zt.plat.module.contractorder.api;
|
||||
|
||||
import cn.hutool.extra.spring.SpringUtil;
|
||||
import com.zt.plat.framework.common.pojo.CommonResult;
|
||||
import com.zt.plat.framework.common.util.object.BeanUtils;
|
||||
import com.zt.plat.module.contractorder.api.dto.order.OrdDtlDTO;
|
||||
import com.zt.plat.module.contractorder.api.dto.order.OrderDTO;
|
||||
import com.zt.plat.module.contractorder.api.dto.order.PurchaseOrderWithDetailsDTO;
|
||||
import com.zt.plat.module.contractorder.api.dto.order.SalesOrdDtlDTO;
|
||||
import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PrchOrdDtlDO;
|
||||
import com.zt.plat.module.contractorder.dal.dataobject.purchaseorder.PurchaseOrderDO;
|
||||
import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDO;
|
||||
import com.zt.plat.module.contractorder.dal.dataobject.salesorder.SalesOrderDetailDO;
|
||||
import com.zt.plat.module.contractorder.dal.mysql.purchaseorder.PrchOrdDtlMapper;
|
||||
import com.zt.plat.module.contractorder.dal.mysql.purchaseorder.PurchaseOrderMapper;
|
||||
import com.zt.plat.module.contractorder.dal.mysql.salesorder.SalesOrderDetailMapper;
|
||||
import com.zt.plat.module.contractorder.dal.mysql.salesorder.SalesOrderMapper;
|
||||
import com.zt.plat.module.contractorder.service.purchaseorder.PurchaseOrderService;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static com.zt.plat.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@RestController
|
||||
@Validated
|
||||
@Slf4j
|
||||
public class OrderApiImpl implements OrderApi {
|
||||
@Resource
|
||||
private PurchaseOrderService purchaseOrderService;
|
||||
|
||||
@Override
|
||||
public CommonResult<List<OrderDTO>> getOrderByOrderIds(List<Long> ids) {
|
||||
if (ids == null || ids.isEmpty()) {
|
||||
throw new RuntimeException("订单id为空");
|
||||
}
|
||||
List<PurchaseOrderDO> ordersByIds = purchaseOrderService.getOrdersByIds(ids.stream().map(String::valueOf).toList());
|
||||
List<Long> purchaseOrderIds = new ArrayList<>();
|
||||
List<Long> salesOrderIds = new ArrayList<>();
|
||||
List<OrderDTO> order = new ArrayList<>();
|
||||
if (ordersByIds.isEmpty()) {
|
||||
return CommonResult.success(new ArrayList<>());
|
||||
}
|
||||
ordersByIds.forEach(o -> {
|
||||
if ("SALE".equals(o.getSplyBsnTp())) {
|
||||
// 销售订单
|
||||
salesOrderIds.add(o.getId());
|
||||
} else {
|
||||
// 非销售订单(采购订单)
|
||||
purchaseOrderIds.add(o.getId());
|
||||
}
|
||||
});
|
||||
if (!purchaseOrderIds.isEmpty()) {
|
||||
order.addAll(getPoOrdByIds(purchaseOrderIds));
|
||||
}
|
||||
if (!salesOrderIds.isEmpty()) {
|
||||
order.addAll(getSalesOrdByIds(salesOrderIds));
|
||||
}
|
||||
return success(order);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<List<OrderDTO>> getOrderByOrderNos(List<String> orderNoS) {
|
||||
List<PurchaseOrderDO> orderByNos = purchaseOrderService.getOrderByNos(orderNoS);
|
||||
if (orderByNos.isEmpty()) {
|
||||
return success(new ArrayList<>());
|
||||
}
|
||||
List<OrderDTO> order = new ArrayList<>();
|
||||
List<Long> purchaseOrderNoS = new ArrayList<>();
|
||||
List<Long> salesOrdNoS = new ArrayList<>();
|
||||
orderByNos.forEach(f -> {
|
||||
if ("SALE".equals(f.getSplyBsnTp())) {
|
||||
// 销售订单
|
||||
salesOrdNoS.add(f.getId());
|
||||
} else {
|
||||
// 非销售订单(采购订单)
|
||||
purchaseOrderNoS.add(f.getId());
|
||||
}
|
||||
});
|
||||
if (!purchaseOrderNoS.isEmpty()) {
|
||||
order.addAll(getPoOrdByIds(purchaseOrderNoS));
|
||||
}
|
||||
if (!salesOrdNoS.isEmpty()) {
|
||||
order.addAll(getSalesOrdByIds(salesOrdNoS));
|
||||
}
|
||||
|
||||
return success(order);
|
||||
}
|
||||
|
||||
private List<SalesOrderDO> getOrderByIds(List<Long> ids) {
|
||||
return SpringUtil.getBean(SalesOrderMapper.class).selectByIds(ids); // 采购订单与销售订单的
|
||||
}
|
||||
|
||||
private List<OrderDTO> getPoOrdByIds(List<Long> ids) {
|
||||
List<SalesOrderDO> purchaseOrderDOS = getOrderByIds(ids);
|
||||
List<OrderDTO> orderDTOS = BeanUtils.toBean(purchaseOrderDOS, OrderDTO.class);
|
||||
if (orderDTOS == null) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
PrchOrdDtlMapper prchOrdDtlMapper = SpringUtil.getBean(PrchOrdDtlMapper.class);
|
||||
List<Long> orderIds = orderDTOS.stream().map(OrderDTO::getId).toList();
|
||||
List<PrchOrdDtlDO> prchOrdDtlDOS = prchOrdDtlMapper.selectList(PrchOrdDtlDO::getOrdId, orderIds);
|
||||
orderDTOS.forEach(o -> {
|
||||
List<OrdDtlDTO> ordDtlDTOS = new ArrayList<>();
|
||||
prchOrdDtlDOS.forEach(p -> {
|
||||
|
||||
if (Objects.equals(o.getId(), p.getOrdId())) {
|
||||
OrdDtlDTO ordDtlDTO = setOrderDtlDTO(o, p);
|
||||
ordDtlDTOS.add(ordDtlDTO);
|
||||
}
|
||||
});
|
||||
o.setOrdDtlDTOS(ordDtlDTOS);
|
||||
});
|
||||
return orderDTOS;
|
||||
}
|
||||
|
||||
private List<OrderDTO> getSalesOrdByIds(List<Long> ids) {
|
||||
List<SalesOrderDO> salesOrderDOS = getOrderByIds(ids);
|
||||
List<OrderDTO> orderDTOS = BeanUtils.toBean(salesOrderDOS, OrderDTO.class);
|
||||
if (orderDTOS == null) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
SalesOrderDetailMapper salesOrderDetailMapper = SpringUtil.getBean(SalesOrderDetailMapper.class);
|
||||
List<Long> orderIds = orderDTOS.stream().map(OrderDTO::getId).toList();
|
||||
List<SalesOrderDetailDO> salesOrderDetailDOS = salesOrderDetailMapper.selectList(SalesOrderDetailDO::getOrderId, orderIds);
|
||||
orderDTOS.forEach(o -> {
|
||||
List<OrdDtlDTO> salesOrdDtlDTOS = new ArrayList<>();
|
||||
salesOrderDetailDOS.forEach(s -> {
|
||||
if (Objects.equals(o.getId(), s.getOrderId())) {
|
||||
OrdDtlDTO ordDtlDTO = setOrderDtlDTO(o, s);
|
||||
salesOrdDtlDTOS.add(ordDtlDTO);
|
||||
}
|
||||
});
|
||||
o.setOrdDtlDTOS(salesOrdDtlDTOS);
|
||||
});
|
||||
return orderDTOS;
|
||||
}
|
||||
|
||||
private <T> OrdDtlDTO setOrderDtlDTO(OrderDTO orderDTO, T t) {
|
||||
OrdDtlDTO ordDtlDTO = new OrdDtlDTO();
|
||||
if (t instanceof PrchOrdDtlDO p) {
|
||||
ordDtlDTO.setId(p.getId());
|
||||
ordDtlDTO.setOrderId(p.getOrdId());
|
||||
ordDtlDTO.setLineNum(p.getLineNum());
|
||||
ordDtlDTO.setMtrlName(p.getMtrlName());
|
||||
ordDtlDTO.setMtrlNum(p.getMtrlNum());
|
||||
ordDtlDTO.setFactoryName(p.getRcvFactNum());
|
||||
ordDtlDTO.setFactoryNum(p.getRcvFactNum());
|
||||
ordDtlDTO.setWarehouseName(p.getRcvWrhNum());
|
||||
ordDtlDTO.setWarehouseNum(p.getRcvWrhNum());
|
||||
ordDtlDTO.setUnit(p.getUnt());
|
||||
ordDtlDTO.setQuantity(p.getQty());
|
||||
ordDtlDTO.setProjectCategory(p.getPrjCtgr());
|
||||
ordDtlDTO.setAgreementNumber(p.getAgrNum());
|
||||
ordDtlDTO.setElementAbbreviation(p.getElemAbbr());
|
||||
ordDtlDTO.setElementName(p.getElemName());
|
||||
ordDtlDTO.setElementCode(p.getElemCdg());
|
||||
ordDtlDTO.setIsEnable(p.getIsEnb());
|
||||
ordDtlDTO.setTaxNum(p.getTaxNum());
|
||||
ordDtlDTO.setTaxRte(p.getTaxRte());
|
||||
//==============================
|
||||
ordDtlDTO.setMtrlCpntNum(p.getMtrlCpntNum());
|
||||
ordDtlDTO.setMtrlCpntDsp(p.getMtrlCpntDsp());
|
||||
ordDtlDTO.setBgnDt(p.getBgnDt());
|
||||
ordDtlDTO.setDdlDt(p.getDdlDt());
|
||||
ordDtlDTO.setTrfFactName(p.getTrfFactName());
|
||||
ordDtlDTO.setTrfFactNum(p.getTrfFactNum());
|
||||
ordDtlDTO.setTrfWrhName(p.getTrfWrhName());
|
||||
ordDtlDTO.setTrfWrhNum(p.getTrfWrhNum());
|
||||
ordDtlDTO.setRmk(p.getRmk());
|
||||
|
||||
|
||||
} else if (
|
||||
t instanceof SalesOrdDtlDTO s
|
||||
) {
|
||||
ordDtlDTO.setId(s.getId());
|
||||
ordDtlDTO.setOrderId(s.getOrderId());
|
||||
ordDtlDTO.setLineNum(s.getLineNumber());
|
||||
ordDtlDTO.setMtrlName(s.getMaterialName());
|
||||
ordDtlDTO.setMtrlNum(s.getMaterialNumber());
|
||||
ordDtlDTO.setFactoryName(s.getFactoryName());
|
||||
ordDtlDTO.setFactoryNum(s.getFactoryNumber());
|
||||
ordDtlDTO.setWarehouseName(s.getWarehouseName());
|
||||
ordDtlDTO.setWarehouseNum(s.getWarehouseNumber());
|
||||
ordDtlDTO.setUnit(s.getUnit());
|
||||
ordDtlDTO.setQuantity(s.getQuantity());
|
||||
ordDtlDTO.setProjectCategory(s.getProjectCategory());
|
||||
ordDtlDTO.setAgreementNumber(s.getAgreementNumber());
|
||||
ordDtlDTO.setElementAbbreviation(s.getElementAbbreviation());
|
||||
ordDtlDTO.setElementName(s.getElementName());
|
||||
ordDtlDTO.setElementCode(s.getElementNumber());
|
||||
ordDtlDTO.setIsEnable(s.getIsEnable());
|
||||
ordDtlDTO.setTaxNum(s.getTaxAcctasscat());
|
||||
//==============================
|
||||
|
||||
}
|
||||
return ordDtlDTO;
|
||||
}
|
||||
}
|
||||
@@ -274,6 +274,6 @@ public class PrchOrdDtlDO extends BusinessBaseDO {
|
||||
* 税率
|
||||
*/
|
||||
@TableField("TAX_RTE")
|
||||
private String taxRte;
|
||||
private BigDecimal taxRte;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user