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('操作成功'); } /** * 定时获取 交易类型 1订单入账 2佣金提现支出 3养老金(红积分兑换订单) */ public function platform_income_detail_get() { $merchant_list = Db::name('merchant') ->where('status', 1) ->where('mer_state', 1) ->where("mer_name != ''") ->column('mer_id'); $Reconciliation = app()->make(Reconciliation::class); $unique_list = []; $enterprise_platform_income_detail_list = Db::name('enterprise_platform_income_detail') ->select() ->toArray(); foreach ($enterprise_platform_income_detail_list as $item) { $unique_list[] = $item['deal_type'] . $item['uid'] . $item['order_sn'] . $item['order_id'] . $item['user_extra_id'] . $item['mer_id']; } foreach ($merchant_list as $mer_id) { $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, ]; $yanglao = Db::name('user_bill') ->where('order_sn', $store_order['order_sn']) ->where('commission_type', 5) ->value('number'); $ru_money = 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'; } $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; } }