store ufutx customer

This commit is contained in:
Hankin 2026-04-09 13:52:20 +08:00
parent 9630a069f2
commit f550a4a539
8 changed files with 1207 additions and 837 deletions

File diff suppressed because it is too large Load Diff

View File

@ -40,6 +40,7 @@ use App\Models\Server\Survey;
use App\Models\UnionUser; use App\Models\UnionUser;
use App\Server\ReportFile; use App\Server\ReportFile;
use App\Services\LiveAlipayService; use App\Services\LiveAlipayService;
use App\Services\OrderService;
use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController; use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Foundation\Validation\ValidatesRequests;
@ -2166,17 +2167,10 @@ class Controller extends BaseController
public function test(Request $request) public function test(Request $request)
{ {
// $access_token = ""; $order = TouristOrder::find($request->order_id);
// $app = \WechatService::officialApp()->access_token; $orderService = new OrderService();
// $token = $app->getToken(true); $res = $orderService->storeUftxCustomer($order);
// $access_token = $token['access_token']; dd($res);
// if (empty($access_token)) {
// return $this->failure("缺少access_token");
// }
// $url = "https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=" . $access_token;
// $result = Http::get($url);
// dd($result);
} }
public function postIndex() public function postIndex()

File diff suppressed because it is too large Load Diff

View File

@ -61,6 +61,7 @@ use App\Models\TouristOrder;
use App\Models\User; use App\Models\User;
use App\Models\Wechat; use App\Models\Wechat;
use App\Services\IMService; use App\Services\IMService;
use App\Services\OrderService;
use App\Services\SaasVipService; use App\Services\SaasVipService;
use App\Services\TestService; use App\Services\TestService;
use App\Utils\Http; use App\Utils\Http;
@ -171,8 +172,7 @@ class TestController extends Controller
} }
public function test($request) public function test($request)
{ {
$time = '2023-01-01 00:00';
dd(date('Y-m-d', strtotime($time)));
} }
public function merchantEarningExport(Request $request) public function merchantEarningExport(Request $request)

View File

@ -0,0 +1,11 @@
<?php
namespace App\Models\Dma;
use Illuminate\Database\Eloquent\Model;
class DmaServiceUserRole extends Model
{
protected $table = 'dma_service_user_role';
protected $connection = 'dma';
}

View File

@ -0,0 +1,14 @@
<?php
namespace App\Models\Dma;
use Illuminate\Database\Eloquent\Model;
class S2Customer extends Model
{
protected $table = 's2_customer';
protected $connection = 'dma';
public $fillable = [];
public $guarded = [];
}

View File

