Merge remote-tracking branch 'origin/main'
This commit is contained in:
commit
442874e2f1
|
|
@ -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<MaterialPlanVO>
|
||||
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<MaterialPlanVO> list = new ArrayList<MaterialPlanVO>();
|
||||
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<String, Object> orgmap = new HashMap<String, Object>();
|
||||
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};
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue