材料出库接口重排行号
This commit is contained in:
parent
a59b2f60c8
commit
a3447b46b6
|
@ -0,0 +1,272 @@
|
|||
package nccloud.api.impl.ic.m4d;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import nc.bs.framework.common.NCLocator;
|
||||
import nc.bs.scmpub.query.SCMBillQuery;
|
||||
import nc.itf.scmpub.reference.uap.pf.PfServiceScmUtil;
|
||||
import nc.pubimpl.ic.api.maintain.BillMaintainTool;
|
||||
import nc.pubitf.ic.m4d.api.IMaterialOutMaintainAPI;
|
||||
import nc.vo.ic.general.define.ICBillFlag;
|
||||
import nc.vo.ic.general.define.ICBillHeadVO;
|
||||
import nc.vo.ic.general.util.ICLocationUtil;
|
||||
import nc.vo.ic.location.ICLocationVO;
|
||||
import nc.vo.ic.m4d.entity.MaterialOutBodyVO;
|
||||
import nc.vo.ic.m4d.entity.MaterialOutHeadVO;
|
||||
import nc.vo.ic.m4d.entity.MaterialOutVO;
|
||||
import nc.vo.ic.pub.define.ICPubMetaNameConst;
|
||||
import nc.vo.pub.BusinessException;
|
||||
import nc.vo.pub.VOStatus;
|
||||
import nc.vo.scmpub.check.billvalidate.BillVOsCheckRule;
|
||||
import nc.vo.scmpub.res.billtype.ICBillType;
|
||||
import nccloud.api.ic.m4d.IAPIMaterialOutMaintain;
|
||||
import nccloud.api.impl.ic.m4d.check.CheckMaterialOutSaveValidator;
|
||||
import nccloud.api.impl.ic.m4d.fill.MaterialOutSaveFillValue;
|
||||
import nccloud.api.impl.ic.m4d.fill.MaterialOutUpdateFillValue;
|
||||
import nccloud.api.impl.ic.pub.check.CheckProhibitUpdateFields;
|
||||
import nccloud.openapi.ic.util.ICAPILocationVOUtils;
|
||||
import nccloud.openapi.scmpub.pub.TransferCodeToPKTool;
|
||||
import nccloud.openapi.scmpub.pub.TransferMapToVOTool;
|
||||
|
||||
/**
|
||||
*
|
||||
* @Description: 库存材料出库单维护实现类
|
||||
*
|
||||
* @author: 曹军
|
||||
* @date: 2019-5-17 上午10:49:30
|
||||
* @version NCC1909
|
||||
*/
|
||||
|
||||
public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain{
|
||||
|
||||
@Override
|
||||
public MaterialOutVO[] save(List<Map<String, Object>> paramList) throws BusinessException {
|
||||
// MapList转聚合VOList
|
||||
List<MaterialOutVO> aggVOList =
|
||||
TransferMapToVOTool.transferMapToAggVO(paramList, MaterialOutVO.class);
|
||||
MaterialOutVO[] vos =
|
||||
aggVOList.toArray(new MaterialOutVO[aggVOList.size()]);
|
||||
// 设置货位序列号VO
|
||||
ICAPILocationVOUtils.setLocationVO(ICBillType.MaterialOut.getCode(),vos);
|
||||
// 1、传入数据基本非空校验
|
||||
BillVOsCheckRule checker =
|
||||
new BillVOsCheckRule(new CheckMaterialOutSaveValidator());
|
||||
checker.check(vos);
|
||||
// 2、编码翻译成pk
|
||||
aggVOList = TransferCodeToPKTool.transferAggVO(aggVOList);
|
||||
// 翻译货位
|
||||
ICAPILocationVOUtils.translate(vos);
|
||||
//其他数据填充
|
||||
new MaterialOutSaveFillValue().setDefaultValue(vos);
|
||||
|
||||
IMaterialOutMaintainAPI materialOut = NCLocator.getInstance().lookup(IMaterialOutMaintainAPI.class);
|
||||
//设置每行行号
|
||||
setMaterialOutRowNum(vos);
|
||||
return materialOut.insertBills(vos);
|
||||
}
|
||||
|
||||
private void setMaterialOutRowNum(MaterialOutVO[] vos) {
|
||||
for (int i = 0; i < vos.length; i++) {
|
||||
MaterialOutVO vo = vos[i];
|
||||
MaterialOutBodyVO[] bodys = vo.getBodys();
|
||||
if (bodys != null && bodys.length > 0) {
|
||||
for (int j = 0; j < bodys.length; j++) {
|
||||
MaterialOutBodyVO body = bodys[j];
|
||||
body.setCrowno(String.valueOf((j +1)*10));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public MaterialOutVO[] update(List<Map<String, Object>> paramList) throws BusinessException {
|
||||
// MapList转聚合VOList
|
||||
List<MaterialOutVO> aggVOList =
|
||||
TransferMapToVOTool.transferMapToAggVO(paramList, MaterialOutVO.class);
|
||||
// 2、编码翻译成pk
|
||||
aggVOList = TransferCodeToPKTool.transferAggVO(aggVOList);
|
||||
MaterialOutVO[] vos =
|
||||
aggVOList.toArray(new MaterialOutVO[aggVOList.size()]);
|
||||
// 设置货位序列号VO
|
||||
ICAPILocationVOUtils.setLocationVO(ICBillType.MaterialOut.getCode(),vos);
|
||||
MaterialOutHeadVO newVO = vos[0].getHead();
|
||||
String cgeneralhid = newVO.getCgeneralhid();
|
||||
if(StringUtils.isEmpty(cgeneralhid)){
|
||||
throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0391")/*@res "修改材料出库单请指定表头主键cgeneralhid值。"*/);
|
||||
}
|
||||
SCMBillQuery<MaterialOutVO> queryTool =
|
||||
new SCMBillQuery<MaterialOutVO>(MaterialOutVO.class);
|
||||
MaterialOutVO[] materialOutVOs = queryTool.queryVOByIDs(new String[]{cgeneralhid});
|
||||
Map<String, ICLocationVO[]> deleteLoc =
|
||||
new HashMap<String, ICLocationVO[]>();
|
||||
// 加载原始单据和货位信息
|
||||
MaterialOutVO[] originBills = queryTool.queryVOByIDs(new String[] {
|
||||
cgeneralhid
|
||||
});
|
||||
ICLocationUtil.loadLocationVOs(originBills);
|
||||
if(ArrayUtils.isEmpty(materialOutVOs)){
|
||||
throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0360")/*@res "没找到要修改的出库单信息,请检查数据的表头主键cgeneralhid。"*/);
|
||||
}else{
|
||||
List<String> headProFields = CheckProhibitUpdateFields.getHeadProhibitFields("4D");
|
||||
List<String> bodyProFields = CheckProhibitUpdateFields.getBodyProhibitFields("4D");
|
||||
MaterialOutHeadVO origVO = materialOutVOs[0].getHead();
|
||||
if(origVO.getFbillflag() == null ||
|
||||
0 != ((Integer) ICBillFlag.FREE.value())
|
||||
.compareTo((Integer) origVO.getFbillflag())){
|
||||
throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0361")/*@res "当前出库单编号:"*/ + origVO.getVbillcode() + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0362")/*@res "不是自由状态,不能修改"*/);
|
||||
}
|
||||
origVO.setStatus(VOStatus.UPDATED);
|
||||
for(String attr : newVO.getAttributeNames()){
|
||||
if(newVO.getAttributeValue(attr) == null) {
|
||||
continue;
|
||||
}
|
||||
if(headProFields.contains(attr)
|
||||
&& !newVO.getAttributeValue(attr).equals(origVO.getAttributeValue(attr))){
|
||||
throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0363")/*@res "表头字段:"*/ + attr + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0364")/*@res "不允许修改。"*/ );
|
||||
}
|
||||
origVO.setAttributeValue(attr, newVO.getAttributeValue(attr));
|
||||
}
|
||||
for (MaterialOutVO orivo : originBills) {
|
||||
MaterialOutBodyVO[] oribodys = orivo.getBodys();
|
||||
for (MaterialOutBodyVO oribody : oribodys) {
|
||||
ICLocationVO[] locationVOs = oribody.getLocationVOs();
|
||||
if (null != locationVOs) {
|
||||
deleteLoc.put(oribody.getCgeneralbid(), locationVOs);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(vos[0].getBodys() != null){
|
||||
Map<String, MaterialOutBodyVO> pkbs = new HashMap<String, MaterialOutBodyVO>();
|
||||
for(MaterialOutBodyVO origBvo : materialOutVOs[0].getBodys()){
|
||||
origBvo.setStatus(VOStatus.UPDATED);
|
||||
pkbs.put(origBvo.getCgeneralbid(), origBvo);
|
||||
}
|
||||
for(MaterialOutBodyVO newBvo : vos[0].getBodys()){
|
||||
MaterialOutBodyVO roigBvo = pkbs.get(newBvo.getCgeneralbid());
|
||||
if(newBvo.getCgeneralbid() == null || roigBvo == null){
|
||||
throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0365")/*@res "没有匹配到原始出库单表体信息,请检查数据的表体主键cgeneralbid。"*/);
|
||||
}
|
||||
Set<String> bfields = new HashSet<String>();
|
||||
for(String battr : newBvo.getAttributeNames()){
|
||||
if(newBvo.getAttributeValue(battr) == null) {
|
||||
continue;
|
||||
}
|
||||
if(bodyProFields.contains(battr)
|
||||
&& !newBvo.getAttributeValue(battr).equals(roigBvo.getAttributeValue(battr))){
|
||||
throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0366")/*@res "表体字段:"*/ + battr + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0364")/*@res "不允许修改。"*/ );
|
||||
}
|
||||
roigBvo.setAttributeValue(battr, newBvo.getAttributeValue(battr));
|
||||
bfields.add(battr);
|
||||
}
|
||||
//设置货位序列号孙表,把原来的孙表删除,修改的货位置为新增
|
||||
if(null != newBvo.getLocationVOs()) {
|
||||
List<ICLocationVO> allloc = new ArrayList<ICLocationVO>();
|
||||
if(null != deleteLoc && null != deleteLoc.get(roigBvo.getCgeneralbid())) {
|
||||
for(ICLocationVO delloc : deleteLoc.get(roigBvo.getCgeneralbid())) {
|
||||
delloc.setStatus(VOStatus.DELETED);
|
||||
allloc.add(delloc);
|
||||
}
|
||||
}
|
||||
for(ICLocationVO loc : newBvo.getLocationVOs()) {
|
||||
loc.setStatus(VOStatus.NEW);
|
||||
allloc.add(loc);
|
||||
}
|
||||
roigBvo.setLocationVOs(allloc.toArray(new ICLocationVO[allloc.size()]));
|
||||
}
|
||||
// 翻译货位
|
||||
ICAPILocationVOUtils.translate(materialOutVOs);
|
||||
//其他数据填充
|
||||
new MaterialOutUpdateFillValue().setDefaultValue(materialOutVOs,bfields);
|
||||
}
|
||||
}
|
||||
}
|
||||
BillMaintainTool<MaterialOutVO> tool =
|
||||
new BillMaintainTool<MaterialOutVO>(MaterialOutVO.class,
|
||||
ICBillType.MaterialOut.getCode());
|
||||
tool.doBeforeInsert(materialOutVOs);
|
||||
return NCLocator.getInstance()
|
||||
.lookup(nc.itf.ic.m4d.IMaterialOutMaintain.class).update(materialOutVOs,originBills);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MaterialOutVO[] delete(MaterialOutVO[] vos) throws BusinessException {
|
||||
if(ArrayUtils.isEmpty(vos)){
|
||||
return null;
|
||||
}
|
||||
for(MaterialOutVO aggvo : vos){
|
||||
ICBillHeadVO parentVO = aggvo.getParentVO();
|
||||
if(parentVO.getFbillflag() == null ||
|
||||
0 != ((Integer) ICBillFlag.FREE.value())
|
||||
.compareTo((Integer) parentVO.getFbillflag())){
|
||||
throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0361")/*@res "当前出库单编号:"*/ + parentVO.getVbillcode() + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0367")/*@res "不是自由状态,不能删除"*/);
|
||||
}
|
||||
}
|
||||
return (MaterialOutVO[]) PfServiceScmUtil.processBatch("DELETE", "4D", vos, null, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MaterialOutVO[] sign(MaterialOutVO[] vos) throws BusinessException {
|
||||
if(ArrayUtils.isEmpty(vos)){
|
||||
return null;
|
||||
}
|
||||
for(MaterialOutVO aggvo : vos){
|
||||
ICBillHeadVO parentVO = aggvo.getParentVO();
|
||||
if(parentVO.getFbillflag() == null ||
|
||||
0 != ((Integer) ICBillFlag.FREE.value())
|
||||
.compareTo((Integer) parentVO.getFbillflag())){
|
||||
throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0361")/*@res "当前出库单编号:"*/ + parentVO.getVbillcode() + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0330")/*@res "不是自由状态,不能签字"*/);
|
||||
}
|
||||
if(aggvo.getChildrenVO() != null && aggvo.getChildrenVO().length > 0){
|
||||
if(aggvo.getChildrenVO()[0].getAttributeValue(ICPubMetaNameConst.NNUM) == null){
|
||||
throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0361")/*@res "当前出库单编号:"*/ + parentVO.getVbillcode() + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0392")/*@res "总数量为空,不能签字"*/);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
ICLocationUtil.loadLocationVOs(vos);
|
||||
return (MaterialOutVO[]) PfServiceScmUtil.processBatch("SIGN", "4D", vos, null, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MaterialOutVO[] unSign(MaterialOutVO[] vos) throws BusinessException {
|
||||
if(ArrayUtils.isEmpty(vos)){
|
||||
return null;
|
||||
}
|
||||
for(MaterialOutVO aggvo : vos){
|
||||
ICBillHeadVO parentVO = aggvo.getParentVO();
|
||||
if(parentVO.getFbillflag() == null ||
|
||||
0 != ((Integer) ICBillFlag.SIGN.value())
|
||||
.compareTo((Integer) parentVO.getFbillflag())){
|
||||
throw new BusinessException(nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0361")/*@res "当前出库单编号:"*/ + parentVO.getVbillcode() + nc.vo.ml.NCLangRes4VoTransl.getNCLangRes().getStrByID("4008027_0","04008027-0332")/*@res "不是签字状态,不能取消签字"*/);
|
||||
}
|
||||
}
|
||||
return (MaterialOutVO[]) PfServiceScmUtil.processBatch("CANCELSIGN", "4D", vos, null, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MaterialOutVO[] saveByRef(List<Map<String, Object>> paramList) throws BusinessException{
|
||||
|
||||
// MapList转聚合VOList
|
||||
List<MaterialOutVO> aggVOList =
|
||||
TransferMapToVOTool.transferMapToAggVO(paramList, MaterialOutVO.class);
|
||||
MaterialOutVO[] vos =
|
||||
aggVOList.toArray(new MaterialOutVO[aggVOList.size()]);
|
||||
// 1、传入数据基本非空校验
|
||||
BillVOsCheckRule checker =
|
||||
new BillVOsCheckRule(new CheckMaterialOutSaveValidator());
|
||||
checker.check(vos);
|
||||
// 2、编码翻译成pk
|
||||
aggVOList = TransferCodeToPKTool.transferAggVO(aggVOList);
|
||||
IMaterialOutMaintainAPI materialOut = NCLocator.getInstance().lookup(IMaterialOutMaintainAPI.class);
|
||||
return materialOut.insertBills(vos);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue