Merge remote-tracking branch 'origin/main'

This commit is contained in:
lihao 2025-04-22 17:00:39 +08:00
commit 26f758a73b
3 changed files with 965 additions and 2 deletions

View File

@ -0,0 +1,730 @@
package nc.impl.bd.bom.bom0202;
import nc.bs.bd.bom.bom0202.bp.BomDataValidatorBP;
import nc.bs.bd.bom.bom0202.bp.BomDeleteBP;
import nc.bs.bd.bom.bom0202.bp.BomInsertBP;
import nc.bs.bd.bom.bom0202.bp.BomInsertCommitBP;
import nc.bs.bd.bom.bom0202.bp.BomPubBP;
import nc.bs.bd.bom.bom0202.bp.BomUpdateBP;
import nc.bs.bd.bom.bom0202.bp.BomUpdateCommitBP;
import nc.bs.dao.BaseDAO;
import nc.bs.dao.DAOException;
import nc.bs.framework.common.NCLocator;
import nc.bs.ml.NCLangResOnserver;
import nc.bs.pubapp.AppBsContext;
import nc.bs.uap.lock.PKLock;
import nc.impl.pubapp.pattern.data.bill.BillUpdate;
import nc.impl.pubapp.pattern.data.bill.tool.BillTransferTool;
import nc.impl.pubapp.pattern.data.vo.VOQuery;
import nc.itf.bd.bom.bom0202.IBomBillMaintainService;
import nc.itf.bd.bom.bom0202.IBomBillQueryService;
import nc.mmbd.utils.factoryparam.MMBDFactoryParameter;
import nc.util.mmf.framework.base.MMArrayUtil;
import nc.util.mmf.framework.base.MMValueCheck;
import nc.util.mmf.framework.db.MMSqlBuilder;
import nc.util.mmf.framework.gc.GCBillTransferTool;
import nc.vo.bd.bom.bom0202.entity.AggBomVO;
import nc.vo.bd.bom.bom0202.entity.BomActivityVO;
import nc.vo.bd.bom.bom0202.entity.BomItemVO;
import nc.vo.bd.bom.bom0202.entity.BomOutputsVO;
import nc.vo.bd.bom.bom0202.entity.BomUseOrgVO;
import nc.vo.bd.bom.bom0202.entity.BomVO;
import nc.vo.bd.bom.bom0202.enumeration.BomCategoryEnum;
import nc.vo.bd.bom.bom0202.enumeration.BomTypeEnum;
import nc.vo.bd.bom.bom0202.enumeration.FBomBillstatusEnum;
import nc.vo.bd.bom.bom0202.enumeration.VersionTypeEnum;
import nc.vo.bd.bom.bom0202.message.MMBDLangConstBom0202;
import nc.vo.pub.BusinessException;
import nc.vo.pub.VOStatus;
import nc.vo.pub.lang.UFBoolean;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* <b> 生产BOM维护的持久化类 </b>
* <p>
* 提供了基本的增删改操作
* </p>
* 创建日期:2010-1-15
*
* @author:zhoujuna
*/
public class BomBillMaintainServiceImpl implements IBomBillMaintainService {
/**
* 构造函数
*/
@Override
public void deleteBoms(AggBomVO[] objs) throws BusinessException {
if (objs == null || objs.length == 0) {
return;
}
try {
// 加锁 + 检查ts
GCBillTransferTool<AggBomVO> transTool = new GCBillTransferTool<AggBomVO>(objs);
// 补全前台VO
AggBomVO[] fullBills = transTool.getClientFullInfoBill();
BomDeleteBP bp = new BomDeleteBP();
bp.delete(fullBills);
} catch (Exception ex) {
ExceptionUtils.marsh(ex);
}
}
@Override
public AggBomVO[] insertBom(AggBomVO[] aggVO) throws BusinessException {
return this.insertBomForEcn(aggVO, true);
}
@Override
public AggBomVO[] insertBomForEcn(AggBomVO[] aggVO, boolean checkEcn) throws BusinessException {
return this.insertBomForEcnAndRepls(aggVO, checkEcn, null);
}
@Override
public AggBomVO[] insertBomForEcnAndRepls(AggBomVO[] aggVO, boolean checkEcn, String[] orgins)
throws BusinessException {
// TODO Auto-generated method stub
try {
// 加锁 + 检查ts
GCBillTransferTool<AggBomVO> transTool = new GCBillTransferTool<AggBomVO>(aggVO);
// 补全前台VO
AggBomVO[] fullBills = transTool.getClientFullInfoBill();
BomInsertBP bp = new BomInsertBP();
AggBomVO[] returnVOs = bp.insert(fullBills, checkEcn, orgins, false);
for (int i = 0; i < returnVOs.length; i++) {
aggVO[i].setParent(returnVOs[i].getParent());
aggVO[i].setChildren(BomItemVO.class, returnVOs[i].getChildrenVO());
aggVO[i].setChildren(BomOutputsVO.class, returnVOs[i].getChildren(BomOutputsVO.class));
aggVO[i].setChildren(BomUseOrgVO.class, returnVOs[i].getChildren(BomUseOrgVO.class));
}
return aggVO;
} catch (Exception e) {
ExceptionUtils.marsh(e);
}
return null;
}
@Override
public AggBomVO[] updateBom(AggBomVO[] aggVO) throws BusinessException {
return this.updateBomForEcn(aggVO, true);
}
@Override
public AggBomVO[] updateBomForEcn(AggBomVO[] aggVO, boolean checkEcn) throws BusinessException {
return this.updateBomForBomTree(aggVO, checkEcn, false, false);
}
@Override
public AggBomVO[] updateBomForEcn(AggBomVO[] aggVO,Map<String,String> rownoMap, boolean checkEcn) throws BusinessException {
return this.updateBomForBomTree(aggVO,rownoMap,checkEcn, false, false);
}
@Override
public void validateBom(AggBomVO[] aggvos) throws BusinessException {
BomDataValidatorBP bp = new BomDataValidatorBP();
bp.validate(aggvos);
}
@Override
public AggBomVO[] updateBomForBomTree(AggBomVO[] aggVO, boolean isCheckEcn, boolean isFromBom, boolean isEcn)
throws BusinessException {
if (MMArrayUtil.isEmpty(aggVO)) {
return null;
}
try {
// 检查该BOM是否被删除因为如果BOM树状维护将BOM删除了不允许修改该条记录
Set<String> bomids = new HashSet<String>();
for (AggBomVO vo : aggVO) {
bomids.add(vo.getPrimaryKey());
}
Set<String> checkResult = BomPubBP.getBomID(bomids.toArray(new String[] {}));
this.fillActivityVO(aggVO);
if (checkResult != null && checkResult.size() < bomids.size()) {
ExceptionUtils.wrappBusinessException(MMBDLangConstBom0202.getBOM_DELETED());
}
// 加锁 + 检查ts
GCBillTransferTool<AggBomVO> transTool = new GCBillTransferTool<AggBomVO>(aggVO);
// 补全前台VO
AggBomVO[] fullBills = transTool.getClientFullInfoBill();
// 获得修改前vo
AggBomVO[] originBills = transTool.getOriginBills();
BomUpdateBP bp = new BomUpdateBP();
return bp.update(fullBills, originBills, isCheckEcn, isFromBom, isEcn);
} catch (Exception e) {
ExceptionUtils.wrappException(e);
}
return null;
}
@Override
public AggBomVO[] updateBomForBomTree(AggBomVO[] aggVO,Map<String,String> rownoMap, boolean isCheckEcn, boolean isFromBom, boolean isEcn)
throws BusinessException {
if (MMArrayUtil.isEmpty(aggVO)) {
return null;
}
try {
// 检查该BOM是否被删除因为如果BOM树状维护将BOM删除了不允许修改该条记录
Set<String> bomids = new HashSet<String>();
for (AggBomVO vo : aggVO) {
bomids.add(vo.getPrimaryKey());
}
Set<String> checkResult = BomPubBP.getBomID(bomids.toArray(new String[] {}));
this.fillActivityVO(aggVO);
if (checkResult != null && checkResult.size() < bomids.size()) {
ExceptionUtils.wrappBusinessException(MMBDLangConstBom0202.getBOM_DELETED());
}
// 加锁 + 检查ts
GCBillTransferTool<AggBomVO> transTool = new GCBillTransferTool<AggBomVO>(aggVO);
// 补全前台VO
AggBomVO[] fullBills = transTool.getClientFullInfoBill();
// 获得修改前vo
AggBomVO[] originBills = transTool.getOriginBills();
BomUpdateBP bp = new BomUpdateBP();
bp.setRownoMap(rownoMap);
return bp.update(fullBills, originBills, isCheckEcn, isFromBom, isEcn);
} catch (Exception e) {
ExceptionUtils.wrappException(e);
}
return null;
}
private void fillActivityVO(AggBomVO[] aggVO) {
for (AggBomVO aggBomVO : aggVO) {
if (MMValueCheck.isNotEmpty(aggBomVO.getChildren(BomActivityVO.class))) {
continue;
}
// 如果没有编辑过物料作业量那么Model中数据为空所以要把重查一下数据
String pk_group = aggBomVO.getParent().getAttributeValue(BomVO.PK_GROUP).toString();
String pk_org = aggBomVO.getParent().getAttributeValue(BomVO.PK_ORG).toString();
BomActivityVO[] actVOs = null;
try {
actVOs = this.getBomBillQueryService().getBomActivityVOsByBomId(pk_group, pk_org,
aggBomVO.getPrimaryKey());
} catch (BusinessException e) {
ExceptionUtils.wrappException(e);
}
List<BomActivityVO> actList = new ArrayList<BomActivityVO>();
if (MMArrayUtil.isNotEmpty(actVOs)) {
for (BomActivityVO vo : actVOs) {
if (MMValueCheck.isNotEmpty(vo.getNstandardwknum())) {
vo.setStatus(VOStatus.UNCHANGED);
actList.add(vo);
}
}
aggBomVO.setChildren(BomActivityVO.class, actList.toArray(new BomActivityVO[] {}));
}
}
}
@Override
public AggBomVO[] commitBom(AggBomVO[] clientFullVOs, AggBomVO[] originBills) throws BusinessException {
try {
return new BillUpdate<AggBomVO>().update(clientFullVOs, originBills);
} catch (Exception e) {
ExceptionUtils.marsh(e);
return null;
}
}
@Override
public AggBomVO[] uncommitBom(AggBomVO[] clientFullVOs, AggBomVO[] originBills) throws BusinessException {
try {
return new BillUpdate<AggBomVO>().update(clientFullVOs, originBills);
} catch (Exception e) {
ExceptionUtils.marsh(e);
return null;
}
}
@Override
public AggBomVO[] auditBom(AggBomVO[] clientFullVOs, AggBomVO[] originBills) throws BusinessException {
Map<String, Integer> newBomMap = new HashMap<>();
for (AggBomVO vo: clientFullVOs){
BomVO headVO = (BomVO) vo.getParent();
newBomMap.put(vo.getPrimaryKey(), headVO.getFbillstatus());
}
try {
// 审批默认BOM后需要把已有的有效默认BOM取消默认
for (AggBomVO aggvo : originBills) {
if (Integer.valueOf(FBomBillstatusEnum.IAPPROVE).equals(newBomMap.get(aggvo.getPrimaryKey()))){
BomVO head = (BomVO) aggvo.getParent();
if (!head.getHbdefault().booleanValue()) {
continue;
}
if (BomCategoryEnum.NORMAL_BOM.equalsValue(head.getHfbomcategory())) {
// 根据组织+物料+物料版本+BOM类型+有效无效更新原来的默认BOM为非默认审批更新有效的
ArrayList<String> defaultPks = this.isBomOrCfgBomDefaultVersionExist(head.getPk_org(),
head.getHcmaterialid(), head.getHcmaterialvid(), head.getFbomtype(),
VersionTypeEnum.AVAILABLE.toIntValue());
if (MMValueCheck.isNotEmpty(defaultPks)) {
defaultPks.remove(head.getCbomid());// pk去掉当前审批的这条数据pk
this.CancelBomOrCfgBomDefaultVersion(defaultPks);
}
} else {
List<String> defaultpks = this.isOrderBomDefaultVersionExist(head.getPk_org(),
head.getVsobillcode(), head.getVsobillno(), head.getFbomtype());
if (MMValueCheck.isNotEmpty(defaultpks)) {
defaultpks.remove(head.getCbomid());// pk去掉当前审批的这条数据pk
this.CancelBomOrCfgBomDefaultVersion(defaultpks);
}
}
}
}
return new BillUpdate<AggBomVO>().update(clientFullVOs, originBills);
} catch (Exception e) {
ExceptionUtils.marsh(e);
return null;
}
}
@Override
public AggBomVO[] unauditBom(AggBomVO[] clientFullVOs, AggBomVO[] originBills) throws BusinessException {
try {
// 取消审批默认BOM后需要把已有的无效默认BOM取消默认
for (AggBomVO aggvo : originBills) {
BomVO head = (BomVO) aggvo.getParent();
if (!head.getHbdefault().booleanValue()) {
continue;
}
/**
* delete by qianzhx 取消审批不做任何的取消默认操作
*/
// 根据组织+物料+物料版本+BOM类型+有效无效更新原来的默认BOM为非默认取消审批更新无效的
// ArrayList<String> defaultPks =
// this.isBomOrCfgBomDefaultVersionExist(head.getPk_org(),
// head.getHcmaterialid(),
// head.getHcmaterialvid(), head.getFbomtype(),
// VersionTypeEnum.UNAVAILABLE.toIntValue());
// if (MMValueCheck.isNotEmpty(defaultPks)) {
// defaultPks.remove(head.getCbomid());
// this.CancelBomOrCfgBomDefaultVersion(defaultPks);
// }
}
// 取消审批后把bom版本类型变为无效版本
for (AggBomVO aggvo : clientFullVOs) {
BomVO head = (BomVO) aggvo.getParent();
// head.setHbdefault(UFBoolean.FALSE);
head.setHfversiontype(VersionTypeEnum.UNAVAILABLE.toIntValue());
head.setStatus(VOStatus.UPDATED);
// ArrayList<String> cbomids = new ArrayList<String>();
// cbomids.add(head.getCbomid());3
// this.updateVersiontype(cbomids);
}
return new BillUpdate<AggBomVO>().update(clientFullVOs, originBills);
} catch (Exception e) {
ExceptionUtils.marsh(e);
return null;
}
}
@SuppressWarnings("boxing")
@Override
// 停用
public AggBomVO[] seal(AggBomVO[] object) throws BusinessException {
BomVO[] headvo = new BomVO[object.length];
for (int i = 0; i < object.length; i++) {
headvo[i] = (BomVO) object[i].getParentVO();
try {
if (headvo == null || headvo.length == 0) {
return null;
}
// 校验是否启用工程变更管理是否默认版本 || UFBoolean.TRUE.equals(headvo[0].getHbdefault())
// 如果是标准BOM启用工程变更那么不支持修改
String pkorg = headvo[i].getAttributeValue(BomVO.PK_ORG).toString();
boolean isNormalBom = headvo[i].getHfbomcategory() == BomCategoryEnum.NORMAL_BOM.toIntValue();
//1130需求变更定制BOM不走工程变更
boolean isCustBom=MMValueCheck.isTrue(headvo[i].getHbcustomized());
// 配置BOM不支持ECN所以先对BOM类型做判断
if (!isCustBom&&isNormalBom && !headvo[i].getFbomtype().equals(BomTypeEnum.CONFIGBOM.toIntValue())
&& this.isMMECN001Control(pkorg)) {
ExceptionUtils.wrappBusinessException(MMBDLangConstBom0202.getUnsupportUnEditWhenMMDB001Control());
return null;
}
if (headvo[i].getFbillstatus().intValue() != FBomBillstatusEnum.APPROVE.toIntValue()) {
ExceptionUtils.wrappBusinessException(NCLangResOnserver.getInstance().getString("1014362_0", null,
"01014362-0465", null, new String[] { headvo[i].getVbillcode() })
// .getStrByID("1014362_0","01014362-0465")/* BOM状态不是审批通过无法启用/停用! */
);
} else if (headvo[i].getHfversiontype().intValue() == VersionTypeEnum.UNAVAILABLE.toIntValue()) {
ExceptionUtils.wrappBusinessException(NCLangResOnserver.getInstance().getString("1014362_0", null,
"01014362-0466", null, new String[] { headvo[i].getVbillcode() })
// getStrByID("1014362_0","01014362-0466")/* BOM已经是无效版本无需停用 */
);
}
// else if (UFBoolean.TRUE.equals(headvo[0].getHbdefault())) {
// ExceptionUtils.wrappBusinessException(MMBDLangConstBom0202.getUnsupportEditWhenbdefault());
// return null;
// }
headvo[i].setHbdefault(UFBoolean.FALSE);
headvo[i].setHfversiontype(VersionTypeEnum.UNAVAILABLE.toIntValue());
headvo[i].setStatus(VOStatus.UPDATED);
} catch (Exception e) {
ExceptionUtils.marsh(e);
}
}
// 持久化
BillTransferTool<AggBomVO> transferTool = new BillTransferTool<AggBomVO>(object);
AggBomVO[] originBills = transferTool.getOriginBills();
BillUpdate<AggBomVO> bo = new BillUpdate<AggBomVO>();
bo.update(object, originBills);
PKLock.getInstance().releaseDynamicLocks();
return object;
// return null;
}
@SuppressWarnings("boxing")
@Override
public AggBomVO[] unSeal(AggBomVO[] object) throws BusinessException {
BomVO[] headvo = new BomVO[object.length];
for (int i = 0; i < object.length; i++) {
headvo[i] = (BomVO) object[i].getParentVO();
try {
if (headvo == null || headvo.length == 0) {
return null;
}
// 校验是否启用工程变更管理
// 如果是正常非订单BOM,启用工程变更后不支持修改
String pkorg = headvo[i].getAttributeValue(BomVO.PK_ORG).toString();
boolean isNormalBom = headvo[i].getHfbomcategory() == BomCategoryEnum.NORMAL_BOM.toIntValue();
//1130需求变更定制BOM不走工程变更
boolean isCustBom=MMValueCheck.isTrue(headvo[i].getHbcustomized());
if (!isCustBom&&isNormalBom && !headvo[i].getFbomtype().equals(BomTypeEnum.CONFIGBOM.toIntValue())
&& this.isMMECN001Control(pkorg)) {
ExceptionUtils.wrappBusinessException(MMBDLangConstBom0202.getUnsupportUnEditWhenMMDB001Control());
return null;
}
if (headvo[i].getFbillstatus().intValue() != FBomBillstatusEnum.APPROVE.toIntValue()) {
ExceptionUtils.wrappBusinessException(NCLangResOnserver.getInstance().getString("1014362_0", null,
"01014362-0465", null, new String[] { headvo[i].getVbillcode() })
// getStrByID("1014362_0","01014362-0465")/* BOM状态不是审批通过无法启用/停用! */
);
} else if (headvo[i].getHfversiontype().intValue() == VersionTypeEnum.AVAILABLE.toIntValue()) {
ExceptionUtils.wrappBusinessException(NCLangResOnserver.getInstance().getString("1014362_0", null,
"01014362-0467", null, new String[] { headvo[i].getVbillcode() })
// getStrByID("1014362_0","01014362-0467")/* BOM已经是有效版本无需启用 */
);
}
headvo[i].setHfversiontype(VersionTypeEnum.AVAILABLE.toIntValue());
headvo[i].setStatus(VOStatus.UPDATED);
} catch (Exception e) {
ExceptionUtils.marsh(e);
}
}
// 持久化
BillTransferTool<AggBomVO> transferTool = new BillTransferTool<AggBomVO>(object);
AggBomVO[] originBills = transferTool.getOriginBills();
BillUpdate<AggBomVO> bo = new BillUpdate<AggBomVO>();
bo.update(object, originBills);
PKLock.getInstance().releaseDynamicLocks();
return object;
}
private boolean isMMECN001Control(String pk_org) {
boolean isMMECN001_Contrl = false;
isMMECN001_Contrl = MMBDFactoryParameter.isAlterCtrl(pk_org);
return isMMECN001_Contrl;
}
@Override
public AggBomVO[] insertBomWithParam(AggBomVO[] aggvos, boolean isCheckEcn, boolean isOnApprove)
throws BusinessException {
try {
// 加锁 + 检查ts
GCBillTransferTool<AggBomVO> transTool = new GCBillTransferTool<AggBomVO>(aggvos);
// 补全前台VO
AggBomVO[] fullBills = transTool.getClientFullInfoBill();
BomInsertBP bp = new BomInsertBP();
AggBomVO[] returnVOs = bp.insert(fullBills, isCheckEcn, isOnApprove);
for (int i = 0; i < returnVOs.length; i++) {
aggvos[i].setParent(returnVOs[i].getParent());
aggvos[i].setChildren(BomItemVO.class, returnVOs[i].getChildrenVO());
aggvos[i].setChildren(BomOutputsVO.class, returnVOs[i].getChildren(BomOutputsVO.class));
aggvos[i].setChildren(BomUseOrgVO.class, returnVOs[i].getChildren(BomUseOrgVO.class));
}
return aggvos;
} catch (Exception e) {
ExceptionUtils.marsh(e);
}
return null;
}
@Override
public AggBomVO[] insertCommitBomWithParam(AggBomVO[] aggvos, boolean isCheckEcn, boolean isOnApprove) throws BusinessException {
BomInsertCommitBP bp = new BomInsertCommitBP();
AggBomVO[] result = bp.insertCommit(aggvos,isCheckEcn,isOnApprove);
return result;
}
@Override
public AggBomVO[] insertCommitBomWithParam_RequiresNew(AggBomVO[] aggvos, boolean isCheckEcn, boolean isOnApprove) throws BusinessException {
BomInsertCommitBP bp = new BomInsertCommitBP();
AggBomVO[] result = bp.insertCommit(aggvos,isCheckEcn,isOnApprove);
return result;
}
@Override
public AggBomVO[] updateBomWithParam(AggBomVO[] aggvos, boolean isFromBom, boolean isecn, boolean isCheckEcn,
boolean isOnApprove) throws BusinessException {
if (MMArrayUtil.isEmpty(aggvos)) {
return null;
}
try {
// 检查该BOM是否被删除因为如果BOM树状维护将BOM删除了不允许修改该条记录
Set<String> bomids = new HashSet<String>();
for (AggBomVO vo : aggvos) {
bomids.add(vo.getPrimaryKey());
}
Set<String> checkResult = BomPubBP.getBomID(bomids.toArray(new String[] {}));
if (checkResult != null && checkResult.size() < bomids.size()) {
ExceptionUtils.wrappBusinessException(MMBDLangConstBom0202.getBOM_DELETED());
}
// 加锁 + 检查ts
GCBillTransferTool<AggBomVO> transTool = new GCBillTransferTool<AggBomVO>(aggvos);
// 补全前台VO
AggBomVO[] fullBills = transTool.getClientFullInfoBill();
// 获得修改前vo
AggBomVO[] originBills = transTool.getOriginBills();
BomUpdateBP bp = new BomUpdateBP();
return bp.update(fullBills, originBills, isCheckEcn, isOnApprove, isFromBom, isecn);
} catch (Exception e) {
ExceptionUtils.marsh(e);
}
return null;
}
@Override
public AggBomVO[] updateCommitBomWithParam(AggBomVO[] aggvos, boolean isFromBom, boolean isecn, boolean isCheckEcn, boolean isOnApprove) throws BusinessException {
BomUpdateCommitBP bp = new BomUpdateCommitBP();
AggBomVO[] result = bp.updateCommit(aggvos,isFromBom,isecn,isCheckEcn,isOnApprove);
return result;
}
@Override
public void deleteBomsWithParam(AggBomVO[] aggvos, boolean isCheckEcn, boolean isOnApprove)
throws BusinessException {
if (aggvos == null || aggvos.length == 0) {
return;
}
try {
// 加锁 + 检查ts
GCBillTransferTool<AggBomVO> transTool = new GCBillTransferTool<AggBomVO>(aggvos);
// 补全前台VO
AggBomVO[] fullBills = transTool.getClientFullInfoBill();
BomDeleteBP bp = new BomDeleteBP();
bp.delete(fullBills, isCheckEcn, isOnApprove);
} catch (Exception ex) {
ExceptionUtils.marsh(ex);
}
}
/**
* 根据bom主键更新默认字段为否
*
* @param cbomid
*/
private void CancelBomOrCfgBomDefaultVersion(List<String> cbomids) {
if (MMValueCheck.isEmpty(cbomids)) {
return;
}
BaseDAO dao = new BaseDAO();
MMSqlBuilder sql = new MMSqlBuilder();
sql.append(" update ");
sql.append(BomVO.TABLE_NAME);
sql.set();
sql.append(BomVO.HBDEFAULT, UFBoolean.FALSE);
sql.where();
sql.append(BomVO.CBOMID, cbomids);
try {
dao.executeUpdate(sql.toString());
} catch (DAOException e) {
ExceptionUtils.wrappException(e);
}
}
/**
* 根据bom主键更新版本类型为无效版本
*
* @param cbomid
*/
private void updateVersiontype(ArrayList<String> cbomids) {
if (MMValueCheck.isEmpty(cbomids)) {
return;
}
BaseDAO dao = new BaseDAO();
MMSqlBuilder sql = new MMSqlBuilder();
sql.append(" update ");
sql.append(BomVO.TABLE_NAME);
sql.set();
sql.append(BomVO.HFVERSIONTYPE, VersionTypeEnum.UNAVAILABLE.toIntValue());
sql.where();
sql.append(BomVO.CBOMID, cbomids);
try {
dao.executeUpdate(sql.toString());
} catch (DAOException e) {
ExceptionUtils.wrappException(e);
}
}
private List<String> isOrderBomDefaultVersionExist(String pk_org, String vsobillcode, String vsobillno,
Integer fbomtype) {
if (fbomtype == 3) {
return null;
}
if (MMValueCheck.isEmpty(vsobillcode) || MMValueCheck.isEmpty(vsobillno)) {
return null;
}
VOQuery<BomVO> queryService = new VOQuery<BomVO>(BomVO.class, new String[] { BomVO.CBOMID });
MMSqlBuilder sql = new MMSqlBuilder();
sql.and();
sql.append(BomVO.PK_GROUP, AppBsContext.getInstance().getPkGroup());
sql.and();
sql.append(BomVO.PK_ORG, pk_org);
sql.and();
sql.append(BomVO.VSOBILLCODE, vsobillcode);
sql.and();
sql.append(BomVO.VSOBILLNO, vsobillno);
sql.and();
sql.append(BomVO.FBOMTYPE, fbomtype.intValue());
sql.and();
sql.append(BomVO.HFBOMCATEGORY, 2);
sql.and();
sql.append(BomVO.HBDEFAULT, "Y");
sql.and();
sql.append(BomVO.HFVERSIONTYPE, VersionTypeEnum.AVAILABLE.toIntValue());// 查询有效的bom
sql.appendDr();
BomVO[] bomVOs = queryService.query(sql.toString(), null);
List<String> result = new ArrayList<String>();
for (BomVO bomVO : bomVOs) {
result.add(bomVO.getCbomid());
}
if (MMValueCheck.isNotEmpty(result)) {
return result;
}
return null;
}
/**
* 判断指定条件的BOM/配置BOM的无效/有效的默认版本是否存在
*
* @param pkGroup 集团主键
* @param pkOrg 组织主键
* @param materialVid 物料版本主键
* @param version Bom版本号
* @return 已存在BOM无效默认版本pk
*/
public ArrayList<String> isBomOrCfgBomDefaultVersionExist(String pkOrg, String cmaterialoid, String materialVid,
Integer bomtype, Integer hfversiontype) {
VOQuery<BomVO> queryService = new VOQuery<BomVO>(BomVO.class, new String[] { BomVO.CBOMID });
MMSqlBuilder sql = new MMSqlBuilder();
sql.and();
sql.append(BomVO.PK_GROUP, AppBsContext.getInstance().getPkGroup());
sql.and();
sql.append(BomVO.PK_ORG, pkOrg);
sql.and();
sql.append(BomVO.HCMATERIALID, cmaterialoid);
if (materialVid == null) {
sql.and();
sql.append(BomVO.HCMATERIALVID, "~");
} else {
sql.and();
sql.append(BomVO.HCMATERIALVID, materialVid);
}
sql.and();
sql.append(BomVO.FBOMTYPE, bomtype);
sql.and();
sql.append(BomVO.HFBOMCATEGORY, 1);
sql.and();
sql.append(BomVO.HBDEFAULT, "Y");
sql.and();
sql.append(BomVO.HBCUSTOMIZED, "N");// 是否定制值为否
sql.and();
sql.append(BomVO.HFVERSIONTYPE, hfversiontype);
sql.appendDr();
BomVO[] bomVOs = queryService.query(sql.toString(), null);
ArrayList<String> cbomids = new ArrayList<String>();
if (MMValueCheck.isNotEmpty(bomVOs)) {
for (BomVO bomvo : bomVOs) {
if (MMValueCheck.isNotEmpty(bomvo)) {
cbomids.add(bomvo.getCbomid());
}
}
return cbomids;
}
return null;
}
@Override
public void updateBomForBomCopy0214(AggBomVO[] aggvos, AggBomVO[] origins, boolean isCheckEcn) {
// 加锁 + 检查ts
GCBillTransferTool<AggBomVO> transTool = new GCBillTransferTool<AggBomVO>(aggvos);
// 补全前台VO
AggBomVO[] fullBills = transTool.getClientFullInfoBill();
// 获得修改前vo
AggBomVO[] originBills = transTool.getOriginBills();
Set<String> ids = new HashSet<String>();
for (AggBomVO aggBomVO : originBills) {
ids.add(aggBomVO.getPrimaryKey());
}
BomUpdateBP updatebp = new BomUpdateBP();
updatebp.update(fullBills, origins, false, false, false, ids.toArray(new String[0]), false);
}
private IBomBillQueryService getBomBillQueryService() {
return NCLocator.getInstance().lookup(IBomBillQueryService.class);
}
@Override
public void deleteCustomizedBom(AggBomVO[] aggvos) throws BusinessException {
if (aggvos == null || aggvos.length == 0) {
return;
}
try {
// 加锁 + 检查ts
GCBillTransferTool<AggBomVO> transTool = new GCBillTransferTool<AggBomVO>(aggvos);
// 补全前台VO
AggBomVO[] fullBills = transTool.getClientFullInfoBill();
BomDeleteBP bp = new BomDeleteBP();
bp.deleteCustomizedBom(fullBills);
} catch (Exception ex) {
ExceptionUtils.marsh(ex);
}
}
}

View File

@ -143,9 +143,37 @@ public class APIBomBusinessServiceImpl implements IAPIBomBusinessService {
if (commitAggvoList.isEmpty() && addAggvoList.isEmpty()) {
return ResultMessageUtil.exceptionToJSON("BOM保存失败,不存在单据状态不为【空/自由/审批通过】的数据", "999");
} else if (commitAggvoList.isEmpty() && !addAggvoList.isEmpty()) {
result = service.insertBom((AggBomVO[]) list.toArray(new AggBomVO[0]));
result = service.insertBom((AggBomVO[]) addAggvoList.toArray(new AggBomVO[0]));
} else if (!commitAggvoList.isEmpty() && addAggvoList.isEmpty()) {
result = service.insertCommitBomWithParam((AggBomVO[]) list.toArray(new AggBomVO[0]), true, true);
List<AggBomVO> newAggVOList = new ArrayList<>();
if("plm".equals(userCode)){
for(AggBomVO aggvo:commitAggvoList){
result = service.insertCommitBomWithParam(new AggBomVO[]{aggvo}, true, true);
newAggVOList.add(result[0]);
}
return ResultMessageUtil.toJSON(newAggVOList.toArray(new AggBomVO[0]), "BOM保存成功");
}else if("dlkght".equals(userCode)){
for(AggBomVO aggvo:commitAggvoList){
try {
result = service.insertCommitBomWithParam_RequiresNew(new AggBomVO[]{aggvo}, true, true);
newAggVOList.add(result[0]);
}catch (Exception e){
if(e.getMessage()!=null){
if(e.getMessage().length()>100){
aggvo.getParent().setAttributeValue("hvdef2",e.getMessage().substring(0,100));
}else{
aggvo.getParent().setAttributeValue("hvdef2",e.getMessage().substring(0,e.getMessage().length()-1));
}
}else{
Throwable unmarsh = ExceptionUtils.unmarsh(e);
aggvo.getParent().setAttributeValue("hvdef2", "异常"+unmarsh.getMessage());
}
newAggVOList.add(aggvo);
}
}
return ResultMessageUtil.toJSON(newAggVOList.toArray(new AggBomVO[0]), "100999","BOM保存提交成功部分成功部分失败",true);
}
} else {
return ResultMessageUtil.exceptionToJSON("BOM保存失败,新增不允许单据状态自由或者空和审批通过同时存在", "999");
}

View File

@ -0,0 +1,205 @@
package nc.itf.bd.bom.bom0202;
import nc.vo.bd.bom.bom0202.entity.AggBomVO;
import nc.vo.pub.BusinessException;
import java.util.Map;
/**
* <b> 生产bom维护的持久化接口 </b>
* <p>
* 继承自默认的IAggMaintainService
* </p>
* 创建日期:2010-1-15 有事务的服务
*
* @author:zhoujuna
*/
public interface IBomBillMaintainService {
/**
* BOM批量删除接口
*
* @param aggvos
* @throws BusinessException
*/
void deleteBoms(AggBomVO[] aggvos) throws BusinessException;
/**
* BOM新增接口
*
* @param aggvos 新增BOM数组
* @return 保存后的BOM
* @throws BusinessException
*/
AggBomVO[] insertBom(AggBomVO[] aggvos) throws BusinessException;
/**
* BOM新增接口带参数是否支持ECN是否支持审批流
*
* @param aggvos
* @param isCheckEcn
* @param isOnApprove
* @return
* @throws BusinessException
*/
AggBomVO[] insertBomWithParam(AggBomVO[] aggvos, boolean isCheckEcn, boolean isOnApprove) throws BusinessException;
AggBomVO[] insertCommitBomWithParam(AggBomVO[] aggvos, boolean isCheckEcn, boolean isOnApprove) throws BusinessException;
AggBomVO[] insertCommitBomWithParam_RequiresNew(AggBomVO[] aggvos, boolean isCheckEcn, boolean isOnApprove) throws BusinessException;
/**
* BOM修改接口
*
* @param aggvos 修改BOM数组
* @return 保存后的BOM数组
* @throws BusinessException
*/
AggBomVO[] updateBom(AggBomVO[] aggvos) throws BusinessException;
/**
* BOM修改接口 带参数是否支持ECN是否支持审批流
*
* @param aggvos
* @return
* @throws BusinessException
*/
AggBomVO[] updateBomWithParam(AggBomVO[] aggvos, boolean isFromBom, boolean isecn, boolean isCheckEcn,
boolean isOnApprove) throws BusinessException;
AggBomVO[] updateCommitBomWithParam(AggBomVO[] aggvos, boolean isFromBom, boolean isecn, boolean isCheckEcn,
boolean isOnApprove) throws BusinessException;
/**
* Bom提供给工程变更单的对话框在点击确定后进行数据校验
*
* @param aggvos
* @throws BusinessException
*/
void validateBom(AggBomVO[] aggvos) throws BusinessException;
/**
* BOM新增接口,是否需要考虑检查启用工程变更
*
* @param aggvos
* @param checkEcn
* @return
* @throws BusinessException
*/
AggBomVO[] insertBomForEcn(AggBomVO[] aggvos, boolean checkEcn) throws BusinessException;
/**
* BOM新增接口,是否需要考虑检查启用工程变更,替代方案替代物料是否分配
*
* @param aggvos
* @param checkEcn
* @return
* @throws BusinessException
*/
AggBomVO[] insertBomForEcnAndRepls(AggBomVO[] aggvos, boolean checkEcn, String[] orgins) throws BusinessException;
/**
* BOM修改接口,是否需要考虑检查启用工程变更
*
* @param aggvos 修改BOM数组
* @return 保存后的BOM数组
* @throws BusinessException
*/
AggBomVO[] updateBomForEcn(AggBomVO[] aggVO, boolean checkEcn) throws BusinessException;
AggBomVO[] updateBomForEcn(AggBomVO[] aggVO, Map<String,String> rownoMap, boolean checkEcn) throws BusinessException;
/**
* BOM修改接口,是否需要考虑来自bom和bomtree修改保存
*
* @param aggVO 修改BOM数组
* @param 保存时是否判断启用工程变更
* @param 是否来自bom
* @param 界面录入的组织是否启用工程变更
* @return 保存后的BOM数组
* @throws BusinessException
*/
AggBomVO[] updateBomForBomTree(AggBomVO[] aggVO, boolean checkEcn, boolean isFromBom, boolean isEcn)
throws BusinessException;
AggBomVO[] updateBomForBomTree(AggBomVO[] aggVO,Map<String,String> rownoMap, boolean checkEcn, boolean isFromBom, boolean isEcn)
throws BusinessException;
/**
* 提交BOM
*
* @param clientFullVOs
* @param originBills
* @return
* @throws BusinessException
*/
public AggBomVO[] commitBom(AggBomVO[] clientFullVOs, AggBomVO[] originBills) throws BusinessException;
/**
* 收回BOM
*
* @param clientFullVOs
* @param originBills
* @return
* @throws BusinessException
*/
public AggBomVO[] uncommitBom(AggBomVO[] clientFullVOs, AggBomVO[] originBills) throws BusinessException;
/**
* 审批BOM
*
* @param clientFullVOs
* @param originBills
* @return
* @throws BusinessException
*/
public AggBomVO[] auditBom(AggBomVO[] clientFullVOs, AggBomVO[] originBills) throws BusinessException;
/**
* 弃审BOM
*
* @param clientFullVOs
* @param originBills
* @return
* @throws BusinessException
*/
public AggBomVO[] unauditBom(AggBomVO[] clientFullVOs, AggBomVO[] originBills) throws BusinessException;
/**
* BOM的停用
*
* @param aggvos
* @return
* @throws BusinessException
*/
AggBomVO[] seal(AggBomVO[] aggvos) throws BusinessException;
/**
* BOM的启用
*
* @param aggvos
* @return
* @throws BusinessException
*/
AggBomVO[] unSeal(AggBomVO[] aggvos) throws BusinessException;
/**
* BOM批量删除接口(带参数是否支持ECN是否支持审批流)
*
* @param aggvos
*/
void deleteBomsWithParam(AggBomVO[] aggvos, boolean isCheckEcn, boolean isOnApprove) throws BusinessException;
/**
* 由于业务日志需要调整跨组织bom复制覆盖原版本走该接口
*
* @param aggvos
* @param origins
* @param isCheckEcn
*/
void updateBomForBomCopy0214(AggBomVO[] aggvos, AggBomVO[] origins, boolean isCheckEcn);
/**
* 定制BOM删除
*/
void deleteCustomizedBom(AggBomVO[] aggvos)throws BusinessException;;
}