SysService.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. <?php
  2. namespace crmeb\services;
  3. use app\admin\model\system\SystemStore;
  4. use app\models\store\Card;
  5. use app\models\store\StoreOrder;
  6. use app\models\store\StoreProduct;
  7. use app\models\system\SystemCity;
  8. use app\models\system\SystemUserLevel;
  9. use app\models\user\User;
  10. use app\models\user\UserBill;
  11. use app\models\user\UserLevel;
  12. class SysService
  13. {
  14. public static function phone_bangding($uid)
  15. {
  16. $user = User::find($uid);
  17. if($user['is_phone_send']==0 and $user['phone'])
  18. {
  19. $levelinfo = SystemUserLevel::find(1);
  20. UserLevel::setUserLevel($uid,1);
  21. User::bcInc($uid,"contribute",$levelinfo['contribute']);
  22. User::edit(['is_phone_send'=>1],$uid);
  23. $contribute = User::where("uid",$uid)->value('contribute');
  24. UserBill::income("绑定手机号获的贡献值",$uid,"contribute","add",$levelinfo['contribute'],0,$contribute,"绑定手机号获的贡献值:".$levelinfo['contribute']);
  25. }
  26. return true;
  27. }
  28. public static function level_order($order_info)
  29. {
  30. $user = User::find($order_info['uid']);
  31. if($order_info['is_level']==1) {
  32. $levelinfo = SystemUserLevel::find($order_info['level']);
  33. if ($user['level'] = $order_info['level']) {
  34. UserLevel::setUserLevel($user['uid'], $order_info['level']);
  35. }
  36. User::bcInc($order_info['uid'], "contribute", $levelinfo['contribute']);
  37. $contribute = User::where("uid", $order_info['uid'])->value('contribute');
  38. UserBill::income("升级获的贡献值", $order_info['uid'], "contribute", "add", $levelinfo['contribute'], 0, $contribute, "升级获的贡献值:" . $levelinfo['contribute']);
  39. self::recommend($order_info, $user);
  40. }
  41. }
  42. private static function recommend($order,$user)
  43. {
  44. if($user['spread_uid']) {
  45. $sp_user = User::find($user['spread_uid']);
  46. if($sp_user['level']==0) return true;
  47. $level = [];
  48. foreach (sys_data("level") as $v)
  49. {
  50. $level[$v['level']] = $v;
  51. }
  52. if(!isset($level[$sp_user['level']])) return true;
  53. $level_info = $level[$sp_user['level']];
  54. $num = $level_info["level_".$order['level']];
  55. $data['uid'] = $sp_user['uid'];
  56. $data['add_time'] = time();
  57. $all_data = [];
  58. for ($i=0;$i<$num;$i++)
  59. {
  60. $data['verify_code'] = uniqid().$i;
  61. $all_data[] = $data;
  62. }
  63. Card::setAll($all_data);
  64. $count = Card::where('uid',$user['spread_uid'])->value("count(id)")?:0;
  65. UserBill::income("推荐用户",$user['spread_uid'],"card","add",$num,0,$count,"推荐用户获得:".$count."张卡券");
  66. }
  67. return true;
  68. }
  69. public static function area($order,$user)
  70. {
  71. //dump($user);
  72. // dump($order);
  73. //发放店长
  74. if($user['level']!=4) {
  75. $users = User::field('uid,level,spread_uid,brokerage_price')->select();
  76. $rs = UtilService::getparentid($users, $user['uid']);
  77. $store_uid = 0;
  78. foreach ($rs as $v) {
  79. if ($v['level'] == 4) {
  80. $store_uid = $v['uid'];
  81. break;
  82. }
  83. }
  84. if ($store_uid > 0) {
  85. $trem_count = SystemUserLevel::find(4)['trem_count'];
  86. $brokerage_price = bcmul($order['total_price'], bcdiv($trem_count, 100, 2), 2);
  87. UserBill::income("店长团队进货量", $store_uid, "month_performance", "add", $brokerage_price, $order['id'], 0, "订单金额:{$order['total_price']},店长团队进货量:" . $brokerage_price);
  88. }
  89. }
  90. else
  91. {
  92. UserBill::income("店长进货量", $user['uid'], "month_performance", "add", $order['total_price'], $order['id'], 0, "订单金额:{$order['total_price']},店长进货量:" . $order['total_price']);
  93. }
  94. //发放代理奖
  95. $one = SystemCity::where("city_id",$order['city_id'])->find();
  96. $two = SystemCity::where("city_id",$one['parent_id'])->find();
  97. $three = SystemCity::where("city_id",$two['parent_id'])->find();
  98. if($one && $one['agent_uid']>0)
  99. {
  100. $agent_income = SystemUserLevel::find(5)['agent_income'];
  101. $brokerage_price = bcmul($order['total_price'],bcdiv($agent_income,100,2),2);
  102. User::bcInc($one['agent_uid'],"brokerage_price",$brokerage_price,"uid");
  103. $userInfo = User::find($one['agent_uid']);
  104. UserBill::income("区代奖励",$one['agent_uid'],"now_money","brokerage",$brokerage_price, $order['id'],$userInfo['brokerage_price'],"用户下单金额{$order['total_price']},市代奖励:".$brokerage_price);
  105. }
  106. if($two && $two['agent_uid']>0)
  107. {
  108. $agent_income = SystemUserLevel::find(6)['agent_income'];
  109. $brokerage_price = bcmul($order['total_price'],bcdiv($agent_income,100,2),2);
  110. User::bcInc($two['agent_uid'],"brokerage_price",$brokerage_price,"uid");
  111. $userInfo = User::find($two['agent_uid']);
  112. UserBill::income("市代奖励",$two['agent_uid'],"now_money","brokerage",$brokerage_price, $order['id'],$userInfo['brokerage_price'],"用户下单金额{$order['total_price']},市代奖励:".$brokerage_price);
  113. }
  114. if($three && $three['agent_uid']>0)
  115. {
  116. $agent_income = SystemUserLevel::find(7)['agent_income'];
  117. $brokerage_price = bcmul($order['total_price'],bcdiv($agent_income,100,2),2);
  118. User::bcInc($three['agent_uid'],"brokerage_price",$brokerage_price,"uid");
  119. $userInfo = User::find($three['agent_uid']);
  120. UserBill::income("省代奖励",$three['agent_uid'],"now_money","brokerage",$brokerage_price, $order['id'],$userInfo['brokerage_price'],"用户下单金额{$order['total_price']},市代奖励:".$brokerage_price);
  121. }
  122. }
  123. public static function recommend1($orderInfo)
  124. {
  125. $user = User::find($orderInfo['uid']);
  126. $cartId = is_string($orderInfo['cart_id']) ? json_decode($orderInfo['cart_id'], true) : $orderInfo['cart_id'];
  127. $one = StoreProduct::getProductBrokerage($cartId);
  128. $two = StoreProduct::getProductBrokerage($cartId,false);
  129. @file_put_contents('recommend1.txt',$one.'--'.$two);
  130. $one_user = User::find($user['spread_uid']);
  131. if($one_user) {
  132. User::bcInc($one_user['uid'], "brokerage_price", $one, "uid");
  133. //$one_user = User::find($user['spread_uid']);
  134. $brokerage_price = bcadd($one_user['brokerage_price'],$one,2);
  135. UserBill::income("推荐奖励", $one_user['uid'], "now_money", "brokerage", $one, $orderInfo['id'], $brokerage_price, "用户下单金额{$orderInfo['total_price']},推荐奖励:" . $one);
  136. }
  137. return true;
  138. if($one_user && $two_user = User::find($one_user['spread_uid']))
  139. {
  140. if($two_user) {
  141. User::bcInc($two_user['uid'], "brokerage_price", $two, "uid");
  142. //$one_user = User::find($user['spread_uid']);
  143. $brokerage_price = bcadd($two_user['brokerage_price'], $two, 2);
  144. UserBill::income("间推奖励", $two_user['uid'], "now_money", "brokerage", $two, $orderInfo['id'], $brokerage_price, "用户下单金额{$orderInfo['total_price']},间推奖励:" . $two);
  145. }
  146. }
  147. $recommend = bcadd($one,$two,2);
  148. //处理团队
  149. $team = 0;
  150. $profit = bcsub($orderInfo['total_price'],$orderInfo['cost'],2);
  151. $users = User::field('uid,level,spread_uid,brokerage_price,area_level')->select();
  152. $rs = UtilService::getparentid($users, $user['uid']);
  153. $max_differential = SystemUserLevel::max('differential');
  154. $differential = 0;
  155. $levels1 = SystemUserLevel::where('is_del',0)->where('is_show',1)->field('id,differential,flat_level')->select()->toArray();
  156. $levels = [];
  157. foreach ($levels1 as $v)
  158. {
  159. $levels[$v['id']] = $v;
  160. }
  161. $flat_level = [];
  162. foreach ($rs as $v)
  163. {
  164. if(isset($levels[$v['level']]) && $levels[$v['level']]['differential']>$differential)
  165. {
  166. $num = bcsub($levels[$v['level']]['differential'],$differential,2);
  167. $brokerage_price = bcmul(bcdiv($num,100,2),$profit,2);
  168. $team = bcadd($team,$brokerage_price,2);
  169. User::bcInc($v['uid'], "brokerage_price", $brokerage_price, "uid");
  170. $sp = User::find($v['uid']);
  171. UserBill::income("团队奖励", $v['uid'], "now_money", "brokerage", $brokerage_price, $orderInfo['id'], $sp['brokerage_price'], "用户下单金额{$orderInfo['total_price']},团队奖励:" . $brokerage_price);
  172. $differential = $levels[$v['level']]['differential'];
  173. }
  174. elseif(isset($levels[$v['level']]) && !in_array($v['level'],$flat_level))
  175. {
  176. $flat_level[] = $v['level'];
  177. if($levels[$v['level']]['flat_level']>0)
  178. {
  179. $num = $levels[$v['level']]['flat_level'];
  180. $brokerage_price = bcmul(bcdiv($num,100,3),$profit,2);
  181. $team = bcadd($team,$brokerage_price,2);
  182. User::bcInc($v['uid'], "brokerage_price", $brokerage_price, "uid");
  183. $sp = User::find($v['uid']);
  184. UserBill::income("平级奖励", $v['uid'], "now_money", "brokerage", $brokerage_price, $orderInfo['id'], $sp['brokerage_price'], "用户下单金额{$orderInfo['total_price']},平级奖励:" . $brokerage_price);
  185. }
  186. }
  187. if($differential==$max_differential)
  188. {
  189. break;
  190. }
  191. }
  192. //处理全公司分红
  193. $v3_bonus = sys_config('v3_bonus',2);
  194. $bonus = bcmul($profit,bcdiv($v3_bonus,100,2),2);
  195. //处理总公司
  196. $next_profit = bcsub($profit,bcadd(bcadd($recommend,$team,2),$bonus,2),2);
  197. $next_profit = bcsub($next_profit,bcmul(bcdiv(sys_config('verifier'),100,2),bcsub($orderInfo['total_price'],$orderInfo['deduction_price'],2),2),2);
  198. $head_office_uid = sys_config('head_office_uid');
  199. if($head_office_uid>0)
  200. {
  201. $brokerage_price = bcmul(bcdiv(sys_config('head_office'),100,2),$next_profit,2);
  202. User::bcInc($head_office_uid, "brokerage_price", $brokerage_price, "uid");
  203. $sp = User::find($head_office_uid);
  204. UserBill::income("总公司收益分红",$head_office_uid, "now_money", "brokerage", $brokerage_price, $orderInfo['id'], $sp['brokerage_price'], "用户下单金额{$orderInfo['total_price']},总公司收益:" . $brokerage_price);
  205. }
  206. //处理分公司
  207. foreach ($rs as $v)
  208. {
  209. if($v['area_level']==9)
  210. {
  211. $brokerage_price = bcmul(bcdiv(sys_config('branch_office'),100,2),$next_profit,2);
  212. User::bcInc($v['uid'], "brokerage_price", $brokerage_price, "uid");
  213. $sp = User::find($v['uid']);
  214. UserBill::income("分公司收益分红", $v['uid'], "now_money", "brokerage", $brokerage_price, $orderInfo['id'], $sp['brokerage_price'], "用户下单金额{$orderInfo['total_price']},分公司收益分红:" . $brokerage_price);
  215. break;
  216. }
  217. }
  218. /*
  219. //处理店长
  220. $store_uid = SystemStore::where('id',$orderInfo['store_id'])->value('uid');
  221. if($store_uid>0)
  222. {
  223. $brokerage_price = bcmul(bcdiv(sys_config('branch_office'),100,2),$next_profit,2);
  224. User::bcInc($store_uid, "brokerage_price", $brokerage_price, "uid");
  225. $sp = User::find($store_uid);
  226. UserBill::income("分公司收益分红",$store_uid, "now_money", "brokerage", $brokerage_price, $orderInfo['id'], $sp['brokerage_price'], "用户下单金额{$orderInfo['total_price']},分公司收益:" . $brokerage_price);
  227. }*/
  228. //处理股东
  229. foreach ($rs as $v)
  230. {
  231. if($v['area_level']==8)
  232. {
  233. $brokerage_price = bcmul(bcdiv(sys_config('shareholder'),100,2),$next_profit,2);
  234. User::bcInc($v['uid'], "brokerage_price", $brokerage_price, "uid");
  235. $sp = User::find($v['uid']);
  236. UserBill::income("股东收益", $v['uid'], "now_money", "brokerage", $brokerage_price, $orderInfo['id'], $sp['brokerage_price'], "用户下单金额{$orderInfo['total_price']},股东收益:" . $brokerage_price);
  237. break;
  238. }
  239. }
  240. StoreOrder::edit(compact('recommend','bonus','team'),$orderInfo['id']);
  241. return true;
  242. }
  243. public static function day()
  244. {
  245. $sum = StoreOrder::where('paid',1)->where('refund_status',0)->whereDay('pay_time','yesterday')->value('sum(bonus)')?:0;
  246. $uids = User::where('level',4)->column('uid');
  247. if($sum && sizeof($uids))
  248. {
  249. $brokerage_price = bcdiv($sum,sizeof($uids),2);
  250. foreach ($uids as $v)
  251. {
  252. User::bcInc($v, "brokerage_price", $brokerage_price, "uid");
  253. $sp = User::find($v);
  254. UserBill::income("V3全公司分红", $v, "now_money", "brokerage", $brokerage_price, 0, $sp['brokerage_price'], "全公司总分红{$sum},V3用户数:".sizeof($uids)."人,每人收益:" . $brokerage_price);
  255. }
  256. }
  257. return true;
  258. }
  259. }