Taskorderlianc.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. <?php
  2. /**
  3. * @package merchant
  4. * @Author: Qinii
  5. * @Date: 2020/5/28
  6. */
  7. namespace app\controller\api\store\merchant;
  8. use think\App;
  9. use crmeb\basic\BaseController;
  10. use app\common\repositories\system\merchant\MerchantRepository as repository;
  11. use think\facade\Db;
  12. use think\facade\Log;
  13. use function Symfony\Component\VarDumper\Dumper\esc;
  14. class Taskorderlianc extends BaseController
  15. {
  16. /**
  17. * 会员升级
  18. */
  19. public function member_update($orderInfo,$goods_of_info,$user_id)
  20. {
  21. //
  22. //$user_id = $userInfo['id'];
  23. $order_id = $orderInfo['id'];
  24. //code...
  25. $pay_gb = round($orderInfo['num'] * $orderInfo['gb_num'],2);
  26. //$pay_vr = round($orderInfo['num'] * $orderInfo['vr_num'],2);
  27. //付款按照700的VR付款 start
  28. $vr_num = 0;
  29. if ($orderInfo['price'] == 1180) {
  30. $vr_num = 700;
  31. } elseif ($orderInfo['price'] == 11800) {
  32. $vr_num = 7000;
  33. } elseif ($orderInfo['price'] == 11800) {
  34. $vr_num = 2100;
  35. }elseif($orderInfo['price'] == 10620){
  36. $vr_num = 6300;
  37. }
  38. $pay_gb1 = $vr_num;
  39. $pay_vr1 =$orderInfo['price'];//记录VR值
  40. // $result = Db::name("old_user_jbp")->where("id",$user_id)->dec("vr",$orderInfo['price'])->save();//1.0jbp旧表
  41. // Db::name("user")->where("uid",$user_id)->dec("vr",$orderInfo['price'])->save();//2.0新表
  42. $result = true;
  43. if($result) {
  44. $invite_id = $goods_of_info['spread_id'];
  45. $zs_ylj = 0; //养老金赋值
  46. if($goods_of_info['money'] == 1180){
  47. //修改订单到账状态
  48. $zs_ylj = round(700 * 0.05,2);//计算的养老金 金额
  49. }elseif($goods_of_info['money'] == 11800){
  50. $zs_ylj = round(7000 * 0.05,2);//计算的养老金 金额
  51. }elseif($goods_of_info['money'] == 3540){
  52. $zs_ylj = round(2100 * 0.05,2);//计算的养老金 金额
  53. }elseif($goods_of_info['money'] == 10620){
  54. $zs_ylj = round(6300 * 0.05,2);//计算的养老金 金额
  55. }elseif($goods_of_info['money'] == 9440){
  56. $zs_ylj = round(5600 * 0.05,2);//八单计算的养老金 金额
  57. }elseif($goods_of_info['money'] == 2360){
  58. $zs_ylj = round(1400 * 0.05,2);//两单计算的养老金 金额
  59. }
  60. $uid = $user_id;
  61. $new_user_id = $uid;
  62. if(empty($new_user_id)) {
  63. abort(0,"当前绑定会员查询错误");
  64. }
  65. $new_nums =Db::name("old_user_of_goods")->where("user_id", $uid)->sum("money");
  66. //增加过后权益对比 获取当前权益等级
  67. $old_level_id = Db::name("old_user_jbp")->where("id",$uid)->find();
  68. $old_level_info = Db::name("old_user_level")->where("id",$old_level_id['user_level_id'])->find();
  69. $level_info = [];
  70. $level_list = Db::name("old_user_level")->order("money desc")->select();
  71. //计算会员等级 升级
  72. foreach ($level_list as $key => $value) {
  73. # code...
  74. if($new_nums>=$value['money']) {
  75. $level_info = $value;
  76. break;
  77. }
  78. }
  79. $zs_gb = $orderInfo['price'] * 3;
  80. $zs_withdraw_quota = $orderInfo['price'];
  81. if($old_level_info['id'] == $level_info['id']) {
  82. //未到达升级权益 不改变用户等级
  83. $update_status = false;
  84. }else{
  85. $update_status = true;
  86. $user_level = $level_info['id'];
  87. //var_dump( $user_level);
  88. Db::name("old_user_jbp")->where("id",$new_user_id)->save(['user_level_id'=>$user_level]);//1.0jbp旧表
  89. Db::name("user")->where("uid",$new_user_id)->save(['user_level_id_old'=>$user_level]);//2.0新表
  90. // todo 同时改变他的权益
  91. }
  92. // Db::name("old_user_jbp")->where("id",$new_user_id)->inc("withdraw_quota",$zs_withdraw_quota)->save();//1.0jbp旧表
  93. // Db::name("user")->where("uid",$new_user_id)->save(['withdraw_quota_old'=>$zs_withdraw_quota]);//2.0新表
  94. // 下发邀请人赠送的GB
  95. // $zs_invite_gb = round($orderInfo['price']*0.3,2);
  96. // //todo
  97. // Db::name("old_user_jbp")->where("id",$invite_id)->inc("gb",$zs_invite_gb)->save();//1.0jbp旧表
  98. // Db::name("user")->where("uid",$invite_id)->inc("score",$zs_invite_gb)->save();//2.0新表
  99. //$old_have_pension = Db::name("old_user_jbp")->where("id",$invite_id)->value("have_pension");
  100. //检查是不是订单价格是1180或者11800,更改VR
  101. if($goods_of_info['money'] == 1180 || $goods_of_info['money'] == 11800 || $goods_of_info['money'] == 3540 || $goods_of_info['money'] == 10620 || $goods_of_info['money'] == 9440 || $goods_of_info['money'] == 2360){
  102. //修改订单到账状态
  103. Db::name("old_user_of_goods")->where("order_id",$goods_of_info1['id'])->save(['status'=>1,'pay_gb'=>0,'pay_vr'=>$pay_vr1,'pay_bt'=>0,'create_time'=>time()]);
  104. }
  105. }
  106. if($result) {
  107. //更改订单状态
  108. Db::commit();
  109. $new_user_name = Db::name("old_user_jbp")->where("id",$new_user_id)->value("user_name");
  110. $new_user_name = empty($new_user_name) ? "" : $new_user_name;
  111. //记录日志信息
  112. if($user_id == $invite_id) {
  113. //报单中心=推荐人 GB记录日志有问题需要传入指定参数去计算
  114. //$money = Db::name("old_user_jbp")->where("id",$user_id)->value("gb");
  115. //$appoint_money = $money - $zs_invite_gb;
  116. if($goods_of_info['money'] == 1180 || $goods_of_info['money'] == 11800 || $goods_of_info['money'] == 3540 || $goods_of_info['money'] == 10620 || $goods_of_info['money'] == 9440 || $goods_of_info['money'] == 2360){
  117. $this->change_user_log66($user_id,"vr",2,$pay_vr1,"declare_expend",'权益消费VR-'.$new_user_name);
  118. }
  119. }else{
  120. if($goods_of_info['money'] == 1180 || $goods_of_info['money'] == 11800 || $goods_of_info['money'] == 3540 || $goods_of_info['money'] == 10620 || $goods_of_info['money'] == 9440 || $goods_of_info['money'] == 2360){
  121. $this->change_user_log66($user_id,"vr",2,$pay_vr1,"declare_expend",'权益消费VR-'.$new_user_name);
  122. }
  123. }
  124. // $this->change_user_log66($new_user_id,'gb',1,$zs_gb,"levle_update_zs","权益升级达标赠送");
  125. $this->change_user_log66($new_user_id,'withdraw_quota_old',1,$zs_withdraw_quota,"levle_update_zs","权益升级达标赠送");
  126. // $this->change_user_log66($invite_id,'gb',1,$zs_invite_gb,"levle_update_zs","邀请-".$new_user_name);
  127. // echo 123;return;
  128. //处理查看是否有待发放佣金
  129. // $zs_withdraw_quota
  130. Db::name("old_user_jbp")->where("id",$new_user_id)->inc("total_withdraw_quota",$zs_withdraw_quota)->save();//1.0jbp旧表
  131. Db::name("user")->where("uid",$new_user_id)->inc("total_withdraw_quota_old",$zs_withdraw_quota)->save();
  132. // $this->releaseTobeAmount($new_user_id,$zs_withdraw_quota);
  133. // $this->success("支付成功",['is_cash'=>0]);
  134. }
  135. Db::rollback();
  136. // $this->error("操作失败");
  137. }
  138. function change_user_log66($user_id,$type,$change_status,$money,$routine,$remark="",$is_admin=1,$appoint_money = 0)
  139. {
  140. $transition = [
  141. 'pv'=>1,
  142. "gb"=>2,
  143. "df"=>3,
  144. "vr"=>4,
  145. "bt"=>5,
  146. "withdraw_quota_old"=>6,
  147. "unsettled_pension"=>7,
  148. "amount_old"=>8
  149. ];
  150. $routineInfo = Db::name("old_routine_log_of_key")->where("key",$routine)->find();
  151. if(empty($routineInfo)) {
  152. return false;
  153. }
  154. $key_id = isset($routineInfo['id']) ? $routineInfo['id'] : 0;
  155. //再去查询变更前的 金额
  156. if($appoint_money > 0) {
  157. $alter_money = $appoint_money;
  158. }else{
  159. //再去查询变更前的 金额
  160. $alter_money = Db::name("user")->where('uid',$user_id)->value($type);
  161. }
  162. if($change_status == 1) {
  163. //新增前
  164. $alter_money = $alter_money-$money;
  165. }else if($change_status == 2){
  166. //减少前
  167. $alter_money = $alter_money + $money;
  168. }
  169. $inser_data = [];
  170. $inser_data['user_id'] = $user_id;
  171. $inser_data['type'] = $transition[$type];
  172. $inser_data['change_status'] = $change_status;
  173. $inser_data['money'] = $money;
  174. $inser_data['routine_log_of_key_id'] = $key_id;
  175. $inser_data['remark'] = $remark;
  176. $inser_data['is_admin'] = $is_admin;
  177. $inser_data['create_time'] = time();
  178. $inser_data['alter_money'] = isset($alter_money) ? $alter_money : 0;
  179. Db::name("old_user_log")->insert($inser_data);
  180. }
  181. public function lst2(){
  182. //die;
  183. // if($orderInfo['pay_type'] == 1) {
  184. //校验是否升级
  185. //$goods_of_info1 = $this->user_of_goods->where("order_id",$orderInfo['id'])->find();
  186. // if($goods_of_info1['is_update'] == 2) {
  187. // echo 123;
  188. $orderInfo=[
  189. 'num'=>1,
  190. 'gb_num'=>1,
  191. 'price'=>10620,
  192. 'id'=>852,//user_of_good的id
  193. ];
  194. $goods_of_info1 = Db::name("old_user_of_goods")->where("id", 852)->find();//用户的订单价格表
  195. return $this->member_update($orderInfo,$goods_of_info1,609);
  196. //}
  197. //}
  198. // var_dump($orderInfo);die;
  199. return;
  200. //测试结束 以下是联创逻辑
  201. return;
  202. $week_record = 7000;
  203. $originator_award = round(($week_record * 0.05),2);
  204. return;
  205. $list = Db::name("user")->where("originator_id_old",">",0)->where("status",1)->field("uid,originator_id_old")->select()->toArray();
  206. $sum_money = Db::name("old_user_lianc")->sum("number");
  207. $lianc_list = Db::name("old_user_lianc")->order("id desc")->field("id,number,title")->select()->toArray();
  208. $user_arr = [];
  209. $lianc_list_arr = [];
  210. foreach ($lianc_list as $key => $value) {
  211. # code...
  212. $lianc_list_arr[$value['id']] = $value;
  213. }
  214. foreach ($list as $key => $value) {
  215. # code...
  216. $user_arr[$value['originator_id_old']]['people'][] = $value['uid'];
  217. $user_arr[$value['originator_id_old']]['money'] = $lianc_list_arr[$value['originator_id_old']]['number'];
  218. $user_arr[$value['originator_id_old']]['title'] = $lianc_list_arr[$value['originator_id_old']]['title'];
  219. $user_arr[$value['originator_id_old']]['id'] = $lianc_list_arr[$value['originator_id_old']]['id'];
  220. }
  221. //处理计算权重 和平均分配的金额
  222. $total_num = 0;
  223. $count_num = 0;
  224. foreach ($user_arr as $key => $value) {
  225. # code...
  226. $total_num += round($value['money'] * count($value['people'])/1000,2);
  227. $count_num += count($value['people']);
  228. }
  229. foreach ($user_arr as $key => $value) {
  230. # code...
  231. $rate = round(( count($value['people']) * $value['money'])/$total_num,2)/1000;
  232. $user_arr[$key]['rate'] = $rate;
  233. $distribution_money = round($originator_award * $rate ,2);
  234. $user_arr[$key]['distribution_money'] = $distribution_money;
  235. $user_arr[$key]['people_award'] = round($distribution_money / count($value['people']),2);//可分配佣金
  236. }
  237. $count = 0;
  238. foreach ($user_arr as $key => $value) {
  239. $distribution_money = $value['distribution_money'];
  240. # code...
  241. foreach ($value['people'] as $k =>$v) {
  242. # code...
  243. $award = $value['people_award'];
  244. //var_dump("uid:".$v." amount:".$award);
  245. $res = Db::name("user")->where("uid",$v)->inc("total_amount_old",$award)->save();
  246. Db::name("user")->where("uid",$v)->inc("amount_old",$award)->save();//不用冻结金额和提现额度来限制佣金发放
  247. //$this->releaseTobeAmount($v,$award,$output);根据冻结金和提现额度来计算佣金的发放
  248. if($res) {
  249. $$count = $count +1;
  250. $this->change_user_log($v,'amount_old',1,$award,"relation_profits","联创分红入账"."-".$value['title']);
  251. //入账
  252. $week_data = [];
  253. $week_data['user_id'] = $v;
  254. $week_data['user_lianc_id'] = $value['id'];
  255. $week_data['money'] = $award;
  256. $week_data['remark'] = "联创分红入账主动执行";
  257. $week_data['all_record'] = $originator_award;
  258. $week_data['all_amount'] = $distribution_money;
  259. $week_data['create_time'] = time();
  260. Db::name("old_user_originator")->insert($week_data);
  261. }else {
  262. // ..
  263. }
  264. }
  265. }
  266. }
  267. //上周
  268. public function getWeekStartEnd()
  269. {
  270. $now = time();
  271. // 计算上周日 00:00 的时间戳
  272. $last_sunday_start = strtotime('last Sunday', $now);
  273. // 计算这周一 00:00 的时间戳
  274. $this_monday_start = strtotime('this Monday', $last_sunday_start);
  275. // 上周日 23:59:59 的时间戳,即这周一 00:00
  276. $last_sunday_end = $this_monday_start - 1;
  277. // 上周一 00:00 的时间戳,即上周日 24:00
  278. $last_monday_start = $this_monday_start - 604800;
  279. return [$last_monday_start, $last_sunday_end];
  280. }
  281. //本周
  282. // public function getWeekStartEnd()
  283. // {
  284. // $now = time();
  285. // // 计算本周一 00:00 的时间戳
  286. // $monday_start = strtotime('last Monday', $now);
  287. // if (date('w', $now) == 1) {
  288. // // 如果今天是周一,直接取今天的 00:00
  289. // $monday_start = strtotime('today', $now);
  290. // }
  291. // // 计算本周日 23:59:59 的时间戳
  292. // $sunday_end = strtotime('next Sunday', $now) + 86399;
  293. // return [$monday_start,$sunday_end];
  294. // }
  295. public function change_user_log($user_id,$type,$change_status,$money,$routine,$remark="",$is_admin=1,$appoint_money = 0)
  296. {
  297. $transition = [
  298. 'pv'=>1,
  299. "gb"=>2,
  300. "df"=>3,
  301. "vr"=>4,
  302. "bt"=>5,
  303. "withdraw_quota"=>6,
  304. "unsettled_pension"=>7,
  305. "amount_old"=>8
  306. ];
  307. $routineInfo = Db::name("old_routine_log_of_key")->where("key",$routine)->find();
  308. if(empty($routineInfo)) {
  309. return false;
  310. }
  311. $key_id = isset($routineInfo['id']) ? $routineInfo['id'] : 0;
  312. if($appoint_money > 0) {
  313. $alter_money = $appoint_money;
  314. }else{
  315. //再去查询变更前的 金额
  316. $alter_money = Db::name("user")->where('uid',$user_id)->value($type);
  317. }
  318. if($change_status == 1) {
  319. //新增前
  320. $alter_money = $alter_money-$money;
  321. }else if($change_status == 2){
  322. //减少前
  323. $alter_money = $alter_money + $money;
  324. }
  325. if($alter_money < 0) {
  326. $alter_money =0;
  327. }
  328. $inser_data = [];
  329. $inser_data['user_id'] = $user_id;
  330. $inser_data['type'] = $transition[$type];
  331. $inser_data['change_status'] = $change_status;
  332. $inser_data['money'] = $money;
  333. $inser_data['routine_log_of_key_id'] = $key_id;
  334. $inser_data['remark'] = $remark;
  335. $inser_data['is_admin'] = $is_admin;
  336. $inser_data['create_time'] = time();
  337. $inser_data['alter_money'] = isset($alter_money) ? $alter_money : 0;
  338. Db::name("old_user_log")->insert($inser_data);
  339. }
  340. /**
  341. * 释放待发放佣金
  342. */
  343. public function releaseTobeAmount($user_id,$amount,$output)
  344. {
  345. $userInfo = Db::name("user")->find($user_id);
  346. if(empty($userInfo)) {
  347. return false;
  348. }
  349. $withdraw_quota = empty($userInfo['withdraw_quota_old']) ? 0 : $userInfo['withdraw_quota_old'];
  350. $old_amount = empty($userInfo['tobe_amount_old']) ? 0 : $userInfo['tobe_amount_old'];
  351. Db::name("user")->where("uid",$user_id)->save(['tobe_amount_old'=>0]);
  352. $amount += $old_amount;
  353. $inc_amount = 0;
  354. $inc_tobe_amount = 0;
  355. $dec_withdraw_quota = 0;
  356. if(($amount - $withdraw_quota) > 0) {
  357. $diff_money = $amount - $withdraw_quota;
  358. $inc_amount = $withdraw_quota;
  359. $dec_withdraw_quota = $withdraw_quota;
  360. $inc_tobe_amount = $diff_money;
  361. }elseif(($amount - $withdraw_quota)==0){
  362. $inc_amount = $withdraw_quota;
  363. $dec_withdraw_quota = $withdraw_quota;
  364. }else {
  365. // <0的情况
  366. $diff_money = $withdraw_quota - $amount;
  367. $inc_amount = $amount;
  368. $dec_withdraw_quota = $amount;
  369. }
  370. if($inc_tobe_amount != 0 ) {
  371. $res = Db::name("user")->where("uid",$user_id)->inc("tobe_amount_old",$inc_tobe_amount)->fetchSql()->inc("amount",$inc_amount)->dec("withdraw_quota_old",$dec_withdraw_quota)->save();
  372. }else {
  373. $res = Db::name("user")->where("uid",$user_id)->inc("amount_old",$inc_amount)->fetchSql()->dec("withdraw_quota_old",$dec_withdraw_quota)->save();
  374. }
  375. //记录日志 提现额度消费
  376. if($dec_withdraw_quota > 0) {
  377. $this->change_user_log($user_id,'withdraw_quota',2,$dec_withdraw_quota,"conversion_tobe_amount","佣金额度兑换佣金");
  378. }
  379. }
  380. }