FastMovieAI AI短剧创作平台 二开基线
- 源码: xhadmincn/FastMovieAI (Apache 2.0) - 二开: Docker部署, Swoole改Select, route.php修复, 补update/VERSION - vendor/示例资源已gitignore
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\finance\app\api\controller;
|
||||
|
||||
use app\Basic;
|
||||
use app\expose\enum\PaymentChannels;
|
||||
use plugin\finance\app\model\PluginFinanceOrders;
|
||||
use plugin\finance\app\model\PluginFinanceOrdersLog;
|
||||
use plugin\finance\utils\enum\OrdersState;
|
||||
use plugin\marketing\app\model\PluginMarketingCoupon;
|
||||
use plugin\marketing\app\model\PluginMarketingCouponCode;
|
||||
use support\Log;
|
||||
use support\Request;
|
||||
use think\facade\Db;
|
||||
|
||||
class IndexController extends Basic
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$limit = $request->get('limit', 10);
|
||||
$where = [];
|
||||
$title = $request->get('title');
|
||||
if ($title) {
|
||||
$where[] = ['title|trade_no', 'like', "%{$title}%"];
|
||||
}
|
||||
$state = $request->get('state');
|
||||
if ($state !== null) {
|
||||
$where[] = ['state', '=', $state];
|
||||
}
|
||||
$type = $request->get('type');
|
||||
if ($type) {
|
||||
$where[] = ['type', '=', $type];
|
||||
}
|
||||
$where[] = ['uid', '=', $request->uid];
|
||||
$config = config('plugin.shopwwi.filesystem.app.storage.public');
|
||||
$list = PluginFinanceOrders::where($where)->with(['site' => function ($query) {
|
||||
$query->field('id,title,logo,domain,ip')->hidden(['id']);
|
||||
}])
|
||||
->order('id desc')->paginate($limit)->scene('external')->each(function ($item) use ($config) {
|
||||
$item->state_text = OrdersState::get($item->state);
|
||||
$pay_type = PaymentChannels::get($item->pay_type);
|
||||
if ($pay_type) {
|
||||
$pay_type['icon'] = $config['url'] . $pay_type['icon'];
|
||||
$item->pay_type_text = $pay_type;
|
||||
}
|
||||
if (!empty($item->coupon)) {
|
||||
$coupon_ids = PluginMarketingCouponCode::whereIn('id', $item->coupon)->column('coupon_id');
|
||||
$item->coupon = PluginMarketingCoupon::whereIn('id', array_unique($coupon_ids))->column('title');
|
||||
}
|
||||
});
|
||||
return $this->resData($list);
|
||||
}
|
||||
public function details(Request $request)
|
||||
{
|
||||
$trade_no = $request->get('trade_no');
|
||||
$order = PluginFinanceOrders::where('trade_no', $trade_no)->find()->scene('external');
|
||||
$order->state_text = OrdersState::get($order->state);
|
||||
return $this->resData($order);
|
||||
}
|
||||
public function OrdersStateEnum(Request $request)
|
||||
{
|
||||
$list = OrdersState::getOptions();
|
||||
return $this->resData($list);
|
||||
}
|
||||
public function cancel(Request $request)
|
||||
{
|
||||
$trade_no = $request->post('trade_no');
|
||||
$where = [
|
||||
['trade_no', '=', $trade_no],
|
||||
['uid', '=', $request->uid],
|
||||
['state', '=', OrdersState::WAIT_PAY['value']]
|
||||
];
|
||||
$order = PluginFinanceOrders::where($where)->find();
|
||||
if (!$order) {
|
||||
return $this->fail('订单不存在');
|
||||
}
|
||||
Db::startTrans();
|
||||
try {
|
||||
PluginFinanceOrders::cancel($order);
|
||||
PluginFinanceOrdersLog::info($order, '用户订单取消');
|
||||
Db::commit();
|
||||
} catch (\Throwable $th) {
|
||||
Db::rollback();
|
||||
Log::error('User Orders Cancel Error:' . $th->getMessage(), $th->getTrace());
|
||||
return $this->fail('取消失败');
|
||||
}
|
||||
return $this->success('取消成功');
|
||||
}
|
||||
public function delete(Request $request)
|
||||
{
|
||||
$trade_no = $request->post('trade_no');
|
||||
$where = [
|
||||
['trade_no', '=', $trade_no],
|
||||
['uid', '=', $request->uid],
|
||||
];
|
||||
$order = PluginFinanceOrders::where($where)->find();
|
||||
if (!$order) {
|
||||
return $this->fail('订单不存在');
|
||||
}
|
||||
if ($order->state == OrdersState::WAIT_PAY['value']) {
|
||||
Db::startTrans();
|
||||
try {
|
||||
PluginFinanceOrders::cancel($order);
|
||||
PluginFinanceOrdersLog::info($order, '用户删除订单取消');
|
||||
Db::commit();
|
||||
} catch (\Throwable $th) {
|
||||
Db::rollback();
|
||||
Log::error('User Orders Delete Error:' . $th->getMessage(), $th->getTrace());
|
||||
return $this->fail('删除失败');
|
||||
}
|
||||
}
|
||||
$order->delete();
|
||||
return $this->success('删除成功');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,301 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\finance\app\api\controller;
|
||||
|
||||
use app\Basic;
|
||||
use app\expose\enum\EventName;
|
||||
use app\expose\enum\PaymentChannels;
|
||||
use app\expose\enum\ResponseCode;
|
||||
use app\expose\helper\Payment;
|
||||
use app\model\PaymentConfig;
|
||||
use plugin\finance\app\model\PluginFinanceOrders;
|
||||
use plugin\finance\app\model\PluginFinanceOrdersLog;
|
||||
use plugin\finance\app\model\PluginFinanceWallet;
|
||||
use plugin\finance\utils\enum\OrdersState;
|
||||
use plugin\finance\utils\enum\OrdersType;
|
||||
use plugin\marketing\app\model\PluginMarketingPlan;
|
||||
use plugin\marketing\app\model\PluginMarketingPlanPrice;
|
||||
use plugin\marketing\app\model\PluginMarketingPoints;
|
||||
use support\Log;
|
||||
use support\Request;
|
||||
use think\facade\Db;
|
||||
use Webman\Event\Event;
|
||||
|
||||
class OrdersController extends Basic
|
||||
{
|
||||
public function payOrder(Request $request)
|
||||
{
|
||||
$data = $request->post();
|
||||
if (empty($data['trade_no'])) {
|
||||
return $this->fail('参数错误');
|
||||
}
|
||||
$order = PluginFinanceOrders::where(['trade_no' => $data['trade_no'], 'uid' => $request->uid])->find();
|
||||
if (!$order) {
|
||||
return $this->fail('订单不存在');
|
||||
}
|
||||
if ($order->state !== OrdersState::WAIT_PAY['value']) {
|
||||
return $this->fail('订单状态错误');
|
||||
}
|
||||
try {
|
||||
return $this->builderPay($request, $order);
|
||||
} catch (\Throwable $th) {
|
||||
return $this->exception($th);
|
||||
}
|
||||
}
|
||||
public function create(Request $request)
|
||||
{
|
||||
$data = $request->post();
|
||||
if (empty($data['type'])) {
|
||||
return $this->fail('参数错误');
|
||||
}
|
||||
try {
|
||||
switch ($data['type']) {
|
||||
case OrdersType::POINTS['value']:
|
||||
$order = $this->createPoints($request);
|
||||
break;
|
||||
case OrdersType::VIP['value']:
|
||||
$order = $this->createVip($request);
|
||||
break;
|
||||
default:
|
||||
throw new \Exception('订单类型错误');
|
||||
}
|
||||
} catch (\Throwable $th) {
|
||||
return $this->exception($th);
|
||||
}
|
||||
Event::emit(EventName::ORDERS_CREATE['value'], $order);
|
||||
try {
|
||||
return $this->builderPay($request, $order);
|
||||
} catch (\Throwable $th) {
|
||||
return $this->exception($th);
|
||||
}
|
||||
}
|
||||
private function builderPay(Request $request, PluginFinanceOrders $order)
|
||||
{
|
||||
if ($order->state === OrdersState::PAID['value']) {
|
||||
try {
|
||||
PluginFinanceOrders::finish(['trade_no' => $order->trade_no]);
|
||||
} catch (\Throwable $th) {
|
||||
PluginFinanceOrdersLog::fail($order, $th->getMessage());
|
||||
Log::error("订单完成失败:{$order->trade_no},{$th->getMessage()},{$th->getFile()}:{$th->getLine()}", $th->getTrace());
|
||||
throw $th;
|
||||
}
|
||||
return $this->code(ResponseCode::PAY_SUCCESS, '支付成功');
|
||||
} else {
|
||||
$data = $request->post();
|
||||
if (empty($data['payment_id'])) {
|
||||
throw new \Exception('支付方式不存在');
|
||||
}
|
||||
$PaymentConfig = PaymentConfig::where(['id' => $data['payment_id']])->find();
|
||||
if (!$PaymentConfig) {
|
||||
throw new \Exception('支付方式不存在');
|
||||
}
|
||||
$order->plugin = 'finance';
|
||||
$order->trade = $order->trade_no;
|
||||
$order->price = $order->money;
|
||||
switch ($PaymentConfig->channels) {
|
||||
case PaymentChannels::WXPAY['value']:
|
||||
$result = Payment::wxPay($order, $PaymentConfig);
|
||||
$orderInfo = [
|
||||
'platform' => $PaymentConfig->platform,
|
||||
'title' => $order->title,
|
||||
'pay_info' => $result,
|
||||
'trade_no' => $order->trade_no,
|
||||
'origin_money' => $order->origin_money,
|
||||
'expire_time' => $order->expire_time,
|
||||
'money' => $order->money
|
||||
];
|
||||
return $this->resData($orderInfo);
|
||||
case PaymentChannels::ALIPAY['value']:
|
||||
break;
|
||||
case PaymentChannels::INTEGRAL['value']:
|
||||
break;
|
||||
case PaymentChannels::BALANCE['value']:
|
||||
Db::startTrans();
|
||||
try {
|
||||
$order = PluginFinanceOrders::where(['id' => $order->id])->find();
|
||||
if (!$order) {
|
||||
throw new \Exception('订单不存在');
|
||||
}
|
||||
$order->state = OrdersState::PAID['value'];
|
||||
$order->pay_type = PaymentChannels::BALANCE['value'];
|
||||
$order->pay_time = date('Y-m-d H:i:s');
|
||||
$order->save();
|
||||
PluginFinanceWallet::consume($order);
|
||||
PluginFinanceOrdersLog::info($order, '余额支付成功');
|
||||
Db::commit();
|
||||
} catch (\Throwable $th) {
|
||||
Db::rollback();
|
||||
PluginFinanceOrdersLog::fail($order, $th->getMessage());
|
||||
throw $th;
|
||||
}
|
||||
Event::emit(EventName::ORDERS_PAY['value'], [
|
||||
'data' => $order,
|
||||
'payment_channel' => PaymentChannels::BALANCE['value'],
|
||||
'plugin' => 'finance',
|
||||
'template_id' => $PaymentConfig->template_id
|
||||
]);
|
||||
return $this->builderPay($request, $order);
|
||||
default:
|
||||
throw new \Exception('未知支付方式');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private function createVip(Request $request){
|
||||
Db::startTrans();
|
||||
try {
|
||||
$data = $request->post();
|
||||
$vipInfoPrice = PluginMarketingPlanPrice::where(['id' => $data['id']])->find();
|
||||
if (!$vipInfoPrice) {
|
||||
throw new \Exception('会员套餐不存在');
|
||||
}
|
||||
$vipInfo = PluginMarketingPlan::where(['id' => $vipInfoPrice->plan_id])->find();
|
||||
if (!$vipInfo) {
|
||||
throw new \Exception('会员套餐不存在');
|
||||
}
|
||||
$order = new PluginFinanceOrders;
|
||||
$order->uid = $request->uid;
|
||||
$order->alias_id = $vipInfoPrice->id;
|
||||
$order->title = '购买会员:' . $vipInfo->name;
|
||||
$order->origin_money = $vipInfoPrice->price;
|
||||
$order->unit_money = $vipInfoPrice->price;
|
||||
$order->money = $vipInfoPrice->price;
|
||||
$order->num = 1;
|
||||
$order->pay_type = $data['pay_type'];
|
||||
$order->state = OrdersState::WAIT_PAY['value'];
|
||||
$order->type = OrdersType::VIP['value'];
|
||||
$order->channels_uid = $request->channels_uid;
|
||||
$order->plugin = 'finance';
|
||||
$order->expire_time = date('Y-m-d H:i:s', strtotime('+15 minutes'));
|
||||
$order->save();
|
||||
PluginFinanceOrdersLog::info($order, '创建订单');
|
||||
Db::commit();
|
||||
return $order;
|
||||
} catch (\Throwable $th) {
|
||||
Db::rollback();
|
||||
throw $th;
|
||||
}
|
||||
}
|
||||
|
||||
private function createPoints(Request $request)
|
||||
{
|
||||
Db::startTrans();
|
||||
try {
|
||||
$data = $request->post();
|
||||
$pointsInfo = PluginMarketingPoints::where(['id' => $data['id'], 'channels_uid' => $request->channels_uid])->find();
|
||||
if (!$pointsInfo) {
|
||||
throw new \Exception('积分套餐不存在');
|
||||
}
|
||||
$order = new PluginFinanceOrders;
|
||||
$order->uid = $request->uid;
|
||||
$order->alias_id = $pointsInfo->id;
|
||||
$order->title = '购买套餐:' . $pointsInfo->name;
|
||||
$order->origin_money = $pointsInfo->price;
|
||||
$order->unit_money = $pointsInfo->price;
|
||||
$order->money = $pointsInfo->price;
|
||||
$order->num = 1;
|
||||
$order->pay_type = $data['pay_type'];
|
||||
$order->state = OrdersState::WAIT_PAY['value'];
|
||||
$order->type = OrdersType::POINTS['value'];
|
||||
$order->channels_uid = $request->channels_uid;
|
||||
$order->plugin = 'finance';
|
||||
$order->expire_time = date('Y-m-d H:i:s', strtotime('+15 minutes'));
|
||||
$order->save();
|
||||
PluginFinanceOrdersLog::info($order, '创建订单');
|
||||
Db::commit();
|
||||
return $order;
|
||||
} catch (\Throwable $th) {
|
||||
Db::rollback();
|
||||
throw $th;
|
||||
}
|
||||
}
|
||||
|
||||
private function createMoney(Request $request)
|
||||
{
|
||||
$data = $request->post();
|
||||
Db::startTrans();
|
||||
try {
|
||||
//组装订单数据
|
||||
$order = new PluginFinanceOrders;
|
||||
$order->uid = $request->uid;
|
||||
$order->money = (int)$data['num']; //原价 未实现优惠券逻辑
|
||||
if ($order->money < 1) {
|
||||
throw new \Exception('充值金额不能小于1元');
|
||||
}
|
||||
$order->origin_money = $order->money;
|
||||
$order->title = '充值金额:' . $order->money . '元';
|
||||
$order->state = OrdersState::WAIT_PAY['value'];
|
||||
$order['type'] = $data['type'];
|
||||
$order->save();
|
||||
PluginFinanceOrdersLog::info($order->id, '创建订单');
|
||||
Db::commit();
|
||||
} catch (\Throwable $th) {
|
||||
Db::rollback();
|
||||
throw $th;
|
||||
}
|
||||
return $order;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查看订单状态 是否支付
|
||||
* @Author: 贵州猿创科技有限公司
|
||||
* @Date: 2023-05-20
|
||||
*/
|
||||
public function state(Request $request)
|
||||
{
|
||||
$trade_no = $request->get('trade_no');
|
||||
if (!$trade_no) {
|
||||
return $this->fail('参数错误');
|
||||
}
|
||||
$info = PluginFinanceOrders::where(['trade_no' => $trade_no, 'uid' => $request->uid])->find();
|
||||
if (!$info) {
|
||||
return $this->fail('订单不存在');
|
||||
}
|
||||
switch ($info->state) {
|
||||
case OrdersState::WAIT_PAY['value']:
|
||||
return $this->code(ResponseCode::WAIT, '支付中');
|
||||
case OrdersState::PAID['value']:
|
||||
case OrdersState::FINISH['value']:
|
||||
return $this->code(ResponseCode::PAY_SUCCESS, '支付成功');
|
||||
case OrdersState::REFUND_ING['value']:
|
||||
case OrdersState::REFUND_SUCCESS['value']:
|
||||
case OrdersState::REFUND_FAIL['value']:
|
||||
return $this->fail('订单已退款或退款中');
|
||||
case OrdersState::INVALID['value']:
|
||||
return $this->fail('订单已作废');
|
||||
case OrdersState::NOTIFY_FAIL['value']:
|
||||
return $this->fail('订单通知失败');
|
||||
case OrdersState::CANCEL['value']:
|
||||
return $this->fail('订单已取消');
|
||||
default:
|
||||
return $this->fail('订单状态错误');
|
||||
}
|
||||
}
|
||||
public function cancel(Request $request)
|
||||
{
|
||||
$trade_no = $request->get('trade_no');
|
||||
if (!$trade_no) {
|
||||
return $this->fail('参数错误');
|
||||
}
|
||||
try {
|
||||
PluginFinanceOrders::cancel(['trade_no' => $trade_no, 'uid' => $request->uid]);
|
||||
} catch (\Throwable $th) {
|
||||
return $this->fail($th->getMessage());
|
||||
}
|
||||
return $this->success('取消成功');
|
||||
}
|
||||
|
||||
public function getOrderStatus(Request $request)
|
||||
{
|
||||
$trade_no = $request->get('trade');
|
||||
if (!$trade_no) {
|
||||
return $this->fail('参数错误');
|
||||
}
|
||||
$order = PluginFinanceOrders::where(['trade_no' => $trade_no, 'uid' => $request->uid])->find();
|
||||
if (!$order) {
|
||||
return $this->fail('订单不存在');
|
||||
}
|
||||
return $this->resData(['status' => in_array($order->state, [OrdersState::PAID['value'], OrdersState::FINISH['value']])]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\finance\app\api\controller;
|
||||
|
||||
use app\Basic;
|
||||
use plugin\finance\app\model\PluginFinanceWallet;
|
||||
use support\Request;
|
||||
|
||||
class UserController extends Basic
|
||||
{
|
||||
public function wallet(Request $request)
|
||||
{
|
||||
$uid = $request->uid;
|
||||
$PluginFinanceWallet = PluginFinanceWallet::where('uid', $uid)->find();
|
||||
if (!$PluginFinanceWallet) {
|
||||
$PluginFinanceWallet = new PluginFinanceWallet();
|
||||
$PluginFinanceWallet->uid = $uid;
|
||||
$PluginFinanceWallet->save();
|
||||
}
|
||||
return $this->resData($PluginFinanceWallet->hidden(['uid']));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user