公积金

一,需求分析

1,访问关系

外联平台--》第三方公积金机构

公司内部其他部门--》外联平台

2,设计模式

外联平台对内部提供了统一的调用接口,post或get,内部调用哪家公积金呢,入参时会传入一个cityId,通过它区分不同城市公积金。

平台后台实现怎么设计:

*适配平台 , 统一各公积金输入输出

*设计一个统一调用接口,请求体,响应体相同,各家公积金各自实现该接口,来实现各自的业务逻辑

统一接口

public interface ICheckMonthlyPayment {

//获取原始报文   
   public BaseGjjResponse callGjjGetResponse(IcsGjjMpCrRequest rq);
//原始报文转化为统一响应体
   public IcsGjjMpCrResponse convertAndReturnResponse(BaseGjjResponse gjjRs, IcsGjjMpCrRequest rq);   

}

武汉实现类
@Service("wuHanMonPayImpl")
public class WuHanMonPayImpl implements ICheckMonthlyPayment {

3,内部访问外联平台流程

对内提供了:post与get两种请求方式

1,判断是否直连查询还是查询本地数据库缓存

2,如直连查询,要重新写入本地最新数据

3,记录内部调用日志

表结构设计与响应体

主表(IcsGjjApiCheckMpCache)+明细表(IcsGjjApiCheckMpCacheMap)=响应体(IcsGjjMpCrResponse)

二,各个城市调用详细

《1》,武汉直连查询详细

1,校验该城市是否接入,接入,获取该城市接口访问信息

2,AOP,外联平台链接公积金机构,统计接口调用日志;

3,socket连接,创建socket,获取响应报文

*第一次连接,解析非标准xml报文,获取公积金信息及文件名信息报文

*第二次连接,根据第一次获取的文件名,再次连接socket,获取文件报文信息

4,解析原始报文,数据落地

《2》深圳公积金

1,esb对接

《3》杭州公积金

1,esb对接

《4》51公积金

代码:

适配平台

@Service("checkMpRouting")
public class AdapterRoutingServiceImpl implements ISwitchService{

	@Autowired
	Map<String, ICheckMonthlyPayment> checkMpMap;

	/**
	 * 主业务逻辑
	 * 1 根据cityid路由到 第二层service DONE
	 * 2 DB 获取连接地址信息 DONE
	 * 3 访问gjj中心获得response
	 * 		通过aspect AOP拦截方法,
	 * 			添加逻辑 3A. circuitbreaker DONE
	 * 				    3B. 记录数据库日志-- 调用API DONE
	 * 		            3C. 记录数据库日志-- 获取RS DONE
	 * 4 读取RS信息,转化为输出格式
	 *      AOP 拦截方法,记录日志 DONE
	 */
	public IcsGjjMpCrResponse callGjjCenterCheckMpAndConvert(IcsGjjMpCrRequest rq) {

		IcsGjjMpCrResponse rs = null;
		ICheckMonthlyPayment checkMpApi = null;
		//根据cityid 使用不同公积金中心的client逻辑
		switch (rq.getPayCityID())
		{
			case GjjCityIDConstants.CITYID_WUHAN:
				checkMpApi = checkMpMap.get("wuHanMonPayImpl");
				break;
			case GjjCityIDConstants.CITYID_SHENZHEN:
				checkMpApi = checkMpMap.get("shenZhenGjjEsbServiceImpl");
				break;
			case GjjCityIDConstants.CITYID_QINGDAO:
				checkMpApi = checkMpMap.get("qingDaoMonPayImpl");
				break;
			case GjjCityIDConstants.CITYID_HANGZHOU:
				checkMpApi = checkMpMap.get("hangZhouGjjEsbServiceImpl");
				break;
			default:
				checkMpApi = checkMpMap.get("yahooWeatherImpl");
				break;
		}

		//提交请求,获得返回报文并转化为实体
		BaseGjjResponse gjjResponsePojo = checkMpApi.callGjjGetResponse(rq);
		//转化为返回的RS POJO
		rs = checkMpApi.convertAndReturnResponse(gjjResponsePojo, rq);

		return rs;
	}


}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值