形态转换保存时辅助属性根据物料库存信息页签判断
This commit is contained in:
parent
f015b4e319
commit
499e1f6b9e
|
@ -0,0 +1,429 @@
|
||||||
|
package nc.vo.ic.m4n.entity.deal;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import nc.bs.dao.BaseDAO;
|
||||||
|
import nc.bs.dao.DAOException;
|
||||||
|
import nc.bs.ic.general.util.RuleUtils;
|
||||||
|
import nc.bs.ic.pub.env.ICBSContext;
|
||||||
|
import nc.vo.bd.material.stock.MaterialStockVO;
|
||||||
|
import nc.vo.ic.invadjust.lang.InvAdjustRes;
|
||||||
|
import nc.vo.ic.m4n.entity.TransformBodyVO;
|
||||||
|
import nc.vo.ic.m4n.entity.TransformRowFlag;
|
||||||
|
import nc.vo.ic.m4n.entity.TransformVO;
|
||||||
|
import nc.vo.ic.pub.define.ICPubMetaNameConst;
|
||||||
|
import nc.vo.ic.pub.util.CollectionUtils;
|
||||||
|
import nc.vo.ic.pub.util.StringUtil;
|
||||||
|
import nc.vo.ic.pub.util.VOEntityUtil;
|
||||||
|
import nc.vo.ic.special.check.SpecialBillEntityCheck;
|
||||||
|
import nc.vo.pub.BusinessException;
|
||||||
|
import nc.vo.pub.VOStatus;
|
||||||
|
import nc.vo.pub.lang.UFBoolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* <b>本类主要完成以下功能:</b> 形态转换数据校验 1.行类型校验 2.转换前后的物料维度校验 3.必输项及数量、主数量非空校验 限BS端调用
|
||||||
|
*
|
||||||
|
* <ul>
|
||||||
|
* <li>
|
||||||
|
* </ul>
|
||||||
|
* <p>
|
||||||
|
* <p>
|
||||||
|
*
|
||||||
|
* @version 6.0
|
||||||
|
* @since 6.0
|
||||||
|
* @author chennn
|
||||||
|
* @time 2010-5-31 下午04:35:35
|
||||||
|
*/
|
||||||
|
public class TransformVOChecker {
|
||||||
|
|
||||||
|
public void checkNullItem(TransformVO bill) throws BusinessException {
|
||||||
|
|
||||||
|
new SpecialBillEntityCheck().checkNullItem(bill);
|
||||||
|
List<String> errVendorRows = new ArrayList<String>();// 供应商
|
||||||
|
List<String> errProductRows = new ArrayList<String>();// 生产厂商
|
||||||
|
List<String> errProjectRows = new ArrayList<String>();// 项目
|
||||||
|
List<String> errCffileidRows = new ArrayList<String>();// 特征码
|
||||||
|
List<String> errStateRows = new ArrayList<String>();
|
||||||
|
List<String> errNumRows = new ArrayList<String>();// 数量和主数量
|
||||||
|
List<String> errCasscustRows = new ArrayList<String>();
|
||||||
|
ICBSContext context = new ICBSContext();
|
||||||
|
for (TransformBodyVO body : bill.getBodys()) {
|
||||||
|
// 过滤已经删除或者没有修改的表体行
|
||||||
|
if (body.getStatus() == VOStatus.DELETED || body.getStatus() == VOStatus.UNCHANGED) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String cmaterialvid = body.getCmaterialvid();
|
||||||
|
if (!StringUtil.isSEmptyOrNull(cmaterialvid) && (body.getNnum() == null || body.getNassistnum() == null)) {
|
||||||
|
errNumRows.add(body.getCrowno());
|
||||||
|
}
|
||||||
|
if (this.isVendorChosen(cmaterialvid, context) && StringUtil.isSEmptyOrNull(body.getCvendorid())) {
|
||||||
|
errVendorRows.add(body.getCrowno());
|
||||||
|
}
|
||||||
|
// 泰开项目客开
|
||||||
|
|
||||||
|
// 项目字段根据库存信息页签-可用量按辅助属性检查是否勾选进行判断
|
||||||
|
String pk_org = bill.getHead().getPk_org();
|
||||||
|
Boolean needCheckProd = checkProdect(cmaterialvid, pk_org);
|
||||||
|
if (needCheckProd&&this.isProductorChosen(cmaterialvid, context) && StringUtil.isSEmptyOrNull(body.getCproductorid())) {
|
||||||
|
errProductRows.add(body.getCrowno());
|
||||||
|
}
|
||||||
|
// 项目字段根据库存信息页签-可用量按辅助属性检查是否勾选进行判断
|
||||||
|
Boolean needCheckProject = checkProject(cmaterialvid, pk_org);
|
||||||
|
if (needCheckProject&&this.isProjectChosen(cmaterialvid, context) && StringUtil.isSEmptyOrNull(body.getCprojectid())) {
|
||||||
|
errProjectRows.add(body.getCrowno());
|
||||||
|
}
|
||||||
|
if (this.isInvStateManage(cmaterialvid, context) && StringUtil.isSEmptyOrNull(body.getCstateid())) {
|
||||||
|
errStateRows.add(body.getCrowno());
|
||||||
|
}
|
||||||
|
if (this.isCasscustChosen(cmaterialvid, context) && StringUtil.isSEmptyOrNull(body.getCasscustid())) {
|
||||||
|
errCasscustRows.add(body.getCrowno());
|
||||||
|
}
|
||||||
|
if (this.isCffileidChosen(cmaterialvid, context) && StringUtil.isSEmptyOrNull(body.getCffileid())) {
|
||||||
|
errCffileidRows.add(body.getCrowno());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
RuleUtils util = new RuleUtils();
|
||||||
|
util.showErrByRows(errVendorRows, InvAdjustRes.getVendorNullErr());
|
||||||
|
util.showErrByRows(errProductRows, InvAdjustRes.getProductorNullErr());
|
||||||
|
util.showErrByRows(errProjectRows, InvAdjustRes.getProjectNullErr());
|
||||||
|
util.showErrByRows(errStateRows, InvAdjustRes.getStateNullErr());
|
||||||
|
util.showErrByRows(errNumRows, InvAdjustRes.getNumNullErr());
|
||||||
|
util.showErrByRows(errCasscustRows, InvAdjustRes.getCasscustNullErr());
|
||||||
|
util.showErrByRows(errCffileidRows, InvAdjustRes.getCffileidNullErr());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据物料查询物料库存信息页签-可用量按辅助属性检查是否勾选进行判断
|
||||||
|
*
|
||||||
|
* @param cmaterialvid
|
||||||
|
* @param pk_org
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private Boolean checkProject(String cmaterialvid, String pk_org) {
|
||||||
|
String whereSql = " pk_material='" + cmaterialvid + "' and pk_org='" + pk_org + "' and nvl(dr,0)=0 ";
|
||||||
|
List<MaterialStockVO> list = null;
|
||||||
|
try {
|
||||||
|
list = (List<MaterialStockVO>) new BaseDAO().retrieveByClause(MaterialStockVO.class, whereSql);
|
||||||
|
} catch (DAOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
if (list != null && list.size() > 0) {
|
||||||
|
return list.get(0).getFixasst2()==null?false:list.get(0).getFixasst2().booleanValue();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据物料查询物料库存信息页签-可用量按辅助属性检查是否勾选进行判断
|
||||||
|
*
|
||||||
|
* @param cmaterialvid
|
||||||
|
* @param pk_org
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private Boolean checkProdect(String cmaterialvid, String pk_org) {
|
||||||
|
String whereSql = " pk_material='" + cmaterialvid + "' and pk_org='" + pk_org + "' and nvl(dr,0)=0 ";
|
||||||
|
List<MaterialStockVO> list = null;
|
||||||
|
try {
|
||||||
|
list = (List<MaterialStockVO>) new BaseDAO().retrieveByClause(MaterialStockVO.class, whereSql);
|
||||||
|
} catch (DAOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
if (list != null && list.size() > 0) {
|
||||||
|
return list.get(0).getFixasst4() == null ? false : list.get(0).getFixasst4().booleanValue();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Integer> checkRowType(TransformVO bill) throws BusinessException {
|
||||||
|
TransformBodyVO[] bodyvos = bill.getBodys();
|
||||||
|
int bodyLength = bodyvos.length;
|
||||||
|
if (bodyLength <= 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (bodyLength < 2) {
|
||||||
|
throw new BusinessException(InvAdjustRes.getRowLengErr());
|
||||||
|
}
|
||||||
|
List<Integer> beforeIndex = new ArrayList<Integer>();
|
||||||
|
for (int i = 0; i < bodyLength; i++) {
|
||||||
|
if (null == bodyvos[i].getFbillrowflag()) {
|
||||||
|
throw new BusinessException(InvAdjustRes.getRowTypeNullErr());
|
||||||
|
}
|
||||||
|
if (bodyvos[i].getFbillrowflag().equals(TransformRowFlag.BEFORECONVERT.value())
|
||||||
|
&& VOStatus.DELETED != bodyvos[i].getStatus()) {
|
||||||
|
beforeIndex.add(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!bodyvos[0].getFbillrowflag().equals(TransformRowFlag.BEFORECONVERT.value())
|
||||||
|
|| !bodyvos[bodyLength - 1].getFbillrowflag().equals(TransformRowFlag.AFTERCONVERT.value())) {
|
||||||
|
throw new BusinessException(InvAdjustRes.getFirstAndLastRowTypeErr());
|
||||||
|
}
|
||||||
|
if (beforeIndex.size() > bodyLength / 2) {
|
||||||
|
throw new BusinessException(InvAdjustRes.getTransformRowTypeErr());
|
||||||
|
}
|
||||||
|
for (int i = 0, j = i + 1; j < beforeIndex.size(); i++, j++) {
|
||||||
|
int currentindex = beforeIndex.get(i);
|
||||||
|
int nextindex = beforeIndex.get(j);
|
||||||
|
if (nextindex == currentindex + 1) {
|
||||||
|
throw new BusinessException(InvAdjustRes.getTransformRowTypeErr());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return beforeIndex;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<TransformBodyVO> getBodysButDelete(TransformBodyVO[] bodyVOs) {
|
||||||
|
List<TransformBodyVO> aftertempRows = new ArrayList<TransformBodyVO>();
|
||||||
|
for (TransformBodyVO bodyVO : bodyVOs) {
|
||||||
|
if (VOStatus.DELETED == bodyVO.getStatus()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
aftertempRows.add(bodyVO);
|
||||||
|
}
|
||||||
|
return aftertempRows;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 方法功能描述:
|
||||||
|
* <p>
|
||||||
|
* 检查转换前后的行内容是否存在转换前行等于转换后的行 <b>参数说明</b>
|
||||||
|
*
|
||||||
|
* @param bill
|
||||||
|
* @throws BusinessException
|
||||||
|
* <p>
|
||||||
|
* @since 6.0
|
||||||
|
* @author chennn
|
||||||
|
* @time 2010-6-1 下午03:06:04
|
||||||
|
*/
|
||||||
|
public void checkTranformItem(TransformVO bill, List<Integer> beforeIndex) throws BusinessException {
|
||||||
|
TransformBodyVO[] bodyVOs = bill.getBodys();
|
||||||
|
Map<TransformBodyVO, List<String>> errInfo = new HashMap<TransformBodyVO, List<String>>();
|
||||||
|
List<TransformBodyVO> aftertempRows = this.getBodysButDelete(bodyVOs);
|
||||||
|
if (beforeIndex.size() == 1) {
|
||||||
|
TransformBodyVO beforeRow = bodyVOs[beforeIndex.get(0)];
|
||||||
|
List<TransformBodyVO> afterRows = aftertempRows.subList(1, aftertempRows.size());
|
||||||
|
List<String> errRows = this.isBeforeSameWithAfter(beforeRow, afterRows);
|
||||||
|
if (errRows.size() > 0) {
|
||||||
|
errInfo.put(beforeRow, errRows);
|
||||||
|
this.showItemSameErr(errInfo);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
List<TransformBodyVO> errBeforeRow = new ArrayList<TransformBodyVO>();
|
||||||
|
for (int i = 0, j = i + 1; j < beforeIndex.size(); i++, j++) {
|
||||||
|
int currentIndex = beforeIndex.get(i);
|
||||||
|
int nextIndex = beforeIndex.get(j);
|
||||||
|
TransformBodyVO beforeRow = bodyVOs[currentIndex];
|
||||||
|
List<TransformBodyVO> afterRows = new ArrayList<TransformBodyVO>();
|
||||||
|
for (int k = currentIndex + 1; k < nextIndex; k++) {
|
||||||
|
// 过滤已删除表体行
|
||||||
|
if (VOStatus.DELETED == bodyVOs[k].getStatus()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
afterRows.add(bodyVOs[k]);
|
||||||
|
}
|
||||||
|
List<String> errAfters = this.isBeforeSameWithAfter(beforeRow, afterRows);
|
||||||
|
if (errAfters.size() > 0) {
|
||||||
|
errBeforeRow.add(beforeRow);
|
||||||
|
errInfo.put(beforeRow, errAfters);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int lastBeforeIndex = beforeIndex.get(beforeIndex.size() - 1);
|
||||||
|
TransformBodyVO beforeRow = bodyVOs[lastBeforeIndex];
|
||||||
|
// List<TransformBodyVO> afterBodyRows = aftertempRows.subList(
|
||||||
|
// lastBeforeIndex + 1, aftertempRows.size());
|
||||||
|
|
||||||
|
// begin --调整最后一次校验表体行取值方式 lihui13 20180915
|
||||||
|
List<TransformBodyVO> afterBodyRows = new ArrayList<TransformBodyVO>();
|
||||||
|
int k = lastBeforeIndex + 1;
|
||||||
|
while (k != bodyVOs.length) {
|
||||||
|
if (k > bodyVOs.length) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (VOStatus.DELETED == bodyVOs[k].getStatus()) {
|
||||||
|
k++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
afterBodyRows.add(bodyVOs[k]);
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
// end
|
||||||
|
List<String> errAfters = this.isBeforeSameWithAfter(beforeRow, afterBodyRows);
|
||||||
|
if (errAfters.size() > 0) {
|
||||||
|
errBeforeRow.add(beforeRow);
|
||||||
|
errInfo.put(beforeRow, errAfters);
|
||||||
|
}
|
||||||
|
this.showItemSameErr(errInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String[] getKeys(TransformBodyVO beforeRow, String[] initFields) {
|
||||||
|
|
||||||
|
List<String> keys = new ArrayList<String>();
|
||||||
|
CollectionUtils.addArrayToList(keys, initFields);
|
||||||
|
if (keys.contains(TransformBodyVO.VFREE_PREFIX)) {
|
||||||
|
for (int i = 1; i <= TransformBodyVO.VREE_NUM; i++) {
|
||||||
|
String vfree_i = TransformBodyVO.VFREE_PREFIX + i;
|
||||||
|
keys.add(vfree_i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String cmaterialvid = beforeRow.getCmaterialvid();
|
||||||
|
ICBSContext context = new ICBSContext();
|
||||||
|
if (this.isVendorChosen(cmaterialvid, context)) {
|
||||||
|
keys.add(TransformBodyVO.CVENDORID);
|
||||||
|
}
|
||||||
|
if (this.isProductorChosen(cmaterialvid, context)) {
|
||||||
|
keys.add(TransformBodyVO.CPRODUCTORID);
|
||||||
|
}
|
||||||
|
if (this.isProjectChosen(cmaterialvid, context)) {
|
||||||
|
keys.add(TransformBodyVO.CPROJECTID);
|
||||||
|
}
|
||||||
|
if (this.isInvStateManage(cmaterialvid, context)) {
|
||||||
|
keys.add(TransformBodyVO.CSTATEID);
|
||||||
|
}
|
||||||
|
if (this.isCffileidChosen(cmaterialvid, context)) {
|
||||||
|
keys.add(ICPubMetaNameConst.CFFILEID);
|
||||||
|
}
|
||||||
|
return keys.toArray(new String[keys.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> isBeforeSameWithAfter(TransformBodyVO beforeRow, List<TransformBodyVO> afterRows) {
|
||||||
|
|
||||||
|
String[] fields = new String[] { TransformBodyVO.CMATERIALVID, TransformBodyVO.CASTUNITID,
|
||||||
|
TransformBodyVO.VBATCHCODE, TransformBodyVO.VFREE_PREFIX, TransformBodyVO.CASSCUSTID };
|
||||||
|
|
||||||
|
String[] keys = this.getKeys(beforeRow, fields);
|
||||||
|
Object[] values = VOEntityUtil.getVOValues(beforeRow, keys);
|
||||||
|
String key = StringUtil.mergeString(values, null, null);
|
||||||
|
List<String> errRows = new ArrayList<String>();
|
||||||
|
for (TransformBodyVO vo : afterRows) {
|
||||||
|
Object[] afterValues = VOEntityUtil.getVOValues(vo, keys);
|
||||||
|
String afterKey = StringUtil.mergeString(afterValues, null, null);
|
||||||
|
if (StringUtil.isStringEqual(key, afterKey)) {
|
||||||
|
errRows.add(vo.getCrowno());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return errRows;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 方法功能描述:
|
||||||
|
* <p>
|
||||||
|
* 物料是否库存状态管理 <b>参数说明</b>
|
||||||
|
*
|
||||||
|
* @param cmaterialvid
|
||||||
|
* @return
|
||||||
|
* <p>
|
||||||
|
* @since 6.0
|
||||||
|
* @author chennn
|
||||||
|
* @time 2010-6-1 下午04:21:39
|
||||||
|
*/
|
||||||
|
private boolean isInvStateManage(String cmaterialvid, ICBSContext context) {
|
||||||
|
UFBoolean fix1 = context.getInvInfo().getInvBasVO(cmaterialvid).getFix1();
|
||||||
|
return fix1 == null ? false : fix1.booleanValue();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 方法功能描述:
|
||||||
|
* <p>
|
||||||
|
* 物料是否勾选项目辅助属性 <b>参数说明</b>
|
||||||
|
*
|
||||||
|
* @param cmaterialvid
|
||||||
|
* @return
|
||||||
|
* <p>
|
||||||
|
* @since 6.0
|
||||||
|
* @author chennn
|
||||||
|
* @time 2010-6-1 下午02:24:29
|
||||||
|
*/
|
||||||
|
private boolean isProjectChosen(String cmaterialvid, ICBSContext context) {
|
||||||
|
UFBoolean fix2 = context.getInvInfo().getInvBasVO(cmaterialvid).getFix2();
|
||||||
|
return fix2 == null ? false : fix2.booleanValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 方法功能描述:
|
||||||
|
* <p>
|
||||||
|
* 物料是否勾选特征码辅助属性 <b>参数说明</b>
|
||||||
|
*
|
||||||
|
* @param cmaterialvid
|
||||||
|
* @return
|
||||||
|
* <p>
|
||||||
|
* @since 6.36
|
||||||
|
* @author xuxq3
|
||||||
|
* @time 2015-04-06
|
||||||
|
*/
|
||||||
|
private boolean isCffileidChosen(String cmaterialvid, ICBSContext context) {
|
||||||
|
UFBoolean fix100 = context.getInvInfo().getInvBasVO(cmaterialvid).getFix100();
|
||||||
|
return fix100 == null ? false : fix100.booleanValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否勾选客户辅助属性
|
||||||
|
*
|
||||||
|
* @param cmaterialvid
|
||||||
|
* @param context
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private boolean isCasscustChosen(String cmaterialvid, ICBSContext context) {
|
||||||
|
UFBoolean fix5 = context.getInvInfo().getInvBasVO(cmaterialvid).getFix5();
|
||||||
|
return fix5 == null ? false : fix5.booleanValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 方法功能描述:
|
||||||
|
* <p>
|
||||||
|
* 物料是否勾选供应商辅助属性 <b>参数说明</b>
|
||||||
|
*
|
||||||
|
* @param cmaterialvid
|
||||||
|
* @return
|
||||||
|
* <p>
|
||||||
|
* @since 6.0
|
||||||
|
* @author chennn
|
||||||
|
* @time 2010-6-1 上午10:46:09
|
||||||
|
*/
|
||||||
|
private boolean isVendorChosen(String cmaterialvid, ICBSContext context) {
|
||||||
|
UFBoolean fix3 = context.getInvInfo().getInvBasVO(cmaterialvid).getFix3();
|
||||||
|
return fix3 == null ? false : fix3.booleanValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 方法功能描述:
|
||||||
|
* <p>
|
||||||
|
* 物料是否勾选生产厂商辅助属性 <b>参数说明</b>
|
||||||
|
*
|
||||||
|
* @param cmaterialvid
|
||||||
|
* @return
|
||||||
|
* <p>
|
||||||
|
* @since 6.0
|
||||||
|
* @author chennn
|
||||||
|
* @time 2010-6-1 下午02:24:11
|
||||||
|
*/
|
||||||
|
private boolean isProductorChosen(String cmaterialvid, ICBSContext context) {
|
||||||
|
UFBoolean fix4 = context.getInvInfo().getInvBasVO(cmaterialvid).getFix4();
|
||||||
|
return fix4 == null ? false : fix4.booleanValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showItemSameErr(Map<TransformBodyVO, List<String>> errInfo) throws BusinessException {
|
||||||
|
if (errInfo.size() <= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
StringBuilder errMsg = new StringBuilder();
|
||||||
|
errMsg.append(InvAdjustRes.getBeforeSameAfterErr()).append("\n");
|
||||||
|
for (Map.Entry<TransformBodyVO, List<String>> err : errInfo.entrySet()) {
|
||||||
|
String beforeRowNo = err.getKey().getCrowno();
|
||||||
|
errMsg.append(InvAdjustRes.getBeforeRow() + beforeRowNo).append(" ");
|
||||||
|
for (String afterRow : err.getValue()) {
|
||||||
|
errMsg.append(InvAdjustRes.getAfterRow()).append(afterRow).append(",");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new BusinessException(errMsg.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue