diff --git a/uapbd/src/private/nc/impl/bd/material/plan/MaterialPlanServiceImpl.java b/uapbd/src/private/nc/impl/bd/material/plan/MaterialPlanServiceImpl.java new file mode 100644 index 00000000..28496941 --- /dev/null +++ b/uapbd/src/private/nc/impl/bd/material/plan/MaterialPlanServiceImpl.java @@ -0,0 +1,194 @@ +package nc.impl.bd.material.plan; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +import nc.bs.bd.baseservice.busilog.BDOrgInfoBusiLogUtil; +import nc.bs.bd.baseservice.md.BDSingleBaseService; +import nc.bs.bd.material.plan.validator.MaterialPlanAsstValidator; +import nc.bs.bd.material.plan.validator.MaterialPlanIsPermitApproveValidator; +import nc.bs.bd.material.plan.validator.MaterialPlanSaveValidator; +import nc.bs.bd.material.plan.validator.MaterialReplUniqueValidator; +import nc.bs.businessevent.bd.BDCommonEventUtil; +import nc.bs.dao.BaseDAO; +import nc.bs.framework.common.InvocationInfoProxy; +import nc.bs.framework.common.NCLocator; +import nc.bs.uif2.validation.NullValueValidator; +import nc.bs.uif2.validation.Validator; +import nc.itf.bd.material.plan.IMaterialPlanService; +import nc.itf.org.IOrgUnitQryService; +import nc.pubitf.uapbd.IMaterialIsShareService; +import nc.vo.bd.material.plan.MaterialPlanVO; +import nc.vo.bd.material.stock.MaterialReplVO; +import nc.vo.bd.pub.SingleDistributedUpdateValidator; +import nc.vo.org.OrgVO; +import nc.vo.pub.BusinessException; +import nc.vo.pub.CircularlyAccessibleValueObject; +import nc.vo.pub.SuperVO; +import nc.vo.pub.lang.UFBoolean; +import nc.vo.util.BDPKLockUtil; +import nc.vo.util.BDVersionValidationUtil; +import nc.vo.util.bizlock.BizlockDataUtil; + + +public class MaterialPlanServiceImpl + extends BDSingleBaseService + implements IMaterialPlanService { + public MaterialPlanServiceImpl() { + super("8b7d49ab-7a65-4885-bcf1-7df89b84df4b", new String[]{"materialrepl"}); + setBusiLogUtil(new BDOrgInfoBusiLogUtil("8b7d49ab-7a65-4885-bcf1-7df89b84df4b", "c7dc0ccd-8872-4eee-8882-160e8f49dfad")); + } + + + public void deleteMaterialPlanVO(MaterialPlanVO deleteVO) throws BusinessException { + deleteVO(deleteVO); + } + + + protected void deletelockOperate(MaterialPlanVO vo) throws BusinessException { + BDPKLockUtil.lockString(new String[]{vo.getPk_material()}); + BDPKLockUtil.lockString(new String[]{getLockKey(vo)}); + } + + + public MaterialPlanVO updateMaterialPlanVO(MaterialPlanVO vo) throws BusinessException { + fixChildVOFields(vo); + + + getUniqueFieldTrimUtil().trimUniqueFields(new SuperVO[]{vo}); + + + updatelockOperate(vo); + + + BDVersionValidationUtil.validateSuperVO(new SuperVO[]{vo}); + + + MaterialPlanVO oldVO = (MaterialPlanVO) retrieveVO(vo.getPrimaryKey()); + + + updateValidateVO(oldVO, vo); + + + setUpdateAuditInfo(vo); + + IMaterialIsShareService materialIsShareService = (IMaterialIsShareService) NCLocator.getInstance().lookup(IMaterialIsShareService.class); + + String pk_group = InvocationInfoProxy.getInstance().getGroupId(); + + + BDCommonEventUtil eventUtil = new BDCommonEventUtil(getMDId()); + if (!vo.getPk_org().equals(pk_group)) { + MaterialPlanVO[] oldVOs = getMaterialPlanVOs(oldVO); + MaterialPlanVO[] vos = getMaterialPlanVOs(vo); + eventUtil.setOldObjs(oldVOs); + if (materialIsShareService.isMaterialShare()) { + eventUtil.dispatchUpdateBeforeEvent((Object[]) vos); + } else { + eventUtil.dispatchUpdateBeforeEvent((Object[]) vos); + } + } + + dbUpdateVO(vo); + + + notifyVersionChangeWhenDataUpdated(vo); + + + vo = (MaterialPlanVO) retrieveVO(vo.getPrimaryKey()); + + + if (!vo.getPk_org().equals(pk_group)) { + MaterialPlanVO[] oldVOs = getMaterialPlanVOs(oldVO); + MaterialPlanVO[] vos = getMaterialPlanVOs(vo); + eventUtil.setOldObjs(oldVOs); + if (materialIsShareService.isMaterialShare()) { + eventUtil.dispatchUpdateAfterEvent((Object[]) vos); + } else { + eventUtil.dispatchUpdateAfterEvent((Object[]) vos); + } + } + + writeUpdatedBusiLog(oldVO, vo); + + return vo; + } + + + protected void updatelockOperate(MaterialPlanVO vo) throws BusinessException { + BDPKLockUtil.lockString(new String[]{vo.getPk_material()}); + BDPKLockUtil.lockString(new String[]{getLockKey(vo)}); + BizlockDataUtil.lockDataByBizlock(new CircularlyAccessibleValueObject[]{vo}); + } + + + private String getLockKey(MaterialPlanVO vo) { + return vo.getPk_material() + "#" + vo.getPk_material(); + } + + + private void fixChildVOFields(MaterialPlanVO vo) throws BusinessException { + MaterialReplVO[] repls = vo.getMaterialrepl(); + if (repls != null && repls.length > 0) { + for (int i = 0; i < repls.length; i++) { + + repls[i].setPk_material(vo.getPk_material()); + + repls[i].setPk_materialplan(vo.getPk_materialplan()); + + if (repls[i].getDisplace() == null) { + repls[i].setDisplace(UFBoolean.FALSE); + } + } + } + } + + + protected Validator[] getUpdateValidator(MaterialPlanVO oldVO) { + NullValueValidator nullValueValidator = NullValueValidator.createMDNullValueValidator(MaterialPlanVO.class.getName(), + Arrays.asList(new String[]{"pk_material", "pk_group", "pk_org", "planbasnum", "roundingnum"})); + + + MaterialPlanSaveValidator saveValidator = new MaterialPlanSaveValidator(); + MaterialPlanAsstValidator asstValidator = new MaterialPlanAsstValidator(); + + MaterialReplUniqueValidator replUniqueValidator = new MaterialReplUniqueValidator(oldVO); + + MaterialPlanIsPermitApproveValidator isPermitApproveValidator = new MaterialPlanIsPermitApproveValidator(); + return new Validator[]{nullValueValidator, saveValidator, asstValidator, replUniqueValidator, isPermitApproveValidator, new SingleDistributedUpdateValidator()}; + } + + + private MaterialPlanVO[] getMaterialPlanVOs(MaterialPlanVO vo) throws BusinessException { + ArrayList list = new ArrayList(); + String pk_group = InvocationInfoProxy.getInstance().getGroupId(); + if (vo.getPk_group().equals(vo.getPk_org())) { + IOrgUnitQryService orgQryService = (IOrgUnitQryService) NCLocator.getInstance().lookup(IOrgUnitQryService.class); + OrgVO[] orgVOs = orgQryService.queryAllOrgUnitVOSByGroupIDAndClause(pk_group, " orgtype34 ='Y' "); + + + Map orgmap = new HashMap(); + String planSql = " pk_material='" + vo.getPk_material() + "'"; + + MaterialPlanVO[] vos = (MaterialPlanVO[]) (new BaseDAO()).retrieveByClause(MaterialPlanVO.class, planSql).toArray(new MaterialPlanVO[0]); + + for (MaterialPlanVO materialPlanVO : vos) { + orgmap.put(materialPlanVO.getPk_org(), vo); + } + + if (orgVOs != null) { + for (OrgVO orgvo : orgVOs) { + MaterialPlanVO temp = (MaterialPlanVO) vo.clone(); + if (orgmap.get(orgvo.getPk_org()) == null) { + temp.setPk_org(orgvo.getPk_org()); + list.add(temp); + } + } + } + return (MaterialPlanVO[]) list.toArray(new MaterialPlanVO[0]); + } + return new MaterialPlanVO[]{vo}; + } +} \ No newline at end of file