老莫的笔记本  
  
查看: 986|回复: 0

关于 如何同步主系统内部的可售商标问题

[复制链接]

664

主题

881

帖子

5167

积分

超级版主

Rank: 8Rank: 8

积分
5167
发表于 2020-8-5 17:27:02 | 显示全部楼层 |阅读模式
========================================= 关于 如何同步主系统内部的可售商标问题

        明确: 直接从数据库走,跳过token 环节;
               
        问题1:我有两个数据库,a,b   里面有部分表内容相同, 使用者甲 发起模糊请求 ,我可以分别获取a 和 b 内的数据,可 我该如何做到均衡 ?[比方说,第一页显示20条数据 ]
       
                老莫同学的点子:
               
                        1. 查就查呗,先查本地数据库,判断够不够,不够当页条数的,去拿主系统的;
                       
                                1.1 问题来了:  主系统也是按照请求算的,那主系统也会有个对应的请求范围[第几页] ;
                                       
                                                比方说:第4页没有,我取了主系统前20条 ,第五页也没有,我怎么知道我该去 21-40条?
                               
       

        方法1:
       
                每次查的时候。连调 权客云数据 [数据可以实时更新]
               
               
       
        方法2:
       
                阶段性,将主系统可售商标信息复制一份到本地,每次更新时,删除原本的,再复制新的,效率太差,但是操作容易


                排除方法2 :
       
       
       
        方法1的 请求逻辑:
         *  请求逻辑:
     *      a : 本系统数据库 ;
     *      b : 权客云数据库 ;
     *
     *      1. 带入请求条件,分别请求 a , b 内的符合条件的总数 aNum, bNum ;
     *      2. 页数,请求条数 为 必填值,如果不填 有默认值 page = 1 , limit= 20 ;
     *      3. page*limit = nowNum ; [为当前值]
     *      4. 判断 if( nowNum <= aNum){
     *                     ------如果请求数小于或等于a的总数----
     *                      [只取本地内的数据]   
     *              } else if(nowNum>aNum ){
     *                      ------如果请求数大于a的总数----
     *                     
     *                      if( nowNum+limit < aNum ){
     *                             -----且如果 处于ab之间,------
     *                             [则请求a 并且请求b,然后组装 ]
     *                      }else{
     *                           ----直接请求b------
     *                           
     *                              从多少条起步,拿去limit的 长度  这样则不需要算页数;               
     *         
     *
     *                      }
     *              };
     *       5. 返回值有limit, 有page  有 count , 有data [两者拼凑]   


