LewaimaiUtility.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883
  1. <?php
  2. //这里面是乐外卖里面常用的一些辅助函数
  3. //这里的函数大部分是与一些具体的逻辑相关的,不是纯工具函数
  4. class LewaimaiUtility {
  5. //判断是否来自微信的访问
  6. public static function IsWechat()
  7. {
  8. if (isset($_SERVER['HTTP_USER_AGENT']))
  9. {
  10. $user_agent = $_SERVER['HTTP_USER_AGENT'];
  11. $is_wechat = false;
  12. if (strpos($user_agent, "MicroMessenger") !== false)
  13. {
  14. $is_wechat = true;
  15. }
  16. return $is_wechat;
  17. }
  18. return false;
  19. }
  20. //判断访问是否从朋友圈来的
  21. public static function IsFriendCircle()
  22. {
  23. // 判断是否从朋友圈过来的消息
  24. if (isset($_GET["from"]) || isset($_GET["isappinstalled"]))
  25. {
  26. return true;
  27. }
  28. return false;
  29. }
  30. //根据admin_id获取某个用户的access_token
  31. public static function GetAccessToken($admin_id)
  32. {
  33. $accessModel = AccessToken::model()->findByPk($admin_id);
  34. if($accessModel) {
  35. $exp_time = strtotime($accessModel->init_time) - 100;
  36. $time = time();
  37. if($exp_time >= $time) {
  38. return $accessModel->access_token;
  39. }
  40. }
  41. if(!$accessModel) {
  42. $accessModel = new AccessToken;
  43. }
  44. $accessModel->admin_id = $admin_id;
  45. //先获取access_token
  46. $connection = Yii::app()->db;
  47. $sql = 'select wx_type, appid, appsecret from wx_admin where id = ' . $admin_id;
  48. $command = $connection->createCommand($sql);
  49. $data = $command->query();
  50. $wx_type = 0;
  51. foreach($data as $key => $val)
  52. {
  53. $wx_type = $val["wx_type"];
  54. $appid = $val["appid"];
  55. $appsecret = $val["appsecret"];
  56. }
  57. if($wx_type == 3)
  58. {
  59. $access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=" . $appsecret;
  60. $access_token_result = LewaimaiHttp::GET($access_token_url);
  61. $access_token_array = json_decode($access_token_result, true);
  62. if(isset($access_token_array['access_token']))
  63. {
  64. $access_token = $access_token_array["access_token"];
  65. $expires_in = time() + $access_token_array['expires_in'];
  66. $accessModel->init_time = date('Y-m-d H:i:s', $expires_in);
  67. $accessModel->access_token = $access_token;
  68. if (!$accessModel->save())
  69. {
  70. LewaimaiDebug::LogModelError($accessModel);
  71. return false;
  72. }
  73. return $accessModel->access_token;
  74. }
  75. else
  76. {
  77. Yii::log('GetAccessToken Error! admin_id:' . $admin_id);
  78. }
  79. }
  80. return false;
  81. }
  82. //获取乐外卖官方微信公众号的accesstoken
  83. public static function GetLewaimaiAccessToken()
  84. {
  85. $accessModel = AccessToken::model()->findByPk(19);
  86. if($accessModel) {
  87. $exp_time = strtotime($accessModel->init_time) - 100;
  88. $time = time();
  89. if($exp_time >= $time) {
  90. return $accessModel->access_token;
  91. }
  92. }
  93. if(!$accessModel) {
  94. $accessModel = new AccessToken;
  95. }
  96. $accessModel->admin_id = 19;
  97. $appid = LEWAIMAI_APPID;
  98. $appsecret = LEWAIMAI_APPSECRET;
  99. $access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=" . $appsecret;
  100. $access_token_result = LewaimaiHttp::GET($access_token_url);
  101. $access_token_array = json_decode($access_token_result, true);
  102. if(isset($access_token_array['access_token']))
  103. {
  104. $access_token = $access_token_array["access_token"];
  105. $expires_in = time() + $access_token_array['expires_in'];
  106. $accessModel->init_time = date('Y-m-d H:i:s', $expires_in);
  107. $accessModel->access_token = $access_token;
  108. if (!$accessModel->save())
  109. {
  110. LewaimaiDebug::LogModelError($accessModel);
  111. return false;
  112. }
  113. return $accessModel->access_token;
  114. }
  115. else
  116. {
  117. Yii::log('GetLewaimaiAccessToken Error!');
  118. }
  119. return false;
  120. }
  121. //获取用户的基本信息
  122. public static function GetUserInfo($adminId, $openid)
  123. {
  124. $pingtai_access_token = LewaimaiWeixinauth::getAuthorizerAccessToken($adminId);
  125. $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" . $pingtai_access_token . "&openid=" . $openid . "&lang=zh_CN";
  126. $result = LewaimaiHttp::GET($url);
  127. $res_array = json_decode($result, true);
  128. if (isset($res_array["errcode"]))
  129. {
  130. return false;
  131. }
  132. return $res_array;
  133. }
  134. public static function GetWorkItime($shop)
  135. {
  136. $shop_start_time = $shop->shop_start_time;
  137. $shop_stop_time = $shop->shop_stop_time;
  138. $shop_start_time_2 = $shop->shop_start_time_2;
  139. $shop_stop_time_2 = $shop->shop_stop_time_2;
  140. $shop_start_time_3 = $shop->shop_start_time_3;
  141. $shop_stop_time_3 = $shop->shop_stop_time_3;
  142. $shop_time_string = "";
  143. if (!($shop_start_time == "00:00:00" && $shop_stop_time == "00:00:00"))
  144. {
  145. $shop_time_string .= substr($shop_start_time, 0, 5) . "-" . substr($shop_stop_time, 0, 5);
  146. }
  147. if (!($shop_start_time_2 == "00:00:00" && $shop_stop_time_2 == "00:00:00"))
  148. {
  149. $shop_time_string .= " " . substr($shop_start_time_2, 0, 5) . "-" . substr($shop_stop_time_2, 0, 5);
  150. }
  151. if (!($shop_start_time_3 == "00:00:00" && $shop_stop_time_3 == "00:00:00"))
  152. {
  153. $shop_time_string .= " " . substr($shop_start_time_3, 0, 5) . "-" . substr($shop_stop_time_3, 0, 5);
  154. }
  155. return $shop_time_string;
  156. }
  157. //传入参数是店铺model
  158. //判断是否在营业时间
  159. public static function IsInWorkTime($shopModel)
  160. {
  161. $beginTime1 = $shopModel->shop_start_time;
  162. $endTime1 = $shopModel->shop_stop_time;
  163. $beginTime2 = $shopModel->shop_start_time_2;
  164. $endTime2 = $shopModel->shop_stop_time_2;
  165. $beginTime3 = $shopModel->shop_start_time_3;
  166. $endTime3 = $shopModel->shop_stop_time_3;
  167. if ($beginTime1 === null || $endTime1 === null || $beginTime2 === null || $endTime2 === null || $beginTime3 === null || $endTime3 === null)
  168. {
  169. return true;
  170. }
  171. else
  172. {
  173. $isInTimeRange = false;
  174. $snow = strtotime(date("H:i"));
  175. $sst1 = strtotime($beginTime1);
  176. $set1 = strtotime($endTime1);
  177. if ($sst1 <= $set1)
  178. {
  179. if (($snow >= $sst1 && $snow <= $set1) )
  180. {
  181. $isInTimeRange = true;
  182. }
  183. }
  184. else
  185. {
  186. if (($snow >= $sst1 || $snow <= $set1) )
  187. {
  188. $isInTimeRange = true;
  189. }
  190. }
  191. $sst2 = strtotime($beginTime2);
  192. $set2 = strtotime($endTime2);
  193. if ($sst2 <= $set2)
  194. {
  195. if (($snow >= $sst2 && $snow <= $set2) )
  196. {
  197. $isInTimeRange = true;
  198. }
  199. }
  200. else
  201. {
  202. if (($snow >= $sst2 || $snow <= $set2) )
  203. {
  204. $isInTimeRange = true;
  205. }
  206. }
  207. $sst3 = strtotime($beginTime3);
  208. $set3 = strtotime($endTime3);
  209. if ($sst3 <= $set3)
  210. {
  211. if (($snow >= $sst3 && $snow <= $set3) )
  212. {
  213. $isInTimeRange = true;
  214. }
  215. }
  216. else
  217. {
  218. if (($snow >= $sst3 || $snow <= $set3) )
  219. {
  220. $isInTimeRange = true;
  221. }
  222. }
  223. return $isInTimeRange;
  224. }
  225. }
  226. //传入参数是带店铺参数的数组
  227. //判断是否在营业时间
  228. public static function IsInWorkTimeArray($shopArray)
  229. {
  230. $beginTime1 = $shopArray['shop_start_time'];
  231. $endTime1 = $shopArray['shop_stop_time'];
  232. $beginTime2 = $shopArray['shop_start_time_2'];
  233. $endTime2 = $shopArray['shop_stop_time_2'];
  234. $beginTime3 = $shopArray['shop_start_time_3'];
  235. $endTime3 = $shopArray['shop_stop_time_3'];
  236. if ($beginTime1 === null || $endTime1 === null || $beginTime2 === null || $endTime2 === null || $beginTime3 === null || $endTime3 === null)
  237. {
  238. return true;
  239. }
  240. else
  241. {
  242. $isInTimeRange = false;
  243. $snow = strtotime(date("H:i"));
  244. $sst1 = strtotime($beginTime1);
  245. $set1 = strtotime($endTime1);
  246. if ($sst1 <= $set1)
  247. {
  248. if (($snow >= $sst1 && $snow <= $set1) )
  249. {
  250. $isInTimeRange = true;
  251. }
  252. }
  253. else
  254. {
  255. if (($snow >= $sst1 || $snow <= $set1) )
  256. {
  257. $isInTimeRange = true;
  258. }
  259. }
  260. $sst2 = strtotime($beginTime2);
  261. $set2 = strtotime($endTime2);
  262. if ($sst2 <= $set2)
  263. {
  264. if (($snow >= $sst2 && $snow <= $set2) )
  265. {
  266. $isInTimeRange = true;
  267. }
  268. }
  269. else
  270. {
  271. if (($snow >= $sst2 || $snow <= $set2) )
  272. {
  273. $isInTimeRange = true;
  274. }
  275. }
  276. $sst3 = strtotime($beginTime3);
  277. $set3 = strtotime($endTime3);
  278. if ($sst3 <= $set3)
  279. {
  280. if (($snow >= $sst3 && $snow <= $set3) )
  281. {
  282. $isInTimeRange = true;
  283. }
  284. }
  285. else
  286. {
  287. if (($snow >= $sst3 || $snow <= $set3) )
  288. {
  289. $isInTimeRange = true;
  290. }
  291. }
  292. return $isInTimeRange;
  293. }
  294. }
  295. //根据距离今天的天数,0,1,2,3,返回实际的日期
  296. public static function GetDeliveryDate($daynum)
  297. {
  298. $daynum = (int)$daynum;
  299. if($daynum<1){
  300. return date('Y-m-d');
  301. }
  302. return date('Y-m-d',time()+3600*24*($daynum-1));
  303. }
  304. //根据经纬度算距离,返回结果单位是公里,先纬度,后经度
  305. public static function GetDistance($lat1, $lng1, $lat2, $lng2)
  306. {
  307. $EARTH_RADIUS = 6378.137;
  308. $radLat1 = self::rad($lat1);
  309. $radLat2 = self::rad($lat2);
  310. $a = $radLat1 - $radLat2;
  311. $b = self::rad($lng1) - self::rad($lng2);
  312. $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2)));
  313. $s = $s * $EARTH_RADIUS;
  314. $s = round($s * 10000) / 10000;
  315. return $s;
  316. }
  317. private static function rad($d)
  318. {
  319. return $d * M_PI / 180.0;
  320. }
  321. //求开启状态的店铺数
  322. public static function GetOwnShopNum($adminId)
  323. {
  324. $sql = "admin_id = " . $adminId . " AND shopstatus = 'OPEN'";
  325. $shopnum = Config::model()->count($sql);
  326. return $shopnum;
  327. }
  328. //获取一个amidnId下的所有店铺
  329. public static function GetOwnShop($adminId)
  330. {
  331. $shopArray = array();
  332. $sql = "admin_id = " . $adminId . " AND shopstatus = 'OPEN' ORDER BY tag";
  333. $shopModels = Config::model()->findAll($sql);
  334. if (!$shopModels || count($shopModels) == 0)
  335. {
  336. $shopArray["shopnum"] = 0;
  337. $shopArray["shoplist"] = array();
  338. return $shopArray;
  339. }
  340. $i = 0;
  341. $shoplist = array();
  342. foreach ($shopModels as $shop)
  343. {
  344. $IsInWorkTime = LewaimaiUtility::IsInWorkTime($shop);
  345. //计算起送价格描述
  346. if (!$shop->delivery_fee_valid)
  347. {
  348. $deliveryName = "起送价格:";
  349. $deliverValue = "¥" . $shop->basicprice*1;
  350. if ($shop->reach_delivery_fee_type == 0)
  351. {
  352. $deliverValue .= "(达到起送价免外送费)";
  353. }
  354. elseif ($shop->reach_delivery_fee_type == 1)
  355. {
  356. $deliverValue .= "(外送费" . $shop->delivery_fee*1 . "元)";
  357. }
  358. else
  359. {
  360. $deliverValue .= "(外送费" . $shop->delivery_fee*1 . "元," . $shop->no_delivery_fee_value*1 . "元免外送费)";
  361. }
  362. }
  363. else
  364. {
  365. $deliveryName = "外送费:";
  366. $deliverValue = "¥" . $shop->delivery_fee*1;
  367. if ($shop->reach_delivery_fee_type == 0)
  368. {
  369. $deliverValue .= "(" . $shop->basicprice*1 . "元免外送费)";
  370. }
  371. elseif ($shop->reach_delivery_fee_type == 2)
  372. {
  373. $deliverValue .= "(" . $shop->no_delivery_fee_value*1 . "元免外送费)";
  374. }
  375. }
  376. $priceDes = $deliveryName . $deliverValue;
  377. //计算营业时间描述
  378. $shop_start_time = $shop->shop_start_time;
  379. $shop_stop_time = $shop->shop_stop_time;
  380. $shop_start_time_2 = $shop->shop_start_time_2;
  381. $shop_stop_time_2 = $shop->shop_stop_time_2;
  382. $shop_start_time_3 = $shop->shop_start_time_3;
  383. $shop_stop_time_3 = $shop->shop_stop_time_3;
  384. $shop_time_string = "";
  385. if (!($shop_start_time == "00:00:00" && $shop_stop_time == "00:00:00"))
  386. {
  387. $shop_time_string .= substr($shop_start_time, 0, 5) . " - " . substr($shop_stop_time, 0, 5);
  388. }
  389. if (!($shop_start_time_2 == "00:00:00" && $shop_stop_time_2 == "00:00:00"))
  390. {
  391. $shop_time_string .= ", " . substr($shop_start_time_2, 0, 5) . " - " . substr($shop_stop_time_2, 0, 5);
  392. }
  393. if (!($shop_start_time_3 == "00:00:00" && $shop_stop_time_3 == "00:00:00"))
  394. {
  395. $shop_time_string .= ", " . substr($shop_start_time_3, 0, 5) . " - " . substr($shop_stop_time_3, 0, 5);
  396. }
  397. $shoplist[$i] = array(
  398. 'id' => $shop->id,
  399. 'type_id' => $shop->type_id,
  400. 'shopname' => $shop->shopname,
  401. 'shopimage' => $shop -> shopimage,
  402. 'shopaddress' => $shop->shopaddress,
  403. 'area' => $shop->area,
  404. 'shopdes' => $shop->shopdes,
  405. 'worktime' => $IsInWorkTime,
  406. 'priceDes' => $priceDes,
  407. 'shop_time_string' => $shop_time_string,
  408. 'coordinate_x' => $shop->coordinate_x,
  409. 'coordinate_y' => $shop->coordinate_y,
  410. );
  411. $i++;
  412. }
  413. $shopArray["shopnum"] = $i;
  414. $shopArray["shoplist"] = $shoplist;
  415. return $shopArray;
  416. }
  417. //判断当前访问的IP是否是微信服务器的IP
  418. public static function IsWeixinIP()
  419. {
  420. $admin_access_token = LewaimaiUtility::GetLewaimaiAccessToken();
  421. $url = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=" . $admin_access_token;
  422. $result = LewaimaiHttp::GET($url);
  423. $result_array = json_decode($result, true);
  424. if (isset($result_array["errcode"]))
  425. {
  426. Yii::log("get weixinip failed!");
  427. return false;
  428. }
  429. $ip_array = $result_array["ip_list"];
  430. $server_ip = $_SERVER['REMOTE_ADDR'];
  431. if (in_array($server_ip, $ip_array))
  432. {
  433. return true;
  434. }
  435. return false;
  436. }
  437. //根据adminId和lewaimai_customer_id,获取这个顾客相对于adminId绑定的公众号的openid
  438. public static function getWeixinOpenid($adminId, $lewaimai_customer_id)
  439. {
  440. $adminModel = Admin::model()->findByPk($adminId);
  441. if (!$adminModel)
  442. {
  443. return false;
  444. }
  445. $wx_tousername = $adminModel->wx_tousername;
  446. $weixincustomerModel = WeixinCustomer::model()->find("wx_tousername = '" . $wx_tousername . "' AND lewaimai_customer_id = " . $lewaimai_customer_id);
  447. if (!$weixincustomerModel)
  448. {
  449. return false;
  450. }
  451. $openid = $weixincustomerModel->openid;
  452. return $openid;
  453. }
  454. //根据距离和按距离收费的json获取最终收费
  455. public static function getRangeDeliveryFee($range, $range_delivery_fee)
  456. {
  457. $delivery_fee = false;
  458. $range_delivery_fee_array = json_decode($range_delivery_fee, true);
  459. foreach ($range_delivery_fee_array as $range_delivery_fee_item)
  460. {
  461. if ($range >= $range_delivery_fee_item["start"] && $range <= $range_delivery_fee_item["stop"])
  462. {
  463. $delivery_fee = $range_delivery_fee_item["value"];
  464. break;
  465. }
  466. }
  467. return $delivery_fee;
  468. }
  469. //根据距离和按距离收费的json获取起送价
  470. public static function getRangeBasicprice($range, $range_delivery_fee)
  471. {
  472. $basicprice = false;
  473. $range_delivery_fee_array = json_decode($range_delivery_fee, true);
  474. foreach ($range_delivery_fee_array as $range_delivery_fee_item)
  475. {
  476. if ($range >= $range_delivery_fee_item["start"] && $range <= $range_delivery_fee_item["stop"])
  477. {
  478. $basicprice = $range_delivery_fee_item["minvalue"];
  479. break;
  480. }
  481. }
  482. return $basicprice;
  483. }
  484. //清空临时文件
  485. public static function clearTempimages(){
  486. $temp_url= 'public/temp/images/admin_'.Yii::app()->user->_id.'/';
  487. if(!is_dir($temp_url)){
  488. return false;
  489. }else{
  490. $dir = opendir($temp_url);
  491. readdir($dir);
  492. readdir($dir);
  493. while($file = readdir($dir)){
  494. @unlink($temp_url.$file);
  495. }
  496. }
  497. }
  498. /**
  499. * li
  500. * 验证注册签名
  501. * @param $time
  502. * @param $post_sign
  503. * @return bool
  504. */
  505. public static function checkRegisterSignature($time,$post_sign)
  506. {
  507. // 判断是否过期,过期时间30分钟
  508. $minute_30 = 180;
  509. if((time() - $time) >= $minute_30)
  510. {
  511. return false;
  512. }
  513. $signature = LewaimaiUtility::makeRegisterSignature($time);
  514. if($signature == $post_sign)
  515. {
  516. return true; // it is ok!
  517. }
  518. else
  519. {
  520. return false;
  521. }
  522. }
  523. /**
  524. * li
  525. * 生成注册签名
  526. * @param $time
  527. * @return string
  528. */
  529. public static function makeRegisterSignature($time)
  530. {
  531. $arr = array();
  532. $arr['partnerKey'] = LEWAIMAI_API_KEY;
  533. $arr['timestamp'] = $time;
  534. $arr['sessionID'] = Yii::app()->session->sessionID;
  535. $signature = strtoupper(md5(http_build_query ( $arr , '' , '&amp;' )));
  536. return $signature;
  537. }
  538. /**
  539. * 检查手机号所属运营商
  540. * @param $phoneArr
  541. * @return array
  542. */
  543. public static function checkPhoneBelongToWhichService($phoneArr)
  544. {
  545. $ChinaMobileNum = 0;
  546. $ChinaUnionNum = 0;
  547. $ChinaTelcomNum = 0;
  548. $OtherTelphoneNum = 0;
  549. $isChinaMobile = "/^134[0-8]\d{7}$|^(?:13[5-9]|147|15[0-27-9]|178|18[2-478])\d{8}$/"; // 移动
  550. $isChinaUnion = "/^(?:13[0-2]|145|15[56]|176|18[56])\d{8}$/"; //联通
  551. $isChinaTelcom = "/^(?:133|153|177|18[019])\d{8}$/"; //电信
  552. $isOtherTelphone = "/^170([059])\d{7}$/"; //其他运营商
  553. if(empty($phoneArr) || !is_array($phoneArr))
  554. {
  555. return array('ChinaMobileNum'=>0, 'ChinaUnionNum'=>0, 'ChinaTelcomNum'=>0, 'OtherTelphoneNum'=>0);
  556. }
  557. foreach ($phoneArr as $phone)
  558. {
  559. if(preg_match($isChinaMobile, $phone))
  560. {
  561. $ChinaMobileNum++;
  562. }
  563. else if(preg_match($isChinaUnion, $phone))
  564. {
  565. $ChinaUnionNum++;
  566. }
  567. else if(preg_match($isChinaTelcom, $phone))
  568. {
  569. $ChinaTelcomNum++;
  570. }
  571. else
  572. {
  573. $OtherTelphoneNum++;
  574. }
  575. }
  576. return array('ChinaMobileNum'=>$ChinaMobileNum, 'ChinaUnionNum'=>$ChinaUnionNum, 'ChinaTelcomNum'=>$ChinaTelcomNum, 'OtherTelphoneNum'=>$OtherTelphoneNum);
  577. }
  578. /**
  579. * 生成api 请求所需的签名
  580. * @param $params
  581. */
  582. public static function buildSignForApiRequest($params)
  583. {
  584. $lwm_appid = LWM_APPID;
  585. $timestamp = time();
  586. $nonce = LewaimaiString::create_noncestr(5);
  587. $signParamArr = array();
  588. $signParamArr['lwm_appid'] = $lwm_appid;
  589. $signParamArr['timestamp'] = $timestamp;
  590. $signParamArr['nonce'] = $nonce;
  591. foreach ($params as $key=>$value)
  592. {
  593. $signParamArr[$key] = is_array($value) ? json_encode($value) : $value;
  594. }
  595. ksort($signParamArr, SORT_STRING);
  596. $signParamArr = http_build_query($signParamArr);
  597. $signature = strtoupper(md5( md5($signParamArr) . LWM_APP_SECRET));
  598. $result['lwm_appid'] = $lwm_appid;
  599. $result['timestamp'] = $timestamp;
  600. $result['nonce'] = $nonce;
  601. $result['sign'] = $signature;
  602. return $result;
  603. }
  604. /**
  605. * 获取包括主账号的员工账号
  606. * @param $admin_id
  607. * @return array|CActiveRecord|mixed|null
  608. */
  609. public static function getEmployeeListByAdminId($admin_id, $include_me=true)
  610. {
  611. $sql = "SELECT id,account FROM {{employees_account}} WHERE admin_id=:admin_id";
  612. $list = EmployeesAccount::model()->findAllBySql($sql, array(':admin_id'=>$admin_id));
  613. $list = $list ? $list : array();
  614. if($include_me){
  615. $sql = 'select id,username from {{admin}} where id=:admin_id';
  616. $admin = Admin::model()->findBySql($sql, array(':admin_id'=>$admin_id));
  617. array_unshift($list, array('id'=>'admin_id:'.$admin_id,'account'=>$admin['username']));
  618. }
  619. return $list;
  620. }
  621. public static function checkArea($admin_id)
  622. {
  623. $areaArr = Area::model()->findAll('admin_id=:admin_id AND status=1',array(':admin_id'=>$admin_id));
  624. return empty($areaArr)?array():$areaArr;
  625. }
  626. /**
  627. * 为智能机统计建立数据
  628. * @param $data
  629. * @param $dayDataArr
  630. * @param $guazhangArr
  631. * @return mixed
  632. */
  633. public static function buildDataByZnjStat($data, $dayDataArr, $guazhangArr)
  634. {
  635. if(!empty($data)){
  636. foreach ($data as $val) {
  637. if(isset($dayDataArr[$val['day']]) && !empty($dayDataArr[$val['day']][$val['zhifu_type']])){
  638. $dayDataArr[$val['day']][$val['zhifu_type']] += $val['yingshou_price'];
  639. }else{
  640. $dayDataArr[$val['day']][$val['zhifu_type']] = $val['yingshou_price'];
  641. }
  642. if(isset($guazhangArr[$val['day']]) && !empty($guazhangArr[$val['day']][$val['zhifu_type']])){
  643. //zhifu_type为1,2,3,4的挂账算自定义支付
  644. $dayDataArr[$val['day']][$val['zhifu_type']] -= $guazhangArr[$val['day']][$val['zhifu_type']];
  645. if(isset($dayDataArr[$val['day']][5])){
  646. $dayDataArr[$val['day']][5] += $guazhangArr[$val['day']][$val['zhifu_type']];
  647. }else{
  648. $dayDataArr[$val['day']][5] = $guazhangArr[$val['day']][$val['zhifu_type']];
  649. }
  650. }
  651. if(isset($dayDataArr[$val['day']]['yingshou_price'])){
  652. $dayDataArr[$val['day']]['yingshou_price'] += $val['yingshou_price'];
  653. }else{
  654. $dayDataArr[$val['day']]['yingshou_price'] = $val['yingshou_price'];
  655. }
  656. if(isset($dayDataArr[$val['day']]['shishou_value'])){
  657. $dayDataArr[$val['day']]['shishou_value'] += $val['shishou_value'];
  658. }else{
  659. $dayDataArr[$val['day']]['shishou_value'] = $val['shishou_value'];
  660. }
  661. if(isset($dayDataArr[$val['day']]['zhaoling_value'])){
  662. $dayDataArr[$val['day']]['zhaoling_value'] += $val['zhaoling_value'];
  663. }else{
  664. $dayDataArr[$val['day']]['zhaoling_value'] = $val['zhaoling_value'];
  665. }
  666. }
  667. }
  668. return $dayDataArr;
  669. }
  670. /**
  671. * 汇总订单数统计
  672. * @param $data
  673. * @param $dateArray
  674. * @return array
  675. */
  676. public static function buildOrderNumDataBySummary($data, $dateArray, $dataArray=array())
  677. {
  678. if(!empty($data))
  679. {
  680. foreach ($data as $val)
  681. {
  682. if(isset($dataArray[$val['day']])){
  683. $dataArray[$val['day']] += $val['num'];
  684. }else{
  685. $dataArray[$val['day']] = $val['num'];
  686. }
  687. }
  688. }
  689. return $dataArray;
  690. }
  691. /**
  692. * 为汇总营业额统计导出准备数据
  693. * @param $data
  694. * @param $data_gz
  695. * @param $dayDataArr
  696. * @param $gzDataArr
  697. */
  698. public static function buildExportDataBySummary($data, $data_gz, &$dayDataArr, &$gzDataArr)
  699. {
  700. //先计算各个支付方式下的部分挂账
  701. if(!empty($data_gz)){
  702. foreach ($data_gz as $vGz) {
  703. //各个支付分类下对应的挂账部分
  704. if(isset($gzDataArr[$vGz['day']][$vGz['zhifu_type']])){
  705. $gzDataArr[$vGz['day']][$vGz['zhifu_type']] += $vGz['yingshou_price'];
  706. }else{
  707. $gzDataArr[$vGz['day']][$vGz['zhifu_type']] = $vGz['yingshou_price'];
  708. }
  709. //各个自定义支付
  710. $zhifuNameArr[] = $vGz['zhifu_name'];
  711. if(isset($gzDataArr[$vGz['day']][$vGz['zhifu_name']])){
  712. $gzDataArr[$vGz['day']][$vGz['zhifu_name']] += $vGz['yingshou_price'];
  713. }else{
  714. $gzDataArr[$vGz['day']][$vGz['zhifu_name']] = $vGz['yingshou_price'];
  715. }
  716. }
  717. }
  718. if(!empty($data)){
  719. foreach ($data as $val) {
  720. if(isset($dayDataArr[$val['day']][$val['zhifu_type']])){
  721. $dayDataArr[$val['day']][$val['zhifu_type']] += $val['yingshou_price'];
  722. }else{
  723. $dayDataArr[$val['day']][$val['zhifu_type']] = $val['yingshou_price'];
  724. }
  725. //减去该种方式支付下中挂账的部分(只挂账了一部分)
  726. if(isset($gzDataArr[$val['day']][$val['zhifu_type']])){
  727. $dayDataArr[$val['day']][$val['zhifu_type']] -= $gzDataArr[$val['day']][$val['zhifu_type']];
  728. }
  729. //处理自定义支付
  730. if($val['zhifu_type'] == 5){
  731. $zhifuNameArr[] = $val['zhifu_name'];
  732. $dayDataArr[$val['day']][$val['zhifu_name']] = $val['yingshou_price'];
  733. }
  734. if(isset($dayDataArr[$val['day']]['yingshou_price'])){
  735. $dayDataArr[$val['day']]['yingshou_price'] += $val['yingshou_price'];
  736. }else{
  737. $dayDataArr[$val['day']]['yingshou_price'] = $val['yingshou_price'];
  738. }
  739. if(isset($dayDataArr[$val['day']]['shishou_value'])){
  740. $dayDataArr[$val['day']]['shishou_value'] += $val['shishou_value'];
  741. }else{
  742. $dayDataArr[$val['day']]['shishou_value'] = $val['shishou_value'];
  743. }
  744. if(isset($dayDataArr[$val['day']]['zhaoling_value'])){
  745. $dayDataArr[$val['day']]['zhaoling_value'] += $val['zhaoling_value'];
  746. }else{
  747. $dayDataArr[$val['day']]['zhaoling_value'] = $val['zhaoling_value'];
  748. }
  749. }
  750. }
  751. }
  752. }