Taskorderguquan.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  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\facade\Db;
  9. class Taskorderguquan
  10. {
  11. public function lst6()
  12. {
  13. $startTime = '2025-03-10';
  14. $endTime = '2025-03-30';
  15. // 查询测试人员账号信息
  16. //18973958920
  17. //15186694339
  18. //18833633835
  19. //19525470098
  20. //17756507016
  21. //18226705337
  22. $testAccount = ['18973958920', '15186694339', '18833633835', '19525470098', '17756507016', '18226705337'];
  23. $removeUserList = Db::name("user")
  24. ->whereIn('account', $testAccount)
  25. ->where("status", "<>", 0)
  26. ->where('is_del', '<>', 1)
  27. ->select()
  28. ->toArray();
  29. $removeUserIdList = array_column($removeUserList, 'uid');
  30. if (empty($startTime) || empty($endTime)) {
  31. $timeMap = $this->getTime('last_week');
  32. $startTime = $timeMap['startTime'] . ' 00:00:00';
  33. $endTime = $timeMap['endTime'] . ' 23:59:59';
  34. }
  35. // 定义分红金额
  36. $weekRecord = $this->getTeamPvByTime($startTime, $endTime, $removeUserIdList);
  37. // 分红金额 - 红包金额
  38. $redEnvelope = $this->getRedEnvelopeByTime($startTime, $endTime, $removeUserIdList);
  39. $weekRecord -= $redEnvelope;
  40. if ($weekRecord <= 0) {
  41. return json('无效分红金额');
  42. }
  43. // $stock_comm = round($weekRecord * 0.05 ,2);
  44. $stock_comm = floor(($weekRecord * 0.05) * 100) / 100;
  45. //获取股权分红的人
  46. $GetAllUserPackNum = db::name("old_user_stock")->sum("pack");//计算所有用户的份数总和
  47. $stockuserdatas = db::name("old_user_stock")->select();//获取所有用户
  48. $salesArr = [];
  49. if (count($stockuserdatas) > 0) {
  50. // $one_pack_comm_data = round($stock_comm / $GetAllUserPackNum,2);//获取每份的单佣金
  51. $one_pack_comm_data = floor(($stock_comm / $GetAllUserPackNum) * 100) / 100;
  52. foreach ($stockuserdatas as &$v) {
  53. $salesArr[] = [
  54. 'stock_comm' => $stock_comm,
  55. 'GetAllUserPackNum' => $GetAllUserPackNum,
  56. 'uid' => $v['user_id'],
  57. 'pack' => $v['pack'],
  58. 'one_pack_comm_data' => $one_pack_comm_data,
  59. 'getcomm' => floor(($v['pack'] * $one_pack_comm_data) * 100) / 100
  60. ];
  61. $v['getcomm'] = floor(($v['pack'] * $one_pack_comm_data) * 100) / 100;
  62. $v['allgetcomm'] = $v['allgetcomm'] + $v['getcomm'];
  63. $v['update_time'] = time();
  64. $yj_90 = $v['getcomm'] * 0.9;
  65. $fg_10 = $v['getcomm'] * 0.1;
  66. // // 更新 user_stock 表中的记录
  67. $res = db::name("old_user_stock")->where("id", $v['id'])->update([
  68. 'getcomm' => $v['getcomm'],
  69. 'allgetcomm' => $v['allgetcomm'],
  70. 'update_time' => $v['update_time']
  71. ]);
  72. Db::name("user")->where("uid", $v['user_id'])->inc("brokerage_price", $yj_90)->save();
  73. $res1 = Db::name("user")->where("uid", $v['user_id'])->inc("total_amount_old", $yj_90)->save();
  74. $res2 = Db::name("user")->where("uid", $v['user_id'])->inc("amount_old", $yj_90)->save();
  75. $res3 = Db::name("user")->where("uid", $v['user_id'])->inc("fugou", $fg_10)->save();
  76. $res = true;
  77. if ($res) {
  78. $das = $this->change_user_log($v['user_id'], 'amount_old', 1, $yj_90, "member_award_stock", "股权分红入账" . "-" . $v['pack']);//释放佣金
  79. //入账星级分红记录表
  80. $week_data = [];
  81. $week_data['user_id'] = $v['user_id'];
  82. $week_data['user_star_id'] = 0;
  83. $week_data['award_num'] = 0;
  84. $week_data['award_num_sm'] = 0;
  85. $week_data['remark'] = "股权分红主动执行" . $yj_90;
  86. $week_data['week_record'] = $weekRecord;
  87. $week_data['all_amount'] = $stock_comm;
  88. $week_data['radio'] = 2;
  89. $week_data['owner_bill'] = 0; //总流水金额
  90. $week_data['my_bill'] = 0; //我的流水
  91. $week_data['create_time'] = time();
  92. Db::name("old_user_weekaward")->insert($week_data);
  93. $userdatassss = db::name("old_user_jbp")->where("id", $v['user_id'])->find();
  94. $datas_log = [
  95. 'note' => "名称:" . $userdatassss['nick_name'] . " 用户:" . $v['user_id'] . " 新增股权佣金:" . $yj_90,
  96. 'create_time' => date('Y-m-d H:i:s')
  97. ];
  98. $con_data = Db::name('test_log')->insert($datas_log); //数据存到2.0数据表中
  99. $this->bill_user_log111111($v['user_id'], "股权分佣", $yj_90, "股权明细入账", 13);//股权分佣明细2.0系统
  100. $this->fugou_user_log($v['user_id'], $fg_10, 16, 1, 1);//复购金明细入账
  101. }
  102. }
  103. }
  104. return json($salesArr);
  105. //股权分红 end
  106. }
  107. //添加复购金
  108. public function fugou_user_log($uid, $num, $order_id, $type_inc_des, $status = -1)
  109. {
  110. $fugou_data = Db::name('user')->where("uid", $uid)->find();
  111. $bill = [
  112. 'uid' => $uid,
  113. 'number' => $num,//数量
  114. 'status' => $status,//复购金状态1-有效 0-失效 -1待确认
  115. 'mark' => "复购金",//备注
  116. 'desc' => "10%作为复购金",//描述
  117. 'order_id' => $order_id,//订单id
  118. 'surplus' => 0,//剩余
  119. 'order_type' => 11,//关联订单ID
  120. 'type' => $type_inc_des,//复购金类型 :1赠送,2消耗
  121. 'settlement_time' => date('Y-m-d H:i:s'),//添加时间,
  122. 'addtime' => time(),
  123. ];
  124. Db::name('user_sign_fugou')->insert($bill);
  125. }
  126. //添加平台分佣2.0系统收益明细日志(养老金金额)
  127. public function bill_user_log111111($uid, $name, $num, $mark, $comm)
  128. {
  129. $con_data = Db::name('user')->where("uid", $uid)->find();
  130. //如果是会员专区就即刻到账
  131. // Db::name('user')->where("uid",$con_data['uid'])->update(['brokerage_price'=> $con_data['brokerage_price'] + $num]);
  132. $bill = [
  133. 'uid' => $uid,
  134. 'link_id' => 0,//关联订单id
  135. 'pm' => 1,//0:支出,1:获得
  136. 'title' => $name,//账单标题
  137. 'category' => 'now_money',//明细种类
  138. 'type' => 'commission',//明细类型
  139. 'number' => $num,//明细数字
  140. 'balance' => 0,//剩余
  141. 'mark' => $mark,//备注
  142. 'create_time' => date('Y-m-d H:i:s'),//添加时间
  143. 'status' => 1,//0待确定,1有效,-1无效
  144. 'commission_type' => $comm,//佣金类型 1代理费 2 消费佣金 3直推奖√ 4辖区佣金\r\n5 养老金√ 6 广告费
  145. //7 跨店奖励√ 8平台奖励 9渠道商\r\n10 推荐创客收益√ 11分红奖金√ 12代理区域收益√ 13消费循环佣金
  146. //14-推荐代理收益√ 15邀请小区团长升级√ 16大v分享奖√ 17创客合伙人√ 18积分奖励√ 19创客补贴√’
  147. 'order_sn' => 0,//订单号
  148. 'tripartite' => 0,//
  149. 'type_shop' => 0,//0平台1多多进宝2唯品会3苏宁易购4网易考拉5淘宝客6京东联盟7饿了么8线上
  150. 'mer_id' => 0,//商户id
  151. 'source' => 0,//1线下 0线上
  152. 'order_type' => 1,//1自营 2 第三方 订单类型
  153. 'is_red_brokerage' => 0,//1红积分对冲佣金 0正常佣金
  154. 'gzc' => 3,//养老金是否已进入公证处log表0:未进入。1:已进入
  155. 'take_time' => '',//结算时间
  156. 'district_id' => '',//
  157. 'street_id' => '',//
  158. 'month' => '',//月份
  159. ];
  160. Db::name('user_bill')->insert($bill);
  161. }
  162. //发放佣金 示例: $this->change_user_log($v,'amount',1,$all_award,"member_award","星级分红入账"."-".$value['title']);//释放佣金
  163. function change_user_log($user_id, $type, $change_status, $money, $routine, $remark = "", $is_admin = 1, $appoint_money = 0)
  164. {
  165. $transition = [
  166. 'pv' => 1,
  167. "gb" => 2,
  168. "df" => 3,
  169. "vr" => 4,
  170. "bt" => 5,
  171. "withdraw_quota_old" => 6,//提现
  172. "unsettled_pension" => 7,
  173. "amount_old" => 8//发放佣金
  174. ];
  175. $routineInfo = Db::name("old_routine_log_of_key")->where("key", $routine)->find();
  176. if (empty($routineInfo)) {
  177. return false;
  178. }
  179. $key_id = isset($routineInfo['id']) ? $routineInfo['id'] : 0;
  180. if ($appoint_money > 0) {
  181. $alter_money = $appoint_money;
  182. } else {
  183. //再去查询变更前的 金额
  184. $alter_money = Db::name("user")->where('uid', $user_id)->value($type);
  185. }
  186. if ($change_status == 1) {
  187. //新增前
  188. $alter_money = $alter_money - $money;
  189. } else if ($change_status == 2) {
  190. //减少前
  191. $alter_money = $alter_money + $money;
  192. }
  193. if ($alter_money < 0) {
  194. $alter_money = 0;
  195. }
  196. $inser_data = [];
  197. $inser_data['user_id'] = $user_id;
  198. $inser_data['type'] = $transition[$type];
  199. $inser_data['change_status'] = $change_status;
  200. $inser_data['money'] = $money;
  201. $inser_data['routine_log_of_key_id'] = $key_id;
  202. $inser_data['remark'] = $remark;
  203. $inser_data['is_admin'] = $is_admin;
  204. $inser_data['create_time'] = time();
  205. $inser_data['alter_money'] = isset($alter_money) ? $alter_money : 0;
  206. Db::name("old_user_log")->insert($inser_data);
  207. }
  208. public function getTime($timePeriod)
  209. {
  210. // 定义时间区间
  211. $now = time();
  212. $startTime = '';
  213. $endTime = '';
  214. if ($timePeriod == 'last_week') {
  215. // 上周的时间区间
  216. $startTime = date('Y-m-d', strtotime('monday last week', $now)); // 上周星期一的开始时间
  217. $endTime = date('Y-m-d', strtotime('sunday last week', $now)); // 上周星期日的结束时间
  218. } elseif ($timePeriod == 'this_week') {
  219. // 这周的时间区间
  220. $startTime = date('Y-m-d', strtotime('monday this week', $now)); // 这周星期一的开始时间
  221. $endTime = date('Y-m-d', strtotime('sunday this week', $now)); // 这周星期日的结束时间
  222. }
  223. // return ['startTime' => '2025-03-10', 'endTime' => '2025-03-23'];
  224. return ['startTime' => $startTime, 'endTime' => $endTime];
  225. }
  226. public function getTeamPvByTime($startTime, $endTime, $removeUserIdList = [])
  227. {
  228. // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
  229. $orders = Db::name("store_order")
  230. ->where('mer_id', 496)
  231. ->whereNotIn('uid', $removeUserIdList)
  232. ->whereIn('status', [0, 1, 2, 3])
  233. ->whereIn("total_price", [1180, 11800, 10620, 2360, 9440])
  234. ->whereBetween("pay_time", [$startTime, $endTime])
  235. ->whereNotNull("pay_time") // 排除 pay_time 为 NULL 的订单
  236. ->select();
  237. // 计算总业绩
  238. $totalPv = 0;
  239. foreach ($orders as $order) {
  240. switch ($order['total_price']) {
  241. case 1180:
  242. $totalPv += 700;
  243. break;
  244. case 11800:
  245. $totalPv += 7000;
  246. break;
  247. case 10620:
  248. $totalPv += 6300;
  249. break;
  250. case 2360:
  251. $totalPv += 1400;
  252. break;
  253. case 9440:
  254. $totalPv += 5600;
  255. break;
  256. }
  257. }
  258. return $totalPv;
  259. }
  260. public function getRedEnvelopeByTime($startTime, $endTime, $removeUserIdList = [])
  261. {
  262. // 查询指定时间区间内的所有订单,并排除 pay_time 为 NULL 的订单
  263. $redEnvelopeList = Db::name("user_sign_hongbao")
  264. ->whereNotIn('uid', $removeUserIdList)
  265. ->where('status', 1)
  266. ->whereBetween("settlement_time", [$startTime, $endTime])
  267. ->select()
  268. ->toArray();
  269. return floor(array_sum(array_column($redEnvelopeList, 'number')) * 100) / 100;
  270. }
  271. }