最后的逻辑代码:
  1. /**
  2.      *  请求逻辑:
  3.      *      a : 本系统数据库 ;
  4.      *      b : 权客云数据库 ;
  5.      *
  6.      *      1. 带入请求条件,分别请求 a , b 内的符合条件的总数 aNum, bNum ;
  7.      *      2. 页数,请求条数 为 必填值,如果不填 有默认值 page = 1 , limit= 20 ;
  8.      *      3. page*limit = nowNum ; [为当前值]
  9.      *      4. 判断 if( nowNum <= aNum){
  10.      *                     ------如果请求数小于或等于a的总数----
  11.      *                      [只取本地内的数据]
  12.      *              } else if(nowNum>aNum ){
  13.      *                      ------如果请求数大于a的总数----
  14.      *
  15.      *                      if( nowNum < aNum+limit  ){
  16.      *                             -----且如果 处于ab之间,------
  17.      *                             [则请求a 并且请求b,然后组装 ]
  18.      *                      }else{
  19.      *                           ----直接请求b------
  20.      *
  21.      *                              从多少条起步,拿去limit的 长度  这样则不需要算页数;
  22.      *
  23.      *
  24.      *                      }
  25.      *              };
  26.      *       5. 返回值有limit, 有page  有 count , 有data [两者拼凑]
  27.      *
  28.      *
  29.      *
  30.      *
  31.      *      端口请求: http://www.newadmin.com/getsell?page=3&limit=15
  32.      *      参  数: page   limit [有默认值]
  33.      *
  34.      *
  35.      */
  36.     public function getsell(Request $request)
  37.     {

  38.         // 提取页码和条数 没有则使用默认值
  39.         $page = (int) $request->input('page');
  40.         if (empty($request->input('page'))) {
  41.             $page = 1;
  42.         }

  43.         $limit = (int) $request->input('limit');
  44.         if (empty($request->input('limit'))) {
  45.             $limit = 20;
  46.         }

  47.         // 整合请求条件a
  48.         $aMap = function ($query) use ($request) {
  49.             $query->where('id', '>', 0);
  50.         };
  51.         // 整合请求条件b
  52.         $bMap = function ($query) use ($request) {
  53.             
  54.             // $query->where('id', '>=', 50);
  55.             $query->where('t2.priceStatus', '=', 2);
  56.         };
  57.         // 整合b的最终转换
  58.         $bChangeArr = [
  59.             DB::raw('"3" as addtype'),
  60.             "t1.id",
  61.             "t1.tmNameText",
  62.             "t1.tmIRNumberText as tmNumberText",
  63.             "t1.tmClassText as ctype",
  64.             "t1.dateApplication as registerDate",
  65.             "t1.tmRightEndDate as specialEndDate",
  66.             "t2.priceStatus"
  67.             ];

  68.         // 获取 ab 的总数
  69.         $aNum =  CmsSellTrademark::where($aMap)->count();
  70.         $bNum =  DB::connection('mysql_quancloud')
  71.                     ->table('trademark_detail as t1')
  72.                     ->join('trademark_currency as t2', 't2.id', '=', 't1.businessId')
  73.                     ->where($bMap)
  74.                     ->count();

  75.         // 判断当前总条数
  76.         $nowNum = $page*$limit ;

  77.         $resData = array();
  78.          
  79.         if ($nowNum <= $aNum) {
  80.             //  ------如果请求数小于或等于a的总数---- // return '只取本地内的数据';

  81.             // 初始数据
  82.             $surplus =  $limit*($page-1);

  83.             //  分页 会自动判断 参数中的page 值 这里只需要条数就可以
  84.             $resData =  CmsSellTrademark::where($aMap)->offset($surplus)->limit($limit)->get();
  85.         } elseif ($nowNum>$aNum) {
  86.             //    ------如果请求数大于a的总数----
  87.                   
  88.             if ($nowNum < $aNum +$limit) {
  89.                 // 初始数据
  90.                 $surplus =  $limit*($page-1);
  91.                         
  92.                 //    -----且如果 处于ab之间,------  // return '则请求a 并且请求b,然后组装';
  93.                 $aResData =  CmsSellTrademark::where($aMap)->offset($surplus)->limit($limit)->get()->toArray();

  94.                 // 看一下剩余多少条
  95.                 $otherSurplus = $limit - count($aResData);

  96.                 $bResData = DB::connection('mysql_quancloud')
  97.                                         ->table('trademark_detail as t1')
  98.                                         ->join('trademark_currency as t2', 't2.id', '=', 't1.businessId')
  99.                                         ->select($bChangeArr)
  100.                                         ->where($bMap)
  101.                                         ->offset(0)
  102.                                         ->limit($otherSurplus)
  103.                                         ->get()
  104.                                         ->toArray();

  105.                 $resData = array_merge($aResData, $bResData);
  106.             } else {
  107.                 // ----直接请求b------  // 从多少条起步,拿去limit的 长度  这样则不需要算页数 ,"t2.priceRange"  priceRange为售价范围 ,priceStatus=2为售价开关   1未关 //return '直接请求b';
  108.                 $surplus = $limit*$page - $aNum;

  109.                 $resData = DB::connection('mysql_quancloud')
  110.                                         ->table('trademark_detail as t1')
  111.                                         ->join('trademark_currency as t2', 't2.id', '=', 't1.businessId')
  112.                                         ->select($bChangeArr)
  113.                                         ->where($bMap)
  114.                                         ->offset($surplus)
  115.                                         ->limit($limit)
  116.                                         ->get();
  117.             }
  118.         };

  119.         return [
  120.             'code' => 0,
  121.             'message' => '请求成功',
  122.             'count' => $aNum + $bNum,
  123.             'page' => $page ,
  124.             'limit' =>$limit,
  125.             'data' => $resData
  126.         ];
  127.     }

复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表