核算其它出库单调整

This commit is contained in:
hefengkai 2024-10-23 10:13:30 +08:00
parent 9ec6b4d52d
commit 25fcff74c7
1 changed files with 142 additions and 0 deletions

View File

@ -0,0 +1,142 @@
package nc.bs.ic.m4i.util;
import java.util.ArrayList;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import nc.bs.framework.common.NCLocator;
import nc.bs.ic.general.util.GenFinanceProcess;
import nc.bs.ic.general.util.GeneralFinanceContext;
import nc.itf.uap.IUAPQueryBS;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.pubitf.ia.mi7.ic.IIAI7ForIC4ISign;
import nc.vo.ia.bill.entity.base.AbstractBaseBill;
import nc.vo.ia.mi4.entity.I4BillVO;
import nc.vo.ia.mi4.entity.I4HeadVO;
import nc.vo.ia.mi4.entity.I4ItemVO;
import nc.vo.ia.mi7.entity.I7BillVO;
import nc.vo.ia.mi7.entity.I7HeadVO;
import nc.vo.ia.mi7.entity.I7ItemVO;
import nc.vo.ic.general.define.ICBillBodyVO;
import nc.vo.ic.general.define.ICBillHeadVO;
import nc.vo.ic.general.define.ICBillVO;
import nc.vo.ic.m4a.entity.GeneralInBodyVO;
import nc.vo.ic.m4a.entity.GeneralInHeadVO;
import nc.vo.ic.m4a.entity.GeneralInVO;
import nc.vo.ic.m4i.entity.GeneralOutBodyVO;
import nc.vo.ic.m4i.entity.GeneralOutHeadVO;
import nc.vo.ic.m4i.entity.GeneralOutVO;
import nc.vo.ic.pub.util.VOEntityUtil;
import nc.vo.pub.BusinessException;
import nc.vo.pubapp.pattern.pub.SqlBuilder;
import nc.vo.scmpub.res.billtype.IABillType;
public class Bill4IFinanceProcess
extends GenFinanceProcess<GeneralOutVO, GeneralOutBodyVO>
{
public Bill4IFinanceProcess() { super(GeneralFinanceContext.createOneDomainContext(IABillType.QTCK)); }
protected void deleteIABill(String[] billids) throws BusinessException {
((IIAI7ForIC4ISign)NCLocator.getInstance().lookup(IIAI7ForIC4ISign.class))
.deleteI7ForIC4IUnsign(billids);
}
protected void insertOneDomainIAByService(AbstractBaseBill[] iaBills, GeneralOutVO[] icbills) throws BusinessException {
String[] costorgs = loadCostInfoForCalbody(
(ICBillHeadVO[])VOEntityUtil.getHeadVOs(icbills));
fillIABillCostOrg(iaBills, costorgs);
GeneralOutVO[] _icbills = filterIcbills(icbills);//库存其它出库单筛选-华丰
I7BillVO[] _iaBills = filterIabills(iaBills, _icbills);//筛选核算出库库存信息-华丰
((IIAI7ForIC4ISign)NCLocator.getInstance().lookup(IIAI7ForIC4ISign.class)).insertI7ForIC4ISign((I7BillVO[])_iaBills);
}
//处理备料计划-转库-其它出库如果寄存供应商有值则这一行物料信息不生成存货核算单据
private I7BillVO[] filterIabills(AbstractBaseBill[] iaBills, GeneralOutVO[] icbills) throws BusinessException {
// I7BillVO _iabill = null;
ArrayList<I7BillVO> iabillsList = new ArrayList<I7BillVO>();
ArrayList<I7ItemVO> itemList = new ArrayList<I7ItemVO>();
ICBillBodyVO[] icBillBodys = (ICBillBodyVO[])VOEntityUtil.getBodyVOs(icbills);//获取所有出库单表体
Set<String> values = VOEntityUtil.getVOsValueSet(icBillBodys, "cgeneralbid");//获取所有出库单子表主键
for(int i = 0; i < iaBills.length; i++) {
I7BillVO iabill = (I7BillVO)iaBills[i];
I7HeadVO headVO = iabill.getParentVO();
I7ItemVO[] itemVOs = iabill.getChildrenVO();
if(itemVOs != null && itemVOs.length > 0) {
for(int j = 0; j < itemVOs.length; j++) {//核算库存子表过滤筛选
I7ItemVO itemVO = itemVOs[j];
String csrcbid = itemVO.getCsrcbid();//获取来源单据id
if(values.contains(csrcbid)) {
itemList.add(itemVO);
}
}
}
if(itemList != null && itemList.size() > 0) {//筛选后的核算库存子表数大于0
iabill.setChildrenVO(itemList.toArray(new I7ItemVO[0]));//子表设置
iabillsList.add(iabill);
}
}
return iabillsList.toArray(new I7BillVO[0]);
}
//库存其它出库单筛选
private GeneralOutVO[] filterIcbills(GeneralOutVO[] icbills) throws BusinessException {
// GeneralOutVO _icbill = null;
ArrayList<GeneralOutVO> icbillsList = new ArrayList<GeneralOutVO>();
ArrayList<GeneralOutBodyVO> itemList = new ArrayList<GeneralOutBodyVO>();
for(int i = 0; i < icbills.length; i++) {
GeneralOutVO icbill = (GeneralOutVO)icbills[i];
GeneralOutHeadVO headVO = icbill.getHead();
GeneralOutBodyVO[] itemVOs = icbill.getBodys();
if(itemVOs != null && itemVOs.length > 0) {
for(int j = 0; j < itemVOs.length; j++) {//库存子表过滤筛选
GeneralOutBodyVO itemVO = itemVOs[j];
String csourcetype = itemVO.getCsourcetype();//获取核算库存来源单据类型
String cvmivenderid = itemVO.getCvmivenderid();//获取寄存商户id
String csourcebillbid = itemVO.getCsourcebillbid();//获取来源单据子表id
String csourcetype_zk = querySourceType(csourcebillbid);//转库单来源单据类型
//处理备料计划-转库-其它出库如果寄存供应商有值
if("4K".equals(csourcetype) && StringUtils.isNotEmpty(cvmivenderid)
&& "55A3".equals(csourcetype_zk)) {
continue;
}else {
itemList.add(itemVO);
}
}
}
if(itemList != null && itemList.size() > 0) {//筛选后的核算库存子表数大于0
icbill.setChildrenVO(itemList.toArray(new GeneralOutBodyVO[0]));//子表设置
icbillsList.add(icbill);
}
}
return icbillsList.toArray(new GeneralOutVO[0]);
}
//转库单来源单据类型查询
public String querySourceType(String id) throws BusinessException {
if(StringUtils.isNotEmpty(id)) {
SqlBuilder sb = new SqlBuilder();
sb.reset();
sb.append("select csourcetype from ic_whstrans_b where cspecialbid = '" + id + "' and dr = 0");
IUAPQueryBS querybs = NCLocator.getInstance().lookup(IUAPQueryBS.class);
Object result = querybs.executeQuery(sb.toString(), new ColumnProcessor());
if(result != null && !"".equals(result)) {
return result.toString();
}
}
return "";
}
}