ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AOP使用举例

2020-11-19 09:33:04  阅读:195  来源: 互联网

标签:ocxCommonquery obj AOP req 举例 使用 null class cxhis


 1.背景

不同的日期查询数据,需要到不同的库去查:

 

本系统采用AOP的方法,自动切换数据源。

当前库:今天的数据

历史库:前三个月的数据

归档库:三个月之前的数据

 

 

 2.代码示例

本系统AOP代码:

(1)由ChangeDataSource.class进入AOP

@CloudComponent
@TargetDataSource(location = ChangeDataSource.class)
public class IOptionPortfolioStrategyTentrustServiceImpl implements IOptionPortfolioStrategyTentrustService {

    @Autowired
    private IOptionPortfolioStrategyTentrustMapper iOptionPortfolioStrategyTentrustMapper;


    /**
     * 日期类型切分
     */
    private static final String DATETYPE_1 = "1" ;
    private static final String DATETYPE_3 = "3" ;


    /**
     * 当前与历史查询
     * @param req
     * @return
     */
    @Override
    public PubstockOptionPortfolioStrategyTentrustResponse getTentrust(PubstockOptionPortfolioStrategyTentrustRequest req) {
        ValidUtils.notEmpty(req.getLoginCompany(), "公司序号不能为空");
        ValidUtils.notEmpty(req.getBeginDate(), "起始日期不能为空");
        ValidUtils.notEmpty(req.getEndDate(), "结束日期不能为空");
        PubstockOptionPortfolioStrategyTentrustResponse resp = new PubstockOptionPortfolioStrategyTentrustResponse();
        if (DATETYPE_1.equals(req.getDateType())) {
            MysqlPageHelper.startPage(req.getStartRow(), req.getPageSize(),false);
            List<OpubstockPtionPortfolioStrategyTentrust> rows = iOptionPortfolioStrategyTentrustMapper.tentrustQuery(req);
            MysqlPageHelper.endPage();
            // 添加判空操作
            if (rows != null && rows.size() > 0) {
                resp.setRows(rows);
            }
        } else {
            MysqlPageHelper.startPage(req.getStartRow(), req.getPageSize(),false);
            List<OpubstockPtionPortfolioStrategyTentrust> rows2 = iOptionPortfolioStrategyTentrustMapper.tentrustHisQuery(req);
            MysqlPageHelper.endPage();
            // 添加判空操作
            if (rows2 != null && rows2.size() > 0) {
                resp.setRows(rows2);
            }
        }
        return resp;
    }
}

 

根据begin_date,end_date 切换日期 end_date/business_date < 归档日cxhis, locationKey = dbarch .   否则 locationKey = default 默认数据库
 1 public class ChangeDataSource implements DsLocationable{
 2 
 3 
 4     /**
 5      * Get locationkey string
 6      *
 7      * @param args
 8      * @return string
 9      */
10     @Override
11     public String getLocationkey(Object[] args) {
12         // TODO Auto-generated method stub
13         String locationKey = DataSourceConstants.DEFAULT;
14         AresUtil aresUtil = SpringUtils.getBean(AresUtil.class);
15         IFinancepubService financePubService = aresUtil.getFinancepubService();
16         IAresService iAresService = aresUtil.getAresService();
17         for (Object obj : args) {
18             CxServiceAspect cxAspect = new CxServiceAspect();
19             YhpubPretradedayGetRequest yhpubPretradedayGetRequest = new YhpubPretradedayGetRequest();
20             yhpubPretradedayGetRequest.setMarketNo(5);
21             YhpubPretradedayGetResponse yhpubPretradedayGetResponse = iAresService.pretradedayGet(yhpubPretradedayGetRequest);
22             //获取上一个业务日期
23             Integer prevBusinessDate = yhpubPretradedayGetResponse!=null?yhpubPretradedayGetResponse.getPrevBusinessDate():0;
24             //查询日期小于等于cxhis 归档日,数据全部移动到了归档库
25             BatclearPrebusindatecalcRequest req = new BatclearPrebusindatecalcRequest();
26             req.setBusinessDate(prevBusinessDate);
27             BatclearPrebusindatecalcResponse response = financePubService.prebusindatecalc(req);
28             int cxhis = response.getPrevBusinessDate();
29 //            int cxhis = this.cxhisDate(prevBusinessDate);
30 
31             if (obj instanceof BaseDTO) {
32                 BaseDTO baseDto = (BaseDTO) obj;
33                 baseDto.setCxhis(cxhis);
34             }
35             /****** START报表查询逻辑处理START *********************/
36             if (obj instanceof OcxCommonquery) {
37                 /** 1.数据权限控制 **/
38                 OcxCommonquery ocxCommonquery = (OcxCommonquery) obj;
39                 Integer companyId = ocxCommonquery.getCompanyId();
40 
41                 /****** 3 数据源切换 START *********************/
42                 // 切换到归档数据查询
43                 int endDate = ocxCommonquery.getEndDate() == null ? 0 : ocxCommonquery.getEndDate().intValue();
44                 int beginDate = ocxCommonquery.getBeginDate() == null ? 0 : ocxCommonquery.getBeginDate().intValue();
45 
46                 if (endDate > 0 && endDate <= cxhis) {
47                     ocxCommonquery.setDateType("3");
48                     locationKey = DataSourceConstants.DBARCH;
49                 }
50                 if (beginDate == 0 && endDate == 0) { // 如果只传入一个日期businessDate
51                     Object value = cxAspect.getFieldValueByName("businessDate", obj);
52                     // 如果入参中没有这个参数或者这个参数没有值,就默认查询当前库(dbtrade)
53                     if (null == value) {
54                         ocxCommonquery.setDateType("1");
55                         // dbAspect.dataSourceExchange("1");
56                         locationKey = DataSourceConstants.DEFAULT;
57                     } else {
58                         int businessDate = Integer.parseInt(String.valueOf(value));
59                         if (businessDate > 0 && businessDate <= cxhis) {
60                             ocxCommonquery.setDateType("3");
61                             // dbAspect.dataSourceExchange("3");
62                             locationKey = DataSourceConstants.DBARCH;
63                         }
64                     }
65                 }
66             }
67 
68         }
69         return locationKey;
70     }
71 }

 

 

标签:ocxCommonquery,obj,AOP,req,举例,使用,null,class,cxhis
来源: https://www.cnblogs.com/aaaazzzz/p/14003532.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有