Merge branch 'main' of http://162.14.99.253:3000/10539622/2025-03-JS-SDK-svr
This commit is contained in:
commit
73cd81d64d
@ -2608,7 +2608,8 @@ public class ToSAPServiceImpl {
|
||||
//用户名
|
||||
body.put("USNAM", user);
|
||||
//查询临时表TEMP_MESCONSUME,从里面取数据
|
||||
String sql = "SELECT T.MATERIALSPECNAME, T.ERPFACTORY, T.ERPLOCATION, T.QTY, T.UNIT,T.WO,T.SHIPREQUESTNAME,M.RESERVEDPROJECTNUMB FROM TEMP_MESCONSUME T LEFT JOIN MATERIALSHIPREQUESTDETAIL M ON M.SHIPREQUESTNAME = T.SHIPREQUESTNAME AND M.MATERIALSPECNAME = T.MATERIALSPECNAME";
|
||||
//String sql = "SELECT T.MATERIALSPECNAME, T.ERPFACTORY, T.ERPLOCATION, T.QTY, T.UNIT,T.WO,T.SHIPREQUESTNAME,M.RESERVEDPROJECTNUMB FROM TEMP_MESCONSUME T LEFT JOIN MATERIALSHIPREQUESTDETAIL M ON M.SHIPREQUESTNAME = T.SHIPREQUESTNAME AND M.MATERIALSPECNAME = T.MATERIALSPECNAME";
|
||||
String sql = "SELECT T.MATERIALSPECNAME, T.ERPFACTORY, T.ERPLOCATION, T.QTY, T.UNIT,T.WO,T.SHIPREQUESTNAME,M.SHIPREQUESTDETAILNAME FROM TEMP_MESCONSUME T LEFT JOIN MATERIALSHIPREQUESTDETAIL M ON M.SHIPREQUESTNAME = T.SHIPREQUESTNAME AND M.MATERIALSPECNAME = T.MATERIALSPECNAME";
|
||||
List<Map<String, Object>> maps = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, new HashMap<String,Object>());
|
||||
|
||||
|
||||
@ -2641,7 +2642,8 @@ public class ToSAPServiceImpl {
|
||||
//ZLLITEM 自定义领料单行号
|
||||
|
||||
// item.put("ZLLITEM", "0001");
|
||||
item.put("ZLLITEM", maps.get(i).get("RESERVEDPROJECTNUMB"));
|
||||
//item.put("ZLLITEM", maps.get(i).get("RESERVEDPROJECTNUMB"));
|
||||
item.put("ZLLITEM", maps.get(i).get("SHIPREQUESTDETAILNAME"));
|
||||
//AUFNR 订单号
|
||||
item.put("AUFNR", maps.get(i).get("WO"));
|
||||
|
||||
|
@ -10,6 +10,8 @@ import com.cim.idm.framework.util.time.TimeUtils;
|
||||
import com.cim.idm.model.SAPToWMSRequest;
|
||||
import com.cim.idm.model.WMSToSAPReturn;
|
||||
import com.cim.idm.mwmsextend.materialreceiverequest.service.MaterialReceiveRequestServiceImpl;
|
||||
import com.cim.idm.service.IMaterialPackingService;
|
||||
import com.cim.idm.service.Impl.MESToWMSServiceImpl;
|
||||
import com.cim.idm.util.MessageLogUtil;
|
||||
import com.cim.idm.wmsextend.generic.errorHandler.CustomException;
|
||||
import com.cim.idm.wmspackage.invoice.MaterialReceiveRequestServiceProxy;
|
||||
@ -34,11 +36,13 @@ import com.cim.idm.wmspackage.receiverequestdetail.ReceiveRequestDetailServicePr
|
||||
import com.cim.idm.wmspackage.receiverequestdetail.management.data.MaterialReceiveRequestDetail;
|
||||
import com.cim.idm.wmspackage.receiverequestdetail.management.data.MaterialReceiveRequestDetailKey;
|
||||
import com.cim.idm.wmspackage.receiverequestdetail.management.info.CreateReceiveRequestDetailInfo;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.MapUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
@ -76,6 +80,9 @@ public class SAPToWMSController {
|
||||
* 设置MATERIALSPEC的SITENAME值为SDK
|
||||
*/
|
||||
String materialSpecSiteName = "SDK";
|
||||
@Autowired
|
||||
private IMaterialPackingService materialPackingService;
|
||||
|
||||
// 物料主数据
|
||||
@RequestMapping(value = "/materialspec", method = RequestMethod.POST)
|
||||
public WMSToSAPReturn GetMaterialSpec(HttpServletRequest httpRequest, @RequestBody SAPToWMSRequest request) {
|
||||
@ -2223,4 +2230,71 @@ public class SAPToWMSController {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 物料消耗
|
||||
* 2024-05-08
|
||||
* @param httpRequest
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@ApiOperation(value = "物料消耗")
|
||||
@RequestMapping("/sapwms_materialconsume_request")
|
||||
public WMSToSAPReturn sapMaterialConsume_Request(HttpServletRequest httpRequest, @RequestBody SAPToWMSRequest request) {
|
||||
Map<String,Object> head = request.getHEAD();
|
||||
//开启事务
|
||||
IDMFrameServiceProxy.getTransactionManager().beginTransaction();
|
||||
try {
|
||||
ArrayList<Map<String,Object>> datas = request.getBODY();
|
||||
String siteName = "SDK";
|
||||
String userName = "SAP";
|
||||
if (null == datas || datas.size() <= 0){
|
||||
throw new Exception("BODY信息不能为空,请确认");
|
||||
}
|
||||
materialPackingService.materialConsumeSapBwtar(datas,siteName,userName);
|
||||
Map<String, Object> oKReturn = new HashMap<>();
|
||||
oKReturn.put("STATUS", "S");
|
||||
oKReturn.put("MSGTXT", "物料消耗成功");
|
||||
oKReturn.put("ZRSV01", "");
|
||||
oKReturn.put("ZRSV02", "");
|
||||
oKReturn.put("ZRSV03", "");
|
||||
oKReturn.put("ZRSV04", "");
|
||||
oKReturn.put("ZRSV05", "");
|
||||
oKReturn.put("ZRSV06", "");
|
||||
oKReturn.put("ZRSV07", "");
|
||||
oKReturn.put("ZRSV08", "");
|
||||
oKReturn.put("ZRSV09", "");
|
||||
oKReturn.put("ZRSV10", "");
|
||||
WMSToSAPReturn WMSToSAPReturn = new WMSToSAPReturn(head, oKReturn);
|
||||
ErpMessageLog erpMessageLog = new ErpMessageLog();
|
||||
erpMessageLog.setServerName(System.getProperty("Seq"));
|
||||
erpMessageLog.setEventName(httpRequest.getRequestURL().toString());
|
||||
erpMessageLog.setId(new TimeUtils().getCurrentEventTimeKey());
|
||||
erpMessageLog.setResultCode("S");
|
||||
erpMessageLog.setSendMsg(JSONObject.toJSONString(request));
|
||||
erpMessageLog.setMessageId("sapwms_materialconsume_request");
|
||||
erpMessageLog.setReturnMsg(JSONObject.toJSONString(WMSToSAPReturn));
|
||||
erpMessageLog.setInterfaceTime(TimeStampUtil.getCurrentTime(TimeStampUtil.FORMAT_DEFAULT));
|
||||
MessageLogUtil.writeMessageLog(erpMessageLog);
|
||||
IDMFrameServiceProxy.getTransactionManager().commitTransaction();
|
||||
return WMSToSAPReturn;
|
||||
}catch (Exception e){
|
||||
IDMFrameServiceProxy.getTransactionManager().rollbackTransaction();
|
||||
Map<String, Object> errorReturn = new HashMap<>();
|
||||
errorReturn.put("STATUS", "E");
|
||||
errorReturn.put("MSGTXT", "物料消耗失败, " + e.getMessage());
|
||||
errorReturn.put("HEAD", request.getHEAD());
|
||||
WMSToSAPReturn WMSToSAPReturn = new WMSToSAPReturn(head, errorReturn);
|
||||
ErpMessageLog erpMessageLog = new ErpMessageLog();
|
||||
erpMessageLog.setServerName(System.getProperty("Seq"));
|
||||
erpMessageLog.setEventName(httpRequest.getRequestURL().toString());
|
||||
erpMessageLog.setId(new TimeUtils().getCurrentEventTimeKey());
|
||||
erpMessageLog.setResultCode("E");
|
||||
erpMessageLog.setSendMsg(JSONObject.toJSONString(request));
|
||||
erpMessageLog.setMessageId("sapwms_materialconsume_request");
|
||||
erpMessageLog.setReturnMsg(JSONObject.toJSONString(WMSToSAPReturn));
|
||||
erpMessageLog.setInterfaceTime(TimeStampUtil.getCurrentTime(TimeStampUtil.FORMAT_DEFAULT));
|
||||
MessageLogUtil.writeMessageLog(erpMessageLog);
|
||||
return WMSToSAPReturn;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import com.cim.idm.framework.data.EventInfo;
|
||||
import com.cim.idm.model.dto.packing.MaterialPackingListDto;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@ -28,4 +29,13 @@ public interface IMaterialPackingService {
|
||||
*/
|
||||
void delMaterialPacking(Map<String, Object> hashMap, String materialPackingName,
|
||||
String siteName, EventInfo makeEventInfo);
|
||||
|
||||
/**
|
||||
* SAP物料消耗(正向、反向)
|
||||
* 2025-05-08
|
||||
* @param dataList body报文
|
||||
* @param siteName 工厂
|
||||
* @param userName 用户名
|
||||
*/
|
||||
void materialConsumeSapBwtar(ArrayList<Map<String,Object>> dataList, String siteName, String userName) throws Exception;
|
||||
}
|
||||
|
@ -5,12 +5,20 @@ import com.cim.idm.framework.IDMFrameServiceProxy;
|
||||
import com.cim.idm.framework.data.EventInfo;
|
||||
import com.cim.idm.model.dto.packing.MaterialPackingListDto;
|
||||
import com.cim.idm.service.IMaterialPackingService;
|
||||
import com.cim.idm.utils.EventInfoUtil;
|
||||
import com.cim.idm.wmspackage.materialpacking.MaterialPackingServiceProxy;
|
||||
import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPackingKey;
|
||||
import com.cim.idm.wmspackage.materialpacking.management.info.RemoveInfo;
|
||||
import com.cim.idm.wmspackage.materialpacking.management.info.SetEventInfo;
|
||||
import org.apache.commons.collections4.MapUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@ -48,4 +56,184 @@ public class MaterialPackingServiceServiceImpl implements IMaterialPackingServic
|
||||
IDMFrameServiceProxy.getSqlTemplate().update(deleteSql, hashMap);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* SAP物料消耗(正向、反向)
|
||||
* 2025-05-08
|
||||
* @param dataList body报文
|
||||
* @param siteName 工厂
|
||||
* @param userName 用户名
|
||||
*/
|
||||
@Override
|
||||
public void materialConsumeSapBwtar(ArrayList<Map<String,Object>> dataList, String siteName, String userName) throws Exception {
|
||||
String checkBwart = "";// 移动类型
|
||||
EventInfo eventInfo = new EventInfoUtil().makeEventInfo("materialConsumeSapBwtar", userName, "materialConsumeSapBwtar", "", "");
|
||||
for (Map<String, Object> data : dataList) {
|
||||
//存储要更新的MaterialPacking信息
|
||||
ArrayList<SetEventInfo> setEventInfoList = new ArrayList<>();
|
||||
//存储要更新MaterialPacking信息的key
|
||||
ArrayList<MaterialPackingKey> materialPackingKeyList = new ArrayList<>();
|
||||
String aufnr = MapUtils.getString(data, "AUFNR"); //生产单号
|
||||
String werks = MapUtils.getString(data, "WERKS"); // 组织
|
||||
String matnr = MapUtils.getString(data, "MATNR"); // 物料编号
|
||||
String bwart = MapUtils.getString(data, "BWART"); // 移动类型
|
||||
String menge = MapUtils.getString(data, "MENGE"); // 订单数量
|
||||
String meins = MapUtils.getString(data, "MEINS"); // 单位
|
||||
String lgort = MapUtils.getString(data, "LGORT"); // ERP库存地点
|
||||
String budatMkpf = MapUtils.getString(data, "BUDAT_MKPF"); // 过账日期
|
||||
String mblnr = MapUtils.getString(data, "MBLNR"); // 物料凭证号
|
||||
if (StringUtils.isEmpty(aufnr) || StringUtils.isEmpty(werks) || StringUtils.isEmpty(matnr)
|
||||
|| StringUtils.isEmpty(bwart) || StringUtils.isEmpty(menge) || StringUtils.isEmpty(meins)
|
||||
|| StringUtils.isEmpty(lgort) || StringUtils.isEmpty(budatMkpf) || StringUtils.isEmpty(mblnr)) {
|
||||
throw new Exception("AUFNR、WERKS、MATNR、BWART、MENGE、MEINS、LGORT、BUDAT_MKPF、MBLNR是必填项");
|
||||
}
|
||||
//操作数量
|
||||
BigDecimal mengeBigDecimal = new BigDecimal(menge);
|
||||
if (StringUtils.isNotEmpty(checkBwart) && !bwart.equals(checkBwart)){
|
||||
throw new Exception("不能同时操作261、262多种移动类型,请确认");
|
||||
}
|
||||
if ("261".equals(bwart)){
|
||||
//正向 BWART=261发料,根据WERKS+LGORT+AUFNR+MATNR+MEINS根据先进先出逻辑扣减MENGE量的库存
|
||||
//根据先进先出查询库存
|
||||
String selcetMaterialpackingSql = " SELECT\n" +
|
||||
"\tSITENAME, MATERIALPACKINGNAME, MATERIALQUANTITY, CREATETIME \n" +
|
||||
"FROM\n" +
|
||||
"\tMATERIALPACKING \n" +
|
||||
"WHERE\n" +
|
||||
"\tSITENAME =:SITENAME\n" +
|
||||
"\tAND STOCKSTATE =:STOCKSTATE\n" +
|
||||
"\tAND ERPFACTORY =:ERPFACTORY \n" +
|
||||
"\tAND ERPLOCATION =:ERPLOCATION\n" +
|
||||
"\tAND UNIT =:UNIT\n" +
|
||||
"\tAND MATERIALSPECNAME =:MATERIALSPECNAME \n" +
|
||||
"\tAND UNDOID =:UNDOID \n" +
|
||||
"ORDER BY CREATETIME ASC ";
|
||||
Map<String, Object> selcetMaterialpackingMap = new HashMap<String, Object> ();
|
||||
selcetMaterialpackingMap.put("SITENAME", siteName);
|
||||
selcetMaterialpackingMap.put("STOCKSTATE", "Stocked");
|
||||
selcetMaterialpackingMap.put("ERPFACTORY", werks);
|
||||
selcetMaterialpackingMap.put("ERPLOCATION", lgort);
|
||||
selcetMaterialpackingMap.put("UNIT", meins);
|
||||
selcetMaterialpackingMap.put("MATERIALSPECNAME", matnr);
|
||||
selcetMaterialpackingMap.put("UNDOID", mblnr);
|
||||
List<Map<String, Object>> queryMaterialpackingList = IDMFrameServiceProxy.getSqlTemplate().queryForList(selcetMaterialpackingSql, selcetMaterialpackingMap);
|
||||
for (int i = 0; i < queryMaterialpackingList.size(); i++) {
|
||||
Map<String, Object> hashMap2 = new HashMap<String,Object>();
|
||||
SetEventInfo setEventInfo = new SetEventInfo();
|
||||
|
||||
String materialPackingName = queryMaterialpackingList.get(i).get("MATERIALPACKINGNAME").toString();
|
||||
String materialQuantity = queryMaterialpackingList.get(i).get("MATERIALQUANTITY").toString();
|
||||
BigDecimal materialQuantityDecimal = new BigDecimal(materialQuantity);
|
||||
if (mengeBigDecimal.compareTo(materialQuantityDecimal) < 0){
|
||||
//消耗数量小于当前条码库存数量
|
||||
materialQuantityDecimal = materialQuantityDecimal.subtract(mengeBigDecimal);
|
||||
mengeBigDecimal = new BigDecimal(BigInteger.ZERO);
|
||||
|
||||
//保存要更新的MaterialPacking信息
|
||||
materialQuantity = materialQuantityDecimal.toString();
|
||||
hashMap2.put("materialQuantity", materialQuantity);
|
||||
hashMap2.put("materialCreateQuantity", materialQuantity);
|
||||
hashMap2.put("unDoID", mblnr);
|
||||
setEventInfo.setUserColumns(hashMap2);
|
||||
setEventInfoList.add(setEventInfo);
|
||||
MaterialPackingKey materialPackingKey = new MaterialPackingKey(siteName, materialPackingName);
|
||||
materialPackingKeyList.add(materialPackingKey);
|
||||
break;
|
||||
} else if (mengeBigDecimal.compareTo(materialQuantityDecimal) == 0){
|
||||
//消耗数量等于当前条码库存数量
|
||||
mengeBigDecimal = new BigDecimal(BigInteger.ZERO);
|
||||
materialQuantityDecimal = new BigDecimal(BigInteger.ZERO);
|
||||
|
||||
//保存要更新的MaterialPacking信息
|
||||
materialQuantity = materialQuantityDecimal.toString();
|
||||
hashMap2.put("materialQuantity", materialQuantity);
|
||||
hashMap2.put("materialCreateQuantity", materialQuantity);
|
||||
hashMap2.put("unDoID", mblnr);
|
||||
setEventInfo.setUserColumns(hashMap2);
|
||||
setEventInfoList.add(setEventInfo);
|
||||
MaterialPackingKey materialPackingKey = new MaterialPackingKey(siteName, materialPackingName);
|
||||
materialPackingKeyList.add(materialPackingKey);
|
||||
break;
|
||||
} else {
|
||||
//消耗数量大于当前条码库存数量
|
||||
mengeBigDecimal = mengeBigDecimal.subtract(materialQuantityDecimal);
|
||||
materialQuantityDecimal = new BigDecimal(BigInteger.ZERO);
|
||||
//如果扣减后当前条码库存数量等于0,将状态改为StockOut
|
||||
hashMap2.put("stockState", "StockOut");
|
||||
//保存要更新的MaterialPacking信息
|
||||
|
||||
materialQuantity = materialQuantityDecimal.toString();
|
||||
hashMap2.put("materialQuantity", materialQuantity);
|
||||
hashMap2.put("materialCreateQuantity", materialQuantity);
|
||||
hashMap2.put("unDoID", mblnr);
|
||||
setEventInfo.setUserColumns(hashMap2);
|
||||
setEventInfoList.add(setEventInfo);
|
||||
MaterialPackingKey materialPackingKey = new MaterialPackingKey(siteName, materialPackingName);
|
||||
materialPackingKeyList.add(materialPackingKey);
|
||||
}
|
||||
|
||||
}
|
||||
if (mengeBigDecimal.compareTo(BigDecimal.ZERO) > 0){
|
||||
throw new Exception("物料:" + matnr + " " + werks + " " + lgort + " " + meins + "库存短缺");
|
||||
}
|
||||
MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKeyList, eventInfo, setEventInfoList);
|
||||
} else if ("262".equals(bwart)) {
|
||||
//反向 BWART=262冲销,根据MBLNR增加对应的数量
|
||||
String selcetMaterialpackingSql = " SELECT\n" +
|
||||
"\tSITENAME, MATERIALPACKINGNAME, STOCKSTATE, MATERIALQUANTITY \n" +
|
||||
"FROM\n" +
|
||||
"\tMATERIALPACKING \n" +
|
||||
"WHERE\n" +
|
||||
"\tSITENAME =:SITENAME\n" +
|
||||
"\tAND STOCKSTATE IN ('Stocked','StockOut')\n" +
|
||||
"\tAND ERPFACTORY =:ERPFACTORY \n" +
|
||||
"\tAND ERPLOCATION =:ERPLOCATION\n" +
|
||||
"\tAND UNIT =:UNIT\n" +
|
||||
"\tAND MATERIALSPECNAME =:MATERIALSPECNAME \n" +
|
||||
"\tAND UNDOID =:UNDOID \n";
|
||||
Map<String, Object> selcetMaterialpackingMap = new HashMap<String, Object> ();
|
||||
selcetMaterialpackingMap.put("SITENAME", siteName);
|
||||
selcetMaterialpackingMap.put("ERPFACTORY", werks);
|
||||
selcetMaterialpackingMap.put("ERPLOCATION", lgort);
|
||||
selcetMaterialpackingMap.put("UNIT", meins);
|
||||
selcetMaterialpackingMap.put("MATERIALSPECNAME", matnr);
|
||||
selcetMaterialpackingMap.put("UNDOID", mblnr);
|
||||
List<Map<String, Object>> queryMaterialpackingList = IDMFrameServiceProxy.getSqlTemplate().queryForList(selcetMaterialpackingSql, selcetMaterialpackingMap);
|
||||
for (int i = 0; i < queryMaterialpackingList.size(); i++) {
|
||||
Map<String, Object> hashMap2 = new HashMap<String,Object>();
|
||||
SetEventInfo setEventInfo = new SetEventInfo();
|
||||
|
||||
String materialPackingName = queryMaterialpackingList.get(i).get("MATERIALPACKINGNAME").toString();
|
||||
String materialQuantity = queryMaterialpackingList.get(i).get("MATERIALQUANTITY").toString();
|
||||
String stockState = queryMaterialpackingList.get(i).get("STOCKSTATE").toString();
|
||||
BigDecimal materialQuantityDecimal = new BigDecimal(materialQuantity);
|
||||
if("Stocked".equals(stockState)){
|
||||
materialQuantityDecimal = materialQuantityDecimal.add(mengeBigDecimal);
|
||||
}else if ("StockOut".equals(stockState)){
|
||||
materialQuantityDecimal = mengeBigDecimal;
|
||||
hashMap2.put("STOCKSTATE", "Stocked");
|
||||
}
|
||||
//保存要更新的MaterialPacking信息
|
||||
materialQuantity = materialQuantityDecimal.toString();
|
||||
hashMap2.put("materialQuantity", materialQuantity);
|
||||
hashMap2.put("materialCreateQuantity", materialQuantity);
|
||||
//hashMap2.put("unDoID", mblnr);
|
||||
setEventInfo.setUserColumns(hashMap2);
|
||||
setEventInfoList.add(setEventInfo);
|
||||
MaterialPackingKey materialPackingKey = new MaterialPackingKey(siteName, materialPackingName);
|
||||
materialPackingKeyList.add(materialPackingKey);
|
||||
break;
|
||||
}
|
||||
if (queryMaterialpackingList.isEmpty()){
|
||||
throw new Exception("物料:" + matnr + " " + werks + " " + lgort + " " + meins + "冲销失败");
|
||||
}else {
|
||||
MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKeyList, eventInfo, setEventInfoList);
|
||||
}
|
||||
|
||||
} else {
|
||||
throw new Exception("不属于物料消耗261、262的移动类型,请确认");
|
||||
}
|
||||
checkBwart = bwart;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user