一:场景描述
如图所示,需求如下:
1.总借款金额:是客开添加字段,不是标准产品字段。
2.总借款金额值:会根据当前人员岗位的不同而发生变化,如:初级员工 2000元,高级员工:5000元
客开需要在标准产品之上,完成上述两个要求。
二 代码现状(我们以伪代码进行讲解)
public class CapLogController extends BaseController { private static final Log LOGGER = CtpLogFactory.getLog(CapLogController.class); @Override public ModelAndView index(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView("cap4/monitor/capRunningLog"); List<Enums.CapLogType> capLogTypeList = Enums.CapLogType.getLogTypeListByOwnerType(FormConstant.CAPLOG_TYPEOWNER_RUNNING); List<Map<Integer, String>> capLogTypeMapList = new ArrayList<Map<Integer, String>>(); for (Enums.CapLogType capLogType : capLogTypeList) { // 暂时屏蔽掉自定义触发 if (capLogType == Enums.CapLogType.CUSTOMTRIGGER) { continue; } Map<Integer, String> map = new HashMap<Integer, String>(); map.put(capLogType.getKey(), capLogType.getText()); capLogTypeMapList.add(map); } mav.addObject("capLogType", JSONUtil.toJSONString(capLogTypeMapList)); mav.addObject("formId", request.getParameter("formId")); mav.addObject("bizId", request.getParameter("bizId")); mav.addObject("dataId", request.getParameter("dataId")); return mav; } }
三:解决方案:业务埋点
使用场景:通过标准产品经理分析,此业务是通用业务,准备埋点。
第一步:业务组提取需求,埋点:返回结果处理
定义业务接口:
/** * 报销业务动态接口 * * @author Lenovo */ public interface IReimbursementDynamicInterface extends CapDynamicInterface { /** * index 界面返回钱,返回结果值修改 * * @return */ String indexBeforeRetrun(ModelAndView mv); }
2.第二步:业务组植入业务点
public class CapLogController extends BaseController { private static final Log LOGGER = CtpLogFactory.getLog(CapLogController.class); /** * 动态bean 上下文 * 必须注入 */ @Inject private DynamicContext dynamicContext; /** * 被植入的对象 * 注入:只是一个属性声明,不能使用@Inject 等注入 */ private IReimbursementDynamicInterface reimbursementDynamicInterface = null; /** * 初始化 */ @PostConstruct public void init() { reimbursementDynamicInterface = dynamicContext.getBean(IReimbursementDynamicInterface.class); } @Override public ModelAndView index(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView("cap4/monitor/capRunningLog"); List<Enums.CapLogType> capLogTypeList = Enums.CapLogType.getLogTypeListByOwnerType(FormConstant.CAPLOG_TYPEOWNER_RUNNING); List<Map<Integer, String>> capLogTypeMapList = new ArrayList<Map<Integer, String>>(); for (Enums.CapLogType capLogType : capLogTypeList) { // 暂时屏蔽掉自定义触发 if (capLogType == Enums.CapLogType.CUSTOMTRIGGER) { continue; } Map<Integer, String> map = new HashMap<Integer, String>(); map.put(capLogType.getKey(), capLogType.getText()); capLogTypeMapList.add(map); } mav.addObject("capLogType", JSONUtil.toJSONString(capLogTypeMapList)); mav.addObject("formId", request.getParameter("formId")); mav.addObject("bizId", request.getParameter("bizId")); mav.addObject("dataId", request.getParameter("dataId")); //植入动作 if(reimbursementDynamicInterface!=null) {//回调:客开植入动作 reimbursementDynamicInterface.indexBeforeRetrun(mav); } return mav; } }
3.第三步:业务发布部署
4.第四步:客开实现接口
/** * 客开实现接口 * @author mt * @date 2021/4/10 */ public class Reimbursement implements IReimbursementDynamicInterface { /** * index 界面返回钱,返回结果值修改 * * @param mv * @return */ @Override public String indexBeforeRetrun(ModelAndView mv) { long money=0L; //业务处理:给你money 赋值 //money=xxxxx //将返回结果值:赋值给mv mv.addObject("money",money); return null; } }
5.第五步:客开xml 注入bean
6.第六步:客开发布部署
开发完成,注意:此种方式需要平台业务组开发接口
开发完成