<?php namespace app\api\controller; use app\admin\validate\user\UserValidate; use app\api\logic\order\OrderLogic; use app\api\logic\user\UserLogic; use app\common\enum\OrderEnum; use app\common\enum\PayEnum; use app\common\enum\user\UserTerminalEnum; use app\common\enum\YesNoEnum; use app\common\logic\PayNotifyLogic; use app\common\logic\store_order\StoreOrderLogic; use app\common\logic\StoreFinanceFlowLogic; use app\common\model\finance\CapitalFlow; use app\common\model\financial_transfers\FinancialTransfers; use app\common\model\order\Cart; use app\common\model\store_branch_product\StoreBranchProduct; use app\common\model\store_cash_finance_flow\StoreCashFinanceFlow; use app\common\model\store_category\StoreCategory; use app\common\model\store_finance_flow\StoreFinanceFlow; use app\common\model\store_order\StoreOrder; use app\common\model\store_order_cart_info\StoreOrderCartInfo; use app\common\model\store_product\StoreProduct; use app\common\model\store_product_log\StoreProductLog; use app\common\model\system_store\SystemStore; use app\common\model\user\User; use app\common\model\user\UserAddress; use app\common\model\user\UserRecharge; use app\common\model\user_ship\UserShip; use app\common\model\user_sign\UserSign; use app\common\model\vip_flow\VipFlow; use app\common\service\pay\PayService; use app\common\service\SmsService; use app\common\service\wechat\WeChatMnpService; use app\MyBusinessException; use app\store\lists\store_order\StoreOrderLists; use app\store\logic\WorkbenchLogic; use app\store\validate\store_order\StoreOrderValidate; use Illuminate\Support\Facades\Log; use Overtrue\EasySms\EasySms; use Picqer\Barcode\BarcodeGeneratorJPG; use Picqer\Barcode\BarcodeGeneratorPNG; use support\Cache; use think\db\Raw; use think\Exception; use think\facade\Db; class LiuController extends BaseApiController { public $notNeedLogin = ['index', 'app_update', 'test', 'show']; public static $total; public function dealCapital($startTime,$endTime,$pay_type) { $vipFrozen = VipFlow::where('create_time', '>=', $startTime) ->where('create_time', '<', $endTime) ->where('pay_type',$pay_type)->select()->toArray(); if($pay_type == 18){ $category_title = 'system_purchase_add'; $title ='系统增加采购款'; $mark ='系统增加采购款'; $filed = 'purchase_funds'; }else{ $category_title = 'system_balance_add'; $title ='系统增加余额'; $mark ='系统反余额冻结'; $filed = 'now_money'; } $newArr = []; foreach ($vipFrozen as $k =>$value){ $user_funds = User::where('id',$value['user_id'])->value($filed); $newArr[$k]['uid'] = $value['user_id']; $newArr[$k]['category'] = $category_title; $newArr[$k]['link_type'] = 'order'; $newArr[$k]['link_id'] = $value['order_id']; $newArr[$k]['amount'] = $value['number']; $newArr[$k]['before_balance'] =$user_funds; $newArr[$k]['balance'] = bcadd($user_funds, $value['number'], 2); $newArr[$k]['create_time'] = date('Y-m-d H:i:s'); $newArr[$k]['type'] = 'in'; $newArr[$k]['title'] = $title."{$value['number']}元"; $newArr[$k]['mark'] = $mark; } (new CapitalFlow())->saveAll($newArr); } public function test() { $page_no = (int)$this->request->get('page_no', 1); $page_size = (int)$this->request->get('page_size', 15); $params = $this->request->get(); $params['page_no'] = $page_no > 0 ? $page_no : 1; $params['page_size'] = $page_size > 0 ? $page_size : 15; $res = UserLogic::dealDetails($params,20); $res['page_no'] = $params['page_no']; $res['page_size'] = $params['page_size']; return $this->success('ok', $res); // $res = (new StoreOrderLogic)->refund('PF1719023023405552',180,180); // d($res); /** * 加入确认表 */ /* $startTime = 1717171200; // 开始时间 $endTime = 1719676800; // 结束时间 //对平台来说 $data = StoreFinanceFlow:: whereBetween('create_time', [$startTime, $endTime]) ->field(' CONCAT("第", LPAD(YEAR(FROM_UNIXTIME(create_time, "%Y-%m-%d")), 4, "0"), "-", LPAD(WEEK(FROM_UNIXTIME(create_time, "%Y-%m-%d"), 3), 2, "0"), "周(", LPAD(MONTH(FROM_UNIXTIME(create_time, "%Y-%m-%d")), 2, "0"), "月)") as remark_time, SUM(CASE WHEN financial_pm = 1 THEN number ELSE 0 END) as income, SUM(CASE WHEN financial_pm = 0 THEN number ELSE 0 END) as money, store_id ') ->where('financial_pm', 0) ->group('remark_time,store_id') ->order('remark_time', 'desc') ->select() // ->each(function ($item) { // $item['name'] = '周账单'; // $item['enter']=bcdiv($item['income'],$item['expenditure'],2); // return $item; // }) ->toArray(); // foreach ($data as &$v) { // $v['admin_id'] =$this->adminId; // } (new FinancialTransfers())->saveAll($data); d($data);*/ //反钱 //读取前3天的值 按照用户id和类型分下 加到对应的钱 $startTime = strtotime(date('Y-m-d', strtotime('-3 days'))); $endTime = strtotime(date('Y-m-d')); // 使用模型查询 $result = VipFlow::where('create_time', '>=', $startTime) ->where('create_time', '<', $endTime) ->group('user_id, pay_type') ->field('user_id, pay_type, COUNT(*) as transaction_count, SUM(number) as total_amount') ->select()->toArray(); // 遍历查询结果并分类 现金不进入反的逻辑 //3余额 18采购款 7微信小程序 9微信条码 13 支付宝条码支付 $Balance = []; $Procurement = []; $WechatMiniPay = []; $WechatBarcodePay = []; $AliBarcodePay = []; foreach ($result as $row) { $payType = $row['pay_type']; $userId = $row['user_id']; $totalAmount = $row['total_amount']; switch ($payType) { case 3: $user_now_money =User::where( [ 'id'=>$userId ] )->withTrashed()->value('now_money'); $Balance[] = [ 'id' => $userId, 'now_money' => bcadd($user_now_money,$totalAmount,2), ]; break; case 7: $WechatMiniPay[] = [ 'id' => $userId, 'total_amount' => $totalAmount, ]; break; case 9: $WechatBarcodePay[] = [ 'id' => $userId, 'total_amount' => $totalAmount, ]; break; case 13: $AliBarcodePay[] = [ 'id' => $userId, 'total_amount' => $totalAmount, ]; break; case 18: $purchase_funds_money =User::where( [ 'id'=>$userId ] )->withTrashed()->value('purchase_funds'); $Procurement[] = [ 'id' => $userId, // '111' => $totalAmount, 'purchase_funds' => bcadd($purchase_funds_money,$totalAmount,2), ]; break; } // // 如果分类数组中还没有这个 pay_type,初始化一个空数组 // if (!isset($classifiedResult[$payType])) { // $classifiedResult[$payType] = []; // } // // // 将用户信息添加到对应的 pay_type 分类中 // $classifiedResult[$payType][] = [ // 'uid' => $userId, // 'total_amount' => $totalAmount, // ]; } //入记录表的话查询后便利入 3余额 18采购款 // if($Balance){ //记录 // (new User())->saveAll($Balance); // $this->dealCapital($startTime,$endTime,3); // } // if($Procurement){ // (new User())->saveAll($Procurement); // $this->dealCapital($startTime,$endTime,18); // } //7微信小程序 9微信条码 13 支付宝条码支付 d($Balance,$Procurement,$WechatMiniPay,$WechatBarcodePay,$AliBarcodePay); $result = array_reduce($result, function ($carry, $item) { $user_id = $item['user_id']; $pay_type = $item['pay_type']; $total_amount = $item['total_amount']; if (!isset($carry[$user_id])) { $carry[$user_id] = []; } if (!isset($carry[$user_id][$pay_type])) { $carry[$user_id][$pay_type] = [ 'uid' => $user_id, 'transaction_count' => 0, 'total_amount' => 0 ]; } $carry[$user_id][$pay_type]['transaction_count'] += $item['transaction_count']; $carry[$user_id][$pay_type]['total_amount'] += $item['total_amount']; return $carry; }, []); d($result); //3余额 17现金 18采购款 7微信小程序 9微信条码 13 支付宝条码支付 foreach ($result as $value) { switch ($value['pay_type']) { case 3: echo 2; break; case 7: case 9: echo 1; break; case 13: echo 13; break; case 17: echo 17; break; case 18: echo 18; break; } d($value); } d($result); $params = (new \app\api\validate\UserValidate())->post()->goCheck('setPayPassword'); //匹配验证码正确 if ($params['repassword'] !== $params['password']) return $this->fail('两次密码不一致'); $password = payPassword($params['password']); User::where('id', $params['id'])->update(['pay_password' => $password]); d($params); d(password_hash(123456, PASSWORD_BCRYPT)); // $updateData = []; // $goods_list = StoreOrderCartInfo::where('oid',473)->select()->toArray(); // // foreach ($goods_list as $v) { // $StoreBranchProduct =StoreBranchProduct::where( // [ // 'store_id'=>$v['store_id'], // 'product_id'=>$v['product_id'], // ] // )->withTrashed()->find(); // $updateData[] = [ // 'id' => $StoreBranchProduct['id'], // 'stock' => $StoreBranchProduct['stock']-$v['cart_num'], // 'sales' => ['inc', $v['cart_num']] // ]; // // } // // (new StoreBranchProduct())->saveAll($updateData); // // // d($updateData); $dateRange = $this->request->get('date'); // 拆分日期范围 if ($dateRange) { list($startDate, $endDate) = explode('-', $dateRange); $startTime = str_replace('/', '-', $startDate); $endTime = str_replace('/', '-', $endDate); } else { $startTime = ''; } if (empty($startTime)) { $startTime = strtotime(date('Y-m-d')); $endTime = $startTime + 86400; } $where = [ ['create_time', 'between', [$startTime, $endTime]], ['store_id', '=', 23] ]; $workbench = WorkbenchLogic::get_product_ranking($where); return $this->data($workbench); $order = StoreOrder::where('order_id', 'PF1718873590826700')->findOrEmpty(); // // $store_id = $order['store_id']; // $cart_id = $order['cart_id']; // $uid = $order['uid']; // if($uid && $cart_id && $store_id){ // $cart_id = explode(',',$cart_id); // $productLog = StoreProductLog::where([ // 'uid'=>$uid // ])->whereIn('cart_id',$cart_id) // ->select()->toArray(); // // foreach ($productLog as &$value){ // $value['pay_uid'] = $uid; // $value['oid'] = $order['id']; // $cart_info = StoreOrderCartInfo::where([ // 'uid'=>$uid,'old_cart_id'=>$value['cart_id'],'store_id'=>$store_id // ])->find(); // $value['order_num'] = $cart_info['cart_num']??1; // $value['pay_num'] = $cart_info['cart_num']??1; // $value['pay_price'] = $cart_info['price']??0; // $value['cost_price'] = $cart_info['cart_info']['cost']??0; // $value['update_time'] = time(); // unset($value['create_time'],$value['delete_time']); // } // // (new StoreProductLog())->saveAll($productLog); // } // foreach ($cart_id as &$value){ // // } d($store_id, $cart_id, $uid); $cart = Cart::create([ 'uid' => 777, 'type' => $params['type'] ?? '', 'product_id' => 12, 'store_id' => 2 ?? 0, 'staff_id' => $params['staff_id'] ?? 0, 'product_attr_unique' => '', 'cart_num' => 1, 'is_new' => 1 ?? 0, ]); d($cart, $cart['id']); //处理类型变更 $order = StoreOrder::where('pay_type', 3)->field('id')->select()->toArray(); $new = array_column($order, 'id'); // d($new,$order); $dd = CapitalFlow::where('category', 'user_order_pay') ->whereIn('link_id', $new) ->select()->toArray(); foreach ($dd as $value) { CapitalFlow::where('id', $value['id'])->update(['category' => 'user_order_balance_pay']); } d($dd); $categories = ['user_balance_recharge', 'user_order_purchase_pay']; $query = CapitalFlow::where('uid', 17) ->whereIn('category', $categories); $count = $query->count(); $data = $query ->page(1, 15) ->select()->toArray(); foreach ($data as &$value) { if ($value['category'] == 'user_order_purchase_pay') { $value['order_sn'] = StoreOrder::where('id', $value['link_id'])->value('order_id'); } elseif ($value['category'] == 'user_balance_recharge') { $value['order_sn'] = UserRecharge::where('id', $value['link_id'])->value('order_id'); } } d($data); // (new UserValidate())->post()->goCheck('fund'); $page_no = (int)$this->request->post('page_no', 1); $page_size = (int)$this->request->post('page_size', 15); $params = $this->request->post(); $params['page_no'] = $page_no > 0 ? $page_no : 1; $params['page_size'] = $page_size > 0 ? $page_size : 15; switch ($params['type']) { case 1: //采购款明细 $query = CapitalFlow::where(['uid' => $params['id']]); $count = $query->count(); $data = $query ->page($params['page_no'], $params['page_size']) ->select()->toArray(); break; case 2: //余额明细 $query = StoreFinanceFlow::with(['store']) ->where([ 'other_uid' => $params['id'], 'financial_type' => OrderEnum::VIP_ORDER_OBTAINS, 'financial_pm' => YesNoEnum::YES ]); $count = $query->count(); $data = $query ->page($params['page_no'], $params['page_size']) ->select()->toArray(); break; case 3: //礼品券明细 $query = UserSign::where(['uid' => $params['id']]); $count = $query->count(); $data = $query ->page($params['page_no'], $params['page_size']) ->select()->toArray(); break; case 4: //返还金明细 -todo back $query = VipFlow::with('store')->where(['user_id' => $params['id']]); $count = $query->count(); $data = $query ->page($params['page_no'], $params['page_size']) ->select()->toArray(); break; default: $data = []; $count = 0; } // d($data,$count); $res = [ 'list' => $data, 'count' => $count ]; // d($params); $res['page_no'] = $params['page_no']; $res['page_size'] = $params['page_size']; return $this->success('ok', $res); $field = "id,nickname,real_name,sex,avatar,account,mobile,channel,create_time,purchase_funds,user_ship, label_id,integral"; $lists = User:: with(['user_ship', 'user_label']) ->field($field) ->page(1, 50) ->order('id desc') ->select()->each(function ($data) { $data['sex_text'] = $data->sex_text; })->toArray(); foreach ($lists as &$item) { //返还金、采购款明细、余额明细、礼品券明细、返还金明细 $item['channel'] = UserTerminalEnum::getTermInalDesc($item['channel']); $item['user_address'] = UserAddress::where([ 'uid' => $item['id'], 'is_default' => YesNoEnum::YES ])->value('detail'); if ($item['vip_name'] == null) { $item['vip_name'] = '普通会员'; } if ($item['label_name'] == null) { $item['label_name'] = '无'; } $item['return_money'] = VipFlow:: where(['user_id' => $item['id'], 'status' => 0]) ->sum('number') ?? 0; } d($lists); $params = [ 'id' => 460 ]; $order = StoreOrder::with(['user', 'staff', 'product' => function ($query) { $query->field(['id', 'oid', 'product_id', 'cart_info']); }])->where($params)->find(); if (empty($order)) { throw new \Exception('订单不存在'); } $order['pay_time'] = $order['pay_time'] > 0 ? date('Y-m-d H:i:s', $order['pay_time']) : ''; $order['status_name'] = OrderEnum::getOrderType($order['status']) ?? ''; $order['refund_status_name'] = OrderEnum::refundStatus($order['refund_status']) ?? ''; $order['refund_type_name'] = OrderEnum::refundType($order['refund_type']) ?? ''; $order['pay_type_name'] = PayEnum::getPaySceneDesc($order['pay_type']) ?? ''; $detail = StoreOrderCartInfo::where('oid', $order['id'])->find()->toArray(); $vip = 0; if (isset($detail['cart_info']['vip']) && $detail['cart_info']['vip'] == 1) { $vip = 1; } $order['vip'] = $vip; $a = $order->toArray(); d($a); $detail = StoreOrderCartInfo::where('oid', 460)->find()->toArray(); $vip = 0; if (isset($detail['cart_info']['vip']) && $detail['cart_info']['vip'] == 1) { $vip = 1; } d($detail, $vip); PayNotifyLogic::cash_pay('PF1718775365804124'); d(222); $params = [ 'verify_code' => '4-00347', 'store_id' => 5, 'staff_id' => 2, ]; $res = OrderLogic::writeOff($params); d($res); return $this->dataLists(new StoreOrderLists()); $order = StoreOrder::where('id', 428)->find(); if ($order['spread_uid'] > 0) { $oldUser = User::where('id', $order['spread_uid'])->field('purchase_funds,user_ship')->find(); if ($oldUser && $oldUser['user_ship'] == 1) { if ($oldUser['purchase_funds'] < $order['pay_price']) { $order['pay_price'] = $oldUser['purchase_funds']; } } } d($order['pay_price']); PayNotifyLogic::afterPay($order); $order_id = (int)$this->request->get('order_id'); $lat = $this->request->get('lat', ''); $lng = $this->request->get('long', ''); $where = [ 'id' => $order_id, 'uid' => $this->userId, ]; $url = 'https://' . $this->request->host(true); $parm = [ 'lat' => $lat, 'long' => $lng ]; $order = OrderLogic::detail($where, $url, $parm); if ($order) { return $this->data($order); } else { return $this->fail('订单不存在'); } $order = StoreOrder::where('id', 392)->find(); $vipFrozenAmount = 0; if ($order['uid'] > 0) { // 结算金额 要支付的钱减去冻结得钱去走后面得逻辑 发得兑换券也要去减去 $vipFrozenAmount = self::dealFrozenPrice($order['id']); $order['pay_price'] = bcsub($order['pay_price'], $vipFrozenAmount, 2); $user_number = bcmul($order['pay_price'], '0.10', 2); $sing = [ 'uid' => $order['uid'], 'order_id' => $order['order_id'], 'title' => '购买商品获得兑换券', 'store_id' => $order['store_id'], 'number' => $user_number, ]; // d($sing); // $user_sing->save($sing); // User::where('id', $order['uid'])->inc('integral', $user_number)->update(); } d($vipFrozenAmount, $order['pay_price'], $sing); d($order); if ($order['uid'] > 0) { // 结算金额 要支付的钱减去冻结得钱去走后面得逻辑 发得兑换券也要去减去 $vipFrozenAmount = self::dealFrozenPrice($order['id']); $order['pay_price'] = bcsub($order['pay_price'], $vipFrozenAmount, 2); //用户下单该用户等级为1得时候才处理冻结金额 $user = User::where('id', $order['uid'])->find(); if ($user['user_ship'] == 1) { self::dealVipAmount($order, $order['pay_type']); } $user_number = bcmul($order['pay_price'], '0.10', 2); $sing = [ 'uid' => $order['uid'], 'order_id' => $order['order_id'], 'title' => '购买商品获得兑换券', 'store_id' => $order['store_id'], 'number' => $user_number, ]; $user_sing->save($sing); User::where('id', $order['uid'])->inc('integral', $user_number)->update(); } // 使用聚合函数直接计算总和 // $total_vip = StoreOrderCartInfo::where('oid', 334) // ->sum(DB::raw('cart_info->>"$.vip_frozen_price"')); // $total_vip = StoreOrderCartInfo::where('oid', 334) // ->sum(DB::raw('json_extract(cart_info, "$.vip_frozen_price")')); $total_vip = StoreOrderCartInfo::where('oid', 334) ->field('cart_info->vip_frozen_price as vip_frozen_price') // ->find() ->pluck('vip_frozen_price') ->sum(); d($total_vip); d($total_vip); // 假设 cart_info 是一个 JSON 字段 $detail = StoreOrderCartInfo::where('oid', $order['id']) ->select('cart_info->vip_frozen_price as vip_frozen_price') ->get() ->pluck('vip_frozen_price') ->sum(); $redis = local_redis(1); $luaScript = <<<LUA local product_key = KEYS[1] local quantity = tonumber(ARGV[1]) local stock = tonumber(redis.call('get', product_key)) if stock and stock >= quantity then redis.call('decrby', product_key, quantity) return 1 -- 成功 else return 0 -- 失败 end LUA; $productKey = 'kk'; $quantity = 1; // 假设每次抢购一个商品 $result = $redis->eval($luaScript, [$productKey, $quantity], 1); if ($result == 1) { d("抢购成功!"); } else { d("抢购失败,库存不足。"); } // Lua脚本,原子操作增加值 $luaScript = <<<LUA local val = redis.call('incr', KEYS[1]) return val LUA; // 需要执行Lua脚本的key $key = 'my_key'; // 参数:Lua脚本,键的数量,键 $numKeys = 1; $args = [$key]; // 修正参数顺序 $result = $redis->eval($luaScript, $args, $numKeys); d("Incremented value for '{$key}': {$result}"); $redis->set('kk', 111); d(1); $cost_all = CapitalFlow:: where(['category' => 'user_order_balance_pay']) ->sum('amount'); //查询数据 // $dd =Db::name('store_cash_finance_flow') $startTimeDefault = date('Y-m-d', time()); $endTimeDefault = date('Y-m-d', strtotime($startTimeDefault) + 86400); $data = StoreCashFinanceFlow:: where(['store_id' => 5])->order('id', 'desc') // ->whereBetweenTime('create_time',$startTimeDefault,$endTimeDefault) ->whereDay('create_time') ->sum('receivable'); d($data); // ->select()->toArray(); // $sum = array_sum(array_column($data, 'receivable')); // d($sum); $cash_today = StoreCashFinanceFlow::where('store_id', 5) ->whereDay('create_time') ->where('status', YesNoEnum::YES) ->fetchSql() ->sum('receipts'); d($cash_today); d(StoreFinanceFlow:: where(['other_uid' => 17, 'type' => 0, 'status' => 0]) ->sum('number')); $user = User::where('id', 15)->find()->toArray(); $data = OrderLogic::cartIdByOrderInfo([1], 0, $user, ['store_id' => 2]); d($data); $data = StoreBranchProduct::field('id,product_id,cost,purchase')->withTrashed()->select()->toArray(); foreach ($data as $value) { $one = StoreProduct::where('id', $value['product_id'])->field('cost,purchase')->withTrashed() ->find()->toArray(); StoreBranchProduct::where('id', $value['id']) ->update([ 'cost' => $one['cost'], 'purchase' => $one['purchase'], ]); } d($data); $template = getenv('SMS_TEMPLATE'); $check = (new SmsService())->client(18715753257, $template, 9527); d($check); $cartId = (array)$this->request->post('cart_id', []); if (empty($cartId)) { return $this->fail('缺失购物车数据'); } $uid = Cart::where('id', $cartId[0])->value('uid'); d($uid); $params = (new StoreOrderValidate())->post()->goCheck('check'); $res = (new StoreOrderLogic())->dealSendSms($params); if ($res) { return $this->success('发送成功', [], 1, 1); } else { return $this->fail('发送失败'); } $template = getenv('SMS_TEMPLATE'); d($template); $params = $this->request->post(); $remark = '5_smsPay1'; $code = Cache::get($remark); if ($code && isset($params['code']) && $code !== $params['code']) { throw new Exception('验证码错误'); } d($code); //发短信 $phone = 18715753257; $code = generateRandomCode(); Cache::set($remark, $code, 5 * 60); d($code); $config = [ // HTTP 请求的超时时间(秒) 'timeout' => 5.0, // 默认发送配置 'default' => [ // 网关调用策略,默认:顺序调用 'strategy' => \Overtrue\EasySms\Strategies\OrderStrategy::class, // 默认可用的发送网关 'gateways' => [ 'aliyun', ], ], // 可用的网关配置 'gateways' => [ 'errorlog' => [ // 'file' => '/tmp/easy-sms.log', 'file' => runtime_path() . '/logs/alipay.log', ], 'aliyun' => [ 'access_key_id' => 'LTAI5t7mhH3ij2cNWs1zhPmv', 'access_key_secret' => 'gqo2wMpvi8h5bDBmCpMje6BaiXvcPu', 'sign_name' => '里海科技', ], ], ]; try { $easySms = new EasySms($config); $res = $easySms->send($phone, [ 'content' => '您的验证码为:' . $code, 'template' => 'SMS_263810014', 'data' => [ 'code' => $code ], ]); if ($res && $res['aliyun']['status'] == 'success') { return true; } } catch (\Overtrue\EasySms\Exceptions\NoGatewayAvailableException $exception) { throw new \Exception(json_encode($exception->getExceptions())); // return false; } d($res); $user = User::where('id', \request()->userId)->find(); // $wechat = new PayService(1); // $order = [ // 'out_trade_no' => time().'', // 'description' => 'subject-测试', // 'amount' => [ // 'total' => 1, // ], // ]; // // $res = $wechat->wechat->scan($order); $startTime = 1714492800; // 开始时间 $endTime = 1717171199; // 结束时间 //对平台来说 $data = StoreFinanceFlow:: whereBetween('create_time', [$startTime, $endTime]) ->field(' CONCAT("第", LPAD(YEAR(FROM_UNIXTIME(create_time, "%Y-%m-%d")), 4, "0"), "-", LPAD(WEEK(FROM_UNIXTIME(create_time, "%Y-%m-%d"), 3), 2, "0"), "周(", LPAD(MONTH(FROM_UNIXTIME(create_time, "%Y-%m-%d")), 2, "0"), "月)") as remark_time, SUM(CASE WHEN financial_pm = 1 THEN number ELSE 0 END) as income, SUM(CASE WHEN financial_pm = 0 THEN number ELSE 0 END) as money, store_id ') ->where('financial_pm', 0) ->group('remark_time,store_id') ->order('remark_time', 'desc') ->select() // ->each(function ($item) { // $item['name'] = '周账单'; // $item['enter']=bcdiv($item['income'],$item['expenditure'],2); // return $item; // }) ->toArray(); // foreach ($data as &$v) { // $v['admin_id'] =$this->adminId; // } (new FinancialTransfers())->saveAll($data); d($data); $data = SystemStore::where('store_money', '>', 0) ->field('id store_id,name,store_money money') ->select()->toArray(); $now = new \DateTime(); $lastMonth = $now->modify('first day of last month'); foreach ($data as &$v) { $v['remark_time'] = $lastMonth->format('Y-m'); } (new FinancialTransfers())->saveAll($data); d($data); return StoreFinanceFlow::whereBetweenTime('create_time', ['1714492800', '1717171199']) ->field(' CONCAT("第", LPAD(YEAR(FROM_UNIXTIME(create_time, "%Y-%m-%d")), 4, "0"), "-", LPAD(WEEK(FROM_UNIXTIME(create_time, "%Y-%m-%d"), 3), 2, "0"), "周(", LPAD(MONTH(FROM_UNIXTIME(create_time, "%Y-%m-%d")), 2, "0"), "月)") as date, SUM(CASE WHEN financial_pm = 1 THEN number ELSE 0 END) as income, SUM(CASE WHEN financial_pm = 0 THEN number ELSE 0 END) as expenditure,store_id ') // ->limit($this->limitOffset, $this->limitLength) ->where('financial_pm', 0) ->group('date,store_id') ->order('date', 'desc') ->select()->each(function ($item) { $item['name'] = '周账单'; // $item['enter']=bcdiv($item['income'],$item['expenditure'],2); return $item; }) ->toArray(); $wechat = new PayService(1); $order = [ 'out_trade_no' => 'PF1717729550406928', 'out_refund_no' => time(), 'amount' => [ 'refund' => 1, 'total' => 1, 'currency' => 'CNY', ], // '_action' => 'jsapi', // jsapi 退款,默认 // '_action' => 'app', // app 退款 // '_action' => 'combine', // 合单退款 // '_action' => 'h5', // h5 退款 // '_action' => 'miniapp', // 小程序退款 // '_action' => 'native', // native 退款 ]; $res = $wechat->wechat->transfer($order); //生成条形码 $generator = new BarcodeGeneratorPNG(); $barcode = $generator->getBarcode('9-11476', $generator::TYPE_CODE_128); // 指定保存路径 // $savePath = 'qr/barcode.png'; $savePath = 'public/image/barcode/barcode2.png'; // 保存条形码到文件 file_put_contents($savePath, $barcode); // echo '<img src="data:image/png;base64,' . base64_encode($generator->getBarcode('081231723897', $generator::TYPE_CODE_128)) . '">'; d(111); $user = new StoreBranchProduct(); $list = [ [ 'id' => 14, 'stock' => ['dec', 2], 'sales' => ['inc', 2] // 'stock' => 1017, ], [ 'id' => 15, 'stock' => ['dec', 1], 'sales' => ['inc', 1] // 'stock' => 10, ] ]; // // $updateData[] = [ // 'id' => 14, //// 'stock' => ['dec', $v['cart_num']] // 'stock' => 10186 // ]; $user->withTrashed()->saveAll($list); d(1); $code = '8-1717845671'; $verify_code = createCode($code); d($verify_code); $orderPickupCode = str_pad(rand(0, 99999), 5, '0', STR_PAD_LEFT); d($orderPickupCode); $order_id = getNewOrderId('PF'); d($order_id); /*$order['pay_price'] = 0.01; $order['store_id'] = 2; $order['profit'] = "0.00"; $fees = bcdiv(bcmul($order['pay_price'], '0.02', 2), 1, 2); $frozen = bcsub($order['profit'] , $fees, 2); $money_limt = SystemStore::where('id', $order['store_id'])->field('paid_deposit,security_deposit')->find(); $deposit = bcsub($money_limt['security_deposit'], $money_limt['paid_deposit'], 2); d($fees,$frozen,$deposit); $a = 'PF1717494034927974-1'; $check = StoreOrder::where('order_id',$a)->count(); d($check);*/ //付款 $j = '{"id":"12c29662-eba0-532a-832e-12ddc30aa5ac","create_time":"2024-06-06T15:47:20+08:00","resource_type":"encrypt-resource","event_type":"TRANSACTION.SUCCESS","summary":"\u652f\u4ed8\u6210\u529f","resource":{"original_type":"transaction","algorithm":"AEAD_AES_256_GCM","ciphertext":{"mchid":"1654274867","appid":"wxdee751952c8c2027","out_trade_no":"PF1718073229145240","transaction_id":"4200002220202406064425693065","trade_type":"JSAPI","trade_state":"SUCCESS","trade_state_desc":"\u652f\u4ed8\u6210\u529f","bank_type":"ABC_DEBIT","attach":"wechat_common","success_time":"2024-06-06T15:47:20+08:00","payer":{"openid":"onoIP7c1qgjfIr2ce7GJAAmVGcL0"},"amount":{"total":1,"payer_total":1,"currency":"CNY","payer_currency":"CNY"}},"associated_data":"transaction","nonce":"blQOXyAUGK4K"}}'; //退款 /* $j = '{"id":"1841a014-0829-5c12-82d0-ab211d6c06e3","create_time":"2024-06-06T09:53:59+08:00","resource_type":"encrypt-resource","event_type":"REFUND.SUCCESS","summary":"\u9000\u6b3e\u6210\u529f","resource":{"original_type":"refund","algorithm":"AEAD_AES_256_GCM","ciphertext":{"mchid":"1654274867","out_trade_no":"PF1717558027664507","transaction_id":"4200002211202406058608104458","out_refund_no":"BO1717638826","refund_id":"50303409732024060648234415101","refund_status":"SUCCESS","success_time":"2024-06-06T09:53:59+08:00","amount":{"total":1,"refund":1,"payer_total":1,"payer_refund":1},"user_received_account":"\u652f\u4ed8\u7528\u6237\u96f6\u94b1"},"associated_data":"refund","nonce":"yteRBBbAwfdE"}}';*/ $result = json_decode($j, true); $ciphertext = $result['resource']['ciphertext']; PayNotifyLogic::handle('wechat_common', $ciphertext['out_trade_no'], $ciphertext); d(1); $order = StoreOrder::where('id', 80)->findOrEmpty(); // d($order); $transaction_id = 12121212121212; $financeLogic = new StoreFinanceFlowLogic(); $financeLogic->order = $order; $financeLogic->user = ['uid' => $order['uid']]; if ($order->pay_type != 9 || $order->pay_type != 10) { $financeLogic->in($transaction_id, $order['pay_price'], OrderEnum::USER_ORDER_PAY); //用户单入账 //商户应该获得的钱 每个商品的price-ot_price 利润 if ($order->profit !== "0.00") { //手续费 $fees = bcdiv(bcmul($order['pay_price'], '0.02', 2), 1, 2); $financeLogic->in($transaction_id, $fees, OrderEnum::ORDER_COMMITION, $order['store_id']); //手续费入账 $financeLogic->out($transaction_id, $order['profit'], OrderEnum::MERCHANT_ORDER_OBTAINS, $order['store_id'], $order['staff_id'], 0);//商户获得的 //冻结金额的 $frozen = bcsub($order->profit, $fees, 2); //缴纳齐全了就加商户没有就加到平台 $money_limt = SystemStore::where('id', $order['store_id'])->field('paid_deposit,security_deposit')->find(); $deposit = bcsub($money_limt['security_deposit'], $money_limt['paid_deposit'], 2);//剩余额度 if ($deposit > 0 && $frozen > 0) { $amount = min($deposit, $frozen); $financeLogic->in($transaction_id, $amount, OrderEnum::ORDER_MARGIN, $order['store_id'], $order['staff_id']); } //当前商户得冻结金额如果缴纳满足了就加到商户余额中 } $financeLogic->save(); } d(1); $result = json_decode($j, true); $ciphertext = $result['resource']['ciphertext']; PayNotifyLogic::handle('refund', $ciphertext['out_trade_no'], $ciphertext); d($result); if ($result && $result->event_type == 'REFUND.SUCCESS') { $ciphertext = $result->resource['ciphertext']; if ($ciphertext['refund_status'] === 'SUCCESS') { //处理订单 -1判断是退的一单还是拆分的订单 PayNotifyLogic::handle('refund', $ciphertext['out_trade_no'], $ciphertext); $app->wechat->success(); } } // d(1511); //退款 $wechat = new PayService(1); $order = [ 'out_trade_no' => 'PF1717729550406928', 'out_refund_no' => time(), 'amount' => [ 'refund' => 1, 'total' => 1, 'currency' => 'CNY', ], // '_action' => 'jsapi', // jsapi 退款,默认 // '_action' => 'app', // app 退款 // '_action' => 'combine', // 合单退款 // '_action' => 'h5', // h5 退款 // '_action' => 'miniapp', // 小程序退款 // '_action' => 'native', // native 退款 ]; $res = $wechat->wechat->refund($order); d($res); //支付 $j = '{"id":"89b226d6-e305-5a83-9e7e-29b688cc3b10","create_time":"2024-06-05T11:27:21+08:00","resource_type":"encrypt-resource","event_type":"TRANSACTION.SUCCESS","summary":"\u652f\u4ed8\u6210\u529f","resource":{"original_type":"transaction","algorithm":"AEAD_AES_256_GCM","ciphertext":{"mchid":"1654274867","appid":"wxdee751952c8c2027","out_trade_no":"PF1717556761663487","transaction_id":"4200002211202406058608104458","trade_type":"JSAPI","trade_state":"SUCCESS","trade_state_desc":"\u652f\u4ed8\u6210\u529f","bank_type":"OTHERS","attach":"recharge","success_time":"2024-06-05T11:27:21+08:00","payer":{"openid":"onoIP7TFXN_106JkCMInwOTPCsD4"},"amount":{"total":1,"payer_total":1,"currency":"CNY","payer_currency":"CNY"}},"associated_data":"transaction","nonce":"4i7rmOABdwV3"}}'; $result = json_decode($j, true); $ciphertext = $result['resource']['ciphertext']; PayNotifyLogic::handle('wechat_common', $ciphertext['out_trade_no'], $ciphertext); d(1); $all = UserShip::field('id,title,limit')->select()->toArray(); $new = $this->getNextArrayByID($all, 1); d($new); d($all); \support\Log::info('fasfsaf'); // Log::info('fdadsdadasd'); d(6323); // d($this->getAccessToken()); $a = (new WeChatMnpService())->getAccessToken(); // $a = (new WeChatMnpService())->getUserPhoneNumber('a5c44554ce7caf35d3cf2196da96f7ab735deaf674d639ecb482ce618fa82ee6'); d($a); throw new MyBusinessException('缺失经纬度'); return $this->success('success', UserLogic::info(8)); throw new Exception('缺失经纬度'); $params = [ 'pay_type' => 1, 'mer_id' => 1, ]; self::$total = 0; $order = [ 'add_time' => time(), 'create_time' => time(), 'order_id' => getNewOrderId('PF'), 'total_price' => self::$total,//总价 'total_num' => 1,//总数 'pay_type' => $params['pay_type'] ?? 0, 'cart_id' => implode(',', [1, 2, 3]), // 'delivery_msg'=>' 预计48小时发货 ' ]; $_order = $order; $_order['deduction_price'] = 0; $_order['merchant'] = $params['mer_id']; $_order['uid'] = request()->userId; $_order['money'] = 0; $_order['user'] = request()->userId; $_order['account'] = 0; $_order['payinfo'] = ''; $_order['type'] = 0; $_order['source'] = 0; $_order['actual'] = $_order['total_price']; // d($_order); // if($addressId>0){ // $address=UserAddress::where(['address_id'=>$addressId,'uid'=>Request()->userId])->find(); // if($address){ // $_order['real_name'] = $address['real_name']; // $_order['user_phone'] = $address['phone']; // $_order['user_address'] = $address['detail']; // $_order['address_id'] = $addressId; // } // } // if($params['pay_type']==PayEnum::WECHAT_PAY_BARCODE){ // $_order['source']=1; // } // if($params['pay_type']==PayEnum::CASH_PAY){ // $_order['money']=$_order['total']; // } $order = StoreOrder::create($_order); d($order); } public static function show() { //处理分类缺失 $store_id = 23; $data = StoreBranchProduct::where('store_id', $store_id) ->field('cate_id,store_id') ->select()->toArray(); foreach ($data as $value) { self::updateGoodsclass($value['cate_id'], $value['store_id']); } d($data); } public static function dealFrozenPrice($oid) { $detail = StoreOrderCartInfo::where('oid', $oid)->select()->toArray(); $total_vip = 0; foreach ($detail as $value) { $total_vip += $value['cart_info']['vip_frozen_price']; } return $total_vip; } public function getAccessToken() { // 微信接口地址 $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxdee751952c8c2027&secret=2c46d77df53cd942a7ff608247ea0ccd"; // 发送 HTTP GET 请求 $response = file_get_contents($url); // 解析 JSON 响应 $responseData = json_decode($response, true); // 检查是否成功获取 access_token if (isset($responseData['access_token'])) { return $responseData['access_token']; } else { // 获取 access_token 失败,可以记录错误信息 error_log("Failed to get access_token: " . $response); return null; } } function getNextArrayByID($arr, $id) { // 遍历数组 foreach ($arr as $key => $value) { // 检查当前数组的id是否与传入的id匹配 if ($value['id'] == $id) { // 如果当前数组不是最后一个,则返回下一个数组 if ($key + 1 < count($arr)) { return $arr[$key + 1]; } // 如果当前数组是最后一个,则返回null或空数组 return null; } } // 如果没有找到匹配的id,则返回null或空数组 return null; } public static function updateGoodsclass($cate_id, $store_id = 0, $type = 0) { $one = StoreCategory::where('id', $cate_id)->find(); if ($one) { //查二级分类 $two = StoreCategory::where('id', $one['pid'])->find(); if ($two) { if ($two['pid'] != 0) { self::cate_update($cate_id, $two['id'], $store_id, 3); self::cate_update($two['id'], $two['pid'], $store_id, 2); self::cate_update($two['pid'], 0, $store_id, 1); } else { if ($one['pid'] == 0) { self::cate_update($one['id'], 0, $store_id, 1); } else { self::cate_update($one['id'], $one['pid'], $store_id, 2); self::cate_update($one['pid'], 0, $store_id, 1); } } } } } public static function cate_update($cate_id = 0, $pid = 0, $store_id = 0, $level = 1) { $find = Db::name('store_product_cate')->where(['store_id' => $store_id, 'cate_id' => $cate_id, 'level' => $level])->find(); if ($find) { Db::name('store_product_cate')->where('id', $find['id'])->inc('count', 1)->update(); } else { Db::name('store_product_cate')->insert(['pid' => $pid, 'store_id' => $store_id, 'cate_id' => $cate_id, 'count' => 1, 'level' => $level, 'create_time' => time(), 'update_time' => time()]); } } }