startMonth = date('Y-m-01 00:00:00', strtotime('-1 month')); // $this->endMonth = date("Y-m-d 23:59:59", strtotime(-date('d') . 'day')); // $this->month = date('Y-m', strtotime('-1 month')); $this->startMonth = date('Y-m-01 00:00:00'); $this->endMonth = date("Y-m-d 23:59:59"); $this->month = date('Y-m'); } /** * 奖金 */ public function bonus() { //创客补贴 $this->real_subsidy_money(); // 跨店奖励 $this->stride_shop_money(); //推荐创客收益 $this->invite_shop_money(); //大V经理分享奖 $this->big_vip_money(); //大V升级奖 $this->big_vip_up_money(); echo '执行成功'; } public function stride_shop_money() { $StoreOrderRepository = app()->make(StoreOrderRepository::class); $sql = "select stride_shop_mer_id,sum(stride_shop_money) stride_shop_money from rrx_store_order o left join rrx_store_order_extend od on od.order_id=o.order_id where o.paid=1 and o.is_settlement=1 and settlement_time between '$this->startMonth' and '$this->endMonth' and od.stride_shop_mer_id>0 and od.stride_shop_money>0 group by od.stride_shop_mer_id"; $mer_bonus_list = Db::query($sql); Db::name('log')->insert(['data' => "跨店奖励 mer_bonus_list:" . json_encode($mer_bonus_list)]); foreach ($mer_bonus_list as $mer_bonus) { $mer_id = $mer_bonus['stride_shop_mer_id']; $money = $mer_bonus['stride_shop_money']; if ($money < 0.01) { Db::name('log')->insert(['data' => "跨店奖励:mer_id:{$mer_id} 跨店奖励低于0.01无法入库 特此记录!"]); continue; } $merchant = Db::name('merchant')->where('mer_id', $mer_id)->find(); $mark = "跨店奖励" . $money; $title = "跨店奖励({$this->month}月)"; $commission_type = 7; $StoreOrderRepository->add_bill_gongfu($title, $money, $merchant['uid'] ?? 0, $mark, $commission_type, null, 0, $mer_id, 0, 1, 8, 'commission', $this->month, true); } } public function invite_shop_money() { $StoreOrderRepository = app()->make(StoreOrderRepository::class); $sql = "select od.share_uid,sum(invite_shop_money) invite_shop_money from rrx_store_order o left join rrx_store_order_extend od on od.order_id=o.order_id where o.paid=1 and o.is_settlement=1 and settlement_time between '$this->startMonth' and '$this->endMonth' and od.share_uid>0 and od.invite_shop_money>0 group by od.share_uid"; $user_bonus_list = Db::query($sql); Db::name('log')->insert(['data' => "推荐创客奖励 user_bonus_list:" . json_encode($user_bonus_list)]); foreach ($user_bonus_list as $user_bonus) { $bonus_uid = $user_bonus['share_shop_uid']; $money = $user_bonus['invite_shop_money']; if ($money < 0.01) { Db::name('log')->insert(['data' => "推荐创客:bonus_uid:{$bonus_uid} 推荐创客低于0.01无法入库 特此记录!"]); continue; } $mark = "推荐创客收益" . $money; $title = "推荐创客收益({$this->month}月)"; $commission_type = 10; $StoreOrderRepository->add_bill_gongfu($title, $money, $bonus_uid, $mark, $commission_type, null, 0, $mer_id, 0, 1, 8, 'commission', $this->month); } } public function big_vip_money() { $StoreOrderRepository = app()->make(StoreOrderRepository::class); $sql = "select od.share_uid,sum(big_vip_money) big_vip_money from rrx_store_order o left join rrx_store_order_extend od on od.order_id=o.order_id where o.paid=1 and o.is_settlement=1 and settlement_time between '$this->startMonth' and '$this->endMonth' and od.share_uid>0 and od.big_vip_money>0 group by od.share_uid"; $user_bonus_list = Db::query($sql); Db::name('log')->insert(['data' => "大v奖励 user_bonus_list:" . json_encode($user_bonus_list)]); foreach ($user_bonus_list as $user_bonus) { $bonus_uid = $user_bonus['share_uid']; $money = $user_bonus['big_vip_money']; if ($money < 0.01) { Db::name('log')->insert(['data' => "大v分享奖:bonus_uid:{$bonus_uid} 大v分享奖低于0.01无法入库 特此记录!"]); continue; } $mark = "大V经理分享奖" . $money; $title = "大V经理分享奖({$this->month})"; $commission_type = 16; $StoreOrderRepository->add_bill_gongfu($title, $money, $bonus_uid, $mark, $commission_type, null, 0, $mer_id, 0, 1, 8, 'commission', $this->month); } } public function real_subsidy_money() { $StoreOrderRepository = app()->make(StoreOrderRepository::class); $sql = "select o.mer_id mer_id,sum(real_subsidy_money) real_subsidy_money from rrx_store_order o left join rrx_store_order_extend od on od.order_id=o.order_id where o.paid=1 and o.is_settlement=1 and settlement_time between '$this->startMonth' and '$this->endMonth' and od.real_subsidy_money>0 group by o.mer_id"; $mer_bonus_list = Db::query($sql); Db::name('log')->insert(['data' => "创客补贴 mer_bonus_list:" . json_encode($mer_bonus_list)]); foreach ($mer_bonus_list as $mer_bonus) { $mer_id = $mer_bonus['mer_id']; $money = $mer_bonus['real_subsidy_money']; if ($money < 0.01) { Db::name('log')->insert(['data' => "创客补贴:mer_id:{$mer_id} 创客补贴低于0.01无法入库 特此记录!"]); continue; } $merchant = Db::name('merchant')->where('mer_id', $mer_id)->find(); $mark = "创客补贴" . $money; $title = "创客补贴({$this->month}月)"; $commission_type = 19; $StoreOrderRepository->add_bill_gongfu($title, $money, $merchant['uid'] ?? 0, $mark, $commission_type, null, 0, $mer_id, 0, 1, 8, 'commission', $this->month, true); } } /** * 大V升级奖 * 1. 查询大V经理列表 * 2. 查询团队列表 * 3. 查询团队这个月的总流水的百分之一分给大V经理 * @return void */ public function big_vip_up_money() { $StoreOrderRepository = app()->make(StoreOrderRepository::class); $user_list = Db::name("user")->field('uid')->where("user_group", 3)->select()->toArray(); foreach ($user_list as $user) { $mer_id = 0; $user_id = $user['uid']; $sql = "select getUserSpreadId($user_id) as uids"; $spread_user_list = Db::query($sql); $spread_user_list = trim($spread_user_list[0]['uids'],'$,'); //查询可以分到的钱 $sql = "select sum(big_vip_up_money) big_vip_up_money from rrx_store_order o left join rrx_store_order_extend od on od.order_id=o.order_id where o.paid=1 and o.is_settlement=1 and settlement_time between '$this->startMonth' and '$this->endMonth' and o.uid in ($spread_user_list)"; $big_vip_up = Db::query($sql)[0]; $money = $big_vip_up['big_vip_up_money'] ?? 0; Db::name('log')->insert(['data' => "大V升级奖 big_vip_up_money {$user_id}:{$money}"]); if ($money < 0.01) { Db::name('log')->insert(['data' => "大v分享奖:big_vip_up_money:{$money} 大v分享奖低于0.01无法入库 特此记录!"]); continue; } $mark = "大V升级奖" . $money; $title = "大V升级奖({$this->month}月)"; $commission_type = 10; $StoreOrderRepository->add_bill_gongfu($title, $money, $user_id, $mark, $commission_type, null, 0, $mer_id, 0, 1, 8, 'commission', $this->month); } } /** * 用户升级 * @throws DbException */ public function member_up() { $uid_list = Db::name('store_order') ->where('mer_id', systemConfig('mer_365')) ->where('paid', 1) ->whereIn('status', [0, 1, 2, 3]) ->group('uid') ->column('uid'); Log::info('升级:' . json_encode($uid_list)); foreach ($uid_list as $uid) { $pay_price = Db::name('store_order') ->where('mer_id', systemConfig('mer_365')) ->where('uid', $uid) ->where('paid', 1) ->where('is_settlement', 1) ->whereIn('status', [0, 1, 2, 3]) ->sum('pay_price'); if ($pay_price >= 365) { // 有没有直推20个经理 $invite_count = Db::name('user')->where('spread_uid', $uid)->field('uid,user_group')->where('user_group', 2)->count(); print_r("uid:{$uid}," . Db::name('user')->where('uid', $uid)->value('phone') . "邀请365经理人数{$invite_count}
"); if ($invite_count >= 20) { $res = Db::name('user')->where('uid', $uid)->whereNotIn('user_group', [4, 5, 6])->update([ 'user_group' => 3 ]); if ($res) var_dump("uid:{$uid},升级大V经理"); } else { $res = Db::name('user')->where('uid', $uid)->whereNotIn('user_group', [3, 4, 5, 6])->update([ 'user_group' => 2 ]); if ($res) var_dump("uid:{$uid},升级365会员"); } } } } /** * 创客合伙人收益 */ private function partner_award() { //1. 被创客设置成创客合伙人,获得该项收益 //已结算订单金额的 //2% //1. 按月统计并结算 //2. 计算公式: //所属创客店补贴*2%/创客合伙人总数 // 推荐创客收益设置 $commission_rate = systemConfig('commission_rate'); Db::name('log')->insert(['data' => 'commission_rate:' . json_encode($commission_rate)]); $rate = $commission_rate['chuangkehehuoren_rate']; // 查询全部订单 $sql = "select mer_id,sum(pay_price) pay_price,sum(total_price) total_price from rrx_store_order where paid=1 and status in (2,3) and is_settlement=1 and settlement_time between '$this->startMonth' and '$this->endMonth' group by mer_id"; $mer_order_list = Db::query($sql); Db::name('log')->insert(['data' => "创客合伙人收益 user_order_list:" . json_encode($mer_order_list)]); $StoreOrderRepository = app()->make(StoreOrderRepository::class); $mer_out_list = []; foreach ($mer_order_list as $mer_order) { $mer_id = $mer_order['mer_id']; $hehuo_user_list = Db::name('user')->field('uid')->where('mer_id', $mer_id)->where('is_shop_partner', 1)->select()->toArray(); $money = decimal2($mer_order['total_price'] * $rate / 100); foreach ($hehuo_user_list as $hehuo_user) { $user_money = decimal2($money / count($hehuo_user_list)); Db::name('log')->insert(['data' => "创客补贴:uid:{$hehuo_user['uid']} 创客合伙人人数:" . count($hehuo_user_list) . " 创客补贴比例{$rate}% 创客店铺订单流水:{$mer_order['total_price']} 获取创客推荐收益:{$money}!"]); if ($money == 0) { Db::name('log')->insert(['data' => "创客补贴:uid:{$hehuo_user['uid']} 创客补贴低于0.01无法入库 特此记录!"]); continue; } $mark = "创客合伙人收益" . $user_money; $title = "创客合伙人收益({$this->month}月)"; $commission_type = 17; $StoreOrderRepository->add_bill_gongfu($title, $money, $hehuo_user['uid'], $mark, $commission_type, null, 0, $mer_id, 0, 1, 8, 'commission', $this->month); } $money = decimal2($mer_order['total_price'] * $rate / 100); $mer_out_list[] = [ $mer_order['mer_id'] => $money ]; } Db::name('log')->insert(['data' => '跨店奖励 商户支出:' . json_encode($mer_out_list)]); return $mer_out_list; } /** * 代理区域收益 */ public function area_manage_details() { //1. 代理区域内已结算订单总额的百分 //比; //2. 按照收货地址统计; //3. 奖励对象:省代、区县代; //区县代 5% //省代 2% //1. 按月结算:每月 1 号 0 点 //统计上月已结算的订单金额 //并对应发放佣金 //2. 计算公式: //(1)无运费:收货地为该区域的已结算订单金额*对应比例 //(2)有运费:(收货地为该区域的已结算订单金额-运费)*对应比例 set_time_limit(0); ini_set('memory_limit', '-1'); $commission_rate = systemConfig('commission_rate'); Db::name('log')->insert(['data' => '代理区域收益 commission_rate:' . json_encode($commission_rate)]); $area_agency_rate = $commission_rate['area_agency_rate'] ?? 0; $province_agency_rate = $commission_rate['province_agency_rate'] ?? 0; $bonus_list = []; $bonus_user_list = Db::name('user')->field('uid,user_group,manage_address,spread_uid')->whereIn('user_group', [5, 6])->select()->toArray(); $StoreOrderRepository = app()->make(StoreOrderRepository::class); foreach ($bonus_user_list as $bonus_user) { $manage_address = $bonus_user['manage_address']; if (empty($manage_address)) continue; $sql = "select sum(pay_price) pay_price,sum(total_price) total_price from rrx_store_order where paid=1 and status in (2,3) and is_settlement=1 and settlement_time between '$this->startMonth' and '$this->endMonth' and user_address_ids like '$manage_address%'"; $total_price = Db::query($sql)[0]['total_price'] ?? 0; $rate = $bonus_user['user_group'] == 6 ? $province_agency_rate : $area_agency_rate; $money = decimal2($total_price * $rate / 100); Db::name('log')->insert(['data' => "代理区域收益:uid:{$bonus_user['uid']} 代理区域收益比例{$rate}% 流水:{$total_price} 收益:{$money} sql:" . $sql]); $mark = "代理区域收益" . $money; $title = "代理区域收益({$this->month}月)"; $commission_type = 12; $StoreOrderRepository->add_bill_gongfu($title, $money, $bonus_user['uid'], $mark, $commission_type, null, 0, 0, 0, 1, 8, 'commission', $this->month); $bonus_list[] = [ 'uid' => $bonus_user['uid'], 'money' => $money, 'spread_uid' => $bonus_user['spread_uid'], ]; } $this->invite_agency_award($bonus_list); echo '执行成功'; } /** * 推荐代理收益 * @param $bonus_list */ private function invite_agency_award($bonus_list) { // 1. 推荐的代理收益的百分比 //2. 奖励对象:所有用户 //1. 按月结算:每个月 1 号 0点统计上月的代理收益并对应发放佣金 //2. 计算公式: //推荐代理总收益*推荐代理收益百分比 $StoreOrderRepository = app()->make(StoreOrderRepository::class); $this->month = date('Y-m', strtotime('-1 month')); $commission_rate = systemConfig('commission_rate'); $rate = $commission_rate['tuijiandaili_rate'] ?? 0; foreach ($bonus_list as $bonus) { $money = decimal2($bonus['money'] * $rate / 100); $mark = "推荐代理收益" . $money; $title = "推荐代理收益({$this->month}月)"; $commission_type = 15; $StoreOrderRepository->add_bill_gongfu($title, $money, $bonus['spread_uid'], $mark, $commission_type, null, 0, 0, 0, 1, 8, 'commission', $this->month, $this->month); } } /** * 生成商品图片缓存(最好用命令行执行) * @return \think\response\Json * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException */ public function make_product_share_cache() { set_time_limit(0); ini_set('memory_limit', '-1'); $redis = Cache::store('redis')->handler(); $key = 'make_product_share_cache'; // $redis->del($key); // if (!$redis->setnx($key, 1)) // return json(['code' => 400, 'msg' => '现在有正在执行的任务' ]); $redis->expire($key, 5 * 60); $product_share_ids = Db::name('product_share') // ->where('`url` is not null') ->group('product_id') ->column('product_id'); $list = Db::name('store_product') ->whereNotIn('product_id', $product_share_ids) ->where('is_show', 1) ->limit(3) ->order('create_time desc') ->select() ->toArray(); var_dump($list); $header = [ 'X-Token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ0ZXN0LmJqdGRiYS5jb20iLCJhdWQiOiJ0ZXN0LmJqdGRiYS5jb20iLCJpYXQiOjE2OTI0MjQ4MTEsIm5iZiI6MTY5MjQyNDgxMSwiZXhwIjoxNzAzMjI0ODExLCJqdGkiOls5NzIwLCJ1c2VyIl19.YtYf1ssMTz6fOO2rZVX-jb48L7AqXSKezQcbTHR3sCk' ]; foreach ($list as $store_product) { $res1 = Common::sendCurl("http://127.0.0.1:8324/api/product_share?pid={$store_product['product_id']}&type=1", null, 'get', $header); $res2 = Common::sendCurl("http://127.0.0.1:8324/api/product_share?pid={$store_product['product_id']}&type=2", null, 'get', $header); var_dump($res1, $res2); } $redis->del($key); return json(['code' => 200, 'msg' => '生成商品分享缓存定时任务执行成功']); } /** * 梳理每个人的公排人数 * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function tease_user_count() { $list = Db::name('user')->where('is_del', 0)->select()->toArray(); foreach ($list as $item) { $level_number = Db::name('user')->where('level_id', $item['uid'])->count(); $user_count = Db::name('user_count')->where('uid', $item['uid'])->find(); if ($level_number >= 5) { $res = Db::name('user_count')->where('uid', $item['uid'])->delete(); if ($res) echo "{$item['uid']}公排人数已删除\r\n"; continue; } if ($user_count) { if ($level_number == $user_count['level_number']) continue; Db::name('user_count')->where('uid', $item['uid'])->update([ 'level_number' => $level_number ]); } else { Db::name('user_count')->insert([ 'uid' => $item['uid'], 'level_number' => 0 ]); $user_count['level_number'] = 0; } echo "{$item['uid']}公排人数从{$user_count['level_number']}调整到{$level_number}人\r\n"; Log::info("{$item['uid']}公排人数从{$user_count['level_number']}调整到{$level_number}人\r\n"); } return json(['code' => 200, 'msg' => '生成商品分享缓存定时任务执行成功']); } /** * 下架微唯宝已下架的商品 * @return mixed * @throws \think\db\exception\DbException */ public function downGongProduct() { $start = input('start'); $where = [ 'is_used' => 1, 'mer_status' => 1, // 'type' => 5, // 'is_show' => 1, 'is_hide' => 0, // 'is_del' => 0 ]; if (!$start) { $product_data_count = Db::name('store_product') ->where($where) ->where("spu_id != '' or spu_id is not null") ->count(); $start = mt_rand(0, $product_data_count); } $product_data = Db::name('store_product') ->where($where) ->where("spu_id != '' or spu_id is not null") ->where('product_id', '>', $start) ->order('product_id asc') ->limit(0, 50) ->select() ->toArray(); foreach ($product_data as $item) { $spuIds = $item['spu_id']; $goods_status = GongApiRequest::goods_status($spuIds); $status = $goods_status[0]['status'] ?? 1; $goods_info = GongApiRequest::get_goods_info($spuIds); if ($status == 0 || (isset($goods_info['error_msg']) && $goods_info['error_msg'] == '没有查询到商品信息')) { Db::startTrans(); try { // 删除选品库对应的数据 Db::name('douhuomall')->whereIn('spu_id', $spuIds)->update([ 'status' => 9, 'update_time' => date('Y-m-d H:i:s') ]); // 删除商品管理对应的数据 Db::name('store_product')->whereIn('spu_id', $spuIds)->update([ 'is_del' => 1, 'is_show' => 0 ]); Db::commit(); } catch (Exception $e) { Db::rollback(); Log::channel("gong")->error('供应链取消商品失败:' . $e->getMessage()); return app('json')->fail($e->getMessage()); } } else if ($status == 1 || !isset($goods_info['error_msg'])) { Db::startTrans(); try { // 选品库对应的数据 Db::name('douhuomall')->whereIn('spu_id', $spuIds)->update([ 'status' => 1, 'update_time' => date('Y-m-d H:i:s') ]); // 商品管理对应的数据 Db::name('store_product')->whereIn('spu_id', $spuIds)->update([ 'is_del' => 0, 'is_show' => 1 ]); Db::commit(); } catch (Exception $e) { Db::rollback(); Log::channel("gong")->error('供应链取消商品失败:' . $e->getMessage()); return app('json')->fail($e->getMessage()); } } } return app('json')->success('操作成功'); } //定时任务写日账单,月账单 public function cron($day,$mer_id=496) { // $day=date('Y-m-d', strtotime('-1 days')); // $enterprise_bill_item=[]; // $order= $order_query->select(); // foreach ($order as $v) { // $arr = []; // $arr['mer_id'] = $mer_id; // $arr['transaction_time'] = $v['pay_time']; // $arr['money'] = $v['pay_price']; // $arr['uid'] = $v['uid']; // $arr['order_sn'] = $v['order_sn']; // $arr['type'] = 1; // $enterprise_bill_item[] = $arr; // } // if ($enterprise_bill_item) { // Db::name('enterprise_bill_item')->insertAll($enterprise_bill_item); // } Db::name('enterprise_day_bill')->where('mer_id', $mer_id)->where('day', $day)->delete(); $day_flow_query = Db::name('enterprise_platform_income_detail') ->where('mer_id', $mer_id) ->when($mer_id, function ($query) use ($mer_id) { $query->where('deal_type', -1);//没有流水 }, function ($query) use ($mer_id) { $query->whereIn('deal_type', [3]); }) ->where('deal_type', 4) ->where('pm', 1); $day_flow_query_month = clone $day_flow_query; // 日订单流水 $day_flow = $day_flow_query->where("DATE(deal_time) = '" . $day . "'")->sum('money'); $accounting_query = Db::name('enterprise_platform_income_detail') ->where('mer_id', $mer_id) ->when($mer_id, function ($query) use ($mer_id) { $query->where('deal_type', 1); }, function ($query) use ($mer_id) { $query->whereIn('deal_type', [6,7]); }) ->where('pm', 1); $accounting_query_month = clone $accounting_query; // 入账金额 $day_accounting = $accounting_query->where("DATE(deal_time) = '" . $day . "'")->sum('money'); $expenditure_query = Db::name('enterprise_platform_income_detail') ->when($mer_id, function ($query) use ($mer_id) { $query->where('mer_id', $mer_id) ->where('deal_type', -1);//没有流水 }, function ($query) use ($mer_id) { $query->whereIn('deal_type', [4,5]); }); $expenditure_query_month = clone $expenditure_query; // 日支出总额 $day_expenditure = 0; if($mer_id==0){ $day_expenditure = $expenditure_query->where("DATE(deal_time) = '" . $day . "'") ->whereIn('deal_type', [4,5]) ->where('mer_id',0) ->sum('money'); } $insert = []; $insert['mer_id'] = $mer_id; $insert['day'] = $day; $insert['flow'] = $day_flow; $insert['expenditure'] = $day_expenditure; $insert['accounting'] = $day_accounting; $previousDate = date('Y-m-d', strtotime($day . ' -1 day')); $balance_zuotian = Db::name('enterprise_day_bill')->where('day', $previousDate)->where('mer_id', $mer_id)->value('balance'); $balance = $balance_zuotian ? $balance_zuotian : 0; if($mer_id){ $tixian = Db::name('user_extract')->where("DATE(status_time) = '" . $day . "'")->where('mer_id', $mer_id)->where('status', 1)->sum('extract_price'); $service_money = Db::name('user_extract')->where("DATE(status_time) = '" . $day . "'")->where('mer_id', $mer_id)->where('status', 1)->sum('service_money'); $tixian -= $service_money; $ylj = Db::name('user_bill')->where('mer_id', $mer_id)->where('status', 1)->where("DATE(take_time) = '" . $day . "'")->sum('number'); $insert['balance'] = $day_accounting - $tixian + $balance - $ylj; }else{ $tixian = Db::name('enterprise_platform_income_detail') ->where("deal_time >'$day'") ->where("deal_time <'$day 23:59:59'") ->where('deal_type', 5) ->sum('money'); $insert['balance'] = $day_accounting - $tixian + $balance ; } Db::name('enterprise_day_bill')->insertGetId($insert); $month_list[] = date('Y-m', strtotime('-4 month')); $month_list[] = date('Y-m', strtotime('-3 month')); $month_list[] = date('Y-m', strtotime('-2 month')); $month_list[] = date('Y-m', strtotime('-1 month')); $month_list[] = date('Y-m'); foreach ($month_list as $month) { Db::name('enterprise_month_bill')->where('mer_id',$mer_id)->where('month', $month)->delete(); $flow_query_month_clone = clone $day_flow_query_month; $accounting_query_month_clone = clone $accounting_query_month; $expenditure_query_month_clone = clone $expenditure_query_month; $startDate = date('Y-m-01 00:00:00', strtotime($month)); $endDate = date("Y-m-d 00:00:00", strtotime('+1 month', strtotime($month))); // 月订单流水 $money_flow = $flow_query_month_clone->whereBetween('deal_time', [$startDate, $endDate])->sum('money'); // 月入账总额 $money_accounting = $accounting_query_month_clone->whereBetween('deal_time', [$startDate, $endDate])->sum('money'); // 月支出总额 $money_expenditure = $expenditure_query_month_clone->whereBetween('deal_time', [$startDate, $endDate])->sum('money'); $insert2 = []; $insert2['month'] = $month; $insert2['mer_id'] = $mer_id; $insert2['flow'] = $money_flow; $insert2['expenditure'] = $money_expenditure; $insert2['accounting'] = $money_accounting; Db::name('enterprise_month_bill')->insertGetId($insert2); } } /** * 定时获取 交易类型 1订单入账 2佣金提现支出 3养老金(红积分兑换订单) */ public function platform_income_detail_get() { // 1、获取所有 商户 商户名称非空, 状态为正常、商户状态为开启 $merchant_list = Db::name('merchant') ->where('status', 1) ->where('mer_state', 1) ->where("mer_name != ''") ->column('mer_id'); // 2、插入日账单、月账单 // $Reconciliation = app()->make(Reconciliation::class); $Reconciliation = $this; // 3、获取 已有的 平台收支明细,并创建 唯一的 key $unique_list = []; $enterprise_platform_income_detail_list = Db::name('enterprise_platform_income_detail') ->select() ->toArray(); foreach ($enterprise_platform_income_detail_list as $item) { // deal_type : '交易类型 1自营订单入账(商户) 2佣金提现到账(商户) 3订单支付 4商户佣金提现 5用户佣金提现 6订单入账 7 创客自营订单让利 ' // user_extra_id : 提现表id $unique_list[] = $item['deal_type'] . $item['uid'] . $item['order_sn'] . $item['order_id'] . $item['user_extra_id'] . $item['mer_id']; } // 4、循环所有商户ID foreach ($merchant_list as $mer_id) { /** @var OrderMerchantRepository $OrderMerchantRepository */ $OrderMerchantRepository = app()->make(OrderMerchantRepository::class); $is_first = empty($enterprise_platform_income_detail_list); // 1自营订单入账金额=已结算订单金额-运费-养老金-汇付通道服务费; 订单结算的时候才统计 // 查询 该商户 所有的 平台订单(已支付、平台订单、已结算) $store_order_list = Db::name('store_order') ->where('mer_id', $mer_id) ->where('paid', 1) ->where('douhuomall', 0) ->where('is_settlement', 1) ->order('order_id', 'desc') // ->limit(500) ->select() ->toArray(); foreach ($store_order_list as $store_order) { // 判断该笔订单是否已 存在 平台收支明细表 的记录中 if (in_array('1' . $store_order['uid'] . $store_order['order_sn'] . $store_order['order_id'] . '0' . $mer_id, $unique_list)) continue; // 支付方式,有疑问?? $pay_type = $store_order['pay_type']; if (!in_array($pay_type, [0, 1])) continue; // 用户订单表 $group_order = Db::name('store_group_order') ->alias('sgo') ->where('sgo.group_order_id', $store_order['group_order_id']) ->find(); if (empty($group_order)) continue; // 获取 店铺奖金设置 $shop_bonus_setting = merchantConfig($store_order['mer_id'], 'shop_bonus_setting') ?: [ 'shop_bonus_rate' => 30, 'yanglao_rate' => 5, ]; // 获取这笔订单发放的养老金 TODO 这里查询应该不对,有可能查询出多列 $yanglao = Db::name('user_bill') ->where('order_sn', $store_order['order_sn']) ->where('commission_type', 5) ->value('number'); $ru_money = 0; // 如果pay_type 不是 0 ?? if ($pay_type != 0) { // 根据订单编号 查询 订单分账表 状态是 已分账成功的数据 $store_split_order = Db::name('store_split_order') ->where('group_order_id', $group_order['group_order_sn']) ->where('status', 1) ->find(); if (empty($store_split_order)) continue; if ($pay_type == 1) { //微信 if ($group_order['pay_wx'] == 3) { $api_key = 'api_live_b0a687ec-5450-4ada-a0e4-65bac0f46871'; } else { $api_key = 'api_live_90ef02e4-54ac-41ee-adf1-e4927d23d58f'; } } else { //支付宝 $api_key = 'api_live_b23537ed-64b8-45d6-832e-fb228aa9e0a9'; } // 汇付支付id $params['payment_confirm_id'] = $store_split_order['hf_pay_id']; $params['api_key'] = $api_key; //查询支付确认对象 Db::name("log")->insert(array('data' => '汇付查询支付确认对象参数-----' . json_encode($params)));//日志记录 $res = $this->payment_confirm_query_traits($params); Db::name("log")->insert(array('data' => '汇付查询支付确认对象返回-----' . json_encode($res)));//日志记录 // 获取分账后一个工作日时间 $close_time = $this->getNextWorkday(date('Y-m-d H:i:s', strtotime('+1 days', strtotime($store_order['pay_time'])))); // 如果成功查询到 分账信息 则更新订单的 汇付通道服务费 汇付分账成功时间 if (isset($res['status'])) { Db::name('store_order')->where('order_id', $store_order['order_id'])->update([ 'hf_fee_amt' => $res['fee_amt'], 'hf_clear_time' => $close_time ]); } // if (isset($res['status']) && time() > strtotime($close_time)) { if ($store_order['mer_id'] == 496) { $ru_money = $store_order['pay_price'] - $yanglao - $res['fee_amt']; } else { $ru_money = $store_order['pay_price'] * (1 - $shop_bonus_setting['shop_bonus_rate'] / 100) - $res['fee_amt'] + +$store_order['pay_postage']; } $store_order['pay_time'] = '';//线上支付的 } else { continue; } } else { // 订单金额+运费 if ($store_order['mer_id'] == 496) { $ru_money = $store_order['pay_price'] - $yanglao; } else { $ru_money = $store_order['pay_price'] * (1 - $shop_bonus_setting['shop_bonus_rate'] / 100) + $store_order['pay_postage']; } } Db::name('enterprise_platform_income_detail') ->insert([ 'mer_id' => $mer_id, 'uid' => $store_order['uid'], 'title' => '自营订单入账', 'deal_order_sn' => $OrderMerchantRepository->getNewOrderId('jy2'), 'deal_time' => isset($close_time) ? $close_time : ((isset($store_order['pay_time']) && $store_order['pay_time']) ? $store_order['pay_time'] : date('Y-m-d H:i:s')), 'money' => $ru_money, 'deal_type' => 1, 'order_id' => $store_order['order_id'], 'order_sn' => $store_order['order_sn'], 'user_extra_id' => '', 'pm' => 1, 'create_time' => date('Y-m-d H:i:s'), ]); unset($close_time); } //2佣金提现到账 提现成功统计 // $user_extract_list = Db::name('user_extract') // ->field('extract_id,uid,extract_type,extract_price,service_money,order_sn,status_time') // ->where('status', 1) // ->where('withdrawal_type', 3) // ->where('extract_type', '<>', 4) // ->when($uids, function ($query) use ($uids) { // $query->whereIn('uid', $uids); // }) // ->order('extract_id', 'desc') //// ->limit(100) // ->select() // ->toArray(); // foreach ($user_extract_list as $user_extract) { // if (in_array('2' . $user_extract['uid'] . $user_extract['order_sn'] . '0' . $user_extract['extract_id'], $unique_list)) continue; // $enterprise_platform_income_detail = Db::name('enterprise_platform_income_detail') // ->where('deal_type', 2) // ->where('user_extra_id', $user_extract['extract_id']) // ->find(); // if (!$enterprise_platform_income_detail) { // Db::name('enterprise_platform_income_detail') // ->insert([ // 'mer_id' => $mer_id, // 'uid' => $user_extract['uid'], // 'title' => '佣金提现支出', // 'deal_order_sn' => $OrderMerchantRepository->getNewOrderId('jy2'), // 'deal_time' => $user_extract['status_time'], // 'money' => bcsub($user_extract['extract_price'], $user_extract['service_money'], 2), // 'deal_type' => 2, // 'order_id' => '', // 'order_sn' => $user_extract['order_sn'], // 'user_extra_id' => $user_extract['extract_id'], // 'pm' => 1, // 'create_time' => date('Y-m-d H:i:s'), // ]); // } // } $start_time = '2024-04-01'; for ($i = 0; $i < 1000; $i++) { $day = date('Y-m-d', strtotime("+{$i} days", strtotime($start_time))); if (strtotime($day) > time()) { break; } $Reconciliation->cron($day, $mer_id); } } // 计算平台 //交易类型 1自营订单入账(商户) 2佣金提现到账(商户) 3订单支付 4商户佣金提现 5用户佣金提现 6订单入账 7 创客自营订单让利 $mer_id = 0; // 3 订单支付 供应链订单结算后入账到平台的金额 $store_order_list = Db::name('store_order') ->where('paid', 1) ->order('order_id', 'desc') // ->limit(500) ->select() ->toArray(); foreach ($store_order_list as $store_order) { if (in_array('3' . $store_order['uid'] . $store_order['order_sn'] . $store_order['order_id'] . '0' . $mer_id, $unique_list)) continue; $group_order = Db::name('store_group_order') ->alias('sgo') ->where('sgo.group_order_id', $store_order['group_order_id']) ->find(); if (empty($group_order)) continue; $store_split_order = Db::name('store_split_order') ->where('group_order_id', $group_order['group_order_sn']) ->where('status', 1) ->find(); if (empty($store_split_order)) continue; $close_time = $this->getNextWorkday(date('Y-m-d H:i:s', strtotime('+1 days', strtotime($store_order['pay_time'])))); Db::name('enterprise_platform_income_detail') ->insert([ 'mer_id' => $mer_id, 'uid' => $store_order['uid'], 'title' => '订单支付', 'deal_order_sn' => $OrderMerchantRepository->getNewOrderId('jy4'), 'deal_time' => isset($close_time) ? $close_time : ((isset($store_order['pay_time']) && $store_order['pay_time']) ? $store_order['pay_time'] : date('Y-m-d H:i:s')), 'money' => $store_order['pay_price'] + $store_order['pay_postage'], 'deal_type' => 3, 'order_id' => $store_order['order_id'], 'order_sn' => $store_order['order_sn'], 'user_extra_id' => '', 'pm' => 1, 'create_time' => date('Y-m-d H:i:s'), ]); } //5用户佣金提现 $user_extract_list = Db::name('user_extract') ->field('extract_id,uid,extract_type,extract_price,service_money,order_sn,status_time') ->where('status', 1) ->order('extract_id', 'desc') // ->limit(100) ->select() ->toArray(); foreach ($user_extract_list as $user_extract) { if (in_array('5' . $user_extract['uid'] . $user_extract['order_sn'] . '0' . $user_extract['extract_id'] . $mer_id, $unique_list)) continue; Db::name('enterprise_platform_income_detail') ->insert([ 'mer_id' => $mer_id, 'uid' => $user_extract['uid'], 'title' => '用户佣金提现', 'deal_order_sn' => $OrderMerchantRepository->getNewOrderId('jy2'), 'deal_time' => $user_extract['status_time'], 'money' => bcsub($user_extract['extract_price'], $user_extract['service_money'], 2), 'deal_type' => 5, 'order_id' => '', 'order_sn' => $user_extract['order_sn'], 'user_extra_id' => $user_extract['extract_id'], 'pm' => 0, 'create_time' => date('Y-m-d H:i:s'), ]); } // 6订单入账:支付成功的订单数据 供应链订单 $store_order_list = Db::name('store_order') ->where('paid', 1) ->where('douhuomall', 1) ->where('is_settlement', 1) ->order('order_id', 'desc') // ->limit(500) ->select() ->toArray(); foreach ($store_order_list as $store_order) { if (in_array('6' . $store_order['uid'] . $store_order['order_sn'] . $store_order['order_id'] . '0' . $mer_id, $unique_list)) continue; $pay_type = $store_order['pay_type']; if (!in_array($pay_type, [0, 1])) continue; $group_order = Db::name('store_group_order') ->alias('sgo') ->where('sgo.group_order_id', $store_order['group_order_id']) ->find(); if (empty($group_order)) continue; $yanglao = Db::name('user_bill') ->where('order_sn', $store_order['order_sn']) ->where('commission_type', 5) ->value('number'); $ru_money = 0; $shop_bonus_setting = merchantConfig($store_order['mer_id'], 'shop_bonus_setting') ?: [ 'shop_bonus_rate' => 30, 'yanglao_rate' => 5, ]; if ($pay_type != 0) { $store_split_order = Db::name('store_split_order') ->where('group_order_id', $group_order['group_order_sn']) ->find(); if (empty($store_split_order)) continue; if (!$store_order['hf_fee_amt']) { if ($pay_type == 1) { //微信 if ($group_order['pay_wx'] == 3) { $api_key = 'api_live_b0a687ec-5450-4ada-a0e4-65bac0f46871'; } else { $api_key = 'api_live_90ef02e4-54ac-41ee-adf1-e4927d23d58f'; } } else { //支付宝 $api_key = 'api_live_b23537ed-64b8-45d6-832e-fb228aa9e0a9'; } $params['payment_confirm_id'] = $store_split_order['hf_pay_id']; $params['api_key'] = $api_key; //查询支付确认对象 Db::name("log")->insert(array('data' => '汇付查询支付确认对象参数-----' . json_encode($params)));//日志记录 $res = $this->payment_confirm_query_traits($params); Db::name("log")->insert(array('data' => '汇付查询支付确认对象返回-----' . json_encode($res)));//日志记录 if (isset($res['status'])) { Db::name('store_order')->where('order_id', $store_order['order_id'])->update([ 'hf_fee_amt' => $res['fee_amt'], 'hf_clear_time' => $close_time ]); $store_order['hf_fee_amt'] = $res['fee_amt']; } } // 获取分账后一个工作日时间 $close_time = $this->getNextWorkday(date('Y-m-d H:i:s', strtotime('+1 days', strtotime($store_order['pay_time'])))); if (isset($res['status']) && time() > strtotime($close_time)) { if ($store_order['mer_id'] == 496) { $ru_money = $store_order['pay_price'] - $yanglao - $store_order['hf_fee_amt']; } else { $ru_money = $store_order['pay_price'] - $yanglao; } $store_order['pay_time'] = '';//线上支付的 } else { continue; } } else { // 订单金额+运费 if ($store_order['mer_id'] == 496) { $ru_money = $store_order['pay_price'] - $yanglao; } else { $ru_money = $store_order['pay_price'] - $yanglao; } } Db::name('enterprise_platform_income_detail') ->insert([ 'mer_id' => $mer_id, 'uid' => $store_order['uid'], 'title' => '订单入账', 'deal_order_sn' => $OrderMerchantRepository->getNewOrderId('jy2'), 'deal_time' => isset($close_time) ? $close_time : ((isset($store_order['pay_time']) && $store_order['pay_time']) ? $store_order['pay_time'] : date('Y-m-d H:i:s')), 'money' => $ru_money, 'deal_type' => 6, 'order_id' => $store_order['order_id'], 'order_sn' => $store_order['order_sn'], 'user_extra_id' => '', 'pm' => 1, 'create_time' => date('Y-m-d H:i:s'), ]); unset($close_time); } //7 创客自营订单让利=创客自营订单金额*分润比例-(创客自营订单金额-运费)*养老金比例 $store_order_list = Db::name('store_order') ->where('paid', 1) ->where('is_settlement', 1) ->where('douhuomall', 0) ->order('order_id', 'desc') // ->limit(500) ->select() ->toArray(); foreach ($store_order_list as $store_order) { if (in_array('7' . $store_order['uid'] . $store_order['order_sn'] . $store_order['order_id'] . '0' . $mer_id, $unique_list)) continue; $shop_bonus_setting = merchantConfig($store_order['mer_id'], 'shop_bonus_setting') ?: [ 'shop_bonus_rate' => 30, 'yanglao_rate' => 5, ]; $pay_type = $store_order['pay_type']; if ($pay_type != 0) { $group_order = Db::name('store_group_order') ->alias('sgo') ->where('sgo.group_order_id', $store_order['group_order_id']) ->find(); if (empty($group_order)) continue; $store_split_order = Db::name('store_split_order') ->where('group_order_id', $group_order['group_order_sn']) ->find(); if (empty($store_split_order)) continue; $close_time = $this->getNextWorkday(date('Y-m-d H:i:s', strtotime('+1 days', strtotime($store_order['pay_time'])))); if (!$store_order['hf_fee_amt']) { $store_split_order = Db::name('store_split_order') ->where('group_order_id', $group_order['group_order_sn']) ->where('status', 1) ->find(); if (empty($store_split_order)) continue; if ($pay_type == 1) { //微信 if ($group_order['pay_wx'] == 3) { $api_key = 'api_live_b0a687ec-5450-4ada-a0e4-65bac0f46871'; } else { $api_key = 'api_live_90ef02e4-54ac-41ee-adf1-e4927d23d58f'; } } else { //支付宝 $api_key = 'api_live_b23537ed-64b8-45d6-832e-fb228aa9e0a9'; } $params['payment_confirm_id'] = $store_split_order['hf_pay_id']; $params['api_key'] = $api_key; //查询支付确认对象 Db::name("log")->insert(array('data' => '汇付查询支付确认对象参数-----' . json_encode($params)));//日志记录 $res = $this->payment_confirm_query_traits($params); Db::name("log")->insert(array('data' => '汇付查询支付确认对象返回-----' . json_encode($res)));//日志记录 // 获取分账后一个工作日时间 $close_time = $this->getNextWorkday(date('Y-m-d H:i:s', strtotime('+1 days', strtotime($store_order['pay_time'])))); if (isset($res['status'])) { Db::name('store_order')->where('order_id', $store_order['order_id'])->update([ 'hf_fee_amt' => $res['fee_amt'], 'hf_clear_time' => $close_time ]); $store_order['hf_fee_amt'] = $res['fee_amt']; } } $yanglao = Db::name('user_bill') ->where('order_sn', $store_order['order_sn']) ->where('commission_type', 5) ->value('number'); if (isset($res['status']) && time() > strtotime($close_time)) { if ($store_order['mer_id'] == 496) { $ru_money = $store_order['pay_price'] - $yanglao - $store_order['hf_fee_amt']; } else { $ru_money = ($store_order['pay_price'] * $shop_bonus_setting['shop_bonus_rate'] / 100) - $yanglao; } $store_order['pay_time'] = '';//线上支付的 } else { continue; } }else{ if ($store_order['mer_id'] == 496) { $ru_money = $store_order['pay_price'] - $yanglao; } else { $ru_money = ($store_order['pay_price'] * $shop_bonus_setting['shop_bonus_rate'] / 100) - $yanglao; } } Db::name('enterprise_platform_income_detail') ->insert([ 'mer_id' => $mer_id, 'uid' => $store_order['uid'], 'title' => '创客自营订单让利', 'deal_order_sn' => $OrderMerchantRepository->getNewOrderId('jy4'), 'deal_time' => isset($close_time) ? $close_time : ((isset($store_order['pay_time']) && $store_order['pay_time']) ? $store_order['pay_time'] : date('Y-m-d H:i:s')), 'money' => $ru_money, 'deal_type' => 7, 'order_id' => $store_order['order_id'], 'order_sn' => $store_order['order_sn'], 'user_extra_id' => '', 'pm' => 1, 'create_time' => date('Y-m-d H:i:s'), ]); unset($close_time); } $start_time = '2024-04-01'; for ($i = 0; $i < 1000; $i++) { $day = date('Y-m-d', strtotime("+{$i} days", strtotime($start_time))); if (strtotime($day) > time()) { break; } $Reconciliation->cron($day, 0); } return app('json')->success('获取平台收支明细成功'); } public function clear_platform_income_detail() { Db::name('enterprise_platform_income_detail')->where('id', '>', 0) ->delete(); } function getNextWorkday($date) { // 设置工作日数组 $workdays = array(1, 2, 3, 4, 5); // 默认为周一到周五 // 将日期字符串转换为时间戳 $timestamp = strtotime($date); // 获取该日期的星期几 $weekday = date('N', $timestamp); // 如果不是工作日,则增加一天直到是工作日 while (!in_array($weekday, $workdays)) { $timestamp += (24 * 3600); // 增加一天 $weekday = date('N', $timestamp); // 更新星期几 } // 返回下一个工作日的日期字符串 return date('Y-m-d H:i:s', $timestamp); } /** * @param $paymnet_params * @return array * 查询支付确认对象 */ public function payment_confirm_query_traits($paymnet_params) { $merber = new PaymentConfirm(); $merber->query($paymnet_params); # 返回查询结果 $merber->isError(); return $merber->result; } //服务器配置,一般是默认配置 private $CharSet = "UTF-8"; //设定邮件编码 private $SMTPDebug = 0; // 调试模式输出 private $isSMTP = true; // 使用SMTP private $Host = 'smtp.163.com'; // SMTP服务器 private $SMTPAuth = true; // 允许 SMTP 认证 private $Username = 'username'; // SMTP 用户名 即邮箱的用户名 private $Password = 'MHIKZOXVPTGNVOMU'; // SMTP 密码 部分邮箱是授权码(例如163邮箱) private $SMTPSecure = 'ssl'; // 允许 TLS 或者ssl协议 private $Port = 465; // 服务器端口 25 或者465 具体要看邮箱服务器支持 //修改成自己的邮箱 private $From = 'formalverification@163.com'; //发件人邮箱 private $FromName = 'makalo'; //发件人的用户昵称 //邮件对象 private $mail; //一般只有用户名和密码还有端口会变动, 所以这三个参数可以创建对象动态指定,也可以直接写死 public function mallInit($Username = '', $Password = '', $Port = '') { if (!empty($Username)) { $this->Username = $Username; } if (!empty($Password)) { $this->Password = $Password; } if (!empty($Port)) { $this->Port = $Port; } //为true表示启用异常 $mail = new PHPMailer(true); //服务器配置 $mail->CharSet = $this->CharSet; //设定邮件编码 $mail->SMTPDebug = $this->SMTPDebug; // 调试模121212 1式输出 if ($this->isSMTP === true) { $mail->isSMTP(); // 使用SMTP } $mail->Host = $this->Host; // SMTP服务器 $mail->SMTPAuth = $this->SMTPAuth; // 允许 SMTP 认证 $mail->Username = $this->Username; // SMTP 用户名 即邮箱的用户名 $mail->Password = $this->Password; // SMTP 密码 部分邮箱是授权码(例如163邮箱) $mail->SMTPSecure = $this->SMTPSecure; // 允许 TLS 或者ssl协议 $mail->Port = $this->Port; // 服务器端口 25 或者465 具体要看邮箱服务器支持 $mail->setFrom($this->From, $this->FromName); //发件人 $this->mail = $mail; } /** * 发送邮件 * @param array $sendAddress 收件人地址数组, 如果为单值数组则只写入收件地址,如果为键值数组则还写入收件人名称 * @param array $Attachment 附件数组,如果为单值数组则为添加附件,如果为键值数组则添加附件并且重命名 * @param bool $isHtml 是否以html文档格式发送 * @param string $Subject 邮件主题 * @param string $Body 邮件内容,如果以html格式可以写入html * @param string $AltBody 如果为单值数组则只写入收件地址,如果为键值数组则还写入收件人名称 * @param array $CC 抄送地址数组, 如果为单值数组则只写入收件地址,如果为键值数组则还写入收件人名称 * @param array $BCC 密送地址数组,如果为单值数组则只写入收件地址,如果为键值数组则还写入收件人名称 * @return bool 是否发送成功 */ public function sendEMail($sendAddress = [], $Subject = '', $Body = '', $AltBody = '', $Attachment = [], $isHtml = true, $CC = [], $BCC = []) { try { //必填参数校验 if (empty($sendAddress) || empty($Subject) || empty($Body)) { return false; } //收件人 foreach ($sendAddress as $key => $value) { if (is_int($key)) { // 处理单值 $this->mail->addAddress($value); } else { // 处理键值 $this->mail->addAddress($value, $key); } } //附件 if (!empty($Attachment)) { foreach ($Attachment as $key => $value) { if (is_int($key)) { // 处理单值 $this->mail->addAttachment($value); } else { // 处理键值 $this->mail->addAttachment($value, $key); } } } //抄送 if (!empty($CC)) { //抄送不为空 foreach ($CC as $key => $value) { if (is_int($key)) { // 处理单值 $this->mail->addCC($value); } else { // 处理键值 $this->mail->addCC($value, $key); } } } //密送 if (!empty($BCC)) { //密送不为空 foreach ($BCC as $key => $value) { if (is_int($key)) { // 处理单值 $this->mail->addBCC($value); } else { // 处理键值 $this->mail->addBCC($value, $key); } } } //回复的时候回复给哪个邮箱 建议和发件人一致 $this->mail->addReplyTo($this->From, $this->FromName); //Content // 是否以HTML文档格式发送 发送后客户端可直接显示对应HTML内容 $this->mail->isHTML($isHtml); //邮件主题 $this->mail->Subject = $Subject; //邮件内容 $this->mail->Body = $Body; //如果邮件客户端不支持HTML则显示此内容 $this->mail->AltBody = $AltBody; //发送 $this->mail->send(); return [ 'code' => 200, ]; } catch (\Exception $e) { return [ 'code' => 400, 'message' => $this->mail->ErrorInfo ]; } } public function take() { set_time_limit(0); $this->mallInit('formalverification@163.com', 'SYECAWFLLTUPMDRP'); $this->sendEMail(['389123492@qq.com', '420132441@qq.com'], '结算定时', "开始执行" . date('Y-m-d H:i:s'), '如果邮件客户端不支持HTML则显示此内容'); $mallStr = ''; // Log::info('执行一次1 '.date('H:i') ); // return ; // $storeOrderRepository = app()->make(StoreOrderRepository::class); $key_list = [ 1 => 'api_live_b23537ed-64b8-45d6-832e-fb228aa9e0a9', 2 => 'api_live_90ef02e4-54ac-41ee-adf1-e4927d23d58f', 3 => 'api_live_b0a687ec-5450-4ada-a0e4-65bac0f46871' ]; $appid_list = [ 1 => 'app_44108546-d27a-48ee-88c1-84b45b75114f', 2 => 'app_0827b960-b932-45ec-b800-4e850091b419', 3 => 'app_383a75dd-c03d-44ab-8f58-92c60fe9b9d0' ]; // // $payment_id = ShouxinyiApiRequest::getOrderNumber('split'); // $insertData = [ // [ // 'mid' => 0, // 'requestId' => $payment_id, // 'group_order_id' => 'WX171955791230553863', // 'splitAmount' => 0.25, // 'status' => 0 // ], // ]; // $div_members[] = [ // 'member_id' => 'member_personal_16704641278422', // 'amount' => '1.00', // 'fee_flag' => 'Y' // ]; // //////分账表 // Db::name("store_split_order")->insertAll($insertData); // /// 分账表end // // $params = [ // 'payment_id' => '002212024062814583210652657343702200320', // 'order_no' => $payment_id, // 'confirm_amt' => '1.00', // 'div_members' => $div_members // ]; // // $params['api_key'] = $key_list[3]; // // var_dump($params); // Db::name("log")->insert(array('data' => '汇付延时分账参数-----' . json_encode($params)));//日志记录 // $res = $storeOrderRepository->payment_confirm_create_traits($params); // Db::name("log")->insert(array('data' => '汇付延时分账-----' . json_encode($res)));//日志记录 // var_dump($res); // // 分账 // return; $merchant_member_list = Db::name('merchant_member') // ->where('member_id', 'member_personal_16704641278422') ->column('mer_id,type,member_id,settle_account_id'); foreach ($merchant_member_list as $merchant_member) { $mer_id = $merchant_member['mer_id']; if (empty($mer_id)) continue; if (empty($merchant_member['settle_account_id'])) continue; $params = [ 'app_id' => $appid_list[$merchant_member['type']], 'member_id' => $merchant_member['member_id'], 'settle_account_id' => $merchant_member['settle_account_id'], 'api_key' => $key_list[$merchant_member['type']] ]; $merber = new SettleAccount(); $merber->balance($params); $merber->result; // var_dump($merber->result); if (isset($merber->result[1])) { $result = json_decode($merber->result[1], true); $result = json_decode($result['data'], true); $result['avl_balance'] = $result['avl_balance'] ?? 0; if ($result['avl_balance'] > 0) { $payment_id = ShouxinyiApiRequest::getOrderNumber('split'); $params = [ 'order_no' => $payment_id, 'app_id' => $appid_list[$merchant_member['type']], 'cash_type' => 'T1', 'cash_amt' => sprintf("%01.2f", $result['avl_balance']), 'member_id' => $merchant_member['member_id'], 'api_key' => $key_list[$merchant_member['type']] ]; $yanglao_member_ids = ['jsdk_member_wx21710232183139', 'jsdk_member_ali1710232187326']; if (in_array($merchant_member['member_id'], $yanglao_member_ids)) { $params['remark'] = '天地博爱科技~养老金'; } Db::name("log")->insert(array('data' => '汇付取现参数-----' . json_encode($params)));//日志记录 $merber = new Drawcash(); $merber->create($params); # 返回查询结果 $merber->isError(); $res = $merber->result; Db::name("log")->insert(array('data' => '汇付延时分账-----' . json_encode($res))); //日志记录 Db::name("log")->insert(array('data' => "mer_id {$mer_id} 请求分账{$result['avl_balance']}元-----"));//日志记录 var_dump("mer_id {$mer_id} 请求分账{$result['avl_balance']}元-----"); $mallStr = $mallStr . "-----mer_id {$mer_id} 请求分账{$result['avl_balance']}元-----
"; } } } echo date('Y-m-d H:i:s') . '执行结束' . "\r\n"; $this->sendEMail(['389123492@qq.com', '420132441@qq.com'], '结算定时', "执行结束
" . $mallStr . date('Y-m-d H:i:s'), '如果邮件客户端不支持HTML则显示此内容'); } use HuiPay; public function cesexx(){ // $store_product = Db::name('store_product')->where('mer_id', 439)->select(); // foreach ($store_product as $key=>$online) { // $spu_id = $online['spu_id']; // $product_id = $online['product_id']; // $data = Db::name('douhuomall')->where('spu_id', $spu_id)->find(); // if(!$data) continue; // //商品主图 // $spuId_info=json_decode($data['spuId_info'],true); // $slider_image=$spuId_info['detail_img_list']??''; // $image=$spuId_info['cover_url']??''; // try { // $slider_image = implode(',',json_decode($slider_image,true)); // }catch (\Exception $exception){ // $slider_image = $image; // } // //更新产品图片数据 // $product_insert_data=[ // 'image'=>$image, // 'slider_image'=>$slider_image, // ]; // Db::name('store_product')->where('product_id',$product_id)->update($product_insert_data); // echo '更新产品图片数据成功'.json_encode($product_insert_data); // echo '产品id:'.$product_id; // $detail = $spuId_info['detail']; // if(!is_null(json_decode($detail))){ // $detail_list = json_decode($detail); // $detail = ''; // foreach($detail_list as $value){ // $detail .= ""; // } // } // Db::name('store_product_content')->where('product_id',$product_id)->update(['content'=>$detail]); // } // $cursor = Db::name('store_order')->where('mer_id', 439)->select(); // foreach ($cursor as $key=>$online) { // // if($key != 0) continue; // $order_id = $online['order_id']; // $orderProduct = Db::name('store_order')->alias('so')->where('so.order_id',$order_id)->leftJoin('store_order_product sop','so.order_id=sop.order_id')->field('sop.*')->select()->toArray(); // foreach ($orderProduct as $_k=>&$_vv){ // $_vv['cart_info'] = json_decode($_vv['cart_info'],true); // if(isset($_vv['cart_info']['product']['product_id'])){ // $image = Db::name('store_product')->where('product_id', $_vv['cart_info']['product']['product_id'])->value('image'); // if($image){ // $_vv['cart_info']['product']['image'] = $image; // } // } // Db::name('store_order_product')->where('order_id', $order_id)->update(['cart_info'=> json_encode($_vv['cart_info'], true)]); // } // } // 普通订单 // $cursor = Db::table('rrx_store_order')->where('paid', 1)->where('gzc', 0)->where('mer_id', 496)->where('pay_type', 'in', [0,1,2,4])->select(); // $StoreOrderStatusRepository = app()->make(StoreOrderStatusRepository::class); // $OrderMerchantRepository = app()->make(OrderMerchantRepository::class); // $OrderGzcRepository = app()->make(OrderGzcRepository::class); // foreach ($cursor as $online) { // if ($online['mer_id'] == 496) { // if (!in_array($online['status'], [0, 1, 2, 3])) { // continue; // } // } // $certification = UserCertification::getInstance()->where('uid', $online['uid'])->find(); // if (!$certification) { // Log::info($online['uid'] . '没有实名认证'); // // echo '没有实名认证'; // continue; // } // //查询养老金金额 // $UserBillRepository = app()->make(UserBillRepository::class); // $bill = $UserBillRepository->getWhere(['uid' => $online['uid'], 'link_id' => $online['order_id'], 'commission_type' => 5]); // $pension = $bill->number ?? 0; // if ($pension <= 0) { // echo '金额为为0:'.$online['order_sn']; // Log::info($online['order_sn'] . 'pension' . $pension); // continue; // } // Db::transaction(function () use ($certification, $online, $pension, $OrderGzcRepository, $OrderMerchantRepository) { // //新增入账明细记录 // $orderId = $OrderMerchantRepository->getNewOrderId('IN10'); // $create = [ // 'uid' => $online['uid'], // 'platform_no' => $orderId, // 'account_type' => $online['pay_type'] == 1 ? 3 : 2, // 'user_name' => $certification['user_name'], // 'mobile' => $certification['mobile'], // 'user_card' => $certification['user_card'], // 'pension' => $pension, // 'order_type' => 2, // 'out_trade_no' => $online['order_sn'] // ]; // $test_user = Db::name('user')->where('uid', $online['uid'])->value('test_user'); // $check = Db::name("gzc_logs")->where("out_trade_no", $online['order_sn'])->where("order_type", 2)->count(); // if ($test_user == 0 && $check <= 0) { // $OrderGzcRepository->create($create); // } // $order = StoreOrder::getInstance()->find($online['order_id']); // $order->gzc = 1; // $order->save(); // }); // $bill->gzc = 1; // $bill->is_gzc = 1; // $bill->save(); // } //18995126502 //会员直推荐佣金补1800,复购金补200,贡献值补4900,积分补4900,养老金补350 // $user = Db::name("user")->where('uid', 910)->find(); // $order_sn = 0; // $order_id = 0; // $order["mer_id"] = 0; // //sat存养老金 // $tuiguanyanglaojin = '350'; // $tuimark = "推荐消费获得养老金" . $tuiguanyanglaojin; // $tuititle = "养老金"; // $commission_type = 5; // if ($tuiguanyanglaojin >= 0.01) { // $this->add_bill($tuititle, $tuiguanyanglaojin, $user["uid"], $tuimark, $commission_type, $order_sn, $order_id, $order["mer_id"], 0, 0, 0); // } else { // Db::name('log')->insert(['data' => '订单号:' . $order_sn . '付款额度较低,推荐养老金低于0.01无法入库 特此记录!']); // } // $tuiguanyongjin = '1800'; // $tuiYongmark = "推荐消费获得佣金" . $tuiguanyongjin; // $tuiYongzhoutitle = "推广佣金"; // $commission_yong_type = 3; // if ($tuiguanyongjin >= 0.01) { // $this->add_bill($tuiYongzhoutitle, $tuiguanyongjin, $user["uid"], $tuiYongmark, $commission_yong_type, $order_sn, $order_id, $order["mer_id"], 0, 0, 0); // } else { // Db::name('log')->insert(['data' => '订单号:' . $order_sn . '付款额度较低或 商家、平台设置的返佣比例较低,佣金低于0.01无法入库 特此记录!']); // } // $merchant_member_list = Db::name('order_merchant') // ->where('status', 0)->where('paid', 0)->where('create_time', '>', '2025-01-01 00:00:00') // ->column('id,mer_id,uid,out_trade_no,hf_pay_id,create_time'); // $out_trade_no_list = []; // foreach ($merchant_member_list as $key => $value) { // if (strpos($value['out_trade_no'], 'ALI') !== false) { // //支付宝 // $api_key = 'api_live_b23537ed-64b8-45d6-832e-fb228aa9e0a9'; // } else { // //微信 // $api_key = 'api_live_b0a687ec-5450-4ada-a0e4-65bac0f46871'; // } // $params = [ // 'api_key' => $api_key, // 'payment_id' => $value['hf_pay_id'], // ]; // $res = $this->Payment_query_traits($params); // if (isset($res['status']) && $res['status'] == 'succeeded') { // $params['out_trade_no'] = $value['out_trade_no']; // // echo json_encode($params); // $out_trade_no_list[] = $value['out_trade_no']; // } // echo json_encode($res); // $params['out_trade_no'] = $value['out_trade_no']; // echo json_encode($params); // } // echo json_encode($out_trade_no_list); // $api_key = 'api_live_b0a687ec-5450-4ada-a0e4-65bac0f46871'; // $params = [ // 'api_key' => $api_key, // 'payment_id' => '002212025031014345810745060317006163968' // ]; // $res = $this->Payment_query_traits($params); // echo json_encode($res); // $params['out_trade_no'] = $value['out_trade_no']; // echo json_encode($params); // echo json_encode($merchant_member_list); // echo 'xxx'; } /** * 佣金加入账单 * @param $title * @param $number * @param $uid * @param $mark * @param $commission_type * @param $order_sn */ public function add_bill($title, $number, $uid, $mark, $commission_type, $order_sn, $order_id = 0, $mer_id = 0, $source = 0, $status = 1, $type_shop = 0) { log::info("====进入add——bill"); log::info("==uid==={$uid}"); if ($uid == 0 || $number == 0) { return; } $number = sprintf('%.2f', $number); $data = [ 'link_id' => $order_id, "uid" => $uid, "pm" => 1, "title" => $title, "category" => "now_money", "type" => "commission", "number" => $number, "balance" => 0, "mark" => $mark, // "create_time"=>date("Y-m-d H:i:s"), "status" => $status, "commission_type" => $commission_type, "order_sn" => $order_sn, "mer_id" => $mer_id, "source" => $source, "type_shop" => $type_shop ]; log::info("开始添加user——bills"); log::info($data); Db::name("user_bill")->insert($data); if ($type_shop == 0) { if ($commission_type == 5) { Db::name("user")->where("uid", $uid)->inc('annuity', $number)->update(); Db::name("user")->where("uid", $uid)->inc('annuity_num', 1)->update(); } else { Db::name("user")->where("uid", $uid)->inc('brokerage_price', $number)->update(); } } } }