优惠券订单及其他脚本

scan_orderv4_liedou.php 52KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112
  1. <?php
  2. require_once 'DB_PDO.class.php';
  3. require_once 'TBK.class.php';
  4. require_once 'confv2.class.php';
  5. define("DETAILDEBUG", 0);//打印流程详细信息,如有需要,设为1
  6. define("LIMIT_NUM", 0);//限制导入条数,0不限制,方便测试,上线设为0
  7. define("PUSH_URL",'https://liedou.726p.com/api/v2/MessagePush/rebatepush');//push接口地址
  8. define("ACT_PUSH_URL",'https://liedou.726p.com/api/v2/MessagePush/pullnew_push');//拉新push接口地址
  9. define("REFUND_PUSH_URL",'https://liedou.726p.com/api/v2/MessagePush/act_push');//退款push接口地址
  10. define("ACT_START", '2018-12-25 00:00:00');//
  11. define("ACT_END", '2018-12-31 23:59:59');//
  12. define("ACT_GOODS_IMG", 'http://imgs.726p.com/tbk/upload/advImg2018-12-24/135037/kx-5c2073adbe478.png');//
  13. /**
  14. * 导入及更新 order/order_rebate数据 + 淘宝拉新活动
  15. */
  16. #设置时区
  17. date_default_timezone_set('PRC');
  18. set_time_limit(0);
  19. ini_set('memory_limit','1024M');
  20. function readDataFromDb(){
  21. # 记录脚本开始时间
  22. $scriptStart = date("Y-m-d H:i:s");
  23. # 1.获取6分钟内订单
  24. //$stime = date('Y-m-d H:i:s',strtotime('2018-08-07'));
  25. $stime = date('Y-m-d H:i:s', time()-150);
  26. $sql = "SELECT * from liedou_taoke_orders where update_time > :stime ";
  27. $dumpsql = str_replace(':stime', "'".$stime."'", $sql);
  28. echo "\n\n".$dumpsql."\n";
  29. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  30. $stmt = $_PDO->prepare($sql);
  31. $stmt->execute(array(':stime'=>$stime));
  32. $orderResult = $stmt->fetchAll(PDO::FETCH_ASSOC);
  33. # 遍历订单
  34. # 统计
  35. $res_count = array(
  36. 'total_num' => 0,
  37. 'generalinsert_num' => 0,
  38. 'generalupdate_num' => 0,
  39. 'nouserinsert_num' => 0,
  40. 'nouserupdate_num' => 0,
  41. 'fail_insert_num' => 0,
  42. 'fail_insert_ids' => '',
  43. 'fail_insertno_num' => 0,
  44. 'fail_insertno_ids' => '',
  45. 'fail_update_num' => 0,
  46. //'fail_update_ids' => '',
  47. 'fail_updateno_num' => 0,
  48. //'fail_updateno_ids' => '',
  49. );
  50. $rewardOrder = array(); //拉新订单记录
  51. $nums = 0;
  52. foreach( $orderResult as $key=>$orderDetail ){
  53. $nums++;
  54. $res_count['total_num']++;
  55. echo "/ ************************ order{$res_count['total_num']}-Start ************************* / \n";
  56. if( DETAILDEBUG == 1){
  57. echo 'orderDetail:';
  58. }
  59. //create_time,click_time,item_title,num_iid,seller_nick,seller_shop_title,item_num,price,tk_status,order_type,income_rate,commission_rate,pay_price,pub_share_pre_fee,alipay_total_price,commission,earning_time,total_commission_rate,total_commission_fee,subsidy_rate,subsidy_fee,subsidy_type,terminal_type,tk3rd_type,trade_parent_id,trade_id,auction_category,site_id,site_name,adzone_id,adzone_name,relation_id,special_id
  60. $order_id=$orderDetail["trade_id"];
  61. $update_time=$orderDetail["update_time"];
  62. $order_create_at=$orderDetail["create_time"];
  63. $order_click_at=$orderDetail["click_time"];
  64. $order_balance_at=$orderDetail["earning_time"];
  65. $goods_id=$orderDetail["num_iid"];
  66. $goods_name=$orderDetail["item_title"];
  67. $goods_name=str_replace(['"',"'"],'',$goods_name);
  68. $num=$orderDetail["item_num"];
  69. $price=intval($orderDetail["price"]*1000/10);
  70. $sum_price=intval($orderDetail["alipay_total_price"]*1000/10);
  71. $statusDesc=$orderDetail["tk_status"];
  72. $typeDesc=$orderDetail["order_type"];
  73. $orderStatus = 1;
  74. $type=1;
  75. if($statusDesc=="12"){
  76. $orderStatus=1;
  77. }
  78. elseif($statusDesc=="13"){
  79. $orderStatus=0;
  80. }
  81. elseif($statusDesc=="3"){
  82. $orderStatus=2;
  83. }
  84. if($typeDesc=="聚划算"){
  85. $type=0;
  86. }
  87. elseif($typeDesc=="淘宝"){
  88. $type=1;
  89. }
  90. elseif($typeDesc=="天猫"){
  91. $type=2;
  92. }
  93. $adzone_id=$orderDetail["adzone_id"];
  94. $relation_id = $orderDetail["relation_id"];
  95. $special_id = $orderDetail["special_id"];
  96. $ceil_income=round($orderDetail["pub_share_pre_fee"], 2);
  97. $predict_income=$ceil_income*100;
  98. $predict_income=ceil($predict_income*conf::$RATE_CONF["globalzk"]);
  99. echo 'order_id:'.$order_id.'|| goods_id:'.$goods_id.'|| orderstatus:'.$orderStatus.'|| order_balance_at:'.$order_balance_at;
  100. echo '|| predict_income:'.$predict_income.'|| adzone_id:'.$adzone_id.'|| special_id:'.$special_id.'|| relation_id:'.$relation_id."\n";
  101. $resultone=UserInfo($special_id, $relation_id, $adzone_id);
  102. if( DETAILDEBUG == 1){
  103. echo 'userinfo:';
  104. var_dump($resultone);
  105. echo "\n";
  106. }
  107. if($sum_price!=0){
  108. if($predict_income<5){
  109. $predict_income=5;
  110. }
  111. }
  112. if( !empty($resultone) ){
  113. echo "User:存在\n";
  114. $orderExists=orderMysql($order_id,$goods_id);
  115. if( empty($orderExists) ){
  116. echo "action:插入操作\n";
  117. #获取层级规则信息
  118. $userAllInfo=userLevelandPrentInfo($resultone);
  119. echo "<pre>\nuserAllInfo";
  120. print_r($userAllInfo);
  121. if( DETAILDEBUG == 1){
  122. echo 'userallinfo:'."\n";
  123. var_dump($userAllInfo);
  124. }
  125. $userList = $userAllInfo['userList']; //4层 每层userId
  126. $userLevel = $userAllInfo['userLevel']; //4层 每层userlevel
  127. # 从数据库获取规则
  128. $rebateRuleInfo = getRebateRule($userAllInfo['levelRule']);
  129. echo "\nRuleInfo:";
  130. print_r($rebateRuleInfo);
  131. $RuleArr = explode(',',$rebateRuleInfo['rebate_rule']); //4层 每层分佣比例
  132. $TypeArr = explode(',',$rebateRuleInfo['rebate_type']); //4层 每层分佣级别
  133. #获取每一层返利
  134. $moneyInfo=orderMoney($predict_income, $RuleArr); //4层 每层分佣钱数
  135. echo "\nmoneyInfo:";
  136. print_r($moneyInfo);
  137. if( DETAILDEBUG == 1){
  138. echo 'rebateInfo'."\n";
  139. var_dump($moneyInfo);
  140. }
  141. $detail = TBK::tbkItemInfoGet( ['goods_id'=>$goods_id] );
  142. if( !empty($detail) ){
  143. $goods_img=$detail->pict_url;
  144. }
  145. else{
  146. $goods_img="";
  147. }
  148. try{
  149. $_PDO->beginTransaction();
  150. #判断是否是新手第一单
  151. //$newFirstRes = newCustFirstOrder($userList[0]);
  152. #订单表插入
  153. $res=generateSqlInsertOrder($goods_img,$goods_name,$userList[0],$order_id,$adzone_id,$goods_id,$num,$price,$sum_price,$predict_income,$moneyInfo[0],$orderStatus,$type,$userLevel[0],$order_create_at,$order_click_at,$order_balance_at);
  154. if($res){
  155. $res_count['generalinsert_num']++;
  156. }else{
  157. $res_count['fail_insert_num']++;
  158. $res_count['fail_insert_ids'].=$order_id.'|';
  159. }
  160. echo 'orderinsert:'.$res;
  161. echo "\n";
  162. if($sum_price>=0){
  163. foreach($moneyInfo as $k=>$v){
  164. if($v>0){
  165. #order_rebate表插入父级佣金
  166. $rebaseType=$TypeArr[$k];
  167. $res=generateSqlInsertRebateSelf($userLevel[$k],$order_balance_at,$order_create_at,$goods_img,$goods_name,$order_id,$userList[$k],$rebaseType,$moneyInfo[$k],$sum_price,$orderStatus,$goods_id,$predict_income);
  168. # 推送
  169. $flag_time = time() - strtotime($order_create_at);
  170. if($res && $flag_time<3600){
  171. $params = array();
  172. $params['user_id'] = $userList[$k];
  173. $params['type'] = $rebaseType==1 ? 1 : 2;
  174. $params['money'] = round($moneyInfo[$k]/100,2);
  175. $push_res = curl_post( PUSH_URL, $params);
  176. }
  177. echo 'rebateinsert_'.$k.':'.$res;
  178. echo "\n";
  179. }
  180. }
  181. if($order_create_at >= ACT_START && $order_create_at <= ACT_END){
  182. # 判断是否是拉新首单
  183. $isNew = 0;
  184. $isTooNew = 0;
  185. if(array_key_exists($order_id, $rewardOrder)){
  186. $isTooNew = 1;
  187. }else{
  188. $isNew = isNewUser($userList[0]);
  189. }
  190. if($isTooNew || $isNew){
  191. //记录拉新订单分佣情况
  192. if($isNew){
  193. $rewardOrder[$order_id] = $moneyInfo;
  194. }else{
  195. $rewardOrder[$order_id] = arraySums($rewardOrder[$order_id],$moneyInfo);
  196. }
  197. //获取下一个分佣的订单
  198. $nkey = $nums;
  199. //若当前订单和下一笔订单号一样,继续循环,直到本拉新订单分佣rewardOrder[$order_id]统计完毕
  200. if(isset($orderResult[$nkey]['order_sn']) && $order_id == $orderResult[$nkey]['order_sn']){
  201. }else{
  202. // 分奖励佣金 < --------- Start --------- >
  203. $reward_n = 0; // 记录奖励层数 最多两层
  204. $rewardInfo = $rewardOrder[$order_id]; //本订单实际分佣情况
  205. foreach($rewardInfo as $k=>$v){
  206. if($v>0 && $reward_n<2){
  207. # 插入奖励
  208. $rebaseType=6; //奖励佣金
  209. # 计算奖励佣金
  210. $reward = getReward($rewardInfo[$k]);
  211. $goods_name_new = $k==0 ? '恭喜您获得新用户首单奖励' : '恭喜您获得拉新首单奖励';
  212. $goods_img_new = ACT_GOODS_IMG;
  213. $res=rewardOrderInsert($userLevel[$k],$order_balance_at,$order_create_at,$goods_img_new,$goods_name_new,$order_id,$userList[$k],$rebaseType,$reward,$sum_price,$orderStatus,$goods_id,$predict_income);
  214. # 奖励推送
  215. if($res){
  216. $params = array();
  217. $params['user_id'] = $userList[$k];
  218. $params['type'] = $k==0 ? 3 : 4; //奖励推送 3新人 4上级
  219. $params['money'] = round($reward/100,2);
  220. $push_res = curl_post( ACT_PUSH_URL, $params);
  221. }
  222. echo 'rewardinsert_'.$reward_n.':'.$res;
  223. echo "\n";
  224. # 记录奖励层数
  225. $reward_n++;
  226. }
  227. }
  228. # 记录新人首单信息
  229. if($res){
  230. //获取运营商
  231. $m = strpos($userAllInfo['levelRule'], '3');
  232. $operate_id = $userList[$m];
  233. $res2 = pullNewInsert($userList[0],$operate_id,$order_id,$order_create_at,$orderStatus);
  234. //获取当前运营商拉新人数
  235. $pullCount = getPullNew($operate_id);
  236. if($pullCount==10 || $pullCount==20 || $pullCount==30){
  237. //符合推送条件
  238. $params = array();
  239. $params['user_id'] = $operate_id;
  240. $params['type'] = 5; //运营商拉新人数推送
  241. $params['count'] = $pullCount;
  242. $push_res = curl_post( ACT_PUSH_URL, $params);
  243. }
  244. }
  245. }
  246. }
  247. }
  248. }
  249. //津贴单独计算
  250. # 获取顶级运营商-控制中心 ** ++ 运营商,满足裂变3个运营商以上分团队奖励(新津贴)
  251. if($sum_price>0){
  252. $mks = strpos($userAllInfo['levelRule'], '3');
  253. if($mks !== false){
  254. $YysManageInfo = YysManageInfo( $userList[$mks] );
  255. if( !empty($YysManageInfo) ){
  256. $rebaseType=$TypeArr[$mks];
  257. $YysManageRabate = round($predict_income*$YysManageInfo['rate']);
  258. if($YysManageRabate < 1){
  259. $YysManageRabate = 1;
  260. }
  261. $res = YysManageInsertRebate(4,$order_balance_at,$order_create_at,$goods_img,$goods_name,$order_id,$YysManageInfo['user_id'],$rebaseType,$YysManageRabate,$sum_price,$orderStatus,$goods_id,$predict_income);
  262. echo 'rebateinsert_YysManage:'.$res;
  263. echo "\n";
  264. }
  265. #+++新逻辑 **团队奖励(新津贴)
  266. /*
  267. $preYysInfo = preYysInfo( $userList[$mks] );
  268. if( !empty($preYysInfo) ){
  269. $rebaseType=$TypeArr[$mks];
  270. $YysNewRabate = round($predict_income*$preYysInfo['rate']);
  271. if($YysNewRabate < 1){
  272. $YysNewRabate = 1;
  273. }
  274. $res = YysManageInsertRebate(3,$order_balance_at,$order_create_at,$goods_img,$goods_name,$order_id,$preYysInfo['user_id'],$rebaseType,$YysNewRabate,$sum_price,$orderStatus,$goods_id,$predict_income);
  275. echo 'rebateinsert_preYysInfo:'.$res;
  276. echo "\n";
  277. }
  278. */
  279. }
  280. }
  281. $_PDO->commit();
  282. }catch(PDOException $e){
  283. echo 'err_msg'.$e->getMessage()."\n";
  284. $_PDO->rollback();
  285. }
  286. //echo "-----------------insertEnd--------------------\n";
  287. }
  288. else{
  289. try{
  290. $_PDO->beginTransaction();
  291. //更新order/order_rebate表
  292. echo "action:更新操作\n";
  293. $res=generateSqlupdate($orderStatus,$order_balance_at,$order_id,$goods_id);
  294. /*** 增加拉新更新 Start ***/
  295. if($order_create_at >= ACT_START && $order_create_at <= ACT_END){
  296. $isUpOk = pullNewIsUpOk($orderStatus, $order_id, $resultone['user_id']);
  297. echo 'isUpOk:'.$isUpOk."\n";
  298. if($isUpOk) $pull_up = pullNewUpdate($orderStatus, $order_id);
  299. }
  300. /*** 增加拉新更新 End ***/
  301. /*** 增加退款推送 Start***/
  302. if($res && $orderStatus==0){
  303. $refundPush = refundPush($order_id);
  304. }
  305. /*** 增加退款推送 END***/
  306. if($res){
  307. $res_count['generalupdate_num']++;
  308. }else{
  309. $res_count['fail_update_num']++;
  310. //$res_count['fail_update_ids'].=$order_id.'|';
  311. }
  312. echo "更新数据-> orderstatus:".$orderStatus." order_balance_at:".$order_balance_at;
  313. echo "\n";
  314. echo "order/reabte_update:".$res;
  315. echo "\n";
  316. //echo "-----------------updateEnd-----------------------\n";
  317. $_PDO->commit();
  318. }catch(PDOException $e){
  319. echo 'err_msg'.$e->getMessage()."\n";
  320. $_PDO->rollback();
  321. }
  322. }
  323. //echo "-----------------IssetUserEnd:--------------------\n";
  324. }
  325. else{
  326. $_PDO->beginTransaction();
  327. try{
  328. #user不存在的处理
  329. echo "User:不存在\n";
  330. $ordernoExists=orderMysql($order_id,$goods_id);
  331. if( empty($ordernoExists) ){
  332. $detail = TBK::tbkItemInfoGet( ['goods_id'=>$goods_id] );
  333. if( !empty($detail) ){
  334. $goods_img=$detail->pict_url;
  335. }
  336. else{
  337. $goods_img="";
  338. }
  339. $res=generateSqlInsertOrderOther($goods_img,$goods_name,$order_id,$adzone_id,$goods_id,$num,$price,$sum_price,$predict_income,0,$orderStatus,$type,$order_create_at,$order_click_at,$order_balance_at);
  340. if($res){
  341. $res_count['nouserinsert_num']++;
  342. }else{
  343. $res_count['fail_insertno_num']++;
  344. $res_count['fail_insertno_ids'].=$order_id.'|';
  345. }
  346. echo "action:插入操作\n";
  347. echo "orderinsert:".$res;
  348. echo "\n";
  349. $_PDO->commit();
  350. }
  351. else{
  352. $res=generateSqlUpdateOther($orderStatus,$order_balance_at,$order_id,$goods_id);
  353. if($res){
  354. $res_count['nouserupdate_num']++;
  355. }else{
  356. $res_count['fail_updateno_num']++;
  357. //$res_count['fail_updateno_ids'].=$order_id.'|';
  358. }
  359. echo "action:更新操作\n";
  360. echo "orderupdate:".$res;
  361. echo "\n";
  362. $_PDO->commit();
  363. }
  364. //echo "-----------------EmptyUserEnd:--------------------\n";
  365. }catch(PDOException $e){
  366. echo 'err_msg'.$e->getMessage()."\n";
  367. $_PDO->rollback();
  368. }
  369. }
  370. echo "/ ** order{$res_count['total_num']}-End ** /";
  371. echo "\n\n\n";
  372. if(LIMIT_NUM >0 && $res_count['total_num'] == LIMIT_NUM) break;
  373. }
  374. print_r($res_count);
  375. echo "\n拉新订单:\n";
  376. print_r($rewardOrder);
  377. echo "\n本次脚本开始时间:". $scriptStart;
  378. echo "\n本次脚本结束时间:". date("Y-m-d H:i:s");
  379. }
  380. # 查找运营中心规则改版0425
  381. function YysManageInfo( $user_id ){
  382. $sql = "SELECT user_id,parent_user_id,level FROM user_level WHERE user_id=:user_id ";
  383. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  384. $stmt = $_PDO->prepare($sql);
  385. $stmt->execute(array(':user_id'=>$user_id));
  386. $result = $stmt->fetch(PDO::FETCH_ASSOC);
  387. if( empty($result) ) return false;
  388. $data = array();
  389. #如果自己是运营中心
  390. if( $result['level'] == 4 ){
  391. #老运营
  392. //if(!isNewYysManage($user_id)){
  393. $data['user_id'] = $user_id;
  394. $data['rate'] = 0.05;
  395. return $data;
  396. //}else{
  397. //return new_c_rate($user_id);
  398. //}
  399. }else{
  400. #上级信息
  401. $sql = "SELECT id FROM user_level WHERE user_id=:user_id and level=4";
  402. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  403. $stmt = $_PDO->prepare($sql);
  404. $stmt->execute(array(':user_id'=>$result['parent_user_id']));
  405. $result1 = $stmt->fetch(PDO::FETCH_ASSOC);
  406. if(empty($result1)){
  407. return false; //上级若不是运营中心
  408. }
  409. #老运营
  410. //if(!isNewYysManage($result['parent_user_id'])){
  411. $data['user_id'] = $result['parent_user_id'];
  412. $data['rate'] = 0.05;
  413. return $data;
  414. //}else{
  415. //return new_c_rate($result['parent_user_id']);
  416. //}
  417. }
  418. return false;
  419. }
  420. #新运营中心津贴比例
  421. function new_c_rate($user_id){
  422. #新运营中心
  423. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  424. $sql = "SELECT count(1) as nums FROM user_level_change_info where upgrade_to_level=3 and pre_yys_id = :pre_yys_id and upgrade_time>'2019-04-26' ";
  425. //$sql = "SELECT count(1) as nums from user_level where parent_user_id=:parent_user_id and level>=3 ";
  426. $stmt = $_PDO->prepare($sql);
  427. $stmt->execute(array(':pre_yys_id'=>$user_id));
  428. $res = $stmt->fetch(PDO::FETCH_ASSOC);
  429. $data = array();
  430. if(isset($res['nums']) && $res['nums']>=3){
  431. $data['user_id'] = $user_id;
  432. if($res['nums']>=10){
  433. $data['rate'] = 0.03;
  434. }elseif($res['nums']>=6){
  435. $data['rate'] = 0.02;
  436. }elseif($res['nums']>=3){
  437. $data['rate'] = 0.01;
  438. }
  439. return $data;
  440. }
  441. return false;
  442. }
  443. function YysInfo( $user_id ){
  444. $sql = "SELECT user_id,parent_user_id,level FROM user_level WHERE user_id=:user_id ";
  445. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  446. $stmt = $_PDO->prepare($sql);
  447. $stmt->execute(array(':user_id'=>$user_id));
  448. $result = $stmt->fetch(PDO::FETCH_ASSOC);
  449. if( empty($result) ) return ['user_id'=>48941,'level'=>4,'parent_user_id'=>'-1'];
  450. if($result['level'] >= 3){
  451. return $result;
  452. }else{
  453. if( empty($result['parent_user_id']) ){
  454. return ['user_id'=>48941,'level'=>4,'parent_user_id'=>'-1'];
  455. }
  456. return YysInfo( $result['parent_user_id']);
  457. }
  458. return ['user_id'=>48941,'level'=>4,'parent_user_id'=>'-1'];
  459. }
  460. function UserInfo($special_id, $relation_id, $adzone_id){
  461. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  462. //新加逻辑 2020-7-8 封relation不分佣
  463. $sql = "SELECT value FROM global_variable WHERE variable_key ='relation_blacklist' ";
  464. $stmt = $_PDO->prepare($sql);
  465. $stmt->execute();
  466. $result = $stmt->fetch(PDO::FETCH_ASSOC);
  467. if( !empty($result) ){
  468. if( strstr($result['value'], $relation_id) ){
  469. return false;
  470. }
  471. }
  472. if(in_array($adzone_id,[123456])){
  473. return false;
  474. }
  475. if($adzone_id=='101804100229'){
  476. if(!empty($relation_id)){
  477. $sql = "SELECT user_id FROM user_special_relation_local WHERE relation_id = '{$relation_id}'";
  478. }elseif(!empty($special_id)){
  479. $sql = "SELECT user_id FROM user_special_relation WHERE special_id = '{$special_id}'";
  480. }
  481. }else{
  482. if(!empty($relation_id)){
  483. $sql = "SELECT user_id FROM user_special_relation WHERE relation_id = '{$relation_id}'";
  484. }elseif(!empty($special_id)){
  485. $sql = "SELECT user_id FROM user_special_relation WHERE special_id = '{$special_id}'";
  486. }else{
  487. return false;
  488. }
  489. }
  490. $stmt = $_PDO->prepare($sql);
  491. $stmt->execute();
  492. $resultone = $stmt->fetch(PDO::FETCH_ASSOC);
  493. if(!empty($resultone)){
  494. $sql="SELECT * FROM user_level WHERE user_id = :user_id";
  495. $stmt = $_PDO->prepare($sql);
  496. $stmt->execute(array(':user_id'=>$resultone['user_id']));
  497. $userResult = $stmt->fetch(PDO::FETCH_ASSOC);
  498. return $userResult;
  499. }
  500. else{
  501. return false;
  502. }
  503. }
  504. function userLevelInfo($user_id){
  505. $sql="SELECT * FROM user_level WHERE user_id = :user_id ";
  506. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  507. $stmt = $_PDO->prepare($sql);
  508. $stmt->execute(array(':user_id'=>$user_id));
  509. $resultone = $stmt->fetch(PDO::FETCH_ASSOC);
  510. if($resultone){
  511. $myInfo=["user_id"=>$user_id,"level"=>$resultone['level'],"parent_user_id"=>$resultone['parent_user_id']];
  512. return $myInfo;
  513. }
  514. else{
  515. return false;
  516. }
  517. }
  518. function userMyInfo($user_id){
  519. $sql="SELECT * FROM users WHERE id = :user_id ";
  520. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  521. $stmt = $_PDO->prepare($sql);
  522. $stmt->execute(array(':user_id'=>$user_id));
  523. $resultone = $stmt->fetch(PDO::FETCH_ASSOC);
  524. if($resultone){
  525. $myInfo['user_id'] = $user_id;
  526. $myInfo['origin'] = $resultone['origin'];
  527. return $myInfo;
  528. }
  529. else{
  530. return false;
  531. }
  532. }
  533. # 获取4层用户级别基础信息
  534. function userLevelandPrentInfo($resultone){
  535. $resultInfo = array();
  536. # self
  537. $userId=$resultone['user_id'];
  538. $userLevel=$resultone['level'];
  539. if($userLevel>=3){
  540. $resultInfo['userList'] = [$userId,0,0,0];
  541. $resultInfo['levelRule'] = 3000;
  542. $resultInfo['userLevel'] = [$userLevel,0,0,0];
  543. return $resultInfo;
  544. }
  545. $userParentId=$resultone['parent_user_id'];
  546. $userGrandId=$resultone['grand_father_id'];
  547. if($userParentId>0){
  548. $resulttwo=userLevelInfo($userParentId);
  549. if( !empty($resulttwo) ){
  550. # parent
  551. $userParentLevel=$resulttwo['level'];
  552. if($userParentLevel>=3){
  553. $resultInfo['userList'] = [$userId,$userParentId,0,0];
  554. $resultInfo['levelRule'] = intval($userLevel.'300');
  555. $resultInfo['userLevel'] = [$userLevel,$userParentLevel,0,0];
  556. return $resultInfo;
  557. }
  558. if($userGrandId>0){
  559. $resultthree=userLevelInfo($userGrandId);
  560. if( !empty($resultthree) ){
  561. # grand
  562. $userGrandLevel=$resultthree['level'];
  563. if($userGrandLevel>=3){
  564. $resultInfo['userList'] = [$userId,$userParentId,$userGrandId,0];
  565. $resultInfo['levelRule'] = intval($userLevel.$userParentLevel.'30');
  566. $resultInfo['userLevel'] = [$userLevel,$userParentLevel,$userGrandLevel,0];
  567. return $resultInfo;
  568. }
  569. }
  570. }
  571. }
  572. }
  573. if( !$userParentId ) $userParentId=0;
  574. if( !$userGrandId ) $userGrandId=0;
  575. if( !isset($userParentLevel) ) $userParentLevel=1;
  576. if( !isset($userGrandLevel) ) $userGrandLevel=1;
  577. #三级里面没有运营商,递归上级运营商
  578. $YysInfo = YysInfo($userGrandId);
  579. $userFourId = $YysInfo['user_id'];
  580. $userFourLevel = $YysInfo['level'];
  581. # 层级规则
  582. $levelRule = $userLevel.$userParentLevel.$userGrandLevel.'3';
  583. $resultInfo['userList']=[$userId,$userParentId,$userGrandId,$userFourId];
  584. $resultInfo['levelRule'] = (int)$levelRule;
  585. $resultInfo['userLevel'] = [$userLevel,$userParentLevel,$userGrandLevel,$userFourLevel];
  586. return $resultInfo;
  587. }
  588. function orderMoney($predict_income, $RuleArr){
  589. $result = array();
  590. foreach($RuleArr as $k=>$v){
  591. if($v>0){
  592. $result[$k] = round($predict_income * $v / 100);
  593. }else{
  594. $result[$k] = 0;
  595. }
  596. }
  597. return $result;
  598. }
  599. function orderMysql($order_id,$goods_id){
  600. $sql="SELECT * from `order` where order_id=:order_id and goods_id=:goods_id";
  601. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  602. $stmt = $_PDO->prepare($sql);
  603. $stmt->execute(array(':order_id'=>$order_id,':goods_id'=>$goods_id));
  604. $result = $stmt->fetch(PDO::FETCH_ASSOC);
  605. return $result;
  606. }
  607. function orderType($adzone_id){
  608. $sql="SELECT * from `adzone` where adzone_id=:adzone_id";
  609. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  610. $stmt = $_PDO->prepare($sql);
  611. $stmt->execute(array(':adzone_id'=>$adzone_id));
  612. $userResult = $stmt->fetch(PDO::FETCH_ASSOC);
  613. return $userResult;
  614. }
  615. function generateSqlInsertOrderOther($goods_img,$goods_name,$order_id,$adzone_id,$goods_id,$num,$price,$sum_price,$predict_income,$self_income,$orderStatus,$type,$order_create_at,$order_click_at,$order_balance_at){
  616. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  617. if( empty($order_balance_at) ){
  618. $sql="insert into `order` (company_type,goods_img_url,goods_name,order_id,adzone_id,goods_id,num,price,sum_price,predict_income,income,status,type,order_create_at,order_click_at) VALUES (:company_type,:goods_img,:goods_name,:order_id,:adzone_id,:goods_id,:num,:price,:sum_price,:predict_income,:self_income,:orderStatus,:type,:order_create_at,:order_click_at)";
  619. $stmt = $_PDO->prepare($sql);
  620. $stmt->execute(array(':company_type'=>2,':goods_img'=>$goods_img,':goods_name'=>$goods_name,':order_id'=>$order_id,':adzone_id'=>$adzone_id,':goods_id'=>$goods_id,':num'=>$num,':price'=>$price,':sum_price'=>$sum_price,':predict_income'=>$predict_income,':self_income'=>$self_income,':orderStatus'=>$orderStatus,':type'=>$type,':order_create_at'=>$order_create_at,':order_click_at'=>$order_click_at));
  621. return $_PDO->lastinsertid();
  622. }
  623. else{
  624. $sql="insert into `order` (company_type,goods_img_url,goods_name,order_id,adzone_id,goods_id,num,price,sum_price,predict_income,income,status,type,order_create_at,order_click_at,order_balance_at) VALUES (:company_type,:goods_img,:goods_name,:order_id,:adzone_id,:goods_id,:num,:price,:sum_price,:predict_income,:self_income,:orderStatus,:type,:order_create_at,:order_click_at,:order_balance_at)";
  625. $stmt = $_PDO->prepare($sql);
  626. $stmt->execute(array(':company_type'=>2,':goods_img'=>$goods_img,':goods_name'=>$goods_name,':order_id'=>$order_id,':adzone_id'=>$adzone_id,':goods_id'=>$goods_id,':num'=>$num,':price'=>$price,':sum_price'=>$sum_price,':predict_income'=>$predict_income,':self_income'=>$self_income,':orderStatus'=>$orderStatus,':type'=>$type,':order_create_at'=>$order_create_at,':order_click_at'=>$order_click_at,':order_balance_at'=>$order_balance_at));
  627. return $_PDO->lastinsertid();
  628. }
  629. }
  630. #order表订单插入脚本
  631. function generateSqlInsertOrder($goods_img,$goods_name,$userId,$order_id,$adzone_id,$goods_id,$num,$price,$sum_price,$predict_income,$self_income,$orderStatus,$type,$userLevel,$order_create_at,$order_click_at,$order_balance_at){
  632. //$adzoneDetail=orderType($adzone_id);
  633. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  634. if( empty($order_balance_at) ){
  635. $sql="insert into `order` (company_type,goods_img_url,goods_name,user_id,order_id,adzone_id,goods_id,num,price,sum_price,predict_income,income,status,type,user_level,order_create_at,order_click_at) VALUES (:company_type,:goods_img,:goods_name,:userId,:order_id,:adzone_id,:goods_id,:num,:price,:sum_price,:predict_income,:self_income,:orderStatus,:type,:userLevel,:order_create_at,:order_click_at)";
  636. $stmt = $_PDO->prepare($sql);
  637. $stmt->execute(array(':company_type'=>0,':goods_img'=>$goods_img,':goods_name'=>$goods_name,':userId'=>$userId,':order_id'=>$order_id,':adzone_id'=>$adzone_id,':goods_id'=>$goods_id,':num'=>$num,':price'=>$price,':sum_price'=>$sum_price,':predict_income'=>$predict_income,':self_income'=>$self_income,':orderStatus'=>$orderStatus,':type'=>$type,':userLevel'=>$userLevel,':order_create_at'=>$order_create_at,':order_click_at'=>$order_click_at));
  638. return $_PDO->lastinsertid();
  639. }
  640. else{
  641. $sql="insert into `order` (company_type,goods_img_url,goods_name,user_id,order_id,adzone_id,goods_id,num,price,sum_price,predict_income,income,status,type,user_level,order_create_at,order_click_at,order_balance_at) VALUES (:company_type,:goods_img,:goods_name,:userId,:order_id,:adzone_id,:goods_id,:num,:price,:sum_price,:predict_income,:self_income,:orderStatus,:type,:userLevel,:order_create_at,:order_click_at,:order_balance_at)";
  642. $stmt = $_PDO->prepare($sql);
  643. $stmt->execute(array(':company_type'=>0,':goods_img'=>$goods_img,':goods_name'=>$goods_name,':userId'=>$userId,':order_id'=>$order_id,':adzone_id'=>$adzone_id,':goods_id'=>$goods_id,':num'=>$num,':price'=>$price,':sum_price'=>$sum_price,':predict_income'=>$predict_income,':self_income'=>$self_income,':orderStatus'=>$orderStatus,':type'=>$type,':userLevel'=>$userLevel,':order_create_at'=>$order_create_at,':order_click_at'=>$order_click_at,':order_balance_at'=>$order_balance_at));
  644. return $_PDO->lastinsertid();
  645. }
  646. }
  647. #返利表订单插入脚本
  648. function generateSqlInsertRebateSelf($user_level,$order_balance_at,$order_create_at,$goods_img,$goods_name,$order_id,$userId,$rebaseType,$last_orderSelfRebaseRebase,$sum_price,$orderStatus,$goods_id,$pre_income){
  649. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  650. if( !empty($order_balance_at) ){
  651. $sql="insert into order_rebate (user_level,order_balance_at,order_create_at,img,name,order_id,user_id,type,rebate,money,status,goods_id,pre_income) VALUES (:user_level,:order_balance_at,:order_create_at,:goods_img,:goods_name,:order_id,:userId,:rebaseType,:last_orderSelfRebaseRebase,:sum_price,:orderStatus,:goods_id,:pre_income)";
  652. $stmt = $_PDO->prepare($sql);
  653. $stmt->execute(array(':user_level'=>$user_level,':order_balance_at'=>$order_balance_at,':order_create_at'=>$order_create_at,':goods_img'=>$goods_img,':goods_name'=>$goods_name,':order_id'=>$order_id,':userId'=>$userId,':rebaseType'=>$rebaseType,':last_orderSelfRebaseRebase'=>$last_orderSelfRebaseRebase,':sum_price'=>$sum_price,':orderStatus'=>$orderStatus,':goods_id'=>$goods_id,':pre_income'=>$pre_income));
  654. return $_PDO->lastinsertid();
  655. }
  656. else{
  657. $sql="insert into order_rebate (user_level,order_create_at,img,name,order_id,user_id,type,rebate,money,status,goods_id,pre_income) VALUES (:user_level,:order_create_at,:goods_img,:goods_name,:order_id,:userId,:rebaseType,:last_orderSelfRebaseRebase,:sum_price,:orderStatus,:goods_id,:pre_income)";
  658. $stmt = $_PDO->prepare($sql);
  659. $stmt->execute(array(':user_level'=>$user_level,':order_create_at'=>$order_create_at,':goods_img'=>$goods_img,':goods_name'=>$goods_name,':order_id'=>$order_id,':userId'=>$userId,':rebaseType'=>$rebaseType,':last_orderSelfRebaseRebase'=>$last_orderSelfRebaseRebase,':sum_price'=>$sum_price,':orderStatus'=>$orderStatus,':goods_id'=>$goods_id,':pre_income'=>$pre_income));
  660. return $_PDO->lastinsertid();
  661. }
  662. }
  663. #单独处理订单插运营商佣金
  664. function YysInsertRebate($user_level,$order_balance_at,$order_create_at,$goods_img,$goods_name,$order_id,$userId,$rebaseType,$last_orderSelfRebaseRebase,$sum_price,$orderStatus,$goods_id,$pre_income){
  665. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  666. if( !empty($order_balance_at) ){
  667. $sql="insert into order_rebate (user_level,order_balance_at,order_create_at,img,name,order_id,user_id,type,rebate,money,status,goods_id,pre_income) VALUES (:user_level,:order_balance_at,:order_create_at,:goods_img,:goods_name,:order_id,:userId,:rebaseType,:last_orderSelfRebaseRebase,:sum_price,:orderStatus,:goods_id,:pre_income)";
  668. $stmt = $_PDO->prepare($sql);
  669. $stmt->execute(array(':user_level'=>$user_level,':order_balance_at'=>$order_balance_at,':order_create_at'=>$order_create_at,':goods_img'=>$goods_img,':goods_name'=>$goods_name,':order_id'=>$order_id,':userId'=>$userId,':rebaseType'=>$rebaseType,':last_orderSelfRebaseRebase'=>$last_orderSelfRebaseRebase,':sum_price'=>$sum_price,':orderStatus'=>$orderStatus,':goods_id'=>$goods_id,':pre_income'=>$pre_income));
  670. return $_PDO->lastinsertid();
  671. }
  672. else{
  673. $sql="insert into order_rebate (user_level,order_create_at,img,name,order_id,user_id,type,rebate,money,status,goods_id,pre_income) VALUES (:user_level,:order_create_at,:goods_img,:goods_name,:order_id,:userId,:rebaseType,:last_orderSelfRebaseRebase,:sum_price,:orderStatus,:goods_id,:pre_income)";
  674. $stmt = $_PDO->prepare($sql);
  675. $stmt->execute(array(':user_level'=>$user_level,':order_create_at'=>$order_create_at,':goods_img'=>$goods_img,':goods_name'=>$goods_name,':order_id'=>$order_id,':userId'=>$userId,':rebaseType'=>$rebaseType,':last_orderSelfRebaseRebase'=>$last_orderSelfRebaseRebase,':sum_price'=>$sum_price,':orderStatus'=>$orderStatus,':goods_id'=>$goods_id,':pre_income'=>$pre_income));
  676. return $_PDO->lastinsertid();
  677. }
  678. }
  679. #返利表订单插入运营商津贴信息
  680. function YysManageInsertRebate($user_level,$order_balance_at,$order_create_at,$goods_img,$goods_name,$order_id,$userId,$rebaseType,$last_orderSelfRebaseRebase,$sum_price,$orderStatus,$goods_id,$pre_income){
  681. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  682. if( !empty($order_balance_at) ){
  683. $sql="insert into order_rebate_profit (user_level,order_balance_at,order_create_at,img,name,order_id,user_id,type,rebate,money,status,goods_id,pre_income) VALUES (:user_level,:order_balance_at,:order_create_at,:goods_img,:goods_name,:order_id,:userId,:rebaseType,:last_orderSelfRebaseRebase,:sum_price,:orderStatus,:goods_id,:pre_income)";
  684. $stmt = $_PDO->prepare($sql);
  685. $stmt->execute(array(':user_level'=>$user_level,':order_balance_at'=>$order_balance_at,':order_create_at'=>$order_create_at,':goods_img'=>$goods_img,':goods_name'=>$goods_name,':order_id'=>$order_id,':userId'=>$userId,':rebaseType'=>$rebaseType,':last_orderSelfRebaseRebase'=>$last_orderSelfRebaseRebase,':sum_price'=>$sum_price,':orderStatus'=>$orderStatus,':goods_id'=>$goods_id,':pre_income'=>$pre_income));
  686. return $_PDO->lastinsertid();
  687. }
  688. else{
  689. $sql="insert into order_rebate_profit (user_level,order_create_at,img,name,order_id,user_id,type,rebate,money,status,goods_id,pre_income) VALUES (:user_level,:order_create_at,:goods_img,:goods_name,:order_id,:userId,:rebaseType,:last_orderSelfRebaseRebase,:sum_price,:orderStatus,:goods_id,:pre_income)";
  690. $stmt = $_PDO->prepare($sql);
  691. $stmt->execute(array(':user_level'=>$user_level,':order_create_at'=>$order_create_at,':goods_img'=>$goods_img,':goods_name'=>$goods_name,':order_id'=>$order_id,':userId'=>$userId,':rebaseType'=>$rebaseType,':last_orderSelfRebaseRebase'=>$last_orderSelfRebaseRebase,':sum_price'=>$sum_price,':orderStatus'=>$orderStatus,':goods_id'=>$goods_id,':pre_income'=>$pre_income));
  692. return $_PDO->lastinsertid();
  693. }
  694. }
  695. #order订单表返利表同步更新
  696. function generateSqlupdate($status,$order_balance_at,$order_id,$goods_id){
  697. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  698. if( !empty($order_balance_at) ){
  699. $sql="update `order` set status=:status,order_balance_at=:order_balance_at where order_id=:order_id and goods_id=:goods_id ";
  700. $stmt = $_PDO->prepare($sql);
  701. $stmt->execute(array(':status'=>$status,':order_balance_at'=>$order_balance_at,':order_id'=>$order_id,':goods_id'=>$goods_id));
  702. $res = $stmt->rowCount();
  703. //更新order_rebate
  704. $sql="update order_rebate set status=:status,order_balance_at=:order_balance_at where order_id=:order_id and goods_id=:goods_id ";
  705. $stmt = $_PDO->prepare($sql);
  706. $stmt->execute(array(':status'=>$status,':order_balance_at'=>$order_balance_at,':order_id'=>$order_id,':goods_id'=>$goods_id));
  707. $res = $stmt->rowCount();
  708. //更新order_rebate_profit
  709. $sql="update order_rebate_profit set status=:status,order_balance_at=:order_balance_at where order_id=:order_id and goods_id=:goods_id ";
  710. $stmt = $_PDO->prepare($sql);
  711. $stmt->execute(array(':status'=>$status,':order_balance_at'=>$order_balance_at,':order_id'=>$order_id,':goods_id'=>$goods_id));
  712. $res = $stmt->rowCount();
  713. }
  714. else{
  715. $sql="update `order` set status=:status where order_id=:order_id and goods_id=:goods_id ";
  716. $stmt = $_PDO->prepare($sql);
  717. $stmt->execute(array(':status'=>$status,':order_id'=>$order_id,':goods_id'=>$goods_id));
  718. $res = $stmt->rowCount();
  719. $sql="update order_rebate set status=:status where order_id=:order_id and goods_id=:goods_id ";
  720. $stmt = $_PDO->prepare($sql);
  721. $stmt->execute(array(':status'=>$status,':order_id'=>$order_id,':goods_id'=>$goods_id));
  722. $res = $stmt->rowCount();
  723. //更新order_rebate_profit
  724. $sql="update order_rebate_profit set status=:status where order_id=:order_id and goods_id=:goods_id ";
  725. $stmt = $_PDO->prepare($sql);
  726. $stmt->execute(array(':status'=>$status,':order_id'=>$order_id,':goods_id'=>$goods_id));
  727. $res = $stmt->rowCount();
  728. }
  729. return $res;
  730. }
  731. #订单表单独更新
  732. function generateSqlUpdateOther($status,$order_balance_at,$order_id,$goods_id){
  733. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  734. if( !empty($order_balance_at) ){
  735. $sql="update `order` set status=:status,order_balance_at=:order_balance_at where order_id=:order_id and goods_id=:goods_id ";
  736. $stmt = $_PDO->prepare($sql);
  737. $stmt->execute(array(':status'=>$status,':order_balance_at'=>$order_balance_at,':order_id'=>$order_id,':goods_id'=>$goods_id));
  738. $res = $stmt->rowCount();
  739. }
  740. else{
  741. $sql="update `order` set status=:status where order_id=:order_id and goods_id=:goods_id ";
  742. $stmt = $_PDO->prepare($sql);
  743. $stmt->execute(array(':status'=>$status,':order_id'=>$order_id,':goods_id'=>$goods_id));
  744. $res = $stmt->rowCount();
  745. }
  746. return $res;
  747. }
  748. # 获取rebateRule
  749. function getRebateRule($levelRule){
  750. $sql="SELECT * from `rebate_rule` where level_rule = :level_rule";
  751. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  752. $stmt = $_PDO->prepare($sql);
  753. $stmt->execute(array(':level_rule'=>$levelRule));
  754. $ruleResult = $stmt->fetch(PDO::FETCH_ASSOC);
  755. return $ruleResult;
  756. }
  757. # 判断是否是新用户第一单
  758. function isNewUser($user_id){
  759. $start = ACT_START;
  760. $end = ACT_END;
  761. $sql = "SELECT id FROM `user_level` where regist_at>'{$start}' and regist_at<= '{$end}' and user_id = {$user_id} limit 1";
  762. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  763. $stmt = $_PDO->prepare($sql);
  764. $stmt->execute();
  765. $res = $stmt->fetch(PDO::FETCH_ASSOC);
  766. if(!empty($res)){
  767. $sql = "SELECT id FROM `user_pullnew` where user_id={$user_id} and status>0 limit 1";
  768. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  769. $stmt = $_PDO->prepare($sql);
  770. $stmt->execute();
  771. $res = $stmt->fetch(PDO::FETCH_ASSOC);
  772. if(empty($res)){
  773. return true;
  774. }
  775. }
  776. return false;
  777. }
  778. # 计算奖励佣金
  779. function getReward($money){
  780. if($money <= 0){
  781. return 0;
  782. }
  783. if($money > 300){
  784. $reward = 300;
  785. }else{
  786. $reward = $money;
  787. }
  788. return $reward;
  789. }
  790. # 同订单多分佣累加
  791. function arraySums($arr1, $arr2){
  792. $res = array();
  793. foreach($arr1 as $k=>$v){
  794. $res[$k] = $arr1[$k] + $arr2[$k];
  795. }
  796. return $res;
  797. }
  798. #拉新奖励订单插入
  799. function rewardOrderInsert($user_level,$order_balance_at,$order_create_at,$goods_img,$goods_name,$order_id,$userId,$rebaseType,$last_orderSelfRebaseRebase,$sum_price,$orderStatus,$goods_id,$pre_income){
  800. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  801. if( !empty($order_balance_at) ){
  802. $sql="insert into order_rebate (user_level,order_balance_at,order_create_at,img,name,order_id,user_id,type,rebate,money,status,goods_id,pre_income) VALUES (:user_level,:order_balance_at,:order_create_at,:goods_img,:goods_name,:order_id,:userId,:rebaseType,:last_orderSelfRebaseRebase,:sum_price,:orderStatus,:goods_id,:pre_income)";
  803. $stmt = $_PDO->prepare($sql);
  804. $stmt->execute(array(':user_level'=>$user_level,':order_balance_at'=>$order_balance_at,':order_create_at'=>$order_create_at,':goods_img'=>$goods_img,':goods_name'=>$goods_name,':order_id'=>$order_id,':userId'=>$userId,':rebaseType'=>$rebaseType,':last_orderSelfRebaseRebase'=>$last_orderSelfRebaseRebase,':sum_price'=>$sum_price,':orderStatus'=>$orderStatus,':goods_id'=>$goods_id,':pre_income'=>$pre_income));
  805. return $_PDO->lastinsertid();
  806. }
  807. else{
  808. $sql="insert into order_rebate (user_level,order_create_at,img,name,order_id,user_id,type,rebate,money,status,goods_id,pre_income) VALUES (:user_level,:order_create_at,:goods_img,:goods_name,:order_id,:userId,:rebaseType,:last_orderSelfRebaseRebase,:sum_price,:orderStatus,:goods_id,:pre_income)";
  809. $stmt = $_PDO->prepare($sql);
  810. $stmt->execute(array(':user_level'=>$user_level,':order_create_at'=>$order_create_at,':goods_img'=>$goods_img,':goods_name'=>$goods_name,':order_id'=>$order_id,':userId'=>$userId,':rebaseType'=>$rebaseType,':last_orderSelfRebaseRebase'=>$last_orderSelfRebaseRebase,':sum_price'=>$sum_price,':orderStatus'=>$orderStatus,':goods_id'=>$goods_id,':pre_income'=>$pre_income));
  811. return $_PDO->lastinsertid();
  812. }
  813. }
  814. # 记录拉新首单表
  815. function pullNewInsert($user_id,$operate_id,$first_order_id,$order_create_at,$status){
  816. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  817. $sql = "insert into `user_pullnew` (user_id, operate_id, first_order_id, order_create_at, status) values ({$user_id},{$operate_id},'{$first_order_id}','{$order_create_at}', {$status})";
  818. $stmt = $_PDO->prepare($sql);
  819. $stmt->execute();
  820. return $_PDO->lastinsertid();
  821. }
  822. #更新拉新首单表状态
  823. function pullNewUpdate($status, $order_id){
  824. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  825. $sql="update `user_pullnew` set status=:status where first_order_id=:order_id";
  826. $stmt = $_PDO->prepare($sql);
  827. $stmt->execute(array(':status'=>$status,':order_id'=>$order_id));
  828. $res = $stmt->rowCount();
  829. return $res;
  830. }
  831. # 获取当前运营商拉新状态
  832. function getPullNew($operate_id){
  833. $sql="SELECT count(id) as records from `user_pullnew` where status>0 and operate_id = :operate_id";
  834. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  835. $stmt = $_PDO->prepare($sql);
  836. $stmt->execute(array(':operate_id'=>$operate_id));
  837. $result = $stmt->fetch(PDO::FETCH_OBJ)->records;
  838. return $result;
  839. }
  840. # 是否更新拉新表
  841. function pullNewIsUpOk($status, $order_id, $user_id){
  842. $sql = "SELECT id from user_pullnew where first_order_id = '{$order_id}'";
  843. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  844. $stmt = $_PDO->prepare($sql);
  845. $stmt->execute();
  846. $res = $stmt->fetch(PDO::FETCH_ASSOC);
  847. if(empty($res)){
  848. return false;
  849. }
  850. if($status == 0){
  851. $sql="SELECT id from `order` where user_id={$user_id} and status>0 limit 1";
  852. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  853. $stmt = $_PDO->prepare($sql);
  854. $stmt->execute();
  855. $res = $stmt->fetch(PDO::FETCH_ASSOC);
  856. if(!empty($res)){
  857. return false;
  858. }
  859. }
  860. return true;
  861. }
  862. # 判断是否是新手第一单
  863. function newCustFirstOrder($user_id){
  864. $sql = "select id from `order` where user_id={$user_id} limit 1";
  865. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  866. $stmt = $_PDO->prepare($sql);
  867. $stmt->execute();
  868. $res = $stmt->fetch(PDO::FETCH_ASSOC);
  869. //之前没下过订单
  870. if(empty($res)){
  871. # 完成新手首单任务 ->** 逻辑变动,结算才完成任务
  872. /*$sql = " update red_user_mission set status=1 where user_id={$user_id} and type=2 ";
  873. $stmt = $_PDO->prepare($sql);
  874. $stmt->execute();
  875. $update_res = $stmt->rowCount();*/
  876. # 多拆4-5元
  877. $openRes = openRed($user_id);
  878. return true;
  879. }
  880. return false;
  881. }
  882. # 新手第一单多拆出4-5块助力红包
  883. function openRed($user_id){
  884. $time = date("Y-m-d H:i:s", strtotime('-1 day'));
  885. $sql = "select ur.id,ur.red_money,ur.red_open_money,rh.user_id,rh.union_id,rh.helper_name,rh.helper_img from red_help_record rh
  886. left join user_weixin uw on uw.union_id=rh.union_id
  887. left join user_level ul on ul.user_id = uw.user_id
  888. left join red_user_info ur on ur.id=rh.red_id
  889. where rh.user_id!={$user_id} and uw.user_id={$user_id} and rh.add_time<ul.regist_at and ur.add_time>'{$time}' and ur.red_open_money<ur.red_money order by rh.id desc limit 1";
  890. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  891. $stmt = $_PDO->prepare($sql);
  892. $stmt->execute();
  893. $res = $stmt->fetch(PDO::FETCH_ASSOC);
  894. if(!empty($res)){
  895. $last_money = $res['red_money']*100 - $res['red_open_money']*100;
  896. if($last_money<=500){
  897. $_money = $last_money/100;
  898. }else{
  899. $_money = mt_rand(400, 500) / 100;
  900. }
  901. $union_id = $res['union_id'];
  902. $helper_name = $res['helper_name'];
  903. $helper_img = $res['helper_img'];
  904. # 拆红包
  905. $sql = "update red_user_info set red_open_money=red_open_money+{$_money} where id = {$res['id']}";
  906. $stmt = $_PDO->prepare($sql);
  907. $stmt->execute();
  908. $ur_res = $stmt->rowCount();
  909. $sql = "insert into red_help_record (red_id, user_id, union_id, helper_name, helper_img, helper_money, is_new) values({$res['id']},{$res['user_id']},'{$union_id}','{$helper_name}','{$helper_img}','{$_money}', 2)";
  910. $stmt = $_PDO->prepare($sql);
  911. $stmt->execute();
  912. $rh_res = $_PDO->lastinsertid();
  913. $userAccount = getUserBalace($res['user_id']);
  914. $lastBalance = isset($userAccount['balance']) ? $userAccount['balance'] : 0;
  915. $redAccount = redAccountRecord($res['user_id'], 5, $_money, $rh_res, round($lastBalance+$_money,2));
  916. return true;
  917. }
  918. return false;
  919. }
  920. # 获取用户红包额度
  921. function getUserBalace($user_id){
  922. $table = "red_account_record_".($user_id%10);
  923. $sql = "SELECT balance from {$table} where user_id={$user_id} order by id desc limit 1";
  924. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  925. $stmt = $_PDO->prepare($sql);
  926. $stmt->execute();
  927. $res = $stmt->fetch(PDO::FETCH_ASSOC);
  928. return $res;
  929. }
  930. #更新流水
  931. function redAccountRecord($user_id, $type, $money, $oh_id, $balance){
  932. $table = "red_account_record_".($user_id%10);
  933. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  934. $sql = "insert into `{$table}` (user_id, type, money, oh_id, balance) values ({$user_id},{$type},{$money},'{$oh_id}', {$balance})";
  935. $stmt = $_PDO->prepare($sql);
  936. $stmt->execute();
  937. return $_PDO->lastinsertid();
  938. }
  939. #查裂变运营商信息
  940. function preYysInfo($user_id){
  941. $sql = "SELECT count(1) as nums,ui.pre_yys_id from user_level_change_info ui
  942. left join user_level_change_info ui2 on ui2.pre_yys_id = ui.pre_yys_id where ui2.user_id = {$user_id} and ui.upgrade_time>'2019-04-25'
  943. ";
  944. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  945. $stmt = $_PDO->prepare($sql);
  946. $stmt->execute();
  947. $res = $stmt->fetch(PDO::FETCH_ASSOC);
  948. $data = array();
  949. if(isset($res['nums']) && $res['nums']>=3){
  950. $data['user_id'] = $res['pre_yys_id'];
  951. if($res['nums']>=10){
  952. $data['rate'] = 0.03;
  953. }elseif($res['nums']>=6){
  954. $data['rate'] = 0.02;
  955. }elseif($res['nums']>=3){
  956. $data['rate'] = 0.01;
  957. }
  958. }
  959. return $data;
  960. }
  961. #退款推送
  962. function refundPush($order_id){
  963. $sql = "SELECT user_id,rebate from order_rebate where order_id='{$order_id}' and status=0 and rebate>0 and type!=7";
  964. $_PDO=DB_PDO::getInstance( conf::$DB_CONF );
  965. $stmt = $_PDO->prepare($sql);
  966. $stmt->execute();
  967. $res = $stmt->fetchAll(PDO::FETCH_ASSOC);
  968. if(!empty($res)){
  969. foreach($res as $k=>$v){
  970. $params = array();
  971. $params['user_id'] = $v['user_id'];
  972. $params['type'] = 6; //订单退款
  973. $params['money'] = round($v['rebate']/100, 2);
  974. $push_res = curl_post( REFUND_PUSH_URL, $params);
  975. echo "\n退款推送:用户:".$v['user_id']."|-推送:".$push_res.'|-订单:'.$order_id;
  976. }
  977. }
  978. }
  979. /**
  980. * 判断是否是新逻辑运营中心0425
  981. */
  982. function isNewYysManage($user_id){
  983. $Arr = [23512,48941,214262,218326,222044,235824,239555,262168,262285,311074,317849]; //0425-老运营中心
  984. if(in_array($user_id, $Arr)){
  985. return false;
  986. }
  987. return true;
  988. }
  989. # curl调用接口push
  990. function curl_post($url, $params){
  991. $ch = curl_init();
  992. curl_setopt($ch, CURLOPT_URL, $url);
  993. curl_setopt($ch, CURLOPT_HEADER, 0);
  994. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  995. curl_setopt($ch, CURLOPT_POST, 1);
  996. curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
  997. $response = curl_exec($ch);
  998. curl_close($ch);
  999. return $response;
  1000. }
  1001. readDataFromDb();