Commit e95a1f5a authored by 鲁鑫's avatar 鲁鑫

SAP源发的采购申请审批接口

parent 757220f6
...@@ -39,7 +39,7 @@ function initItemGrid() { ...@@ -39,7 +39,7 @@ function initItemGrid() {
checkbox: true, checkbox: true,
usePager: true, usePager: true,
rownumbers: true, rownumbers: true,
enabledEdit: true, enabledEdit: false,
fixedCellHeight: true, fixedCellHeight: true,
selectRowButtonOnly: true, selectRowButtonOnly: true,
//autoApplyNextEditor:false, //autoApplyNextEditor:false,
......
...@@ -28,8 +28,8 @@ ...@@ -28,8 +28,8 @@
<x:hidden name="bsart"/> <x:hidden name="bsart"/>
<div class="hg-form-cols"> <div class="hg-form-cols">
<div class="hg-form-row"> <div class="hg-form-row">
<x:inputC name="banfn" label="采购申请号" readonly="false" labelCol="1" fieldCol="2" required="true"/> <x:inputC name="banfn" label="采购申请号" readonly="true" labelCol="1" fieldCol="2" required="true"/>
<x:inputC name="batxt" label="采购申请类型描述" readonly="false" labelCol="1" fieldCol="2" required="true"/> <x:inputC name="batxt" label="采购申请类型描述" readonly="true" labelCol="1" fieldCol="2" required="false"/>
</div> </div>
</div> </div>
<div id="maingrid"></div> <div id="maingrid"></div>
......
...@@ -11,7 +11,7 @@ function initUI() { ...@@ -11,7 +11,7 @@ function initUI() {
function initPurchaseListGrid() { function initPurchaseListGrid() {
var toolbarOptions = UICtrl.getDefaultToolbarOptions({ var toolbarOptions = UICtrl.getDefaultToolbarOptions({
addHandler: addHandler, //addHandler: addHandler,
}); });
purchaseApprovalGridManager = UICtrl.grid('#purchaseApprovalGrid', { purchaseApprovalGridManager = UICtrl.grid('#purchaseApprovalGrid', {
columns: [ columns: [
...@@ -20,6 +20,8 @@ function initPurchaseListGrid() { ...@@ -20,6 +20,8 @@ function initPurchaseListGrid() {
, {display: "需求跟踪编号", name: "billCode", width: 150, minWidth: 60, type: "string", align: "center"} , {display: "需求跟踪编号", name: "billCode", width: 150, minWidth: 60, type: "string", align: "center"}
, {display: "采购申请类型描述", name: "batxt", width: 150, minWidth: 60, type: "string", align: "center"} , {display: "采购申请类型描述", name: "batxt", width: 150, minWidth: 60, type: "string", align: "center"}
, {display: "采购申请编号", name: "banfn", width: 150, minWidth: 60, type: "string", align: "center"} , {display: "采购申请编号", name: "banfn", width: 150, minWidth: 60, type: "string", align: "center"}
, {display: "消息类型", name: "type", width: 100, minWidth: 60, type: "string", align: "center"}
, {display: "消息文本", name: "message", width: 200, minWidth: 60, type: "string", align: "center"}
], ],
dataAction: 'server', dataAction: 'server',
url: web_app.name + '/sapPurchaseApproval/slicedSapPurchaseApprovalList.ajax?', url: web_app.name + '/sapPurchaseApproval/slicedSapPurchaseApprovalList.ajax?',
...@@ -72,7 +74,7 @@ function viewHandler(id) { ...@@ -72,7 +74,7 @@ function viewHandler(id) {
UICtrl.addTabItem({ UICtrl.addTabItem({
tabid: 'viewPurchase' + id, tabid: 'viewPurchase' + id,
text: '查看采购申请', text: '查看采购申请',
url: web_app.name + '/sapPurchaseApproval/showSapPurchaseApprovalDetail.job?bizId=' + id url: web_app.name + '/sapPurchaseApproval/showSapPurchaseApprovalDetail.job?isReadOnly=true&bizId=' + id
}); });
} }
......
...@@ -2,6 +2,7 @@ package com.huigou.topsun.sap.purchaseApproval.application; ...@@ -2,6 +2,7 @@ package com.huigou.topsun.sap.purchaseApproval.application;
import com.huigou.topsun.sap.purchaseApproval.domain.SapPurchaseApproval; import com.huigou.topsun.sap.purchaseApproval.domain.SapPurchaseApproval;
import com.huigou.topsun.sap.purchaseApproval.domain.query.SapPurchaseApprovalQueryRequest; import com.huigou.topsun.sap.purchaseApproval.domain.query.SapPurchaseApprovalQueryRequest;
import com.huigou.topsun.sap.purchaseApproval.domain.vo.SapPurchaseApprovalDto;
import com.huigou.topsun.sap.purchaseApproval.domain.vo.SapPurchaseApprovalVo; import com.huigou.topsun.sap.purchaseApproval.domain.vo.SapPurchaseApprovalVo;
import java.util.Map; import java.util.Map;
...@@ -20,5 +21,5 @@ public interface SapPurchaseApprovalApplication { ...@@ -20,5 +21,5 @@ public interface SapPurchaseApprovalApplication {
SapPurchaseApproval loadSapPurchaseApproval(String id); SapPurchaseApproval loadSapPurchaseApproval(String id);
void saveSapPurchaseApprovalVo(SapPurchaseApprovalVo sapPurchaseApprovalVo); void saveSapPurchaseApprovalVo(SapPurchaseApprovalDto sapPurchaseApprovalDto);
} }
...@@ -14,6 +14,7 @@ import com.huigou.topsun.sap.purchaseApproval.application.SapPurchaseApprovalIte ...@@ -14,6 +14,7 @@ import com.huigou.topsun.sap.purchaseApproval.application.SapPurchaseApprovalIte
import com.huigou.topsun.sap.purchaseApproval.domain.SapPurchaseApproval; import com.huigou.topsun.sap.purchaseApproval.domain.SapPurchaseApproval;
import com.huigou.topsun.sap.purchaseApproval.domain.SapPurchaseApprovalItem; import com.huigou.topsun.sap.purchaseApproval.domain.SapPurchaseApprovalItem;
import com.huigou.topsun.sap.purchaseApproval.domain.query.SapPurchaseApprovalQueryRequest; import com.huigou.topsun.sap.purchaseApproval.domain.query.SapPurchaseApprovalQueryRequest;
import com.huigou.topsun.sap.purchaseApproval.domain.vo.SapPurchaseApprovalDto;
import com.huigou.topsun.sap.purchaseApproval.domain.vo.SapPurchaseApprovalItemVo; import com.huigou.topsun.sap.purchaseApproval.domain.vo.SapPurchaseApprovalItemVo;
import com.huigou.topsun.sap.purchaseApproval.domain.vo.SapPurchaseApprovalVo; import com.huigou.topsun.sap.purchaseApproval.domain.vo.SapPurchaseApprovalVo;
import com.huigou.topsun.sap.purchaseApproval.repository.SapPurchaseApprovalRepository; import com.huigou.topsun.sap.purchaseApproval.repository.SapPurchaseApprovalRepository;
...@@ -24,9 +25,7 @@ import com.huigou.uasp.bpm.FlowBroker; ...@@ -24,9 +25,7 @@ import com.huigou.uasp.bpm.FlowBroker;
import com.huigou.uasp.bpm.ProcessAction; import com.huigou.uasp.bpm.ProcessAction;
import com.huigou.uasp.bpm.ProcessStartModel; import com.huigou.uasp.bpm.ProcessStartModel;
import com.huigou.uasp.bpm.engine.application.WorkflowApplication; import com.huigou.uasp.bpm.engine.application.WorkflowApplication;
import com.huigou.util.ClassHelper; import com.huigou.util.*;
import com.huigou.util.Constants;
import com.huigou.util.SDO;
import org.activiti.engine.delegate.DelegateExecution; import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.DelegateTask; import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.runtime.ProcessInstance;
...@@ -35,10 +34,9 @@ import org.springframework.stereotype.Service; ...@@ -35,10 +34,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.text.ParseException;
import java.util.HashMap; import java.text.SimpleDateFormat;
import java.util.List; import java.util.*;
import java.util.Map;
/** /**
* @Auther: xin.lu * @Auther: xin.lu
...@@ -158,9 +156,9 @@ public class SapPurchaseApprovalApplicationImpl extends FlowBroker implements Sa ...@@ -158,9 +156,9 @@ public class SapPurchaseApprovalApplicationImpl extends FlowBroker implements Sa
@Override @Override
@Transactional @Transactional
public void saveSapPurchaseApprovalVo(SapPurchaseApprovalVo sapPurchaseApprovalVo) { public void saveSapPurchaseApprovalVo(SapPurchaseApprovalDto sapPurchaseApprovalDto) {
SapPurchaseApproval sapPurchaseApproval = new SapPurchaseApproval(); SapPurchaseApproval sapPurchaseApproval = new SapPurchaseApproval();
BeanUtil.copyProperties(sapPurchaseApprovalVo,sapPurchaseApproval); BeanUtil.copyProperties(sapPurchaseApprovalDto.getLsDeader(),sapPurchaseApproval);
//初始化用户信息 //初始化用户信息
String createdById = "5EEB2DC861694A65933CB4CE9A8D870A@C18E23AAAA6940E09DF7C122332C51E0"; String createdById = "5EEB2DC861694A65933CB4CE9A8D870A@C18E23AAAA6940E09DF7C122332C51E0";
Operator operator = operatorApplication.createOperatorByPersonMemberId(createdById); Operator operator = operatorApplication.createOperatorByPersonMemberId(createdById);
...@@ -171,11 +169,28 @@ public class SapPurchaseApprovalApplicationImpl extends FlowBroker implements Sa ...@@ -171,11 +169,28 @@ public class SapPurchaseApprovalApplicationImpl extends FlowBroker implements Sa
sapPurchaseApproval.setId(bizId); sapPurchaseApproval.setId(bizId);
sapPurchaseApproval = this.sapPurchaseApprovalRepository.save(sapPurchaseApproval); sapPurchaseApproval = this.sapPurchaseApprovalRepository.save(sapPurchaseApproval);
List<SapPurchaseApprovalItemVo> approvalItemVoList = sapPurchaseApprovalVo.getItemVos(); List<SapPurchaseApprovalItemVo> approvalItemVoList = sapPurchaseApprovalDto.getItems();
List<SapPurchaseApprovalItem> sapPurchaseApprovalItems = new ArrayList<>(); List<SapPurchaseApprovalItem> sapPurchaseApprovalItems = new ArrayList<>();
approvalItemVoList.forEach(approvalItemVo->{ approvalItemVoList.forEach(approvalItemVo->{
SapPurchaseApprovalItem sapPurchaseApprovalItem = new SapPurchaseApprovalItem(); SapPurchaseApprovalItem sapPurchaseApprovalItem = new SapPurchaseApprovalItem();
BeanUtil.copyProperties(approvalItemVo,sapPurchaseApprovalItem); BeanUtil.copyProperties(approvalItemVo,sapPurchaseApprovalItem);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
if (StringUtil.isNotBlank(approvalItemVo.getLfdat())){
try {
Date parse = dateFormat.parse(approvalItemVo.getLfdat());
sapPurchaseApprovalItem.setLfdat(parse);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
if (StringUtil.isNotBlank(approvalItemVo.getBadat())){
try {
Date parse = dateFormat.parse(approvalItemVo.getBadat());
sapPurchaseApprovalItem.setBadat(parse);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
sapPurchaseApprovalItems.add(sapPurchaseApprovalItem); sapPurchaseApprovalItems.add(sapPurchaseApprovalItem);
}); });
sapPurchaseApprovalItemApplication.saveSapPurchaseApprovalItems(sapPurchaseApproval.getId(),sapPurchaseApprovalItems); sapPurchaseApprovalItemApplication.saveSapPurchaseApprovalItems(sapPurchaseApproval.getId(),sapPurchaseApprovalItems);
...@@ -236,6 +251,9 @@ public class SapPurchaseApprovalApplicationImpl extends FlowBroker implements Sa ...@@ -236,6 +251,9 @@ public class SapPurchaseApprovalApplicationImpl extends FlowBroker implements Sa
if (!"S".equals(resultMap.get("TYPE"))) { if (!"S".equals(resultMap.get("TYPE"))) {
throw new RuntimeException("数据传输失败,请稍后手动重试!"+resultMap.get("MESSAGE")); throw new RuntimeException("数据传输失败,请稍后手动重试!"+resultMap.get("MESSAGE"));
} }
sapPurchaseApproval.setType((String) resultMap.get("TYPE"));
sapPurchaseApproval.setMessage((String) resultMap.get("MESSAGE"));
sapPurchaseApprovalRepository.save(sapPurchaseApproval);
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException("数据传输失败请检查数据后重试!"+e.getMessage()); throw new RuntimeException("数据传输失败请检查数据后重试!"+e.getMessage());
} }
......
...@@ -2,9 +2,11 @@ package com.huigou.topsun.sap.purchaseApproval.controller; ...@@ -2,9 +2,11 @@ package com.huigou.topsun.sap.purchaseApproval.controller;
import com.huigou.context.Operator; import com.huigou.context.Operator;
import com.huigou.context.OrgUnit; import com.huigou.context.OrgUnit;
import com.huigou.topsun.sap.common.DefaultHttpClient;
import com.huigou.topsun.sap.purchaseApproval.application.SapPurchaseApprovalApplication; import com.huigou.topsun.sap.purchaseApproval.application.SapPurchaseApprovalApplication;
import com.huigou.topsun.sap.purchaseApproval.domain.SapPurchaseApproval; import com.huigou.topsun.sap.purchaseApproval.domain.SapPurchaseApproval;
import com.huigou.topsun.sap.purchaseApproval.domain.query.SapPurchaseApprovalQueryRequest; import com.huigou.topsun.sap.purchaseApproval.domain.query.SapPurchaseApprovalQueryRequest;
import com.huigou.topsun.sap.purchaseApproval.domain.vo.SapPurchaseApprovalDto;
import com.huigou.topsun.sap.purchaseApproval.domain.vo.SapPurchaseApprovalVo; import com.huigou.topsun.sap.purchaseApproval.domain.vo.SapPurchaseApprovalVo;
import com.huigou.uasp.annotation.ControllerMapping; import com.huigou.uasp.annotation.ControllerMapping;
import com.huigou.uasp.annotation.SkipAuth; import com.huigou.uasp.annotation.SkipAuth;
...@@ -12,6 +14,8 @@ import com.huigou.uasp.bmp.common.BizBillStatus; ...@@ -12,6 +14,8 @@ import com.huigou.uasp.bmp.common.BizBillStatus;
import com.huigou.uasp.client.CommonController; import com.huigou.uasp.client.CommonController;
import com.huigou.util.JSONUtil; import com.huigou.util.JSONUtil;
import com.huigou.util.SDO; import com.huigou.util.SDO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -28,6 +32,7 @@ import java.util.Map; ...@@ -28,6 +32,7 @@ import java.util.Map;
@Controller @Controller
@ControllerMapping("/sapPurchaseApproval") @ControllerMapping("/sapPurchaseApproval")
public class SapPurchaseApprovalController extends CommonController { public class SapPurchaseApprovalController extends CommonController {
private final static Logger LOG = LoggerFactory.getLogger(SapPurchaseApprovalController.class);
@Resource @Resource
private SapPurchaseApprovalApplication sapPurchaseApprovalApplication; private SapPurchaseApprovalApplication sapPurchaseApprovalApplication;
@Override @Override
...@@ -38,12 +43,18 @@ public class SapPurchaseApprovalController extends CommonController { ...@@ -38,12 +43,18 @@ public class SapPurchaseApprovalController extends CommonController {
@SkipAuth @SkipAuth
@RequestMapping( value = "/getSapPurchaseApproval") @RequestMapping( value = "/getSapPurchaseApproval")
@ResponseBody @ResponseBody
public HashMap<String, Object> getSapPurchaseApproval(@RequestBody SapPurchaseApprovalVo sapPurchaseApprovalVo){ public HashMap<String, Object> getSapPurchaseApproval(@RequestBody SapPurchaseApprovalDto sapPurchaseApprovalDto){
//SDO sdo = this.getSDO(); //SDO sdo = this.getSDO();
this.sapPurchaseApprovalApplication.saveSapPurchaseApprovalVo(sapPurchaseApprovalVo);
HashMap<String, Object> messageMap = new HashMap<>(); HashMap<String, Object> messageMap = new HashMap<>();
messageMap.put("Message_Status","S"); messageMap.put("Message_Status","S");
messageMap.put("Message_Text","成功"); messageMap.put("Message_Text","成功");
LOG.info("SAP采购申请审批数据=={}",sapPurchaseApprovalDto);
try {
this.sapPurchaseApprovalApplication.saveSapPurchaseApprovalVo(sapPurchaseApprovalDto);
}catch (RuntimeException e){
messageMap.put("Message_Status","E");
messageMap.put("Message_Text",e);
}
return messageMap; return messageMap;
} }
......
...@@ -32,6 +32,17 @@ public class SapPurchaseApproval extends FlowBillAbstractEntity { ...@@ -32,6 +32,17 @@ public class SapPurchaseApproval extends FlowBillAbstractEntity {
@Column(name = "BATXT") @Column(name = "BATXT")
private String batxt; private String batxt;
/**
* 消息类型
*/
@Column(name = "TYPE")
private String type;
/**
* 消息内容
*/
@Column(name = "MESSAGE")
private String message;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Override @Override
......
package com.huigou.topsun.sap.purchaseApproval.domain.vo;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* @Auther: xin.lu
* @Date: 2024/03/07/15:04
* @Description:
*/
@Data
public class SapPurchaseApprovalDto implements Serializable {
@JsonProperty("LS_HEADER")
private SapPurchaseApprovalVo lsDeader;
@JsonProperty("LT_ITEMS")
private List<SapPurchaseApprovalItemVo> items;
}
package com.huigou.topsun.sap.purchaseApproval.domain.vo; package com.huigou.topsun.sap.purchaseApproval.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
/** /**
...@@ -16,132 +19,158 @@ public class SapPurchaseApprovalItemVo { ...@@ -16,132 +19,158 @@ public class SapPurchaseApprovalItemVo {
/** /**
* 项目编号(已删除(EBAN-LOEKZ=X)者不传EP;已结清(EBAN-EBAKZ=X)者也不传(结清指已全部转为采购订单)) * 项目编号(已删除(EBAN-LOEKZ=X)者不传EP;已结清(EBAN-EBAKZ=X)者也不传(结清指已全部转为采购订单))
*/ */
@JsonProperty("BNFPO")
private String bnfpo; private String bnfpo;
/** /**
* 项目类别 * 项目类别
*/ */
@JsonProperty("PSTYP")
private String pstyp; private String pstyp;
/** /**
* 项目类别描述 * 项目类别描述
*/ */
@JsonProperty("PTEXT")
private String ptext; private String ptext;
/** /**
* 科目分配类别 * 科目分配类别
*/ */
@JsonProperty("KNTTP")
private String knttp; private String knttp;
/** /**
* 科目分配类别描述 * 科目分配类别描述
*/ */
@JsonProperty("KNTTX")
private String knttx; private String knttx;
/** /**
* 物料号 * 物料号
*/ */
@JsonProperty("MATNR")
private String matnr; private String matnr;
/** /**
* 物料描述 * 物料描述
*/ */
@JsonProperty("TXZ01")
private String txz01; private String txz01;
/** /**
* 物料组 * 物料组
*/ */
@JsonProperty("MATKL")
private String matkl; private String matkl;
/** /**
* 物料组描述 * 物料组描述
*/ */
@JsonProperty("WGBEZ")
private String wgbez; private String wgbez;
/** /**
* 采购申请数量 * 采购申请数量
*/ */
@JsonProperty("MENGE")
private BigDecimal menge; private BigDecimal menge;
/** /**
* 采购申请计量单位 * 采购申请计量单位
*/ */
@JsonProperty("MEINS")
private String meins; private String meins;
/** /**
* 单位描述 * 单位描述
*/ */
@JsonProperty("MSEHL")
private String msehl; private String msehl;
/** /**
* 要求交货日期 * 要求交货日期
*/ */
@JsonFormat(pattern = "yyyy-MM-dd") @JsonProperty("LFDAT")
private Date lfdat; private String lfdat;
/** /**
* 工厂 * 工厂
*/ */
@JsonProperty("WERKS")
private String werks; private String werks;
/** /**
* 名称 * 名称
*/ */
@JsonProperty("NAME1")
private String name1; private String name1;
/** /**
* 库存地点 * 库存地点
*/ */
@JsonProperty("LGORT")
private String lgort; private String lgort;
/** /**
* 库存地点的描述 * 库存地点的描述
*/ */
@JsonProperty("LGOBE")
private String lgobe; private String lgobe;
/** /**
* 采购组 * 采购组
*/ */
@JsonProperty("EKGRP")
private String ekgrp; private String ekgrp;
/** /**
* 采购组描述 * 采购组描述
*/ */
@JsonProperty("EKNAM")
private String eknam; private String eknam;
/** /**
* 评估价格 * 评估价格
*/ */
@JsonProperty("PREIS")
private BigDecimal preis; private BigDecimal preis;
/** /**
* 价格单位 * 价格单位
*/ */
@JsonProperty("PEINH")
private String peinh; private String peinh;
/** /**
* 币种 * 币种
*/ */
@JsonProperty("WAERS")
private String waers; private String waers;
/** /**
* 评估金额 * 评估金额
*/ */
@JsonProperty("RLWRT")
private BigDecimal rlwrt; private BigDecimal rlwrt;
/** /**
* 0需求(请求)日期 * 0需求(请求)日期
*/ */
private Date badat; @JsonProperty("BADAT")
//@JsonFormat(pattern = "yyyy-MM-dd")
private String badat;
/** /**
* 负责创建对象的人员姓名 * 负责创建对象的人员姓名
*/ */
@JsonProperty("ERNAM")
private String ernam; private String ernam;
/** /**
* 完整的人员名称 * 完整的人员名称
*/ */
@JsonProperty("NAME_TEXT")
private String nameText; private String nameText;
} }
\ No newline at end of file
package com.huigou.topsun.sap.purchaseApproval.domain.vo; package com.huigou.topsun.sap.purchaseApproval.domain.vo;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
...@@ -13,17 +14,20 @@ import java.util.List; ...@@ -13,17 +14,20 @@ import java.util.List;
*/ */
@Data @Data
public class SapPurchaseApprovalVo implements Serializable { public class SapPurchaseApprovalVo implements Serializable {
@JsonProperty("BANFN")
private String banfn; private String banfn;
/** /**
* 采购申请类型(只传输四种:NB、ZNB1、ZNB2和ZSTR) * 采购申请类型(只传输四种:NB、ZNB1、ZNB2和ZSTR)
*/ */
@JsonProperty("BSART")
private String bsart; private String bsart;
/** /**
* 采购申请类型描述 * 采购申请类型描述
*/ */
@JsonProperty("BATXT")
private String batxt; private String batxt;
private List<SapPurchaseApprovalItemVo> itemVos; //private List<SapPurchaseApprovalItemVo> itemVos;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment