订单管理相关
This commit is contained in:
@@ -1,11 +1,15 @@
|
||||
package com.zt.plat.module.erp.controller.admin.erp.vo;
|
||||
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* ERP采购订单保存请求VO
|
||||
@@ -14,168 +18,221 @@ import java.time.LocalDateTime;
|
||||
@Schema(description = "ERP采购订单保存请求参数")
|
||||
public class ErpOrderSaveReqVO {
|
||||
|
||||
@Schema(description = "公司代码")
|
||||
@NotEmpty(message = "公司代码不能为空")
|
||||
private String compCode; // BUKRS CHAR4
|
||||
|
||||
@Schema(description = "供应商帐号")
|
||||
@NotEmpty(message = "供应商帐号不能为空")
|
||||
private String vendor; // LIFNR CHAR10
|
||||
|
||||
@Schema(description = "采购凭证类型")
|
||||
@NotEmpty(message = "采购凭证类型不能为空")
|
||||
private String docType; // BSART CHAR4
|
||||
|
||||
@Schema(description = "采购凭证日期")
|
||||
@NotEmpty(message = "采购凭证日期不能为空")
|
||||
private LocalDateTime docDate; // BEDAT DATS8(格式:YYYYMMDD)
|
||||
|
||||
@Schema(description = "采购组织")
|
||||
@NotEmpty(message = "采购组织不能为空")
|
||||
private String purchOrg; // EKORG CHAR4
|
||||
|
||||
@Schema(description = "采购组")
|
||||
@NotEmpty(message = "采购组不能为空")
|
||||
private String purGroup; // EKGRP CHAR3
|
||||
|
||||
@Schema(description = "货币码")
|
||||
@NotEmpty(message = "货币码不能为空")
|
||||
private String currency; // WAERS CUKY5
|
||||
|
||||
@Schema(description = "汇率")
|
||||
private BigDecimal exchRate; // WKURS DEC9,5
|
||||
@NotEmpty(message = "纸质合同号不能为空(已启用财务共享单位)")
|
||||
private String zzhth; // CHAR60
|
||||
|
||||
|
||||
@Schema(description = "小协议号(绿星链通填入合同名称)")
|
||||
private String zxxyh; // CHAR60
|
||||
@NotEmpty(message = "订单号不能为空")
|
||||
private String orderNo;
|
||||
|
||||
@Schema(description = "备注(绿星链通填入系统采购订单头号)")
|
||||
private String znote; // CHAR60
|
||||
@Valid
|
||||
@NotNull(message = "采购订单抬头信息不能为空")
|
||||
private Head head;
|
||||
|
||||
@Schema(description = "代理方(使用客商编码)")
|
||||
private String zlifnr; // CHAR60
|
||||
@Valid
|
||||
@NotNull(message = "采购订单抬头扩展信息不能为空")
|
||||
private Exte exte;
|
||||
|
||||
@Valid
|
||||
@NotEmpty(message = "采购订单行项目列表不能为空")
|
||||
private List<Item> items;
|
||||
|
||||
@Schema(description = "行号")
|
||||
@NotEmpty(message = "行号不能为空")
|
||||
private Long poItem; // EBELP NUMC5
|
||||
private JSONArray accts; // 科目分配信息(科目分配类别为K或P时使用)
|
||||
@Valid
|
||||
private List<Comp> comps; // 委托加工物料信息(委托加工订单时使用)
|
||||
|
||||
@Schema(description = "物料号")
|
||||
private String material; // MATNR CHAR18
|
||||
@Schema(description = "采购订单抬头信息")
|
||||
@Data
|
||||
public static class Head {
|
||||
@Schema(description = "公司代码", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "公司代码不能为空")
|
||||
private String comp_code; // BUKRS CHAR4
|
||||
|
||||
@Schema(description = "工厂")
|
||||
@NotEmpty(message = "工厂不能为空")
|
||||
private String plant; // WERKS CHAR4
|
||||
@Schema(description = "供应商帐号", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "供应商帐号不能为空")
|
||||
private String vendor; // LIFNR CHAR10
|
||||
|
||||
@Schema(description = "库存地点")
|
||||
private String stgeLoc; // LGORT CHAR4
|
||||
@Schema(description = "采购凭证类型", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "采购凭证类型不能为空")
|
||||
private String doc_type; // BSART CHAR4
|
||||
|
||||
@Schema(description = "数量")
|
||||
@NotEmpty(message = "数量不能为空")
|
||||
private String quantity; // MENGE QUAN13,3
|
||||
@Schema(description = "采购凭证日期(YYYY-MM-DD)", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "采购凭证日期不能为空")
|
||||
private LocalDate doc_date; // BEDAT DATS8
|
||||
|
||||
@Schema(description = "计量单位")
|
||||
@NotNull(message = "计量单位不能为空")
|
||||
private String poUnit; // MEINS UNIT3
|
||||
@Schema(description = "采购组织", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "采购组织不能为空")
|
||||
private String purch_org; // EKORG CHAR4
|
||||
|
||||
@Schema(description = "含税单价")
|
||||
@NotNull(message = "含税单价不能为空")
|
||||
private BigDecimal netPrice; // NETPR CURR11,2
|
||||
@Schema(description = "采购组", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "采购组不能为空")
|
||||
private String pur_group; // EKGRP CHAR3
|
||||
|
||||
@Schema(description = "价格单位(默认值1,表示以上单价对应的采购单位数量)")
|
||||
private Integer priceUnit; // PEINH DEC5
|
||||
@Schema(description = "货币码", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "货币码不能为空")
|
||||
private String currency; // WAERS CUKY5
|
||||
|
||||
@Schema(description = "税码")
|
||||
private String taxCode; // MWSKZ CHAR2
|
||||
@Schema(description = "汇率(保留5位小数)")
|
||||
private BigDecimal exch_rate; // WKURS DEC9,5
|
||||
}
|
||||
|
||||
@Schema(description = "基于GR的发票校验")
|
||||
private String grBasedIv; // WEBRE CHAR1
|
||||
@Schema(description = "采购订单抬头扩展信息")
|
||||
@Data
|
||||
public static class Exte {
|
||||
@Schema(description = "纸质合同号(已启用财务共享单位必填)", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "纸质合同号不能为空")
|
||||
private String zzhth; // CHAR60
|
||||
|
||||
@Schema(description = "允许无限制过量交货")
|
||||
private String unlimitedDlv; // UEBTK CHAR1
|
||||
@Schema(description = "小协议号(绿星链通填入合同名称)")
|
||||
private String zxxyh; // CHAR60
|
||||
|
||||
@Schema(description = "批次")
|
||||
private String batch; // CHARG CHAR10
|
||||
@Schema(description = "备注(绿星链通填入系统采购订单头号)")
|
||||
private String znote; // CHAR60
|
||||
|
||||
@Schema(description = "项目类别(委托加工订单时填入L)")
|
||||
private String itemCat; // PSTYP CHAR1(原表CAHR为笔误,按CHAR处理)
|
||||
@Schema(description = "代理方(使用客商编码)")
|
||||
private String zlifnr; // CHAR60
|
||||
}
|
||||
|
||||
@Schema(description = "科目分配类别(固定资产采购:A;服务采购:S-销售服务费、K-成本中心、F-订单)")
|
||||
private String acctassCat; // KNTTP CHAR1
|
||||
@Schema(description = "采购订单行项目信息")
|
||||
@Data
|
||||
public static class Item {
|
||||
@Schema(description = "行号", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "行号不能为空")
|
||||
private Integer po_item; // EBELP NUMC5
|
||||
|
||||
@Schema(description = "物料组(服务采购订单必填)")
|
||||
private String matlGroup; // MATKL CHAR9
|
||||
@Schema(description = "物料号")
|
||||
private String material; // MATNR CHAR18
|
||||
|
||||
@Schema(description = "短文本(服务采购订单必填,绿星链通系统必须填入)")
|
||||
private String shortText; // TXZ01 CHAR40
|
||||
@Schema(description = "工厂", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "工厂不能为空")
|
||||
private String plant; // WERKS CHAR4
|
||||
|
||||
@Schema(description = "退货项目标识(退货行项目填X)")
|
||||
private String retItem; // RETPO CHAR1
|
||||
@Schema(description = "库存地点")
|
||||
private String stge_loc; // LGORT CHAR4
|
||||
|
||||
@Schema(description = "免费项目标识(免费行项目填X)")
|
||||
private String freeItem; // UMSON CHAR1
|
||||
@Schema(description = "数量(保留3位小数)", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "数量不能为空")
|
||||
private BigDecimal quantity; // MENGE QUAN13,3
|
||||
|
||||
@Schema(description = "外部行项目号(绿星链通必填)")
|
||||
private String vendrBatch; // LICHN CHAR15
|
||||
@Schema(description = "计量单位", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "计量单位不能为空")
|
||||
private String po_unit; // MEINS UNIT3
|
||||
|
||||
@Schema(description = "备注信息-需求单位")
|
||||
private String noteXq; // TDLINE CHAR132
|
||||
@Schema(description = "含税单价(保留2位小数)", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "含税单价不能为空")
|
||||
private BigDecimal net_price; // NETPR CURR11,2
|
||||
|
||||
@Schema(description = "备注信息-物料详细")
|
||||
private String noteWl; // TDLINE CHAR132
|
||||
@Schema(description = "价格单位(默认值1)")
|
||||
private Integer price_unit = 1; // PEINH DEC5
|
||||
|
||||
@Schema(description = "交货起止日期(格式:YYYYMMDD-YYYYMMDD)")
|
||||
private String vendMat; // IDNLF CHAR22(原表说明为交货起止日期,按说明定义)
|
||||
@Schema(description = "税码")
|
||||
private String tax_code; // MWSKZ CHAR2
|
||||
|
||||
@Schema(description = "销售物料号(科目分配类别为S时必填)")
|
||||
private String zmatnr;
|
||||
@Schema(description = "基于GR的发票校验(Y/N)")
|
||||
private String gr_basediv; // WEBRE CHAR1(原字段名gr_basediv保持与源数据一致)
|
||||
|
||||
@Schema(description = "统计型内部订单")
|
||||
private String zaufnr;
|
||||
@Schema(description = "允许无限制过量交货(Y/N)")
|
||||
private String unlimited_dlv; // UEBTK CHAR1
|
||||
|
||||
@Schema(description = "采购类别(0-生产性物资类;1-项目投资类)")
|
||||
private String zpurty;
|
||||
@Schema(description = "批次")
|
||||
private String batch; // CHARG CHAR10
|
||||
|
||||
@Schema(description = "原料湿重")
|
||||
private BigDecimal zmenge;
|
||||
@Schema(description = "项目类别(委托加工填L)")
|
||||
private String item_cat; // PSTYP CHAR1
|
||||
|
||||
@Schema(description = "科目分配类别(A-固定资产/S-服务/K-成本中心/F-订单)")
|
||||
private String acctasscat; // KNTTP CHAR1
|
||||
|
||||
@Schema(description = "科目分配的序号(从1开始编号)")
|
||||
@NotEmpty(message = "科目分配的序号不能为空")
|
||||
private String serialNo; // DZEKKN NUMC2
|
||||
@Schema(description = "物料组(服务采购必填)")
|
||||
private String matl_group; // MATKL CHAR9
|
||||
|
||||
@Schema(description = "总账科目编号")
|
||||
private String glAccount; // SAKNR CHAR10
|
||||
@Schema(description = "短文本(服务采购必填)")
|
||||
private String short_text; // TXZ01 CHAR40
|
||||
|
||||
@Schema(description = "成本中心(科目分配类别为F时必填)")
|
||||
private String costcenter; // KOSTL CHAR10
|
||||
@Schema(description = "退货项目标识(X-是)")
|
||||
private String ret_item; // RETPO CHAR1
|
||||
|
||||
@Schema(description = "订单号(科目分配类别为F时必填)")
|
||||
private String orderid; // AUFNR CHAR12
|
||||
@Schema(description = "免费项目标识(X-是)")
|
||||
private String free_item; // UMSON CHAR1
|
||||
|
||||
@Schema(description = "主资产号(科目分配类别为A时必填)")
|
||||
private String assetNo; // ANLN1 CHAR12
|
||||
@Schema(description = "外部行项目号(绿星链通必填)")
|
||||
private String vendrbatch; // LICHN CHAR15
|
||||
|
||||
@Schema(description = "资产子编号(科目分配类别为A时必填,固定值‘0’)")
|
||||
private String subNumber; // ANLN2 CHAR4
|
||||
@Schema(description = "备注信息-需求单位")
|
||||
private String note_xq; // TDLINE CHAR132
|
||||
|
||||
@Schema(description = "备注信息-物料详细")
|
||||
private String note_wl; // TDLINE CHAR132
|
||||
|
||||
@Schema(description = "计划行号(从1开始编号)")
|
||||
private String schedLine; // ETENR NUMC4
|
||||
@Schema(description = "交货起止日期(格式:YYYYMMDD-YYYYMMDD)")
|
||||
private String vend_mat; // IDNLF CHAR22
|
||||
|
||||
@Schema(description = "项目编号(从1开始编号)")
|
||||
private String itemNo; // RSPOS NUMC4
|
||||
@Valid
|
||||
private Itex itex; // 行项目扩展信息
|
||||
|
||||
@Schema(description = "委托加工需求数量")
|
||||
@NotNull(message = "委托加工需求数量不能为空")
|
||||
private BigDecimal entryQuantity; // MENGE QUAN13,3
|
||||
}
|
||||
|
||||
@Schema(description = "组件计量单位(为空时使用基本计量单位)")
|
||||
private String entryUom; // MEINS UNIT3
|
||||
@Schema(description = "行项目扩展信息")
|
||||
@Data
|
||||
public static class Itex {
|
||||
@Schema(description = "销售物料号(科目分配类别为S时必填)")
|
||||
private String zmatnr;
|
||||
|
||||
@Schema(description = " 科目分配详情")
|
||||
private String actsCtgrDtl;
|
||||
@Schema(description = "统计型内部订单")
|
||||
private String zaufnr;
|
||||
|
||||
@Schema(description = "采购类别(0-生产性物资类/1-项目投资类)")
|
||||
private String zpurty;
|
||||
|
||||
@Schema(description = "原料湿重")
|
||||
private BigDecimal zmenge;
|
||||
}
|
||||
|
||||
// @Schema(description = "行项目科目分配信息")
|
||||
// @Data
|
||||
// public static class Acct {
|
||||
// @Schema(description = "科目分配序号(从1开始)", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
// @NotNull(message = "科目分配序号不能为空")
|
||||
// private Integer serial_no; // DZEKKN NUMC2
|
||||
//
|
||||
// @Schema(description = "总账科目编号")
|
||||
// private String gl_account; // SAKNR CHAR10
|
||||
//
|
||||
// @Schema(description = "成本中心(科目分配类别为F时必填)")
|
||||
// private String costcenter; // KOSTL CHAR10(源数据为costcenter,保持一致)
|
||||
//
|
||||
// @Schema(description = "订单号(科目分配类别为F时必填)")
|
||||
// private String orderid; // AUFNR CHAR12(源数据为orderid,保持一致)
|
||||
//
|
||||
// @Schema(description = "主资产号(科目分配类别为A时必填)")
|
||||
// private String asset_no; // ANLN1 CHAR12
|
||||
//
|
||||
// @Schema(description = "资产子编号(科目分配类别为A时必填,固定值'0')")
|
||||
// private String sub_number; // ANLN2 CHAR4
|
||||
// }
|
||||
|
||||
@Schema(description = "委托加工物料信息")
|
||||
@Data
|
||||
public static class Comp {
|
||||
@Schema(description = "计划行号(从1开始)", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "计划行号不能为空")
|
||||
private Integer sched_line; // ETENR NUMC4
|
||||
|
||||
@Schema(description = "项目编号(从1开始)", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "项目编号不能为空")
|
||||
private Integer item_no; // RSPOS NUMC4
|
||||
|
||||
@Schema(description = "加工前物料号", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "加工前物料号不能为空")
|
||||
private String material; // MATNR CHAR18
|
||||
|
||||
@Schema(description = "委托加工发货工厂", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "委托加工发货工厂不能为空")
|
||||
private String plant; // PLANT CHAR4
|
||||
|
||||
@Schema(description = "委托加工需求数量(保留3位小数)", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotNull(message = "委托加工需求数量不能为空")
|
||||
private BigDecimal entry_quantity; // MENGE QUAN13,3
|
||||
|
||||
@Schema(description = "组件计量单位(为空使用基本计量单位)")
|
||||
private String entry_uom; // MEINS UNIT3
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,25 +26,12 @@ public class ErpOrderServiceImpl implements ErpOrderService {
|
||||
ErpSubmitReqDTO reqDTO = buildBaseReqDTO(createVo, "061");
|
||||
|
||||
Map<String, Object> req = new HashMap<>();
|
||||
Map<String, Object> head = new HashMap<>();
|
||||
// head
|
||||
head.put("comp_code", createVo.getCompCode());
|
||||
head.put("vendor", createVo.getVendor());
|
||||
head.put("doc_type", createVo.getDocType());
|
||||
head.put("doc_date", createVo.getDocDate());
|
||||
head.put("purch_org", createVo.getPurchOrg());
|
||||
head.put("pur_group", createVo.getPurGroup());
|
||||
head.put("currency", createVo.getCurrency());
|
||||
head.put("exch_rate", createVo.getExchRate());
|
||||
req.put("head", head);
|
||||
//exte
|
||||
Map<String, Object> exte = new HashMap<>();
|
||||
exte.put("zzhth", createVo.getZzhth());
|
||||
exte.put("zxxyh", createVo.getZxxyh());
|
||||
exte.put("znote", createVo.getZnote());
|
||||
exte.put("zlifnr", createVo.getZlifnr());
|
||||
req.put("exte", exte);
|
||||
getMaps(createVo, req);
|
||||
req.put("head", createVo.getHead());
|
||||
req.put("item", createVo.getItems());
|
||||
req.put("comp", createVo.getComps());
|
||||
req.put("exte", createVo.getExte());
|
||||
req.put("acct", createVo.getAccts());
|
||||
reqDTO.setReq(req);
|
||||
|
||||
return submitToErp(reqDTO);
|
||||
@@ -53,7 +40,7 @@ public class ErpOrderServiceImpl implements ErpOrderService {
|
||||
private ErpSubmitReqDTO buildBaseReqDTO(ErpOrderSaveReqVO vo, String funcnr) {
|
||||
ErpSubmitReqDTO reqDTO = new ErpSubmitReqDTO();
|
||||
reqDTO.setFuncnr(funcnr);
|
||||
reqDTO.setBskey(vo.getOrderid());
|
||||
reqDTO.setBskey(vo.getOrderNo());
|
||||
reqDTO.setUsrid(String.valueOf(SecurityFrameworkUtils.getLoginUserId()));
|
||||
reqDTO.setUsrnm((SecurityFrameworkUtils.getLoginUserNickname()));
|
||||
return reqDTO;
|
||||
@@ -66,35 +53,35 @@ public class ErpOrderServiceImpl implements ErpOrderService {
|
||||
}
|
||||
|
||||
private void getMaps(ErpOrderSaveReqVO vo, Map<String, Object> req) {
|
||||
List<Map<String, Object>> items = new ArrayList<>();
|
||||
Map<String, Object> item = new HashMap<>();
|
||||
item.put("po_item", vo.getPoItem());
|
||||
item.put("material", vo.getMaterial());
|
||||
item.put("plant", vo.getPlant());
|
||||
item.put("stge_loc", vo.getStgeLoc());
|
||||
item.put("quantity", vo.getQuantity());
|
||||
item.put("po_unit", vo.getPoUnit());
|
||||
item.put("net_price", vo.getNetPrice());
|
||||
item.put("price_unit", vo.getPriceUnit());
|
||||
item.put("tax_code", vo.getTaxCode());
|
||||
item.put("gr_based_iv", vo.getGrBasedIv());
|
||||
item.put("unlimited_dlv", vo.getUnlimitedDlv());
|
||||
item.put("batch", vo.getBatch());
|
||||
item.put("item_cat", vo.getItemCat());
|
||||
item.put("acctass_cat", vo.getAcctassCat());
|
||||
item.put("matl_group", vo.getMatlGroup());
|
||||
item.put("short_text", vo.getShortText());
|
||||
item.put("ret_item", vo.getRetItem());
|
||||
item.put("free_item", vo.getFreeItem());
|
||||
item.put("vendr_batch", vo.getVendrBatch());
|
||||
item.put("note_xq", vo.getNoteXq());
|
||||
item.put("note_wl", vo.getNoteWl());
|
||||
item.put("vend_mat", vo.getVendMat());
|
||||
items.add(item);
|
||||
if ("K".equals(vo.getAcctassCat()) || "P".equals(vo.getAcctassCat())) {
|
||||
req.put("acct", vo.getActsCtgrDtl());
|
||||
}
|
||||
req.put("item", items);
|
||||
// List<Map<String, Object>> items = new ArrayList<>();
|
||||
// Map<String, Object> item = new HashMap<>();
|
||||
// item.put("po_item", vo.getPoItem());
|
||||
// item.put("material", vo.getMaterial());
|
||||
// item.put("plant", vo.getPlant());
|
||||
// item.put("stge_loc", vo.getStgeLoc());
|
||||
// item.put("quantity", vo.getQuantity());
|
||||
// item.put("po_unit", vo.getPoUnit());
|
||||
// item.put("net_price", vo.getNetPrice());
|
||||
// item.put("price_unit", vo.getPriceUnit());
|
||||
// item.put("tax_code", vo.getTaxCode());
|
||||
// item.put("gr_based_iv", vo.getGrBasedIv());
|
||||
// item.put("unlimited_dlv", vo.getUnlimitedDlv());
|
||||
// item.put("batch", vo.getBatch());
|
||||
// item.put("item_cat", vo.getItemCat());
|
||||
// item.put("acctass_cat", vo.getAcctassCat());
|
||||
// item.put("matl_group", vo.getMatlGroup());
|
||||
// item.put("short_text", vo.getShortText());
|
||||
// item.put("ret_item", vo.getRetItem());
|
||||
// item.put("free_item", vo.getFreeItem());
|
||||
// item.put("vendr_batch", vo.getVendrBatch());
|
||||
// item.put("note_xq", vo.getNoteXq());
|
||||
// item.put("note_wl", vo.getNoteWl());
|
||||
// item.put("vend_mat", vo.getVendMat());
|
||||
// items.add(item);
|
||||
// if ("K".equals(vo.getAcctassCat()) || "P".equals(vo.getAcctassCat())) {
|
||||
// req.put("acct", vo.getActsCtgrDtl());
|
||||
// }
|
||||
// req.put("item", items);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user