|
|
@@ -113,6 +113,11 @@ class TradeOrderService extends BaseService
|
|
|
$query->where('a.create_time', '<', strtotime($end));
|
|
|
}
|
|
|
|
|
|
+ $refundStatus = isset($params['refund_status']) ? intval($params['refund_status']) : 0;
|
|
|
+ if ($refundStatus > 0) {
|
|
|
+ $query->where(['a.refund_status' => $refundStatus]);
|
|
|
+ }
|
|
|
+
|
|
|
$exceptionStatus = isset($params['exception_status']) ? intval($params['exception_status']) : 0;
|
|
|
if ($exceptionStatus > 0) {
|
|
|
$query->where(['a.exception_status' => $exceptionStatus]);
|
|
|
@@ -149,7 +154,7 @@ class TradeOrderService extends BaseService
|
|
|
$item['create_time_text'] = $item['create_time'] ? datetime($item['create_time'], 'Y-m-d H:i:s') : '';
|
|
|
$item['update_time_text'] = $item['update_time'] ? datetime($item['update_time'], 'Y-m-d H:i:s') : '';
|
|
|
$item['time_text'] = $item['create_time'] ? datetime($item['create_time'], 'H:i') : '';
|
|
|
- $item['utime_text'] = $item['update_time'] ? datetime($item['update_time'], 'm-d H:i') : '';
|
|
|
+ $item['utime_text'] = $item['update_time']>0? datetime($item['update_time'], 'm-d H:i') : datetime($item['create_time'], 'm-d H:i');
|
|
|
$item['pay_time_text'] = $item['pay_time'] ? datetime($item['pay_time'], 'Y-m-d H:i') : '';
|
|
|
$item['username_text'] = $item['username'] ? format_account($item['username']) : '';
|
|
|
$item['c_username_text'] = $item['c_username'] ? format_account($item['c_username']) : '';
|
|
|
@@ -163,7 +168,7 @@ class TradeOrderService extends BaseService
|
|
|
$item['paymentData']['qrcode'] = isset($item['paymentData']['qrcode']) && $item['paymentData']['qrcode'] ? get_image_url($item['paymentData']['qrcode']) : '';
|
|
|
|
|
|
$overTime = max(0, intval(strtotime($item['create_time'])) + $overTime * 60 - time());
|
|
|
- $item['overtime_text'] = in_array($item['status'], [1, 2]) && $overTime ? date('H:i', $overTime) : '';
|
|
|
+ $item['overtime_text'] = in_array($item['status'], [1, 2]) && $overTime ? date('i:s', $overTime) : '';
|
|
|
$payType = isset($item['pay_type']) ? $item['pay_type'] : 0;
|
|
|
$item['pay_name'] = isset($payTypes[$payType]) ? $payTypes[$payType] : '其他';
|
|
|
$item['chat_key'] = getChatKey($item['user_id'], $item['business_id']);
|
|
|
@@ -507,7 +512,7 @@ class TradeOrderService extends BaseService
|
|
|
*/
|
|
|
public function checkOrderNoCatch($userId, $type = 1)
|
|
|
{
|
|
|
- return $this->model->where(['user_id' => $userId, 'type' => $type, 'mark' => 1])->whereIn('status', [1, 2, 5, 7])->count('id');
|
|
|
+ return $this->model->where(['user_id' => $userId, 'type' => $type, 'mark' => 1])->whereIn('status', [1, 2, 7])->count('id');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -614,6 +619,14 @@ class TradeOrderService extends BaseService
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ if($payment['type'] == 1){
|
|
|
+ $idcardData['bank_name'] = isset($payment['bank_name'])? $payment['bank_name'] : '';
|
|
|
+ $idcardData['bank_card'] = isset($payment['bank_card'])? $payment['bank_card'] : '';
|
|
|
+ }else{
|
|
|
+ $idcardData['bank_name'] = $payment['type']==2? '微信':'支付宝';
|
|
|
+ $idcardData['bank_card'] = isset($payment['account'])? $payment['account'] : '';
|
|
|
+ }
|
|
|
+
|
|
|
$this->model->startTrans();
|
|
|
$orderNo = get_order_num('OT');
|
|
|
$data = [
|
|
|
@@ -690,7 +703,8 @@ class TradeOrderService extends BaseService
|
|
|
}
|
|
|
|
|
|
$this->model->commit();
|
|
|
- return $order;
|
|
|
+ $data['id'] = $order;
|
|
|
+ return $data;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -796,6 +810,14 @@ class TradeOrderService extends BaseService
|
|
|
'account' => $paymentInfo['account'],
|
|
|
];
|
|
|
|
|
|
+ if($paymentData['type'] == 1){
|
|
|
+ $idcardData['bank_name'] = isset($paymentInfo['bank_name'])? $paymentInfo['bank_name'] : '';
|
|
|
+ $idcardData['bank_card'] = isset($paymentInfo['bank_card'])? $paymentInfo['bank_card'] : '';
|
|
|
+ }else{
|
|
|
+ $idcardData['bank_name'] = $paymentData['type']==2? '微信':'支付宝';
|
|
|
+ $idcardData['bank_card'] = isset($paymentInfo['account'])? $paymentInfo['account'] : '';
|
|
|
+ }
|
|
|
+
|
|
|
$orderNo = get_order_num('OT');
|
|
|
$data = [
|
|
|
'user_id' => $userId,
|
|
|
@@ -873,7 +895,8 @@ class TradeOrderService extends BaseService
|
|
|
}
|
|
|
|
|
|
$this->model->commit();
|
|
|
- return $order;
|
|
|
+ $data['id'] = $order;
|
|
|
+ return $data;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1125,7 +1148,7 @@ class TradeOrderService extends BaseService
|
|
|
$where['type'] = $type;
|
|
|
}
|
|
|
$orderInfo = $this->model->where($where)
|
|
|
- ->select(['id', 'user_id','api_id','pt_order_no', 'order_no', 'business_id', 'type','contact_type','usdt_address','notify_url', 'trade_type', 'num', 'total','pay_time', 'status'])
|
|
|
+ ->select(['id', 'user_id','api_id','pt_order_no', 'order_no', 'business_id', 'type','contact_type','is_cancel','usdt_address','notify_url', 'trade_type', 'num', 'total','pay_time', 'status'])
|
|
|
->first();
|
|
|
|
|
|
$userId = isset($orderInfo['user_id']) ? $orderInfo['user_id'] : 0;
|
|
|
@@ -1142,10 +1165,10 @@ class TradeOrderService extends BaseService
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- if ($status == 5 && $orderInfo['status'] == 8 && $businessId > 0) {
|
|
|
- $this->error = '3026';
|
|
|
- return false;
|
|
|
- }
|
|
|
+// if ($status == 5 && $orderInfo['status'] == 8 && $businessId > 0) {
|
|
|
+// $this->error = '3026';
|
|
|
+// return false;
|
|
|
+// }
|
|
|
|
|
|
if ($status == 5 && $businessId <= 0 && $orderInfo['status'] == 4) {
|
|
|
$this->error = '3026';
|
|
|
@@ -1259,6 +1282,9 @@ class TradeOrderService extends BaseService
|
|
|
if (isset($params['exception_status'])) {
|
|
|
$updateData['exception_status'] = intval($params['exception_status']);
|
|
|
}
|
|
|
+ if (isset($params['refund_money'])) {
|
|
|
+ $updateData['refund_money'] = intval($params['refund_money']);
|
|
|
+ }
|
|
|
|
|
|
if (!$this->model->where($where)->update($updateData)) {
|
|
|
$this->model->rollBack();
|
|
|
@@ -1267,7 +1293,58 @@ class TradeOrderService extends BaseService
|
|
|
}
|
|
|
|
|
|
// 交易处理,如果是确认状态
|
|
|
- if ($orderInfo['num'] > 0 && $status == 4 && $userId > 0 && $tradeType == 1) {
|
|
|
+ $exceptionType = isset($params['exception_type'])? $params['exception_type'] : 0;
|
|
|
+ $exceptionStatus = isset($params['exception_status'])? $params['exception_status'] : 0;
|
|
|
+ $refundStatus = isset($params['refund_status'])? $params['refund_status'] : 0;
|
|
|
+ $isCancel = isset($orderInfo['is_cancel']) ? $orderInfo['is_cancel'] : 0;
|
|
|
+ if ($orderInfo['num'] > 0 && ($status == 4 || ($exceptionStatus==2 && $refundStatus==0)) && $userId > 0 && $tradeType == 1) {
|
|
|
+
|
|
|
+ // 若订单被系统取消过,重新扣除
|
|
|
+ if($isCancel == 1){
|
|
|
+ // 商家
|
|
|
+ $info = $this->memberModel->where(['id' => $orderInfo['business_id'], 'status' => 1, 'mark' => 1])->select(['id', 'username', 'usdt_num', 'user_type'])->first();
|
|
|
+ if (empty($info)) {
|
|
|
+ $this->model->rollBack();
|
|
|
+ $this->error = '3048';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if($info['usdt_num'] < $orderInfo['num']){
|
|
|
+ $this->model->rollBack();
|
|
|
+ $this->error = '3004';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 商家重新扣除币
|
|
|
+ if (!$this->memberModel->where(['id' => $orderInfo['business_id'], 'mark' => 1])->decrement('usdt_num', $orderInfo['num'])) {
|
|
|
+ $this->model->rollBack();
|
|
|
+ $this->error = '3047';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 明细处理
|
|
|
+ $data = [
|
|
|
+ 'order_no' => $orderInfo['order_no'],
|
|
|
+ 'user_id' => $orderInfo['business_id'],
|
|
|
+ 'type' => 2,
|
|
|
+ 'pay_type' => 1,
|
|
|
+ 'change_type' => 2,
|
|
|
+ 'num' => $orderInfo['num'],
|
|
|
+ 'total' => $orderInfo['total'],
|
|
|
+ 'balance' => floatval($info['usdt_num'] - $orderInfo['num']),
|
|
|
+ 'create_time' => time(),
|
|
|
+ 'update_time' => time(),
|
|
|
+ 'remark' => '交易员卖出重新扣除',
|
|
|
+ 'status' => 1,
|
|
|
+ 'mark' => 1,
|
|
|
+ ];
|
|
|
+
|
|
|
+ if (!$this->capitalModel->edit($data)) {
|
|
|
+ $this->error = '3014';
|
|
|
+ $this->model->rollBack();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
$info = $this->memberModel->where(['id' => $userId, 'status' => 1, 'mark' => 1])->select(['id', 'username', 'usdt_num', 'user_type'])->first();
|
|
|
if (empty($info)) {
|
|
|
@@ -1330,7 +1407,7 @@ class TradeOrderService extends BaseService
|
|
|
}
|
|
|
}
|
|
|
// 外来平台需要出币和回调通知
|
|
|
- else if(in_array($tradeType, [2,3]) && $status == 4){
|
|
|
+ else if(in_array($tradeType, [2,3]) && ($status == 4 || ($refundStatus==0 && $exceptionStatus==2))){
|
|
|
$usdtAddress = isset($orderInfo['usdt_address'])? $orderInfo['usdt_address'] : '';
|
|
|
$contactType = isset($orderInfo['contact_type'])? $orderInfo['contact_type'] : '';
|
|
|
$notifyUrl = isset($orderInfo['notify_url'])? $orderInfo['notify_url'] : '';
|
|
|
@@ -1594,7 +1671,7 @@ class TradeOrderService extends BaseService
|
|
|
$this->model->startTrans();
|
|
|
// 订单状态更新,或异常处理
|
|
|
|
|
|
- $updateData = ['status' => $status, 'exception_catch_user' => $catchUid, 'update_time' => time(), 'exception_remark' => '交易员取消'];
|
|
|
+ $updateData = ['status' => $status, 'exception_catch_user' => $catchUid, 'update_time' => time(), 'exception_remark' => $businessId? '交易员取消':'客服取消'];
|
|
|
|
|
|
// 异常处理数据
|
|
|
if (isset($params['exception_type'])) {
|
|
|
@@ -1897,7 +1974,7 @@ class TradeOrderService extends BaseService
|
|
|
}
|
|
|
|
|
|
$this->model->startTrans();
|
|
|
- $updateData = ['status' => 8, 'update_time' => time(), 'catch_at' => time(),'exception_status'=> 0, 'exception_remark' => '系统取消'];
|
|
|
+ $updateData = ['status' => 8, 'update_time' => time(),'is_cancel'=>1, 'catch_at' => time(),'exception_status'=> 0, 'exception_remark' => '系统取消'];
|
|
|
if (!$this->model->where(['id' => $orderInfo['id']])->update($updateData)) {
|
|
|
$this->model->rollBack();
|
|
|
$this->error = '3043';
|
|
|
@@ -2030,6 +2107,8 @@ class TradeOrderService extends BaseService
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 派单交易完成通知
|
|
|
* @return int[]
|
|
|
@@ -2045,7 +2124,10 @@ class TradeOrderService extends BaseService
|
|
|
->leftJoin('member as c','c.id','=','a.user_id')
|
|
|
->where(function ($query) {
|
|
|
// 已更新为超时的订单
|
|
|
- $query->where(['a.mark' => 1, 'a.status' => 4])
|
|
|
+ $query->where(['a.mark' => 1])
|
|
|
+ ->where(function($query){
|
|
|
+ $query->where('a.status',4)->orWhere(['a.status'=>5,'a.exception_status'=>2,'a.refund_status'=>0]);
|
|
|
+ })
|
|
|
->where('a.notify_time', '<=', time() - 3700);
|
|
|
})
|
|
|
->where('a.api_id','>', 0)
|