一个项目如何支持多种第三方对接如何实现?

简介: 一个项目如何支持多种第三方对接如何实现?

最近公司做了一个发票系统,只对接了一个第三方,但是现在要求对接多个第三方,如何提高代码的重用性减少开发量呢?

这里不得不引出设计模式了

这里想到的设计模式就是模板模式 和策略模式

每一种第三方平台都是一种策略

模板方法抽象类可以实现业务流程的整体逻辑

模板方法:可以将相同部分的代码放在父类中,而将不同的代码放入不同的子类中,用来解决代码重复的问题。比如RestTemplate, JmsTemplate, JpaTemplate

根据模板方法 首先梳理业务流程,确定不变的地方,不确定的方法都可以改为抽象方法。


此处省去了业务代码

大体框架如下

@Slf4j
public abstract class AbstractTableHandler<T> {
    //抽象处理发票业务
    //type 开票类型
    public JSONObject getInvoicePdfUrlpre(JSONObject param ) {
        //重新开票校验开票次数不能超过3次; 
        //判断本次开票是否是重开
        try {
            JSONObject process = process(param);
                JSONObject processAfter = processAfterc(process,param,ifchongkai);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    //b端处理结果
    public abstract JSONObject processAfterb(JSONObject process, JSONObject param, boolean ifchongkai);
    //开票B端
    public abstract JSONObject processb(JSONObject param);
    public abstract List<T> processmoney(String money,JSONObject param);
    //开票
    public abstract JSONObject process(JSONObject param)
            throws Exception;
    //处理开票结果数据
    public abstract JSONObject processAfterc(JSONObject s,JSONObject param,boolean reInvoce)
            throws Exception;
    }
}

实现一个策略Handler

@Slf4j
public class Handler extends AbstractTableHandler<FpkjxxSpmxs> {
    @Override
    public JSONObject processAfterb(JSONObject s, JSONObject param, boolean ifchongkai) {
        return s;
    }
    @Override
    public JSONObject processb(JSONObject jsonObject) {
        return JSONObject.parseObject(s);
    }
    @Override
    public List<FpkjxxSpmxs> processmoney(String money,JSONObject param) {  
        return fpkjxxSpmxsList;
    }
    @Override
    public JSONObject process(JSONObject jsonObject) throws Exception {        
        return JSONObject.parseObject(s);
    }
    @Override
    public JSONObject processAfterc(JSONObject s,JSONObject param,boolean reInvoce) throws Exception {
             return s;
    }
}

下面就是将这个策略注入spring

package com.reformer.invoice.handler;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@SuppressWarnings("rawtypes")
@Service
public class InvoiceStraegyFactory {
    @Autowired
    Map<String, AbstractTableHandler> strategys = new ConcurrentHashMap<>();
    public AbstractTableHandler getInvoiceStraegy(String invoicetype) {
        if (StringUtils.isBlank(invoicetype)) {
            return null;
        }
        AbstractTableHandler strategy = strategys.get(invoicetype);
        if (strategy == null) {
            strategy = strategys.get(invoicetype);
        }
        return strategy;
    }
}

最后就是策略调用

AbstractTableHandler<?> tableHanlder = invoiceStraegyFactory.getInvoiceStraegy(invoiceChannelCodeDao.getCode());
JSONObject invoicePdfUrlpre = tableHanlder.getInvoicePdfUrlpre(reqJson);


这样 每种不同的第三方对接是需要实现对应的Handler 就可以

其他业务逻辑代码不变

相关文章
|
21天前
|
消息中间件 缓存 运维
云his系统源码 SaaS应用 功能易扩 统一对外接口管理
运营运维 系统运维、综合监管、系统运营
56 1
|
7月前
|
关系型数据库 MySQL API
不同项目下如何进行快速的对接(其中一种方法)
不同项目下如何进行快速的对接(其中一种方法)
53 0
|
21天前
|
前端开发
基于jeecgboot流程管理平台的自定义业务表单集成方法
基于jeecgboot流程管理平台的自定义业务表单集成方法
35 0
|
21天前
|
数据采集 JavaScript API
第三方系统访问微搭低代码的后端API
第三方系统访问微搭低代码的后端API
|
21天前
|
监控 数据可视化 前端开发
智慧工地云平台源码 支持二次开发、支持源码交付
智慧工地利用移动互联、物联网、云计算、大数据等新一代信息技术,彻底改变传统施工现场各参建方的交互方式、工作方式和管理模式,为建设集团、施工企业、监理单位、设计单位、政府监管部门等提供一揽子工地现场管理信息化解决方案。 通过人员管理、车辆管理、视频监控、施工质量、设备管理、环境监测、能耗监测七大维度提供面向工程管理人员的现场综合指挥管理平台,实现对劳务人员、大型机械、施工车辆等对象信息、行为、成果的智慧管理。 •支持多端展示(PC端、手机端、平板端); •数字孪生可视化大屏,一张图掌握项目整体情况; •使用轻量化模型,高效部署三维可视化管理,与一线生产过程相融合,集成数据后台,统一前端入口
60 1
|
10月前
|
设计模式 数据安全/隐私保护
高效接入第三方登录且易扩展的方法
我们使用适配模式来实现一个实际的业务场景,解决实际问题。年纪稍微大一点的小伙伴一定经历过这样的过程。很早以前开发的老系统应该都有登录接口,但是随着业务的发展和社会的进步,单纯地依赖用户名密码登录显然不能满足用户需求。现在,大部分系统都已经支持多种登录方式,如QQ登录、微信登录、手机登录、微博登录等,同时保留用户名密码的登录方式。虽然登录形式丰富,但是登录后的处理逻辑可以不必改,都是将登录状态保存到Session,遵循开闭原则。首先创建统一的返回结果ResultMsg类。
100 0
|
11月前
|
开发框架 API 数据安全/隐私保护
合约跟单带单模式API对接平台开发部署指南(附源码实例分析)
合约跟单带单模式API对接平台开发部署指南(附源码实例分析)
|
11月前
|
数据采集 数据库连接 API
获取第三方数据四种方式
减少开发人员逻辑处理。api将功能的逻辑在接口内部封装好,不需要开发人员在自行的编写逻辑
|
11月前
|
消息中间件 XML 存储
集成的方式
系统集成-功能集成
73 0
|
11月前
|
算法 API
期货交易跟单软件的API对接开发部署规则指南
期货交易跟单软件的API对接开发部署规则指南