common.php 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2020-09-08
  6. * Time: 15:49
  7. */
  8. use api\js\model\UserModel;
  9. use think\Db;
  10. use api\js\model\JsSiteModel;
  11. use api\js\model\JsTimeModel;
  12. if (!function_exists('p')) {
  13. function p($pram)
  14. {
  15. echo "<pre>";
  16. print_r($pram);
  17. echo "</pre>";
  18. }
  19. }
  20. /**
  21. * @param $id => 订单id
  22. * @param $type => 1 技师课程支付,2技师商城支付,3用户呼叫服务支付
  23. * @return mixed
  24. */
  25. function wx_pay($id, $type)
  26. {
  27. $model = '';
  28. $booy = '';
  29. $wxpay = cmf_get_option('wxpay');
  30. switch ($type) {
  31. case 1:
  32. $info['appid'] = $wxpay['js_appid'];
  33. $info['app_secret'] = $wxpay['js_app_secret'];
  34. $info['mch_id'] = $wxpay['js_mch_id'];
  35. $info['key'] = $wxpay['js_key'];
  36. $model = new \api\js\model\JsCourseOrderModel();
  37. $booy = '购买视频课程';
  38. $order_info = $model::get($id);
  39. if (!$order_info) {
  40. return ['return_code' => 'FAIL', 'return_msg' => '订单不存在'];
  41. }
  42. if ($order_info['status'] != 0) {
  43. return ['return_code' => 'FAIL', 'return_msg' => '订单已支付'];
  44. }
  45. break;
  46. case 2:
  47. $info['appid'] = $wxpay['js_appid'];
  48. $info['app_secret'] = $wxpay['js_app_secret'];
  49. $info['mch_id'] = $wxpay['js_mch_id'];
  50. $info['key'] = $wxpay['js_key'];
  51. $booy = '购买商品';
  52. $model = new \api\js\model\GoodsOrderModel();
  53. $order_info = $model::get($id, ['seckill']);
  54. if (!$order_info) {
  55. return ['return_code' => 'FAIL', 'return_msg' => '订单不存在'];
  56. }
  57. if ($order_info['status'] != 0) {
  58. return ['return_code' => 'FAIL', 'return_msg' => '订单已支付'];
  59. }
  60. $up['pay_price'] = $order_info['pay_price'];
  61. if ($order_info->seckill) {
  62. if ($order_info->seckill->end_time < time()) {
  63. $up['pay_price'] = round($order_info['price'] * $order_info['num'], 2);
  64. }
  65. }
  66. $model->allowField(true)->isUpdate(true)->save($up, ['id' => $id]);
  67. break;
  68. case 3:
  69. $booy = '呼叫服务';
  70. $info['appid'] = $wxpay['appid'];
  71. $info['app_secret'] = $wxpay['app_secret'];
  72. $info['mch_id'] = $wxpay['mch_id'];
  73. $info['key'] = $wxpay['key'];
  74. $model = new \api\js\model\JsOrderModel();
  75. $order_info = $model::get($id);
  76. if (!$order_info) {
  77. return ['return_code' => 'FAIL', 'return_msg' => '订单不存在'];
  78. }
  79. if ($order_info['status'] != 0) {
  80. return ['return_code' => 'FAIL', 'return_msg' => '订单已支付'];
  81. }
  82. if ($order_info['user_discount_id']) {
  83. $userDiscountInfo = Db::name('user_discount')->where('id', $order_info['user_discount_id'])->find();
  84. if ($userDiscountInfo['past_time'] < time()) {
  85. Db::name('user_discount')->where('id', $order_info['user_discount_id'])->update(['status' => 2]);
  86. $model->allowField(true)->isUpdate(true)->save(['pay_price' => $order_info['price']], ['id' => $id]);
  87. }
  88. if ($userDiscountInfo['project_id'] != 0) {
  89. if ($userDiscountInfo['project_id'] != $order_info['project_id']) {
  90. $model->allowField(true)->isUpdate(true)->save(['pay_price' => $order_info['price']], ['id' => $id]);
  91. }
  92. }
  93. }
  94. break;
  95. case 100: //加钟支付
  96. $booy = '服务加钟支付';
  97. $info['appid'] = $wxpay['appid'];
  98. $info['app_secret'] = $wxpay['app_secret'];
  99. $info['mch_id'] = $wxpay['mch_id'];
  100. $info['key'] = $wxpay['key'];
  101. $model = new \api\js\model\JsOrderAddtimeModel();
  102. $order_info = $model::get($id);
  103. if (!$order_info) {
  104. return ['return_code' => 'FAIL', 'return_msg' => '订单不存在'];
  105. }
  106. if ($order_info['status'] != 0) {
  107. return ['return_code' => 'FAIL', 'return_msg' => '订单已支付'];
  108. }
  109. break;
  110. }
  111. if (!$model) {
  112. return ['return_code' => 'FAIL', 'return_msg' => '参数异常'];
  113. }
  114. $notify_url = "http://{$_SERVER['SERVER_NAME']}/api/js/paynotify/wx/type/" . $type;
  115. $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
  116. $pay_data['trade_type'] = 'APP';
  117. $pay_data['appid'] = $info['appid'];
  118. $pay_data['mch_id'] = $info['mch_id'];
  119. $pay_data['nonce_str'] = cmf_random_string(32);
  120. $pay_data['body'] = $booy;
  121. $pay_data['out_trade_no'] = $model::get($id)['order_sn'];
  122. $pay_data['total_fee'] = $model::get($id)['pay_price'] * 100;
  123. $pay_data['spbill_create_ip'] = get_client_ip();
  124. $pay_data['notify_url'] = $notify_url;
  125. $pay_data['sign_type'] = 'MD5';
  126. ksort($pay_data);
  127. $str = '';
  128. foreach ($pay_data as $k => $v) {
  129. $str .= $k . '=' . $v . '&';
  130. }
  131. $str .= 'key=' . $info['key'];
  132. $pay_data['sign'] = strtoupper(md5($str)); //加密
  133. $str = array_toxml($pay_data);
  134. $result = curl_post_ssl1($url, $str);
  135. $res_array = xml_toarray($result);
  136. if ($res_array['return_code'] == 'SUCCESS' && $res_array['result_code'] == 'SUCCESS') {
  137. $resl['appid'] = $res_array['appid'];
  138. $resl['prepayid'] = $res_array['prepay_id'];
  139. $resl['partnerid'] = $res_array['mch_id'];
  140. $resl['noncestr'] = cmf_random_string(32);
  141. $resl['timestamp'] = time();
  142. $resl['package'] = 'Sign=WXPay';
  143. ksort($resl);
  144. $str = '';
  145. foreach ($resl as $k => $v) {
  146. $str .= $k . '=' . $v . '&';
  147. }
  148. //拼接API密钥
  149. $str .= 'key=' . $info['key'];
  150. $resl['sign'] = strtoupper(md5($str)); //加密
  151. return $resl;
  152. } else {
  153. return $res_array;
  154. }
  155. }
  156. function aly_pay($id, $type)
  157. {
  158. //http://{$_SERVER['SERVER_NAME']}/api/js/pay_notify/aliy
  159. $model = '';
  160. $booy = '';
  161. $alipay = cmf_get_option('alipay');
  162. $aop = new AopCertClient();
  163. $aop->appId = $alipay['js_app_id'];
  164. $aop->apiVersion = '2.0';
  165. $aop->signType = 'RSA2';
  166. $aop->postCharset = 'utf-8';
  167. $PrivateKey = cmf_get_file_download_url($alipay['Apply_the_secret_key_file']);
  168. $PrivateKey = str_replace('https', 'http', $PrivateKey);
  169. //$aop->rsaPrivateKeyFilePath = cmf_get_file_download_url($alipay['Apply_the_secret_key_file']);
  170. $aop->rsaPrivateKeyFilePath = $PrivateKey;
  171. $appCertPath = cmf_get_file_download_url($alipay['Applied_public_Key_certificate']);
  172. $alipayCertPath = cmf_get_file_download_url($alipay['Pay_alipay_Public_key_certificate']);
  173. $rootCertPath = cmf_get_file_download_url($alipay['Alipay_Root_certificate']);
  174. switch ($type) {
  175. case 1:
  176. $appCertPath = cmf_get_file_download_url($alipay['js_Applied_public_Key_certificate']);
  177. $alipayCertPath = cmf_get_file_download_url($alipay['js_Pay_alipay_Public_key_certificate']);
  178. $rootCertPath = cmf_get_file_download_url($alipay['js_Alipay_Root_certificate']);
  179. break;
  180. case 2:
  181. $appCertPath = cmf_get_file_download_url($alipay['js_Applied_public_Key_certificate']);
  182. $alipayCertPath = cmf_get_file_download_url($alipay['js_Pay_alipay_Public_key_certificate']);
  183. $rootCertPath = cmf_get_file_download_url($alipay['js_Alipay_Root_certificate']);
  184. break;
  185. }
  186. $appCertPath = str_replace('https', 'http', $appCertPath);
  187. $rootCertPath = str_replace('https', 'http', $rootCertPath);
  188. $alipayCertPath = str_replace('https', 'http', $alipayCertPath);
  189. $aop->appCertSN = $aop->getCertSN($appCertPath); //调用getCertSN获取证书序列号
  190. $aop->alipayRootCertSN = $aop->getRootCertSN($rootCertPath);
  191. $aop->alipayCertSN = $alipayCertPath;
  192. $requrst = new AlipayTradeAppPayRequest();
  193. switch ($type) {
  194. case 1:
  195. $model = new \api\js\model\JsCourseOrderModel();
  196. $booy = '购买视频课程';
  197. $order_info = $model::get($id);
  198. if (!$order_info) {
  199. return ['return_code' => 'FAIL', 'return_msg' => '订单不存在'];
  200. }
  201. if ($order_info['status'] != 0) {
  202. return ['return_code' => 'FAIL', 'return_msg' => '订单已支付'];
  203. }
  204. break;
  205. case 2:
  206. $booy = '购买商品';
  207. $model = new \api\js\model\GoodsOrderModel();
  208. $order_info = $model::get($id, ['seckill']);
  209. if (!$order_info) {
  210. return ['return_code' => 'FAIL', 'return_msg' => '订单不存在'];
  211. }
  212. if ($order_info['status'] != 0) {
  213. return ['return_code' => 'FAIL', 'return_msg' => '订单已支付'];
  214. }
  215. $up['pay_price'] = $order_info['pay_price'];
  216. if ($order_info->seckill) {
  217. if ($order_info->seckill->end_time < time()) {
  218. $up['pay_price'] = round($order_info['price'] * $order_info['num'], 2);
  219. }
  220. }
  221. $model->allowField(true)->isUpdate(true)->save($up, ['id' => $id]);
  222. break;
  223. case 3:
  224. $aop->appId = $alipay['app_id'];
  225. $booy = '呼叫服务';
  226. $model = new \api\js\model\JsOrderModel();
  227. $order_info = $model::get($id);
  228. if (!$order_info) {
  229. return ['return_code' => 'FAIL', 'return_msg' => '订单不存在'];
  230. }
  231. if ($order_info['status'] != 0) {
  232. return ['return_code' => 'FAIL', 'return_msg' => '订单已支付'];
  233. }
  234. if ($order_info['user_discount_id']) {
  235. $userDiscountInfo = Db::name('user_discount')->where('id', $order_info['user_discount_id'])->find();
  236. if ($userDiscountInfo['past_time'] < time()) {
  237. Db::name('user_discount')->where('id', $order_info['user_discount_id'])->update(['status' => 2]);
  238. $model->allowField(true)->isUpdate(true)->save(['pay_price' => $order_info['price']], ['id' => $id]);
  239. }
  240. if ($userDiscountInfo['project_id'] != 0) {
  241. if ($userDiscountInfo['project_id'] != $order_info['project_id']) {
  242. $model->allowField(true)->isUpdate(true)->save(['pay_price' => $order_info['price']], ['id' => $id]);
  243. }
  244. }
  245. }
  246. break;
  247. case 100: //加钟支付
  248. $aop->appId = $alipay['app_id'];
  249. $booy = '服务加钟';
  250. $model = new \api\js\model\JsOrderAddtimeModel();
  251. $order_info = $model::get($id);
  252. if (!$order_info) {
  253. return ['return_code' => 'FAIL', 'return_msg' => '订单不存在'];
  254. }
  255. if ($order_info['status'] != 0) {
  256. return ['return_code' => 'FAIL', 'return_msg' => '订单已支付'];
  257. }
  258. break;
  259. }
  260. if (!$model) {
  261. return ['return_code' => 'FAIL', 'return_msg' => '参数异常'];
  262. }
  263. $biz_array['out_trade_no'] = $model::get($id)['order_sn']; //商户网站唯一订单号;
  264. $biz_array['total_amount'] = $model::get($id)['pay_price'];
  265. $biz_array['body'] = $booy; //
  266. $biz_array['subject'] = $booy; //
  267. $biz_array['product_code'] = 'QUICK_MSECURITY_PAY';
  268. $data['biz_content'] = json_encode($biz_array, JSON_UNESCAPED_UNICODE);
  269. $notify_url = "http://{$_SERVER['SERVER_NAME']}/api/js/paynotify/aliy/type/" . $type;
  270. $requrst->setNotifyUrl($notify_url);
  271. $requrst->setBizContent($data['biz_content']);
  272. $result = $aop->sdkExecute($requrst);
  273. // dump($result);
  274. return $result;
  275. }
  276. function balance_pay($id, $type)
  277. {
  278. $model = '';
  279. $booy = '';
  280. switch ($type) {
  281. case 1:
  282. Db::startTrans();
  283. try {
  284. $model = new \api\js\model\JsCourseOrderModel();
  285. $booy = '购买视频课程';
  286. $order_info = $model::get($id);
  287. if ($order_info['status'] != 0) {
  288. return '订单已支付';
  289. }
  290. Db::name('user')->where('id', $order_info['user_id'])->setDec('balance', $order_info['pay_price']);
  291. $log['user_id'] = $order_info['user_id'];
  292. $log['money'] = -$order_info['pay_price'];
  293. $log['type'] = 3;
  294. $log['remark'] = $booy;
  295. $log['add_time'] = time();
  296. $log['obj_id'] = $id;
  297. Db::name('user_money_log')->insert($log);
  298. $up['status'] = 1;
  299. $up['pay_time'] = time();
  300. $up['pay_type'] = '余额支付';
  301. $model->allowField(true)->isUpdate(true)->save($up, ['id' => $id]);
  302. Db::commit();
  303. return true;
  304. } catch (ErrorException $e) {
  305. Db::rollback();
  306. return '支付失败';
  307. }
  308. break;
  309. case 2:
  310. Db::startTrans();
  311. try {
  312. $booy = '购买商品';
  313. $model = new \api\js\model\GoodsOrderModel();
  314. $order_info = $model::get($id, ['seckill']);
  315. if ($order_info['status'] != 0) {
  316. return '订单已支付';
  317. }
  318. $up['pay_price'] = $order_info['pay_price'];
  319. if ($order_info->seckill) {
  320. if ($order_info->seckill->end_time < time()) {
  321. $up['pay_price'] = round($order_info['price'] * $order_info['num'], 2);
  322. }
  323. }
  324. $user_balance = UserModel::get($order_info['user_id'])['balance'];
  325. if ($user_balance < $up['pay_price']) {
  326. return '余额不足!';
  327. }
  328. $up['status'] = 1;
  329. $up['pay_time'] = time();
  330. $up['pay_type'] = '余额支付';
  331. $model->allowField(true)->isUpdate(true)->save($up, ['id' => $id]);
  332. $log['user_id'] = $order_info['user_id'];
  333. $log['money'] = -$up['pay_price'];
  334. $log['type'] = 3;
  335. $log['remark'] = $booy;
  336. $log['add_time'] = time();
  337. $log['obj_id'] = $id;
  338. Db::name('user_money_log')->insert($log);
  339. $log1['admin_id'] = $order_info['user_id'];
  340. $log1['action_time'] = date('Y-m-d H:i:s');
  341. $log1['obj_id'] = $id;
  342. $log1['remark'] = '订单支付';
  343. Db::name('goods_order_action_log')->insert($log1);
  344. Db::name('user')->where('id', $order_info['user_id'])->setDec('balance', $up['pay_price']);
  345. Db::commit();
  346. return true;
  347. } catch (ErrorException $e) {
  348. Db::rollback();
  349. return '支付失败';
  350. }
  351. break;
  352. case 3:
  353. $booy = '呼叫服务';
  354. $model = new \api\js\model\JsOrderModel();
  355. break;
  356. }
  357. if (!$model) {
  358. return '支付类型错误!';
  359. }
  360. }
  361. /**
  362. * @param $order_id
  363. * @param $type 1下单分销 2接单分销
  364. */
  365. function fenxiao($order_id, $type)
  366. {
  367. $orderInfo = \api\js\model\JsOrderModel::get($order_id);
  368. $userModel = new UserModel();
  369. if ($type == 1) {
  370. $field = 'user_id';
  371. $log['remark'] = '好友下单';
  372. $price = $orderInfo['price'];
  373. $user_info = UserModel::get($orderInfo['user_id']);
  374. if (empty($user_info['district_id'])) {
  375. $mergerName = '中国,' . $orderInfo['province'] . ',' . $orderInfo['city'] . ',' . $orderInfo['district'];
  376. $reginfo = Db::name('region')->where("mergerName='$mergerName'")->find();
  377. $user_info['district_id'] = $reginfo['id'];
  378. }
  379. $agency_info = \api\js\model\AgencyModel::where(['district_id' => $user_info['district_id'], 'renk_id' => 2])->find();
  380. $agency_info_id = $agency_info['id'];
  381. $user_agency_id = Db::name('user')->where(function ($query) use ($agency_info_id) {
  382. $query->where('agency_id', $agency_info_id);
  383. $query->whereOr('agency_id', 'like', $agency_info_id . ',%');
  384. $query->whereOr('agency_id', 'like', '%,' . $agency_info_id);
  385. $query->whereOr('agency_id', 'like', '%,' . $agency_info_id . ',%');
  386. })->value('id');
  387. $user_id = $orderInfo['user_id'];
  388. $money = round($price * $agency_info['ratio'] / 100, 2);
  389. if ($money > 0 && $user_agency_id) {
  390. $log['user_id'] = $user_agency_id;
  391. $log['money'] = $money;
  392. $log['type'] = 5;
  393. $log['add_time'] = time();
  394. $log['obj_id'] = $order_id;
  395. $log['is_type'] = $type;
  396. $log['xia_user_id'] = $user_id;
  397. $log['remark'] = '用户下单,区代提成';
  398. Db::name('user_money_log')->insert($log);
  399. UserModel::where('id', $user_agency_id)->setInc('balance', $log['money']);
  400. }
  401. // 检测是否推广分佣
  402. if ($orderInfo['type'] == '3') return false;
  403. // $user_parent_id = $userModel::get($user_id)['parent_id'];
  404. // $user_parent_id1 = $userModel::get($user_id)['parent_id1'];
  405. $user_parent_id = $user_info['parent_id'];
  406. $user_parent_id1 = $user_info['parent_id1'];
  407. if ($user_parent_id) {
  408. $user_parent_info = UserModel::get($user_parent_id);
  409. $distributorInfo = Db::name('distributor')->where('id', $user_parent_info['distributor_id'])->find();
  410. $money = round($price * $distributorInfo['yi_ratio'] / 100, 2);
  411. if ($money > 0) {
  412. $log['user_id'] = $user_parent_id;
  413. $log['money'] = $money;
  414. $log['type'] = 3;
  415. $log['add_time'] = time();
  416. $log['obj_id'] = $order_id;
  417. $log['is_type'] = $type;
  418. $log['xia_user_id'] = $user_id;
  419. $log['yue'] = round($user_parent_info['balance'] + $money, 2);
  420. $log['remark'] = '一级好友下单提成';
  421. Db::name('user_money_log')->insert($log);
  422. UserModel::where('id', $user_parent_id)->setInc('balance', $log['money']);
  423. }
  424. }
  425. if ($user_parent_id1) {
  426. $user_parent_info1 = UserModel::get($user_parent_id1);
  427. $distributorInfo1 = Db::name('distributor')->where('id', $user_parent_info1['distributor_id'])->find();
  428. $money = round($price * $distributorInfo1['er_ratio'] / 100, 2);
  429. if ($money > 0) {
  430. $log['user_id'] = $user_parent_id1;
  431. $log['money'] = $money;
  432. $log['type'] = 4;
  433. $log['add_time'] = time();
  434. $log['obj_id'] = $order_id;
  435. $log['xia_user_id'] = $user_id;
  436. $log['is_type'] = $type;
  437. $log['yue'] = round($user_parent_info1['balance'] + $money, 2);
  438. $log['remark'] = '二级好友下单提成';
  439. Db::name('user_money_log')->insert($log);
  440. UserModel::where('id', $user_parent_id1)->setInc('balance', $log['money']);
  441. }
  442. }
  443. } else {
  444. if (!$orderInfo['jiedan_js_id']) {
  445. return false;
  446. }
  447. // 检测是否推广分佣
  448. if ($orderInfo['type'] == '3') return false;
  449. $user_id = Db::name('js')->where('id', $orderInfo['jiedan_js_id'])->value('user_id');
  450. $log['remark'] = '好友接单';
  451. // $price = $orderInfo['order_price'];
  452. $price = $orderInfo['price'];
  453. $user_info = $userModel::get($user_id);
  454. // $user_parent_id = $userModel::get($user_id)['parent_id'];
  455. // $user_parent_id1 = $userModel::get($user_id)['parent_id1'];
  456. $user_parent_id = $user_info['parent_id'];
  457. $user_parent_id1 = $user_info['parent_id1'];
  458. if ($user_parent_id) {
  459. // 检测分佣是否完结
  460. $obtainedMoney = Db::name('user_money_log')->where('user_id', $user_parent_id)->where('xia_user_id', $user_id)->where('type', 3)->where('is_type', 2)->sum('money');
  461. if ($obtainedMoney >= 2000) return false;
  462. $user_parent_info = UserModel::get($user_parent_id);
  463. // $distributorInfo = Db::name('distributor')->where('id',$user_parent_info['distributor_id'])->find();
  464. $money = round($price * 1 / 100, 2);
  465. if ($money > 0) {
  466. $log['user_id'] = $user_parent_id;
  467. $log['money'] = $money;
  468. $log['type'] = 3;
  469. $log['add_time'] = time();
  470. $log['obj_id'] = $order_id;
  471. $log['is_type'] = $type;
  472. $log['xia_user_id'] = $user_id;
  473. $log['yue'] = round($user_parent_info['balance'] + $money, 2);
  474. Db::name('user_money_log')->insert($log);
  475. UserModel::where('id', $user_parent_id)->setInc('balance', $log['money']);
  476. }
  477. }
  478. // if ($user_parent_id1) {
  479. // $user_parent_info1 = UserModel::get($user_parent_id1);
  480. // // $distributorInfo1 = Db::name('distributor')->where('id', $user_parent_info1['distributor_id'])->find();
  481. // $money = round($price * 1 / 100, 2);
  482. // if ($money > 0) {
  483. // $log['user_id'] = $user_parent_id1;
  484. // $log['money'] = $money;
  485. // $log['type'] = 4;
  486. // $log['add_time'] = time();
  487. // $log['obj_id'] = $order_id;
  488. // $log['xia_user_id'] = $user_id;
  489. // $log['is_type'] = $type;
  490. // $log['yue'] = round($user_parent_info1['balance'] + $money, 2);
  491. // Db::name('user_money_log')->insert($log);
  492. // UserModel::where('id', $user_parent_id1)->setInc('balance', $log['money']);
  493. // }
  494. // }
  495. }
  496. /******************************分销商的分金**********************************************/
  497. }
  498. /**
  499. * 获取可以接单的技师id
  500. */
  501. function get_js_ids($ids, $lat = '', $lng = '')
  502. {
  503. // $JsTimeModel = new JsTimeModel();
  504. //
  505. // $week = date('w',time());
  506. // $js_time_list = $JsTimeModel::where(function ($query) use ($ids){
  507. // if(is_array($ids) && count($ids) > 0){
  508. // $query->where('js_id','in',$ids);
  509. // }
  510. // })->field('js_id,times,weeks')->select()->each(function ($js_time_list) use ($week){
  511. // if($week){
  512. // if(in_array($week,$js_time_list['weeks'])){
  513. // $result = $js_time_list;
  514. // return $result;
  515. // }
  516. // }
  517. // });
  518. //
  519. // $js_ids = [];
  520. //
  521. // foreach ($js_time_list as $value){
  522. // foreach ($value['times'] as $v){
  523. // if(strtotime($v['js_end_time']) > strtotime(date('H:i'))){
  524. // if(!in_array($value['js_id'],$js_ids)){
  525. // array_push($js_ids,$value['js_id']);
  526. // }
  527. // }
  528. // }
  529. // }
  530. $JsSiteModel = new JsSiteModel();
  531. $js_site = $JsSiteModel::where(function ($query) use ($ids) {
  532. if ($ids) {
  533. $query->where('js_id', 'in', $ids);
  534. }
  535. })->select();
  536. $distance = cmf_get_option('distance')['distance'];
  537. $js_new_ids = [];
  538. if ($js_site) {
  539. foreach ($js_site as $value) {
  540. $distance1 = GetDistance($lat, $lng, $value['lat'], $value['lng'], 2, 2);
  541. if ($distance >= $distance1) {
  542. if (!in_array($value['js_id'], $js_new_ids)) {
  543. array_push($js_new_ids, $value['js_id']);
  544. }
  545. }
  546. }
  547. }
  548. return $js_new_ids;
  549. }
  550. function get_js_score($js_id)
  551. {
  552. $score = Db::name('js_score')->where('status', 1)->where('js_id', $js_id)->sum('score');
  553. $count = Db::name('js_score')->where('status', 1)->where('js_id', $js_id)->count();
  554. $new_score = 0;
  555. if ($score > 0 && $count > 0) {
  556. $new_score = $score / $count;
  557. }
  558. return $new_score;
  559. }
  560. /**
  561. * 获取可接项目订单id
  562. */
  563. function get_js_order_ids($js_id, $type = 1, $page = 1, $category_id, $distance_filter = true)
  564. {
  565. $JsOrderModel = new \api\js\model\JsOrderModel();
  566. $js_order_ids = [];
  567. $project_new_ids = [];
  568. $where['js_delete'] = 1;
  569. $js_project_relevancy_where['js_id'] = $js_id;
  570. $js_project_relevancy_where['status'] = 1;
  571. if ($category_id) {
  572. $project_ids1 = Db::name('js_project_category_relevancy')->where('category_id', $category_id)->field('project_id')->select();
  573. $project_ids2 = [];
  574. foreach ($project_ids1 as $vo) {
  575. $project_ids2[] = $vo['project_id'];
  576. }
  577. $js_project_relevancy_where['project_id'] = $project_ids2;
  578. }
  579. $project_ids = Db::name('js_project_relevancy')->where($js_project_relevancy_where)->field('project_id')->select();
  580. $order_new_ids = [];
  581. $order_ids = Db::name('js_shield_log')->where('js_id', $js_id)->field('order_id')->select();
  582. foreach ($order_ids as $vo) {
  583. $order_new_ids[] = $vo['order_id'];
  584. }
  585. foreach ($project_ids as $vo) {
  586. $project_new_ids[] = $vo['project_id'];
  587. }
  588. switch ($type) {
  589. case 1:
  590. $order_list = $JsOrderModel::where('project_id', 'in', $project_new_ids)->where(function ($query) use ($js_id) {
  591. $query->where('jiedan_js_id', $js_id);
  592. // $query->whereOR('jiedan_js_id',0);
  593. })
  594. ->where('id', 'not in', $order_new_ids)->where($where)->page($page, 5)->field('id,lat,lng')->order('id', 'desc')->select();
  595. break;
  596. case 2:
  597. $order_list = $JsOrderModel::where('project_id', 'in', $project_new_ids)->where(function ($query) use ($js_id) {
  598. $query->where('status', 1);
  599. $query->where('jiedan_js_id', $js_id);
  600. })->where('id', 'not in', $order_new_ids)->where($where)->page($page, 5)->field('id,lat,lng')->order('id', 'desc')->select();
  601. break;
  602. case 3:
  603. $order_list = $JsOrderModel::where('project_id', 'in', $project_new_ids)->where(['jiedan_js_id' => $js_id, 'status' => 2])->where('id', 'not in', $order_new_ids)->where($where)->page($page, 5)->field('id,lat,lng')->order('id', 'desc')->select();
  604. break;
  605. case 4:
  606. $order_list = $JsOrderModel::where('project_id', 'in', $project_new_ids)->where(['jiedan_js_id' => $js_id, 'status' => 6])->where('id', 'not in', $order_new_ids)->where($where)->page($page, 5)->field('id,lat,lng')->select();
  607. break;
  608. case 5:
  609. $order_list = $JsOrderModel::where('project_id', 'in', $project_new_ids)->where(['jiedan_js_id' => $js_id, 'status' => 4])->where('id', 'not in', $order_new_ids)->page($page, 5)->where($where)->field('id,lat,lng')->order('id', 'desc')->select();
  610. break;
  611. case 6:
  612. $order_list = $JsOrderModel::where('project_id', 'in', $project_new_ids)->where(['jiedan_js_id' => $js_id, 'status' => 3])->where('id', 'not in', $order_new_ids)->where($where)->page($page, 5)->field('id,lat,lng')->order('id', 'desc')->select();
  613. break;
  614. case 7:
  615. $order_list = $JsOrderModel::where('project_id', 'in', $project_new_ids)->where(['jiedan_js_id' => $js_id, 'status' => 5])->where('id', 'not in', $order_new_ids)->where($where)->page($page, 5)->field('id,lat,lng')->order('id', 'desc')->select();
  616. break;
  617. case 8:
  618. $order_list = $JsOrderModel::where('project_id', 'in', $project_new_ids)->where(['jiedan_js_id' => 0, 'status' => 1])->where('id', 'not in', $order_new_ids)->where($where)->page($page, 5)->field('id,lat,lng')->order('id', 'desc')->select();
  619. break;
  620. }
  621. $js_site_info = Db::name('js_site')->where('js_id', $js_id)->find();
  622. $distance = cmf_get_option('distance')['distance'];
  623. foreach ($order_list as $value) {
  624. $distance1 = GetDistance($value['lat'], $value['lng'], $js_site_info['lat'], $js_site_info['lng'], 2, 2); //value['lat'],/$value['lng'],$js_site_info['lat'],$js_site_info['lng'],2,2);
  625. if ($distance_filter && $distance >= $distance1 || !$distance_filter) {
  626. $js_order_ids[] = $value['id'];
  627. }
  628. }
  629. return $js_order_ids;
  630. }
  631. function getdistrict($lng, $lat)
  632. {
  633. $url = 'https://restapi.amap.com/v3/geocode/regeo?parameters&location=' . $lng . ',' . $lat . '&key=3c813127122a372b7b0a6f0db7eb911e';
  634. $res = cmf_curl_get($url);
  635. $res_array = json_decode($res, true);
  636. return $res_array;
  637. }
  638. function get_user_and_userjs($user_id, $district_id = '', $city_id = '', $renk_id = '')
  639. {
  640. $UserModel = new UserModel();
  641. $agencyModel = new \api\js\model\AgencyModel();
  642. $agency_id = $UserModel::get($user_id)['agency_id'];
  643. $agency_ids = explode(',', $agency_id);
  644. $user_ids_new = [];
  645. $user_js_ids_new = [];
  646. $agency_list = $agencyModel::where('id', 'in', $agency_ids)->select()->toArray();
  647. if ($renk_id) {
  648. if ($renk_id == 1) {
  649. $where['city_id'] = $city_id;
  650. } else {
  651. $where['district_id'] = $district_id;
  652. }
  653. $where['user_type'] = 2;
  654. $user_ids = $UserModel::where($where)->field('id')->select();
  655. foreach ($user_ids as $vo) {
  656. $user_ids_new[] = $vo['id'];
  657. }
  658. $where['user_type'] = 3;
  659. $user_ids = $UserModel::where($where)->field('id')->select();
  660. foreach ($user_ids as $vo) {
  661. $user_js_ids_new[] = $vo['id'];
  662. }
  663. } else {
  664. foreach ($agency_list as $value) {
  665. $where['user_type'] = 2;
  666. if ($value['renk_id'] == 1) {
  667. $where1['city_id'] = $value['city_id'];
  668. $user_ids = $UserModel::where($where1)->field('id')->select();
  669. foreach ($user_ids as $vo) {
  670. array_push($user_ids_new, $vo['id']);
  671. }
  672. }
  673. if ($value['renk_id'] == 2) { // 区级代理
  674. $where['district_id'] = $value['district_id'];
  675. $user_ids = $UserModel::where($where)->field('id')->select();
  676. foreach ($user_ids as $vo) {
  677. array_push($user_ids_new, $vo['id']);
  678. }
  679. }
  680. $where['user_type'] = 3;
  681. if ($value['renk_id'] == 1) {
  682. $where1['city_id'] = $value['city_id'];
  683. $user_ids = $UserModel::where($where1)->field('id')->select();
  684. foreach ($user_ids as $vo) {
  685. array_push($user_ids_new, $vo['id']);
  686. }
  687. }
  688. if ($value['renk_id'] == 2) { // 区级代理
  689. $where['district_id'] = $value['district_id'];
  690. $user_ids = $UserModel::where($where)->field('id')->select();
  691. foreach ($user_ids as $vo) {
  692. array_push($user_js_ids_new, $vo['id']);
  693. }
  694. }
  695. }
  696. }
  697. $user['user_ids'] = $user_ids_new;
  698. $user['user_js_ids'] = $user_js_ids_new;
  699. return $user;
  700. }