|
|
@@ -13,6 +13,7 @@ namespace App\Services\Common;
|
|
|
|
|
|
use App\Models\AdvertModel;
|
|
|
use App\Models\AdvertOrderModel;
|
|
|
+use App\Services\Api\MemberPaymentService;
|
|
|
use App\Services\BaseService;
|
|
|
|
|
|
/**
|
|
|
@@ -58,7 +59,8 @@ class AdvertOrderService extends BaseService
|
|
|
public function buy($userId, $params)
|
|
|
{
|
|
|
$id = isset($params['id']) ? intval($params['id']) : 0;
|
|
|
- if ($id <= 0) {
|
|
|
+ $num = isset($params['num']) ? intval($params['num']) : 0;
|
|
|
+ if ($id <= 0 || $num<=0) {
|
|
|
$this->error = '1013';
|
|
|
return false;
|
|
|
}
|
|
|
@@ -95,11 +97,12 @@ class AdvertOrderService extends BaseService
|
|
|
}
|
|
|
|
|
|
// 验证数量或金额
|
|
|
- $total = 0;
|
|
|
if ($priceType == 2) {
|
|
|
$price = floatval($tradePrice + $price);
|
|
|
}
|
|
|
|
|
|
+ $total = floatval($price * $num);
|
|
|
+
|
|
|
// 用户信息
|
|
|
$userInfo = MemberService::make()->getInfo($userId);
|
|
|
$status = isset($userInfo['status']) ? $userInfo['status'] : 0;
|
|
|
@@ -110,10 +113,6 @@ class AdvertOrderService extends BaseService
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- if ($idcardCheck != 1) {
|
|
|
- $this->error = '2014';
|
|
|
- return false;
|
|
|
- }
|
|
|
|
|
|
// 未处理订单
|
|
|
$noCatchOrder = $this->checkOrderNoCatch($userId, 1);
|
|
|
@@ -122,15 +121,15 @@ class AdvertOrderService extends BaseService
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- // 匹配交易商家
|
|
|
- $businessInfo = \App\Services\Api\MemberService::make()->getTradeMember($num, 1, $userId);
|
|
|
+ // 交易商家
|
|
|
+ $businessInfo = MemberService::make()->getInfo($businessId);
|
|
|
if (empty($businessInfo)) {
|
|
|
$this->error = '3004';
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
|
|
|
- // 客户身份信息
|
|
|
+ // 购买者身份信息
|
|
|
$idcardData = [
|
|
|
'idcard' => isset($userInfo['idcard']) ? $userInfo['idcard'] : '',
|
|
|
'idcard_check' => isset($userInfo['idcard_check']) ? $userInfo['idcard_check'] : 0,
|
|
|
@@ -139,7 +138,7 @@ class AdvertOrderService extends BaseService
|
|
|
'idcard_hand_img' => isset($userInfo['idcard_hand_img']) ? $userInfo['idcard_hand_img'] : '',
|
|
|
];
|
|
|
|
|
|
- // 币商收款方式
|
|
|
+ // 收款方式
|
|
|
$payment = MemberPaymentService::make()->getPayment($businessInfo['id']);
|
|
|
if (empty($payment)) {
|
|
|
$this->error = '3015';
|
|
|
@@ -154,7 +153,7 @@ class AdvertOrderService extends BaseService
|
|
|
'order_no' => $orderNo,
|
|
|
'type' => 1,
|
|
|
'pay_type' => isset($params['pay_type']) ? floatval($params['pay_type']) : 1,
|
|
|
- 'price' => $tradePrice,
|
|
|
+ 'price' => $price,
|
|
|
'num' => $num,
|
|
|
'total' => $total,
|
|
|
'payment_id' => isset($payment['id']) ? intval($payment['id']) : 0,
|
|
|
@@ -172,6 +171,36 @@ class AdvertOrderService extends BaseService
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ if(!$this->memberModel->where(['id'=> $businessInfo['id']])->decrement('usdt_num', $num)){
|
|
|
+ $this->model->rollBack();
|
|
|
+ $this->error = '3020';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $data = [
|
|
|
+ 'order_no'=> $orderNo,
|
|
|
+ 'user_id'=> $businessInfo['id'],
|
|
|
+ 'type'=> 2,
|
|
|
+ 'pay_type'=> 1,
|
|
|
+ 'trade_type'=> 2,
|
|
|
+ 'change_type'=> 2,
|
|
|
+ 'num'=> $num,
|
|
|
+ 'total'=> $total,
|
|
|
+ 'balance'=> floatval($businessInfo['usdt_num']-$num),
|
|
|
+ 'create_time'=> time(),
|
|
|
+ 'update_time'=> time(),
|
|
|
+ 'status'=> 1,
|
|
|
+ 'mark'=>1,
|
|
|
+ 'remark'=> '交易员卖出',
|
|
|
+ ];
|
|
|
+
|
|
|
+ if(!$this->capitalModel->edit($data)){
|
|
|
+ $this->model->rollBack();
|
|
|
+ $this->error = '3014';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
// 订单通知
|
|
|
$data = [
|
|
|
'from_uid' => $userId,
|
|
|
@@ -195,4 +224,191 @@ class AdvertOrderService extends BaseService
|
|
|
$this->model->commit();
|
|
|
return $order;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 购买
|
|
|
+ * @param $userId
|
|
|
+ * @param $params
|
|
|
+ * @return false|int|number
|
|
|
+ */
|
|
|
+ public function sell($userId, $params)
|
|
|
+ {
|
|
|
+ $id = isset($params['id']) ? intval($params['id']) : 0;
|
|
|
+ $num = isset($params['num']) ? intval($params['num']) : 0;
|
|
|
+ if ($id <= 0 || $num<=0) {
|
|
|
+ $this->error = '1013';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证参数
|
|
|
+ $config = \App\Services\ConfigService::make()->getConfigOptionByGroup(5);
|
|
|
+ $tradeOpen = isset($config['trade_usdt_open']) ? $config['trade_usdt_open'] : 0;
|
|
|
+ $tradeMinNum = isset($config['trade_min_num']) ? $config['trade_min_num'] : 0;
|
|
|
+ $tradeMaxNum = isset($config['trade_max_num']) ? $config['trade_max_num'] : 0;
|
|
|
+ $trademinMoney = isset($config['trade_min_money']) ? $config['trade_min_money'] : 0;
|
|
|
+ $tradeMaxMoney = isset($config['trade_max_money']) ? $config['trade_max_money'] : 0;
|
|
|
+ $tradePrice = isset($config['usdt_buy_price']) ? $config['usdt_sell_price'] : 0;
|
|
|
+ $tradeLimitNum = isset($config['trade_no_catch']) ? $config['trade_no_catch'] : 0;
|
|
|
+
|
|
|
+ // 是否开启交易
|
|
|
+ if ($tradeOpen != 1) {
|
|
|
+ $this->error = '1013';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $info = AdvertService::make()->getInfo($id);
|
|
|
+ $tradeType = isset($info['type'])? $info['type'] : 0;
|
|
|
+ $priceType = isset($info['price_type'])? $info['price_type'] : 0;
|
|
|
+ $price = isset($info['price'])? $info['price'] : 0;
|
|
|
+ $businessId = isset($info['business_id'])? $info['business_id'] : 0;
|
|
|
+ if(empty($info) || $info['status'] != 1){
|
|
|
+ $this->error = '4001';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($tradePrice <= 0 && $priceType == 2) {
|
|
|
+ $this->error = '3002';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证数量或金额
|
|
|
+ if ($priceType == 2) {
|
|
|
+ $price = floatval($tradePrice + $price);
|
|
|
+ }
|
|
|
+
|
|
|
+ $total = floatval($price * $num);
|
|
|
+
|
|
|
+ // 用户信息
|
|
|
+ $userInfo = MemberService::make()->getInfo($userId);
|
|
|
+ $status = isset($userInfo['status']) ? $userInfo['status'] : 0;
|
|
|
+ $idcardCheck = isset($userInfo['idcard_check']) ? $userInfo['idcard_check'] : 0;
|
|
|
+ $username = isset($userInfo['username']) && $userInfo['username'] ? format_account($userInfo['username']) : '';
|
|
|
+ if ($status != 1) {
|
|
|
+ $this->error = '2009';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 未处理订单
|
|
|
+ $noCatchOrder = $this->checkOrderNoCatch($userId, 2);
|
|
|
+ if ($tradeLimitNum > 0 && $noCatchOrder >= $tradeLimitNum) {
|
|
|
+ $this->error = lang(3005, ['num' => $tradeLimitNum]);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 交易商家
|
|
|
+ $businessInfo = MemberService::make()->getInfo($businessId);
|
|
|
+ if (empty($businessInfo)) {
|
|
|
+ $this->error = '3004';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 购买者身份信息
|
|
|
+ $idcardData = [
|
|
|
+ 'idcard' => isset($userInfo['idcard']) ? $userInfo['idcard'] : '',
|
|
|
+ 'idcard_check' => isset($userInfo['idcard_check']) ? $userInfo['idcard_check'] : 0,
|
|
|
+ 'idcard_front_img' => isset($userInfo['idcard_front_img']) ? $userInfo['idcard_front_img'] : '',
|
|
|
+ 'idcard_back_img' => isset($userInfo['idcard_back_img']) ? $userInfo['idcard_back_img'] : '',
|
|
|
+ 'idcard_hand_img' => isset($userInfo['idcard_hand_img']) ? $userInfo['idcard_hand_img'] : '',
|
|
|
+ ];
|
|
|
+
|
|
|
+ // 收款方式
|
|
|
+ $payment = MemberPaymentService::make()->getPayment($userId);
|
|
|
+ if (empty($payment)) {
|
|
|
+ $this->error = '3015';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->model->startTrans();
|
|
|
+ $orderNo = get_order_num('OT');
|
|
|
+ $data = [
|
|
|
+ 'user_id' => $userId,
|
|
|
+ 'business_id' => isset($businessInfo['id']) ? $businessInfo['id'] : 0,
|
|
|
+ 'order_no' => $orderNo,
|
|
|
+ 'type' => 1,
|
|
|
+ 'pay_type' => isset($params['pay_type']) ? floatval($params['pay_type']) : 1,
|
|
|
+ 'price' => $price,
|
|
|
+ 'num' => $num,
|
|
|
+ 'total' => $total,
|
|
|
+ 'payment_id' => isset($payment['id']) ? intval($payment['id']) : 0,
|
|
|
+ 'idcard_data' => $idcardData ? json_encode($idcardData, 256) : '',
|
|
|
+ 'payment_data' => $payment ? json_encode($payment, 256) : '',
|
|
|
+ 'create_time' => time(),
|
|
|
+ 'update_time' => time(),
|
|
|
+ 'status' => 1,
|
|
|
+ 'mark' => 1,
|
|
|
+ ];
|
|
|
+
|
|
|
+ if (!$order = $this->model->edit($data)) {
|
|
|
+ $this->model->rollBack();
|
|
|
+ $this->error = '3023';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if(!$this->memberModel->where(['id'=> $businessInfo['id']])->decrement('usdt_num', $num)){
|
|
|
+ $this->model->rollBack();
|
|
|
+ $this->error = '3020';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $data = [
|
|
|
+ 'order_no'=> $orderNo,
|
|
|
+ 'user_id'=> $businessInfo['id'],
|
|
|
+ 'type'=> 2,
|
|
|
+ 'pay_type'=> 1,
|
|
|
+ 'trade_type'=> 2,
|
|
|
+ 'change_type'=> 2,
|
|
|
+ 'num'=> $num,
|
|
|
+ 'total'=> $total,
|
|
|
+ 'balance'=> floatval($businessInfo['usdt_num']-$num),
|
|
|
+ 'create_time'=> time(),
|
|
|
+ 'update_time'=> time(),
|
|
|
+ 'status'=> 1,
|
|
|
+ 'mark'=>1,
|
|
|
+ 'remark'=> '交易员卖出',
|
|
|
+ ];
|
|
|
+
|
|
|
+ if(!$this->capitalModel->edit($data)){
|
|
|
+ $this->model->rollBack();
|
|
|
+ $this->error = '3014';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 订单通知
|
|
|
+ $data = [
|
|
|
+ 'from_uid' => $userId,
|
|
|
+ 'to_uid' => $businessInfo['id'],
|
|
|
+ 'type' => 2,
|
|
|
+ 'order_no' => $orderNo,
|
|
|
+ 'chat_key' => ChatMessageService::make()->getChatKey($userId, $businessInfo['id']),
|
|
|
+ 'message' => "来自用户{$username}的购买订单,金额{$total},单号{$orderNo},时间" . date('Y-m-d H:i:s'),
|
|
|
+ 'message_type' => 1,
|
|
|
+ 'create_time' => time(),
|
|
|
+ 'update_time' => time(),
|
|
|
+ 'status' => 1,
|
|
|
+ 'mark' => 1,
|
|
|
+ ];
|
|
|
+ if (!ChatMessageService::make()->pushMessage($data)) {
|
|
|
+ $this->model->rollBack();
|
|
|
+ $this->error = '3031';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->model->commit();
|
|
|
+ return $order;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取未支付或处理的订单数
|
|
|
+ * @param $userId
|
|
|
+ * @param int $type
|
|
|
+ * @return mixed
|
|
|
+ */
|
|
|
+ public function checkOrderNoCatch($userId, $type = 1)
|
|
|
+ {
|
|
|
+ return $this->model->where(['user_id' => $userId, 'type' => $type, 'mark' => 1])->whereIn('status', [1, 2, 7])->count('id');
|
|
|
+ }
|
|
|
+
|
|
|
}
|