multi-store/app/api/controller/LiuController.php

1368 lines
46 KiB
PHP
Raw Normal View History

2024-06-22 17:24:57 +08:00
<?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\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()]);
}
}
}