Taskorderlianc.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  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. public function lst2(){
  17. echo 1423;
  18. return;
  19. $week_record = 7000;
  20. $originator_award = round(($week_record * 0.05),2);
  21. return;
  22. $list = Db::name("user")->where("originator_id_old",">",0)->where("status",1)->field("uid,originator_id_old")->select()->toArray();
  23. $sum_money = Db::name("old_user_lianc")->sum("number");
  24. $lianc_list = Db::name("old_user_lianc")->order("id desc")->field("id,number,title")->select()->toArray();
  25. $user_arr = [];
  26. $lianc_list_arr = [];
  27. foreach ($lianc_list as $key => $value) {
  28. # code...
  29. $lianc_list_arr[$value['id']] = $value;
  30. }
  31. foreach ($list as $key => $value) {
  32. # code...
  33. $user_arr[$value['originator_id_old']]['people'][] = $value['uid'];
  34. $user_arr[$value['originator_id_old']]['money'] = $lianc_list_arr[$value['originator_id_old']]['number'];
  35. $user_arr[$value['originator_id_old']]['title'] = $lianc_list_arr[$value['originator_id_old']]['title'];
  36. $user_arr[$value['originator_id_old']]['id'] = $lianc_list_arr[$value['originator_id_old']]['id'];
  37. }
  38. //处理计算权重 和平均分配的金额
  39. $total_num = 0;
  40. $count_num = 0;
  41. foreach ($user_arr as $key => $value) {
  42. # code...
  43. $total_num += round($value['money'] * count($value['people'])/1000,2);
  44. $count_num += count($value['people']);
  45. }
  46. foreach ($user_arr as $key => $value) {
  47. # code...
  48. $rate = round(( count($value['people']) * $value['money'])/$total_num,2)/1000;
  49. $user_arr[$key]['rate'] = $rate;
  50. $distribution_money = round($originator_award * $rate ,2);
  51. $user_arr[$key]['distribution_money'] = $distribution_money;
  52. $user_arr[$key]['people_award'] = round($distribution_money / count($value['people']),2);//可分配佣金
  53. }
  54. $count = 0;
  55. foreach ($user_arr as $key => $value) {
  56. $distribution_money = $value['distribution_money'];
  57. # code...
  58. foreach ($value['people'] as $k =>$v) {
  59. # code...
  60. $award = $value['people_award'];
  61. //var_dump("uid:".$v." amount:".$award);
  62. $res = Db::name("user")->where("uid",$v)->inc("total_amount_old",$award)->save();
  63. Db::name("user")->where("uid",$v)->inc("amount_old",$award)->save();//不用冻结金额和提现额度来限制佣金发放
  64. //$this->releaseTobeAmount($v,$award,$output);根据冻结金和提现额度来计算佣金的发放
  65. if($res) {
  66. $$count = $count +1;
  67. $this->change_user_log($v,'amount_old',1,$award,"relation_profits","联创分红入账"."-".$value['title']);
  68. //入账
  69. $week_data = [];
  70. $week_data['user_id'] = $v;
  71. $week_data['user_lianc_id'] = $value['id'];
  72. $week_data['money'] = $award;
  73. $week_data['remark'] = "联创分红入账主动执行";
  74. $week_data['all_record'] = $originator_award;
  75. $week_data['all_amount'] = $distribution_money;
  76. $week_data['create_time'] = time();
  77. Db::name("old_user_originator")->insert($week_data);
  78. }else {
  79. // ..
  80. }
  81. }
  82. }
  83. }
  84. //上周
  85. public function getWeekStartEnd()
  86. {
  87. $now = time();
  88. // 计算上周日 00:00 的时间戳
  89. $last_sunday_start = strtotime('last Sunday', $now);
  90. // 计算这周一 00:00 的时间戳
  91. $this_monday_start = strtotime('this Monday', $last_sunday_start);
  92. // 上周日 23:59:59 的时间戳,即这周一 00:00
  93. $last_sunday_end = $this_monday_start - 1;
  94. // 上周一 00:00 的时间戳,即上周日 24:00
  95. $last_monday_start = $this_monday_start - 604800;
  96. return [$last_monday_start, $last_sunday_end];
  97. }
  98. //本周
  99. // public function getWeekStartEnd()
  100. // {
  101. // $now = time();
  102. // // 计算本周一 00:00 的时间戳
  103. // $monday_start = strtotime('last Monday', $now);
  104. // if (date('w', $now) == 1) {
  105. // // 如果今天是周一,直接取今天的 00:00
  106. // $monday_start = strtotime('today', $now);
  107. // }
  108. // // 计算本周日 23:59:59 的时间戳
  109. // $sunday_end = strtotime('next Sunday', $now) + 86399;
  110. // return [$monday_start,$sunday_end];
  111. // }
  112. public function change_user_log($user_id,$type,$change_status,$money,$routine,$remark="",$is_admin=1,$appoint_money = 0)
  113. {
  114. $transition = [
  115. 'pv'=>1,
  116. "gb"=>2,
  117. "df"=>3,
  118. "vr"=>4,
  119. "bt"=>5,
  120. "withdraw_quota"=>6,
  121. "unsettled_pension"=>7,
  122. "amount_old"=>8
  123. ];
  124. $routineInfo = Db::name("old_routine_log_of_key")->where("key",$routine)->find();
  125. if(empty($routineInfo)) {
  126. return false;
  127. }
  128. $key_id = isset($routineInfo['id']) ? $routineInfo['id'] : 0;
  129. if($appoint_money > 0) {
  130. $alter_money = $appoint_money;
  131. }else{
  132. //再去查询变更前的 金额
  133. $alter_money = Db::name("user")->where('uid',$user_id)->value($type);
  134. }
  135. if($change_status == 1) {
  136. //新增前
  137. $alter_money = $alter_money-$money;
  138. }else if($change_status == 2){
  139. //减少前
  140. $alter_money = $alter_money + $money;
  141. }
  142. if($alter_money < 0) {
  143. $alter_money =0;
  144. }
  145. $inser_data = [];
  146. $inser_data['user_id'] = $user_id;
  147. $inser_data['type'] = $transition[$type];
  148. $inser_data['change_status'] = $change_status;
  149. $inser_data['money'] = $money;
  150. $inser_data['routine_log_of_key_id'] = $key_id;
  151. $inser_data['remark'] = $remark;
  152. $inser_data['is_admin'] = $is_admin;
  153. $inser_data['create_time'] = time();
  154. $inser_data['alter_money'] = isset($alter_money) ? $alter_money : 0;
  155. Db::name("old_user_log")->insert($inser_data);
  156. }
  157. /**
  158. * 释放待发放佣金
  159. */
  160. public function releaseTobeAmount($user_id,$amount,$output)
  161. {
  162. $userInfo = Db::name("user")->find($user_id);
  163. if(empty($userInfo)) {
  164. return false;
  165. }
  166. $withdraw_quota = empty($userInfo['withdraw_quota_old']) ? 0 : $userInfo['withdraw_quota_old'];
  167. $old_amount = empty($userInfo['tobe_amount_old']) ? 0 : $userInfo['tobe_amount_old'];
  168. Db::name("user")->where("uid",$user_id)->save(['tobe_amount_old'=>0]);
  169. $amount += $old_amount;
  170. $inc_amount = 0;
  171. $inc_tobe_amount = 0;
  172. $dec_withdraw_quota = 0;
  173. if(($amount - $withdraw_quota) > 0) {
  174. $diff_money = $amount - $withdraw_quota;
  175. $inc_amount = $withdraw_quota;
  176. $dec_withdraw_quota = $withdraw_quota;
  177. $inc_tobe_amount = $diff_money;
  178. }elseif(($amount - $withdraw_quota)==0){
  179. $inc_amount = $withdraw_quota;
  180. $dec_withdraw_quota = $withdraw_quota;
  181. }else {
  182. // <0的情况
  183. $diff_money = $withdraw_quota - $amount;
  184. $inc_amount = $amount;
  185. $dec_withdraw_quota = $amount;
  186. }
  187. if($inc_tobe_amount != 0 ) {
  188. $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();
  189. }else {
  190. $res = Db::name("user")->where("uid",$user_id)->inc("amount_old",$inc_amount)->fetchSql()->dec("withdraw_quota_old",$dec_withdraw_quota)->save();
  191. }
  192. //记录日志 提现额度消费
  193. if($dec_withdraw_quota > 0) {
  194. $this->change_user_log($user_id,'withdraw_quota',2,$dec_withdraw_quota,"conversion_tobe_amount","佣金额度兑换佣金");
  195. }
  196. }
  197. }