@ -3,6 +3,8 @@
namespace App\Services; namespace App\Services;
use App\Contracts\OrderContract; use App\Contracts\OrderContract;
use App\Models\Dma\DmaServiceUserRole;
use App\Models\Dma\S2Customer;
use App\Models\Order; use App\Models\Order;
use App\Models\PayOrder; use App\Models\PayOrder;
use App\Models\RankHistory; use App\Models\RankHistory;
@ -19,21 +21,22 @@ use App\Models\PaasAccount;
use App\Models\Live\Asset; use App\Models\Live\Asset;
use App\Http\Response\ResponseJson; use App\Http\Response\ResponseJson;
use App\Models\Live\AssetLog; use App\Models\Live\AssetLog;
use Log;
use PhpParser\Node\Expr\Cast\Bool_;
class OrderService implements OrderContract class OrderService implements OrderContract
{ {
use ResponseJson; use ResponseJson;
//充值会员 //充值会员
public function officialMemberCharge($request, $rank_name, $rank_month, $discount_price, $score, $trade_type="h5") public function officialMemberCharge($request, $rank_name, $rank_month, $discount_price, $score, $trade_type = "h5")
{ {
$user = auth()->user(); $user = auth()->user();
//购买的会员等级 //购买的会员等级
$sub_rank_id = $request->input('sub_rank_id'); $sub_rank_id = $request->input('sub_rank_id');
$goods = '购买'.$rank_month.'个月'.$rank_name.'VIP'; $goods = '购买' . $rank_month . '个月' . $rank_name . 'VIP';
//订单号 //订单号
if ($trade_type == 'alipay') { if ($trade_type == 'alipay') {
$trade_no = \CommonUtilsService::getAliTradeNo(); $trade_no = \CommonUtilsService::getAliTradeNo();
}else{ } else {
$trade_no = \CommonUtilsService::getTradeNO(); $trade_no = \CommonUtilsService::getTradeNO();
} }
//如果购买的会员是市级会员 //如果购买的会员是市级会员
@ -44,31 +47,31 @@ class OrderService implements OrderContract
'user_id' => $user->id, 'user_id' => $user->id,
'trade_no' => $trade_no, 'trade_no' => $trade_no,
'pay_status' => 'PAID', 'pay_status' => 'PAID',
'is_hooked' =>1, 'is_hooked' => 1,
'cash' => 0, 'cash' => 0,
'score' => 0, 'score' => 0,
); );
$order = array( $order = array(
'user_id'=>$user->id, 'user_id' => $user->id,
'type_id'=>$sub_rank_id, 'type_id' => $sub_rank_id,
'goods'=>$goods, 'goods' => $goods,
'price'=>0, 'price' => 0,
'num'=>1, 'num' => 1,
'type'=>'rank', 'type' => 'rank',
'trade_no'=>$trade_no, 'trade_no' => $trade_no,
'pay_status'=>'PAID', 'pay_status' => 'PAID',
); );
$order_pay = PayOrder::create($pay_order); $order_pay = PayOrder::create($pay_order);
$order = Order::create($order); $order = Order::create($order);
}else{ } else {
$order_pay = PayOrder::where('trade_no', $order->trade_no)->first(); $order_pay = PayOrder::where('trade_no', $order->trade_no)->first();
} }
$order_pay->wx_pay = []; $order_pay->wx_pay = [];
$h = RankHistory::where('user_id', $user->id)->where('rank_id', 1)->first(); $h = RankHistory::where('user_id', $user->id)->where('rank_id', 1)->first();
if (empty($h)) { if (empty($h)) {
RankHistory::create([ RankHistory::create([
'user_id'=>$user->id, 'user_id' => $user->id,
'rank_id'=>1, 'rank_id' => 1,
]); ]);
} }
return $order_pay; return $order_pay;
@ -79,14 +82,14 @@ class OrderService implements OrderContract
if ($score->remain_amount >= $discount_price) { if ($score->remain_amount >= $discount_price) {
$cash = 0; $cash = 0;
$score = $discount_price; $score = $discount_price;
}else{ } else {
$discount_price = (int)number_format($discount_price, 2, '', ''); $discount_price = (int) number_format($discount_price, 2, '', '');
$remain_amount = (int)number_format($score->remain_amount, 2, '', ''); $remain_amount = (int) number_format($score->remain_amount, 2, '', '');
$cash = ($discount_price - $remain_amount) / 100; $cash = ($discount_price - $remain_amount) / 100;
$score = $score->remain_amount; $score = $score->remain_amount;
$discount_price = $discount_price / 100; $discount_price = $discount_price / 100;
} }
}else{ } else {
$cash = $discount_price; $cash = $discount_price;
$score = 0; $score = 0;
} }
@ -104,34 +107,34 @@ class OrderService implements OrderContract
'score' => $score, 'score' => $score,
); );
$order = array( $order = array(
'user_id'=>$user->id, 'user_id' => $user->id,
'type_id'=>$sub_rank_id, 'type_id' => $sub_rank_id,
'goods'=>$goods, 'goods' => $goods,
'price'=>$discount_price, 'price' => $discount_price,
'num'=>1, 'num' => 1,
'type'=>'rank', 'type' => 'rank',
'trade_no'=>$trade_no, 'trade_no' => $trade_no,
); );
//支付订单 //支付订单
$order_pay = PayOrder::create($pay_order); $order_pay = PayOrder::create($pay_order);
$order = Order::create($order); $order = Order::create($order);
$wx_pay = []; $wx_pay = [];
if ($cash>0) { if ($cash > 0) {
if ($trade_type == 'h5') {//h5支付 if ($trade_type == 'h5') {//h5支付
if (strstr($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')) { if (strstr($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')) {
$wx_pay = \WechatService::constructWXPay($pay_order, $user->id, $goods); $wx_pay = \WechatService::constructWXPay($pay_order, $user->id, $goods);
}else{ } else {
$wx_pay = \WechatService::constructWXH5Pay($pay_order, $user->id, $goods); $wx_pay = \WechatService::constructWXH5Pay($pay_order, $user->id, $goods);
} }
}elseif ($trade_type == 'wechat_app') { } elseif ($trade_type == 'wechat_app') {
$wx_pay = \WechatService::constructWXAppPay($pay_order, $user->id, $goods); $wx_pay = \WechatService::constructWXAppPay($pay_order, $user->id, $goods);
}elseif ($trade_type == 'alipay_app') { } elseif ($trade_type == 'alipay_app') {
$subject = 'rank'; $subject = 'rank';
$wx_pay = \AlipayService::purchase($subject, $trade_no, $cash); $wx_pay = \AlipayService::purchase($subject, $trade_no, $cash);
} }
}else{ } else {
$order_pay->pay_status = 'PAID'; $order_pay->pay_status = 'PAID';
$order_pay->is_hooked = 1; $order_pay->is_hooked = 1;
$order->pay_status = 'PAID'; $order->pay_status = 'PAID';
@ -157,9 +160,9 @@ class OrderService implements OrderContract
$pay_order = PayOrder::where('trade_no', $order->trade_no)->first(); $pay_order = PayOrder::where('trade_no', $order->trade_no)->first();
if ($pay_order->score > 0) { if ($pay_order->score > 0) {
//扣除对应积分 //扣除对应积分
$result = $this->changeScore($order->user_id, $pay_order->score, 'used', $message='升级VIP'); $result = $this->changeScore($order->user_id, $pay_order->score, 'used', $message = '升级VIP');
if (!$result) { if (!$result) {
\Log::debug($order->trade_no.'订单查询异常: 支付回调失败, 福分溢出'); \Log::debug($order->trade_no . '订单查询异常: 支付回调失败, 福分溢出');
// $this->sms->sentMessage('15872844805', '订单号:'.$order->trade_no.' 福分溢出'); // $this->sms->sentMessage('15872844805', '订单号:'.$order->trade_no.' 福分溢出');
// return $this->failure('支付失败福分溢出'); // return $this->failure('支付失败福分溢出');
return false; return false;
@ -188,35 +191,35 @@ class OrderService implements OrderContract
* @param inte $other_user_id 其他人ID * @param inte $other_user_id 其他人ID
* @return bool 是否成功 * @return bool 是否成功
*/ */
public function changeScore($user_id, $score, $type, $message='', $other_user_id=null) public function changeScore($user_id, $score, $type, $message = '', $other_user_id = null)
{ {
$score_obj = Score::where('user_id', $user_id)->first(); $score_obj = Score::where('user_id', $user_id)->first();
if (empty($score_obj)) { if (empty($score_obj)) {
$score_obj = Score::create([ $score_obj = Score::create([
'user_id'=>$user_id, 'user_id' => $user_id,
]); ]);
} }
if ($type == 'gained') { if ($type == 'gained') {
//更新积分 //更新积分
// $score_obj->increment('remain_amount', $score); // $score_obj->increment('remain_amount', $score);
}else{ } else {
if ($score_obj->remain_amount >= $score) { if ($score_obj->remain_amount >= $score) {
$score_obj->decrement('remain_amount', $score); $score_obj->decrement('remain_amount', $score);
}else{ } else {
// $score_obj->decrement('remain_amount', $score_obj->remain_amount); // $score_obj->decrement('remain_amount', $score_obj->remain_amount);
$this->sms->sentMessage('15872844805', '用户id'.$user_id.' 福分超额.'.$message); $this->sms->sentMessage('15872844805', '用户id' . $user_id . ' 福分超额.' . $message);
return false; return false;
} }
$score_obj->increment('used_amount', $score); $score_obj->increment('used_amount', $score);
} }
//生成积分记录 //生成积分记录
ScoreHistory::create([ ScoreHistory::create([
'user_id'=>$user_id, 'user_id' => $user_id,
'other_user_id'=>$other_user_id, 'other_user_id' => $other_user_id,
'type'=>$type, 'type' => $type,
'amount'=>$score, 'amount' => $score,
'value'=>$score_obj->remain_amount, 'value' => $score_obj->remain_amount,
'message'=>$message, 'message' => $message,
]); ]);
// $array['message'] = $message; // $array['message'] = $message;
// $array['user_id'] = $user_id; // $array['user_id'] = $user_id;
@ -258,35 +261,35 @@ class OrderService implements OrderContract
if ($user->rank_id === 0) { if ($user->rank_id === 0) {
//创建对应会员 //创建对应会员
RankHistory::create([ RankHistory::create([
'user_id'=>$user_id, 'user_id' => $user_id,
'rank_id'=>$sub_rank->rank_id, 'rank_id' => $sub_rank->rank_id,
'deadline'=>date('Y-m-d H:i:s', strtotime('+'.$rank_month.' month')), 'deadline' => date('Y-m-d H:i:s', strtotime('+' . $rank_month . ' month')),
]); ]);
$user->rank_id = $sub_rank->rank_id; $user->rank_id = $sub_rank->rank_id;
$user->save(); $user->save();
}elseif ($user->rank_id === 1) {//当前市级 } elseif ($user->rank_id === 1) {//当前市级
if ($rank_history && $rank_history->deadline) {//期限内 if ($rank_history && $rank_history->deadline) {//期限内
//更新市级会员 //更新市级会员
$rank_history->deadline = date('Y-m-d H:i:s', strtotime('+'.$rank_month.' month', strtotime($rank_history->deadline))); $rank_history->deadline = date('Y-m-d H:i:s', strtotime('+' . $rank_month . ' month', strtotime($rank_history->deadline)));
$rank_history->save(); $rank_history->save();
} }
//创建对应会员 //创建对应会员
RankHistory::create([ RankHistory::create([
'user_id'=>$user_id, 'user_id' => $user_id,
'rank_id'=>$sub_rank->rank_id, 'rank_id' => $sub_rank->rank_id,
'deadline'=>date('Y-m-d H:i:s', strtotime('+'.$rank_month.' month')), 'deadline' => date('Y-m-d H:i:s', strtotime('+' . $rank_month . ' month')),
]); ]);
$user->rank_id = $sub_rank->rank_id; $user->rank_id = $sub_rank->rank_id;
$user->save(); $user->save();
}elseif ($user->rank_id === 2) {//当前黄金 } elseif ($user->rank_id === 2) {//当前黄金
//市级会员记录 //市级会员记录
$city_rank_history = RankHistory::where('user_id', $user_id)->where('rank_id', 1)->orderBy('id', 'desc')->first(); $city_rank_history = RankHistory::where('user_id', $user_id)->where('rank_id', 1)->orderBy('id', 'desc')->first();
if (!empty($city_rank_history) && !empty($city_rank_history->deadline)) {//市级会员在期限内 if (!empty($city_rank_history) && !empty($city_rank_history->deadline)) {//市级会员在期限内
//更新市级会员 //更新市级会员
$city_rank_history->deadline = date('Y-m-d H:i:s', strtotime('+'.$rank_month.' month', strtotime($city_rank_history->deadline))); $city_rank_history->deadline = date('Y-m-d H:i:s', strtotime('+' . $rank_month . ' month', strtotime($city_rank_history->deadline)));
$city_rank_history->save(); $city_rank_history->save();
} }
@ -294,33 +297,33 @@ class OrderService implements OrderContract
if ($sub_rank->rank_id === 2) { if ($sub_rank->rank_id === 2) {
if (!empty($rank_history)) { if (!empty($rank_history)) {
//更新黄金会员 //更新黄金会员
$rank_history->deadline = date('Y-m-d H:i:s', strtotime('+'.$rank_month.' month', strtotime($rank_history->deadline))); $rank_history->deadline = date('Y-m-d H:i:s', strtotime('+' . $rank_month . ' month', strtotime($rank_history->deadline)));
$rank_history->save(); $rank_history->save();
}else{ } else {
RankHistory::create([ RankHistory::create([
'user_id'=>$user_id, 'user_id' => $user_id,
'rank_id'=>$sub_rank->rank_id, 'rank_id' => $sub_rank->rank_id,
'deadline'=>date('Y-m-d H:i:s', strtotime('+'.$rank_month.' month')), 'deadline' => date('Y-m-d H:i:s', strtotime('+' . $rank_month . ' month')),
]); ]);
} }
} }
if ($sub_rank->rank_id === 3) { if ($sub_rank->rank_id === 3) {
//创建对应会员 //创建对应会员
RankHistory::create([ RankHistory::create([
'user_id'=>$user_id, 'user_id' => $user_id,
'rank_id'=>$sub_rank->rank_id, 'rank_id' => $sub_rank->rank_id,
'deadline'=>date('Y-m-d H:i:s', strtotime('+'.$rank_month.' month')), 'deadline' => date('Y-m-d H:i:s', strtotime('+' . $rank_month . ' month')),
]); ]);
$user->rank_id = $sub_rank->rank_id; $user->rank_id = $sub_rank->rank_id;
$user->save(); $user->save();
} }
}elseif ($user->rank_id === 3) {//当前钻石 } elseif ($user->rank_id === 3) {//当前钻石
//市级会员记录 //市级会员记录
$city_rank_history = RankHistory::where('user_id', $user_id)->where('rank_id', 1)->orderBy('id', 'desc')->first(); $city_rank_history = RankHistory::where('user_id', $user_id)->where('rank_id', 1)->orderBy('id', 'desc')->first();
if (!empty($city_rank_history) && !empty($city_rank_history->deadline)) {//市级会员在期限内 if (!empty($city_rank_history) && !empty($city_rank_history->deadline)) {//市级会员在期限内
//更新市级会员 //更新市级会员
$city_rank_history->deadline = date('Y-m-d H:i:s', strtotime('+'.$rank_month.' month', strtotime($city_rank_history->deadline))); $city_rank_history->deadline = date('Y-m-d H:i:s', strtotime('+' . $rank_month . ' month', strtotime($city_rank_history->deadline)));
$city_rank_history->save(); $city_rank_history->save();
} }
@ -328,13 +331,13 @@ class OrderService implements OrderContract
$gold_rank_history = RankHistory::where('user_id', $user_id)->where('rank_id', 2)->orderBy('id', 'desc')->first(); $gold_rank_history = RankHistory::where('user_id', $user_id)->where('rank_id', 2)->orderBy('id', 'desc')->first();
if (!empty($gold_rank_history) && !empty($gold_rank_history->deadline)) {//黄金会员在期限内 if (!empty($gold_rank_history) && !empty($gold_rank_history->deadline)) {//黄金会员在期限内
//更新市级会员 //更新市级会员
$gold_rank_history->deadline = date('Y-m-d H:i:s', strtotime('+'.$rank_month.' month', strtotime($gold_rank_history->deadline))); $gold_rank_history->deadline = date('Y-m-d H:i:s', strtotime('+' . $rank_month . ' month', strtotime($gold_rank_history->deadline)));
$gold_rank_history->save(); $gold_rank_history->save();
} }
//更新钻石会员 //更新钻石会员
$rank_history->deadline = date('Y-m-d H:i:s', strtotime('+'.$rank_month.' month', strtotime($rank_history->deadline))); $rank_history->deadline = date('Y-m-d H:i:s', strtotime('+' . $rank_month . ' month', strtotime($rank_history->deadline)));
$rank_history->save(); $rank_history->save();
}elseif ($user->rank_id === 9) {//当前超级会员 } elseif ($user->rank_id === 9) {//当前超级会员
// $history = RankHistory::where('user_id', $user_id)->where('rank_id', $sub_rank->rank_id)->where('deadline', ">", date('Y-m-d H:i:s'))->first(); // $history = RankHistory::where('user_id', $user_id)->where('rank_id', $sub_rank->rank_id)->where('deadline', ">", date('Y-m-d H:i:s'))->first();
// if ($history) { // if ($history) {
// $history->deadline = date('Y-m-d H:i:s', strtotime('+'.$rank_month.' month', strtotime($history->deadline))); // $history->deadline = date('Y-m-d H:i:s', strtotime('+'.$rank_month.' month', strtotime($history->deadline)));
@ -360,31 +363,31 @@ class OrderService implements OrderContract
//推荐人 //推荐人
$user_id = Wechat::where('openid', $from_openid)->value('user_id'); $user_id = Wechat::where('openid', $from_openid)->value('user_id');
if (empty($user_id)) { if (empty($user_id)) {
return ; return;
} }
//是否交认证费 //是否交认证费
$approve_order = Order::where('user_id', $user_id)->where('type', 'approve')->where('pay_status', 'PAID')->first(); $approve_order = Order::where('user_id', $user_id)->where('type', 'approve')->where('pay_status', 'PAID')->first();
if (empty($approve_order)) { if (empty($approve_order)) {
return ; return;
} }
$approve_pay_order = PayOrder::where('user_id', $user_id)->where('trade_no', $approve_order->trade_no)->where('is_hooked', 1)->first(); $approve_pay_order = PayOrder::where('user_id', $user_id)->where('trade_no', $approve_order->trade_no)->where('is_hooked', 1)->first();
if (empty($approve_pay_order)) { if (empty($approve_pay_order)) {
return ; return;
} }
//是否已退 //是否已退
$refund_order = RefundOrder::where('user_id', $user_id)->where('type','approve')->first(); $refund_order = RefundOrder::where('user_id', $user_id)->where('type', 'approve')->first();
//生成退款记录 //生成退款记录
if (empty($refund_order)) { if (empty($refund_order)) {
$refund_order = RefundOrder::create([ $refund_order = RefundOrder::create([
'user_id'=>$user_id, 'user_id' => $user_id,
'type'=>'approve', 'type' => 'approve',
'trade_no'=>$approve_order->trade_no, 'trade_no' => $approve_order->trade_no,
'refund_trade_no'=>\CommonUtilsService::getRefundTradeNo(), 'refund_trade_no' => \CommonUtilsService::getRefundTradeNo(),
'total_fee'=>$approve_pay_order->cash, 'total_fee' => $approve_pay_order->cash,
'refund_fee'=>$approve_pay_order->cash, 'refund_fee' => $approve_pay_order->cash,
]); ]);
}else{ } else {
return ; return;
} }
$total = $refund_order->total_fee * 100; $total = $refund_order->total_fee * 100;
$desc = '用户实名认证费退款'; $desc = '用户实名认证费退款';
@ -417,7 +420,7 @@ class OrderService implements OrderContract
/** /**
* app支付生成订单 * app支付生成订单
*/ */
public function makeAppOrder($request, $price, $type, $type_id=0, $goods, $linkmen=[], $detail='') public function makeAppOrder($request, $price, $type, $type_id = 0, $goods, $linkmen = [], $detail = '')
{ {
try { try {
$user = auth()->user(); $user = auth()->user();
@ -435,21 +438,21 @@ class OrderService implements OrderContract
$score = 0; $score = 0;
$cash = $price; $cash = $price;
$order = array( $order = array(
'user_id'=>auth()->id(), 'user_id' => auth()->id(),
'type_id'=>$type_id, 'type_id' => $type_id,
'goods'=>$goods, 'goods' => $goods,
'price'=>$price, 'price' => $price,
'num'=>1, 'num' => 1,
'type'=>$type, 'type' => $type,
'trade_no'=>$trade_no, 'trade_no' => $trade_no,
'pay_type'=>$pay_type, 'pay_type' => $pay_type,
'linkmen'=>json_encode($request->input('linkmen', [])), 'linkmen' => json_encode($request->input('linkmen', [])),
); );
if ($price == 0) { if ($price == 0) {
$order['pay_status'] = 'PAID'; $order['pay_status'] = 'PAID';
$score = 0; $score = 0;
$cash = 0; $cash = 0;
}else{ } else {
//计算支付金额 //计算支付金额
if ($use_score) { if ($use_score) {
//福气 //福气
@ -457,12 +460,12 @@ class OrderService implements OrderContract
$remain_score = 0; $remain_score = 0;
if (!empty($viewer_id)) { if (!empty($viewer_id)) {
$asset = Asset::where('viewer_id', $viewer_id)->first(); $asset = Asset::where('viewer_id', $viewer_id)->first();
$remain_score = $asset?bcadd($asset->share_cash,$asset->cash,2):0; $remain_score = $asset ? bcadd($asset->share_cash, $asset->cash, 2) : 0;
} }
if (bccomp($price, $remain_score) > 0) { if (bccomp($price, $remain_score) > 0) {
$cash = bcsub($price, $remain_score, 2); $cash = bcsub($price, $remain_score, 2);
$score = $remain_score; $score = $remain_score;
}else{ } else {
$cash = 0; $cash = 0;
$score = $price; $score = $price;
} }
@ -470,15 +473,16 @@ class OrderService implements OrderContract
} }
$receipt = request()->input('apple_receipt'); $receipt = request()->input('apple_receipt');
$ios_version = $request->header('app-version', '1.0.0'); $ios_version = $request->header('app-version', '1.0.0');
// $result = \CommonUtilsService::contrastVersion($ios_version, '1.3.16'); // $result = \CommonUtilsService::contrastVersion($ios_version, '1.3.16');
$result = $ios_version == '1.3.17'?true:false; $result = $ios_version == '1.3.17' ? true : false;
if ($result && $pay_type == 'ios' and empty($receipt)) throw new \Exception("没有支付凭证", 1); if ($result && $pay_type == 'ios' and empty($receipt))
throw new \Exception("没有支付凭证", 1);
//生成支付订单 //生成支付订单
$pay_order = array( $pay_order = array(
'user_id' => auth()->id(), 'user_id' => auth()->id(),
'trade_no' => $trade_no, 'trade_no' => $trade_no,
'pay_status' => $price == 0?'PAID':'UNPAID', 'pay_status' => $price == 0 ? 'PAID' : 'UNPAID',
'cash' => $cash, 'cash' => $cash,
'score' => $score, 'score' => $score,
'pay_type' => $pay_type, 'pay_type' => $pay_type,
@ -498,14 +502,14 @@ class OrderService implements OrderContract
$order_pay = PayOrder::create($pay_order); $order_pay = PayOrder::create($pay_order);
//支付订单 //支付订单
$order = Order::create($order); $order = Order::create($order);
if ($cash>0) { if ($cash > 0) {
if ($pay_type == 'wechat') { if ($pay_type == 'wechat') {
$ios_version = request()->header('app-version'); $ios_version = request()->header('app-version');
$and_version = request()->header('version-name'); $and_version = request()->header('version-name');
$callback = config('app.url').'/api/app/callback/orders/'.$pay_order['trade_no'].'?ios_version='.$ios_version.'&and_version='.$and_version; $callback = config('app.url') . '/api/app/callback/orders/' . $pay_order['trade_no'] . '?ios_version=' . $ios_version . '&and_version=' . $and_version;
$pay_config = \WechatService::constructWXAppPay($pay_order, auth()->id(), $detail, $callback); $pay_config = \WechatService::constructWXAppPay($pay_order, auth()->id(), $detail, $callback);
$order_pay->pay_config = $pay_config; $order_pay->pay_config = $pay_config;
}elseif ($pay_type == 'alipay') { } elseif ($pay_type == 'alipay') {
$pay_config = \AlipayService::purchase($detail, $trade_no, $cash); $pay_config = \AlipayService::purchase($detail, $trade_no, $cash);
$order_pay->pay_config = $pay_config; $order_pay->pay_config = $pay_config;
} }
@ -531,20 +535,20 @@ class OrderService implements OrderContract
//福气 //福气
$asset = $user->userAsset(); $asset = $user->userAsset();
if (!empty($asset)) { if (!empty($asset)) {
$remain_score = $asset?bcadd($asset->share_cash,$asset->cash,2):0; $remain_score = $asset ? bcadd($asset->share_cash, $asset->cash, 2) : 0;
if ($remain_score < $score) {//总福气小于消耗福气 if ($remain_score < $score) {//总福气小于消耗福气
\DB::rollback(); \DB::rollback();
throw new \Exception("福气溢出 用户id:".$user->id, 1); throw new \Exception("福气溢出 用户id:" . $user->id, 1);
} }
//先扣除cash //先扣除cash
$cash = $asset->cash; $cash = $asset->cash;
$share_cash = $asset->share_cash; $share_cash = $asset->share_cash;
if ($cash >= $score) { if ($cash >= $score) {
$asset->decrement('cash', $score); $asset->decrement('cash', $score);
}else{ } else {
$asset->decrement('cash', $cash); $asset->decrement('cash', $cash);
//再扣除share_cash //再扣除share_cash
$asset->decrement('share_cash', bcsub($score,$cash,2)); $asset->decrement('share_cash', bcsub($score, $cash, 2));
} }
//生成消费记录 //生成消费记录
$log = new AssetLog; $log = new AssetLog;
@ -553,11 +557,11 @@ class OrderService implements OrderContract
$log->real_num = $score; $log->real_num = $score;
$log->type = 6; $log->type = 6;
$log->is_hooked = 1; $log->is_hooked = 1;
$log->score = bcadd($asset->share_cash,$asset->cash,2); $log->score = bcadd($asset->share_cash, $asset->cash, 2);
$log->save(); $log->save();
}else{ } else {
\DB::rollback(); \DB::rollback();
throw new \Exception("未查询到福气账号 用户id:".$user->id, 1); throw new \Exception("未查询到福气账号 用户id:" . $user->id, 1);
} }
\DB::commit(); \DB::commit();
return true; return true;
@ -571,7 +575,8 @@ class OrderService implements OrderContract
/**订单类型转换 代码转成中文*/ /**订单类型转换 代码转成中文*/
public function orderTypeCodeSwitchChinese($type){ public function orderTypeCodeSwitchChinese($type)
{
if ($type === 'score') { if ($type === 'score') {
return '福分充值'; return '福分充值';
} else if ($type === 'rank') { } else if ($type === 'rank') {
@ -600,10 +605,95 @@ class OrderService implements OrderContract
return '赠送礼物'; return '赠送礼物';
} else if ($type === 'course') { } else if ($type === 'course') {
return '购买课程'; return '购买课程';
}else{ } else {
return '其他'; return '其他';
} }
} }
public function storeUftxCustomer($order): bool
{
try {
// 判断订单是否是uftx
if ($order->merchant_id != 44) {
Log::error("不是友福商户");
return false;
}
// 判断订单是否有分享人
if (!$order->from_openid) {
Log::error("没有from_openid");
return false;
}
// 判断下单人和分享人是否一致
if ($order->openid == $order->from_openid) {
Log::error("分享人和下单人一致");
return false;
}
// 查询订单用户手机号和分享人用户手机号
$wechat = Wechat::where("official_openid", $order->open_id)->first();
if (empty($wechat)) {
Log::error("没有下单人wechat");
return false;
}
$from_wechat = Wechat::where("official_openid", $order->from_openid)->first();
if (empty($from_wechat)) {
Log::error("没有分享人wechat");
return false;
}
$user = User::Where("id", $wechat->user_id)->first();
if (empty($user)) {
Log::error("没有下单人user");
return false;
}
$from_user = User::Where("id", $from_wechat->user_id)->first();
if (empty($from_user)) {
Log::error("没有分享人user");
return false;
}
$mobile = $user->mobile;
if (empty($mobile)) {
Log::error("没有下单人手机号");
return false;
}
$from_mobile = $from_user->mobile;
if (empty($from_mobile)) {
Log::error("没有分享人手机号");
return false;
}
// 判断分享人是否在友福同享有服务端账号
$serviceUser = DmaServiceUserRole::where("mobile", $from_mobile)->first();
if (empty($serviceUser)) {
Log::error("分享人不是商户端用户");
return false;
}
// 判断是否已经是客户
$customer = S2Customer::where(["user_id" => $serviceUser->user_id, "contacts_mobile" => $mobile])->first();
if ($customer) {
Log::error("已成为客户");
return false;
}
// 创建客户
S2Customer::create([
"user_id" => $serviceUser->user_id,
"customer_name" => "",
"customer_type" => 101,
"contacts_name" => $user->nickname,
"contacts_mobile" => $mobile,
"intention" => 1,
"status" => 2
]);
Log::info("创建客户成功");
return true;
} catch (\Throwable $th) {
$this->getError($th);
return false;
}
}
} }

View File

@ -60,6 +60,22 @@ return [
'engine' => null, 'engine' => null,
], ],
'dma' => [
'driver' => 'mysql',
'host' => env('DMA_DB_HOST', '192.168.6..10'),
'port' => env('DMA_DB_PORT', '3306'),
'database' => env('DMA_DB_DATABASE', 'health'),
'username' => env('DMA_DB_USERNAME', 'root'),
'password' => env('DMA_DB_PASSWORD', 'root'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => env('DB_PREFIX', ''),
'strict' => false,
'engine' => null,
],
'pgsql' => [ 'pgsql' => [
'driver' => 'pgsql', 'driver' => 'pgsql',
'host' => env('DB_HOST', '127.0.0.1'), 'host' => env('DB_HOST', '127.0.0.1'),