refactor(pmo): 重构 PMO 卡片操作流程

- 新增 PmoCardOperAction 类作为 PMO 卡片操作的基类
- 实现 PmoCardPutAction 类用于处理卡片投放操作
- 重构 PmoResource 中的自动投放逻辑,使用 IPMOBusinessService 接口替代 PMORowPutBP
This commit is contained in:
张明 2025-06-17 10:02:27 +08:00
parent 2d34d04fed
commit 5795f4b5be
3 changed files with 136 additions and 3 deletions

View File

@ -0,0 +1,109 @@
package nccloud.web.mmpac.pmo.action;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import nc.itf.mmpac.pmo.pac0002.IPMOQueryService;
import nc.util.mmf.framework.base.MMArrayUtil;
import nc.util.mmf.framework.base.MMCollectionUtil;
import nc.util.mmf.framework.base.MMValueCheck;
import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO;
import nc.vo.mmpac.pmo.pac0002.entity.PMOItemVO;
import nc.vo.pub.BusinessException;
import nc.vo.pub.CircularlyAccessibleValueObject;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import nccloud.framework.core.util.GridCompareUtils;
import nccloud.framework.service.ServiceLocator;
import nccloud.framework.web.container.IRequest;
import nccloud.framework.web.json.JsonFactory;
import nccloud.framework.web.ui.pattern.billcard.BillCard;
import nccloud.framework.web.ui.pattern.billcard.BillCardOperator;
import nccloud.mmpac.pmo.pub.entity.CardInfo;
import nccloud.mmpac.pmo.pub.entity.PmoConst;
import nccloud.mmpac.pmo.pub.entity.SingleInfo;
import nccloud.web.mmpac.pmo.constant.NCCPMOConstLang;
import nccloud.web.mmpac.pmo.util.PmoScaleUtil;
import nccloud.web.mmpac.pmo.util.PmoUtil;
import nccloud.web.mmpub.pub.resexp.PfResumeExceptionNccUtils;
public abstract class PmoCardOperAction extends PMOCommonAction {
public PmoCardOperAction() {
}
public Object doAction(IRequest request) {
BillCard card = null;
BillCard originBillcard = null;
BillCard returnCard = null;
PfResumeExceptionNccUtils.before(request);
BillCardOperator operator = new BillCardOperator(PmoConst.PAGECODE);
PMOAggVO[] vos = null;
PMOAggVO[] returnvos = null;
try {
CardInfo cardInfo = (CardInfo) JsonFactory.create().fromJson(request.read(), CardInfo.class);
String cpmhoid = cardInfo.getId();
PMOAggVO vo = null;
try {
vo = ((IPMOQueryService) ServiceLocator.find(IPMOQueryService.class)).queryByPk(cpmhoid);
} catch (BusinessException e) {
ExceptionUtils.wrappException(e);
}
if (MMValueCheck.isEmpty(vo)) {
ExceptionUtils.wrappBusinessException(NCCPMOConstLang.getHint4Delete());
}
vo.getParentVO().setFatpcheck(cardInfo.getFatpcheck());
List<SingleInfo> bodys = cardInfo.getBodyInfo();
if (MMCollectionUtil.isNotEmpty(bodys)) {
Map<String, SingleInfo> cacheMap = new HashMap();
List<PMOItemVO> itemList = new ArrayList();
for (SingleInfo body : bodys) {
cacheMap.put(body.getId(), body);
}
PMOItemVO[] items = vo.getChildrenVO();
if (MMArrayUtil.isNotEmpty(items)) {
for (PMOItemVO item : items) {
if (cacheMap.containsKey(item.getPrimaryKey())) {
item.setTs(((SingleInfo) cacheMap.get(item.getPrimaryKey())).getTs());
item.setAttributeValue("rowid", ((SingleInfo) cacheMap.get(item.getPrimaryKey())).getRowid());
itemList.add(item);
}
}
vo.setChildrenVO((CircularlyAccessibleValueObject[]) itemList.toArray(new PMOItemVO[itemList.size()]));
}
}
vo.getParentVO().setTs(cardInfo.getTs());
(new PmoUtil()).processhslScale(vo);
originBillcard = operator.toCard(vo);
operator.setOriginBillcard(originBillcard);
vo.getParent().setStatus(1);
vos = new PMOAggVO[]{vo};
this.checkPermission(vos);
(new PmoUtil()).clearPseudocolumn(vos);
returnvos = this.process(vos);
vos = (PMOAggVO[]) this.combine(vos, returnvos);
card = operator.toCard(vos[0]);
this.afterProcess(card);
returnCard = GridCompareUtils.compareBillCardGrid(operator.getOriginBillcard(), card);
return returnCard;
} catch (Exception e) {
return PfResumeExceptionNccUtils.handleResumeException(e);
}
}
protected abstract PMOAggVO[] process(PMOAggVO[] var1) throws BusinessException;
public void afterProcess(BillCard card) {
PmoScaleUtil util = new PmoScaleUtil();
util.processBillCard(card);
}
}

View File

@ -0,0 +1,24 @@
package nccloud.web.mmpac.pmo.action;
import nc.itf.mmpac.pmo.pac0002.IPMOBusinessService;
import nc.vo.mmpac.pmo.pac0002.entity.PMOAggVO;
import nc.vo.pub.BusinessException;
import nccloud.framework.service.ServiceLocator;
import nccloud.mmpac.pmo.pub.entity.PmoConst;
// ¿¨Æ¬ÖÐͷŲÙ×÷
public class PmoCardPutAction extends PmoCardOperAction {
public PmoCardPutAction() {
}
protected String getActioncode() {
return PmoConst.PMOPUT;
}
protected PMOAggVO[] process(PMOAggVO[] vos) throws BusinessException {
IPMOBusinessService serv = (IPMOBusinessService) ServiceLocator.find(IPMOBusinessService.class);
return serv.rowput(vos);
}
}

View File

@ -7,6 +7,7 @@ import javax.ws.rs.POST;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import nc.itf.mmpac.pmo.pac0002.IPMOBusinessService;
import nc.bs.dao.BaseDAO; import nc.bs.dao.BaseDAO;
import nc.bs.dao.DAOException; import nc.bs.dao.DAOException;
import nc.bs.framework.common.NCLocator; import nc.bs.framework.common.NCLocator;
@ -19,7 +20,6 @@ import nc.ws.opm.pub.utils.result.APIErrCodeEnum;
import nccloud.api.mmpac.pmo.IAPIPmoMaintainService; import nccloud.api.mmpac.pmo.IAPIPmoMaintainService;
import nccloud.api.rest.utils.ResultMessageUtil; import nccloud.api.rest.utils.ResultMessageUtil;
import nccloud.pubift.commen.itf.utils.IHttpPostOtherSys; import nccloud.pubift.commen.itf.utils.IHttpPostOtherSys;
import nc.bs.mmpac.pmo.pac0002.bp.PMORowPutBP;
import nccloud.ws.rest.resource.AbstractNCCRestResource; import nccloud.ws.rest.resource.AbstractNCCRestResource;
import org.json.JSONString; import org.json.JSONString;
@ -69,9 +69,9 @@ public class PmoResource extends AbstractNCCRestResource {
isIncludeOrg = httpPostOtherSys.checkIfIncludeOrg(orgCode); isIncludeOrg = httpPostOtherSys.checkIfIncludeOrg(orgCode);
logger.debug("检查是否为电缆[" + orgCode + "]返回:" + isIncludeOrg); logger.debug("检查是否为电缆[" + orgCode + "]返回:" + isIncludeOrg);
if (isIncludeOrg) { if (isIncludeOrg) {
PMORowPutBP rowPutBP = NCLocator.getInstance().lookup(PMORowPutBP.class); IPMOBusinessService putService = (IPMOBusinessService) NCLocator.getInstance().lookup(IPMOBusinessService.class);
try { try {
rowPutBP.rowput(insertBills); putService.rowput(insertBills);
logger.info("自动投放完成orgCode=" + orgCode); logger.info("自动投放完成orgCode=" + orgCode);
} catch (Exception e) { } catch (Exception e) {
logger.error("自动投放失败orgCode=" + orgCode, e); logger.error("自动投放失败orgCode=" + orgCode, e);