|
|
@@ -119,20 +119,20 @@ class OrderService extends BaseService
|
|
|
*/
|
|
|
public function getCommissionBill($userId, $params)
|
|
|
{
|
|
|
- $pageSize = isset($params['pageSize'])&&$params['pageSize']?$params['pageSize']:10;
|
|
|
- $query = OrderCommissionModel::where(['user_id'=>$userId])
|
|
|
- ->with(['user','order'])
|
|
|
- ->where(function($query) use($params){
|
|
|
+ $pageSize = isset($params['pageSize']) && $params['pageSize'] ? $params['pageSize'] : 10;
|
|
|
+ $query = OrderCommissionModel::where(['user_id' => $userId])
|
|
|
+ ->with(['user', 'order'])
|
|
|
+ ->where(function ($query) use ($params) {
|
|
|
// 日期
|
|
|
$date = isset($params['date']) ? $params['date'] : [];
|
|
|
- $start = isset($date[0]) && $date[0]? $date[0] : date('Y-m-d 00:00:00', time() - 30 *3 *86400);
|
|
|
- $end = isset($date[1]) && $date[1]? $date[1] : date('Y-m-d 23:59:59');
|
|
|
- $end = $start>=$end? '' : $end;
|
|
|
+ $start = isset($date[0]) && $date[0] ? $date[0] : date('Y-m-d 00:00:00', time() - 30 * 3 * 86400);
|
|
|
+ $end = isset($date[1]) && $date[1] ? $date[1] : date('Y-m-d 23:59:59');
|
|
|
+ $end = $start >= $end ? '' : $end;
|
|
|
if ($start) {
|
|
|
- $query->where('created_at','>=', $start);
|
|
|
+ $query->where('created_at', '>=', $start);
|
|
|
}
|
|
|
- if($end){
|
|
|
- $query->where('created_at','<=', $end);
|
|
|
+ if ($end) {
|
|
|
+ $query->where('created_at', '<=', $end);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
@@ -146,7 +146,7 @@ class OrderService extends BaseService
|
|
|
|
|
|
return [
|
|
|
'pageSize' => $pageSize,
|
|
|
- 'amount'=>$amount,
|
|
|
+ 'amount' => $amount,
|
|
|
'total' => isset($list['total']) ? $list['total'] : 0,
|
|
|
'list' => isset($list['data']) ? $list['data'] : []
|
|
|
];
|
|
|
@@ -232,6 +232,7 @@ class OrderService extends BaseService
|
|
|
*/
|
|
|
public function createOrder($userId, $params)
|
|
|
{
|
|
|
+ $type = isset($params['type']) && $params['type'] ? $params['type'] : 1;
|
|
|
$addressId = isset($params['address_id']) && $params['address_id'] ? $params['address_id'] : 0;
|
|
|
$goods = isset($params['goods']) && $params['goods'] ? $params['goods'] : [];
|
|
|
$ids = $goods ? array_column($goods, 'id') : [];
|
|
|
@@ -256,10 +257,12 @@ class OrderService extends BaseService
|
|
|
// 用户信息
|
|
|
RedisService::set($cacheLockKey, ['params' => $params, 'user_id' => $userId], rand(3, 5));
|
|
|
$userInfo = MemberModel::where(['id' => $userId, 'mark' => 1])
|
|
|
- ->select(['id', 'openid', 'discount_point', 'status'])
|
|
|
+ ->select(['id', 'openid', 'buy_type','parent_id','', 'bd_score', 'status'])
|
|
|
->first();
|
|
|
$status = isset($userInfo['status']) ? $userInfo['status'] : 0;
|
|
|
$openid = isset($userInfo['openid']) ? $userInfo['openid'] : 0;
|
|
|
+ $buyType = isset($userInfo['buy_type']) ? $userInfo['buy_type'] : 0;
|
|
|
+ $bdScore = isset($userInfo['bd_score']) ? $userInfo['bd_score'] : 0;
|
|
|
$discountPoint = isset($userInfo['discount_point']) ? $userInfo['discount_point'] : 0; // 折扣
|
|
|
if (empty($userInfo) || $status != 1) {
|
|
|
$this->error = 1045;
|
|
|
@@ -273,7 +276,7 @@ class OrderService extends BaseService
|
|
|
|
|
|
// 商品数据
|
|
|
$orderNo = get_order_num('JK');
|
|
|
- $result = GoodsService::make()->getOrderGoods($ids, $goods, $userId, $orderNo,$discountPoint);
|
|
|
+ $result = GoodsService::make()->getOrderGoods($ids, $goods, $userId, $orderNo, $discountPoint);
|
|
|
if (empty($result)) {
|
|
|
RedisService::clear($cacheLockKey);
|
|
|
$this->error = GoodsService::make()->getError();
|
|
|
@@ -283,6 +286,8 @@ class OrderService extends BaseService
|
|
|
$orderGoods = isset($result['goods']) ? $result['goods'] : [];
|
|
|
$goodsTotal = isset($result['goods_total']) ? $result['goods_total'] : 0; // 商品总价
|
|
|
$orderTotal = isset($result['order_total']) ? $result['order_total'] : 0; // 订单结算金额(折后)
|
|
|
+ $bdScoreTotal = isset($result['bd_score_total']) ? $result['bd_score_total'] : 0; // 报单积分
|
|
|
+ $profitTotal = isset($result['profit_total']) ? $result['profit_total'] : 0; // 利润
|
|
|
$discountTotal = isset($result['discount_total']) ? $result['discount_total'] : 0; // 折扣金额
|
|
|
$orderCount = isset($result['count']) ? $result['count'] : 0;
|
|
|
$deliveryFee = isset($result['delivery_fee']) ? $result['delivery_fee'] : 0; // 运费
|
|
|
@@ -305,6 +310,31 @@ class OrderService extends BaseService
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ // 创业大礼包
|
|
|
+ $goodsId = isset($ids[0]) ? $ids[0] : 0;
|
|
|
+ if ($type == 2) {
|
|
|
+ if ($buyType != $goodsId) {
|
|
|
+ RedisService::clear($cacheLockKey);
|
|
|
+ $this->error = '该礼包您暂时不满足购买条件';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 报单积分是否够
|
|
|
+ if ($bdScore < $bdScoreTotal) {
|
|
|
+ RedisService::clear($cacheLockKey);
|
|
|
+ $this->error = '抱歉,您的报单积分不足';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 是否购买过
|
|
|
+ $checkOrder = $this->checkBusinessOrder($userId, $goodsId);
|
|
|
+ if ($checkOrder) {
|
|
|
+ RedisService::clear($cacheLockKey);
|
|
|
+ $this->error = '抱歉,您已经购买过该礼包';
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 收货地址信息
|
|
|
$addressInfo = MemberAddressService::make()->getBindInfo($userId, $addressId);
|
|
|
$realname = isset($addressInfo['realname']) ? $addressInfo['realname'] : '';
|
|
|
@@ -317,37 +347,20 @@ class OrderService extends BaseService
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- // 商家佣金
|
|
|
- $storeInfo = StoreModel::where(['id' => $storeId])->first();
|
|
|
- $bonusRate = isset($storeInfo['bonus_rate']) ? floatval($storeInfo['bonus_rate']) : 0;
|
|
|
- $storeBonusRate = ConfigService::make()->getConfigByCode('store_bonus_rate', 0);
|
|
|
- $storeBonusRate = $storeBonusRate > 0 && $storeBonusRate <= 100 ? $storeBonusRate : 0;
|
|
|
- $bonusRate = $bonusRate > 0 && $bonusRate <= 100 ? $bonusRate : $storeBonusRate;
|
|
|
- $bonus = moneyFormat($orderTotal * $bonusRate / 100, 2);
|
|
|
-
|
|
|
- // 检查是否关联为会议订单,先签到的会议先关联
|
|
|
- $record = MeetingRecordsModel::with(['meeting'])->where(['user_id'=>$userId,'mark'=>1])
|
|
|
- ->where('expired_at','>=', date('Y-m-d H:i:s'))
|
|
|
- ->orderBy('create_time', 'desc')
|
|
|
- ->first();
|
|
|
- $recordMeetingId = isset($record['meeting_id'])? $record['meeting_id'] : 0;
|
|
|
- $meeting = isset($record['meeting'])?$record['meeting'] : [];
|
|
|
- $meetingBonusRate = isset($meeting['bonus_rate'])?$meeting['bonus_rate'] : 0;
|
|
|
- $meetingUserBonusRate = isset($meeting['user_bonus_rate'])?$meeting['user_bonus_rate'] : 0;
|
|
|
- $meetingBonusRate = $meetingBonusRate>0 && $meetingBonusRate<100? $meetingBonusRate : 0;
|
|
|
- $meetingUserBonusRate = $meetingUserBonusRate>0 && $meetingUserBonusRate<100? $meetingUserBonusRate : 0;
|
|
|
- $meetingBonus = moneyFormat($orderTotal * $meetingBonusRate / 100, 2);
|
|
|
- $meetingUserBonus = moneyFormat($orderTotal * $meetingUserBonusRate / 100, 2);
|
|
|
-
|
|
|
+// // 商家佣金
|
|
|
+// $storeInfo = StoreModel::where(['id' => $storeId])->first();
|
|
|
+// $bonusRate = isset($storeInfo['bonus_rate']) ? floatval($storeInfo['bonus_rate']) : 0;
|
|
|
+// $storeBonusRate = ConfigService::make()->getConfigByCode('store_bonus_rate', 0);
|
|
|
+// $storeBonusRate = $storeBonusRate > 0 && $storeBonusRate <= 100 ? $storeBonusRate : 0;
|
|
|
+// $bonusRate = $bonusRate > 0 && $bonusRate <= 100 ? $bonusRate : $storeBonusRate;
|
|
|
+// $bonus = moneyFormat($orderTotal * $bonusRate / 100, 2);
|
|
|
+//
|
|
|
+// // 订单佣金数据
|
|
|
+// $bonusData = SettleService::make()->orderBonus($orderNo,$userInfo);
|
|
|
|
|
|
// 是否开启分账功能
|
|
|
$payTotal = moneyFormat($orderTotal + $deliveryFee, 2); // 含运费支付金额
|
|
|
- $revenueOpen = ConfigService::make()->getConfigByCode('order_revenue_open', 0);
|
|
|
- $revenueRate = ConfigService::make()->getConfigByCode('order_revenue_rate', 30);
|
|
|
- $revenueRate = $revenueRate>0 && $revenueRate<100? $revenueRate: 30;
|
|
|
- $revenueAmount = moneyFormat($payTotal * $revenueRate/100,2);
|
|
|
if (env('PAY_DEBUG')) {
|
|
|
- $revenueAmount = 0.01;
|
|
|
$payTotal = 0.01;
|
|
|
}
|
|
|
|
|
|
@@ -356,9 +369,10 @@ class OrderService extends BaseService
|
|
|
'order_no' => $orderNo,
|
|
|
'user_id' => $userId,
|
|
|
'store_id' => $storeId,
|
|
|
- 'meeting_id' => $recordMeetingId, // 关联会议
|
|
|
'total' => $goodsTotal, // 商品总价
|
|
|
'num' => $orderCount,
|
|
|
+ 'bd_score' => $bdScoreTotal, // 折扣后商品总价(不含运费)
|
|
|
+ 'profit_total' => $profitTotal, // 折扣后商品总价(不含运费)
|
|
|
'pay_total' => $orderTotal, // 折扣后商品总价(不含运费)
|
|
|
'discount_point' => $discountPoint,
|
|
|
'discount_total' => $discountTotal, // 折扣金额
|
|
|
@@ -367,15 +381,6 @@ class OrderService extends BaseService
|
|
|
'receiver_mobile' => $mobile,
|
|
|
'receiver_area' => $area,
|
|
|
'receiver_address' => $address,
|
|
|
- 'bonus' => $bonus,
|
|
|
- 'bonus_rate' => $bonusRate,
|
|
|
- 'is_revenue' => $revenueOpen==1?1: 2,
|
|
|
- 'revenue_no' => $revenueOpen==1?(str_replace('JK','RE',$orderNo)):'',
|
|
|
- 'revenue_amount' => $revenueOpen==1?$revenueAmount:0,
|
|
|
- 'meeting_bonus_rate' => $meetingBonusRate,
|
|
|
- 'meeting_bonus' => $meetingBonus,
|
|
|
- 'meeting_user_bonus' => $meetingUserBonus,
|
|
|
- 'meeting_user_bonus_rate' => $meetingUserBonusRate,
|
|
|
'create_time' => time(),
|
|
|
'update_time' => time(),
|
|
|
'status' => 1,
|
|
|
@@ -399,6 +404,37 @@ class OrderService extends BaseService
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ // 创业礼包分单
|
|
|
+ if ($type == 2) {
|
|
|
+ $data = $order;
|
|
|
+ $data['total'] = moneyFormat($data['total'] / 6);
|
|
|
+ $data['bd_score'] = moneyFormat($bdScoreTotal / 6, 2);
|
|
|
+ $data['profit_total'] = moneyFormat($profitTotal / 6, 2);
|
|
|
+ $data['pay_total'] = moneyFormat($orderTotal / 6, 2);
|
|
|
+
|
|
|
+ $subOrders = [];
|
|
|
+ for ($i = 1; $i <= 6; $i++) {
|
|
|
+ $data['order_no'] = get_order_num('BS');
|
|
|
+ $data['main_no'] = $orderNo;
|
|
|
+ if ($i == 6) {
|
|
|
+ $data['total'] = round($data['total'] / 6, 2);
|
|
|
+ $data['bd_score'] = round($bdScoreTotal / 6, 2);
|
|
|
+ $data['profit_total'] = round($profitTotal / 6, 2);
|
|
|
+ $data['pay_total'] = round($orderTotal / 6, 2);
|
|
|
+ }
|
|
|
+
|
|
|
+ $subOrders[] = $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ //
|
|
|
+ if ($subOrders && !$this->model->insert($subOrders)) {
|
|
|
+ DB::rollBack();
|
|
|
+ $this->error = '处理商品订单失败';
|
|
|
+ RedisService::clear($cacheLockKey);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 获取支付参数
|
|
|
/* TODO 支付处理 */
|
|
|
$payOrder = [
|
|
|
@@ -413,7 +449,7 @@ class OrderService extends BaseService
|
|
|
// 调起支付
|
|
|
$payment = PaymentService::make()->minPay($userInfo, $payOrder, 'store');
|
|
|
if (empty($payment)) {
|
|
|
-// DB::rollBack();
|
|
|
+ //DB::rollBack();
|
|
|
RedisService::clear($cacheLockKey);
|
|
|
$this->error = PaymentService::make()->getError();
|
|
|
return false;
|
|
|
@@ -454,6 +490,35 @@ class OrderService extends BaseService
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 创业大礼包验证
|
|
|
+ * @param $userId
|
|
|
+ * @param $goodsId
|
|
|
+ * @return array|mixed
|
|
|
+ */
|
|
|
+ public function checkBusinessOrder($userId, $goodsId)
|
|
|
+ {
|
|
|
+ $cacheKey = "caches:orders:check_order:{$goodsId}_{$userId}";
|
|
|
+ $data = RedisService::get($cacheKey);
|
|
|
+ if ($data) {
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ $data = $this->model->from('orders as a')
|
|
|
+ ->leftJoin('orders_goods as b', 'b.order_no', '=', 'a.order_no')
|
|
|
+ ->where(['a.user_id' => $userId, 'b.goods_id' => $goodsId, 'a.mark' => 1])
|
|
|
+ ->where('a.status', '<=', 5)
|
|
|
+ ->select(['a.id', 'a.order_no', 'b.goods_id', 'a.status'])
|
|
|
+ ->orderBy('id', 'desc')
|
|
|
+ ->first();
|
|
|
+ $data = $data ? $data->toArray() : [];
|
|
|
+ if ($data) {
|
|
|
+ RedisService::set($cacheKey, $data, rand(5, 10));
|
|
|
+ }
|
|
|
+
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 订单支付
|
|
|
* @param $userId
|
|
|
* @param $id
|
|
|
@@ -716,7 +781,7 @@ class OrderService extends BaseService
|
|
|
|
|
|
// 订单信息
|
|
|
$info = $this->model->with(['orderGoods'])->where(['id' => $id, 'mark' => 1])
|
|
|
- ->select(['id', 'order_no','user_id', 'store_id','meeting_id', 'pay_total', 'bonus', 'delivery_no', 'delivery_company', 'delivery_code', 'status'])
|
|
|
+ ->select(['id', 'order_no', 'user_id', 'store_id', 'meeting_id', 'pay_total', 'bonus', 'delivery_no', 'delivery_company', 'delivery_code', 'status'])
|
|
|
->first();
|
|
|
$orderNo = isset($info['order_no']) ? $info['order_no'] : '';
|
|
|
$deliveryNo = isset($info['delivery_no']) ? $info['delivery_no'] : '';
|
|
|
@@ -785,14 +850,14 @@ class OrderService extends BaseService
|
|
|
}
|
|
|
|
|
|
// 关联会议统计
|
|
|
- if($meetingId){
|
|
|
+ if ($meetingId) {
|
|
|
// 会议成交统计
|
|
|
$updateData = ['order_count' => DB::raw('order_count+1'), 'order_total' => DB::raw("order_total + {$orderTotal}")];
|
|
|
MeetingModel::where(['id' => $meetingId])->update($updateData);
|
|
|
|
|
|
// 签到用户成交统计
|
|
|
$updateData = ['order_count' => DB::raw('order_count+1'), 'order_total' => DB::raw("order_total + {$orderTotal}")];
|
|
|
- MeetingRecordsModel::where(['meeting_id' => $meetingId,'user_id'=>$orderUserId])->update($updateData);
|
|
|
+ MeetingRecordsModel::where(['meeting_id' => $meetingId, 'user_id' => $orderUserId])->update($updateData);
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -991,7 +1056,7 @@ class OrderService extends BaseService
|
|
|
$limitNum = ConfigService::make()->getConfigByCode('order_revenue_batch_num', 300);
|
|
|
$limitNum = $limitNum > 10 && $limitNum < 2000 ? $limitNum : 300;
|
|
|
$datas = $this->model->where(['status' => 4, 'is_revenue' => 1, 'revenue_status' => 2, 'mark' => 1])
|
|
|
- ->select(['id', 'user_id','pay_total', 'order_no','revenue_no','transaction_id', 'status'])
|
|
|
+ ->select(['id', 'user_id', 'pay_total', 'order_no', 'revenue_no', 'transaction_id', 'status'])
|
|
|
->limit($limitNum)
|
|
|
->get();
|
|
|
$datas = $datas ? $datas->toArray() : [];
|
|
|
@@ -1025,62 +1090,62 @@ class OrderService extends BaseService
|
|
|
|
|
|
// 是否设置分账账户
|
|
|
$revenueOpenid = ConfigService::make()->getConfigByCode('order_revenue_openid', '');
|
|
|
- if(empty($revenueOpenid)){
|
|
|
+ if (empty($revenueOpenid)) {
|
|
|
$this->error = '订单分账账户未配置';
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
// 订单信息
|
|
|
- RedisService::set($cacheLockKey, ['id'=>$id,'date'=>date('Y-m-d H:i:s')], 20);
|
|
|
+ RedisService::set($cacheLockKey, ['id' => $id, 'date' => date('Y-m-d H:i:s')], 20);
|
|
|
$info = $this->model->where(['id' => $id, 'mark' => 1])
|
|
|
- ->select(['id', 'order_no','revenue_no','user_id','transaction_id', 'pay_total','is_revenue','revenue_status','revenue_amount', 'status'])
|
|
|
+ ->select(['id', 'order_no', 'revenue_no', 'user_id', 'transaction_id', 'pay_total', 'is_revenue', 'revenue_status', 'revenue_amount', 'status'])
|
|
|
->first();
|
|
|
$revenueOrderNo = isset($info['revenue_no']) ? $info['revenue_no'] : '';
|
|
|
$revenueAmount = isset($info['revenue_amount']) ? $info['revenue_amount'] : 0;
|
|
|
$status = isset($info['status']) ? $info['status'] : 0;
|
|
|
$isRevenue = isset($info['is_revenue']) ? $info['is_revenue'] : 0;
|
|
|
$revenueStatus = isset($info['revenue_status']) ? $info['revenue_status'] : 0;
|
|
|
- if($status != 4){
|
|
|
+ if ($status != 4) {
|
|
|
RedisService::clear($cacheLockKey);
|
|
|
$this->error = '订单状态错误,未完成收货的订单无法分账';
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- if($isRevenue != 1){
|
|
|
+ if ($isRevenue != 1) {
|
|
|
RedisService::clear($cacheLockKey);
|
|
|
$this->error = '该订单不是分账订单';
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- if($revenueStatus != 2){
|
|
|
+ if ($revenueStatus != 2) {
|
|
|
RedisService::clear($cacheLockKey);
|
|
|
$this->error = '该订单分账已处理完成';
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- if($revenueAmount<=0){
|
|
|
+ if ($revenueAmount <= 0) {
|
|
|
RedisService::clear($cacheLockKey);
|
|
|
$this->error = '订单分账金额不足';
|
|
|
return false;
|
|
|
}
|
|
|
$order = [
|
|
|
- 'transaction_id'=> $info['transaction_id'],
|
|
|
- 'out_order_no'=> $revenueOrderNo,
|
|
|
- 'body'=> '订单分账',
|
|
|
- 'amount'=> $revenueAmount,
|
|
|
- 'unsplit'=> true, // 只分一次
|
|
|
+ 'transaction_id' => $info['transaction_id'],
|
|
|
+ 'out_order_no' => $revenueOrderNo,
|
|
|
+ 'body' => '订单分账',
|
|
|
+ 'amount' => $revenueAmount,
|
|
|
+ 'unsplit' => true, // 只分一次
|
|
|
];
|
|
|
$result = PaymentService::make()->profitsharing($revenueOpenid, $order);
|
|
|
- $state = isset($result->state)? $result->state : 0;
|
|
|
- $message = isset($result->message)? $result->message : '分账失败';
|
|
|
- $orderId = isset($result->order_id)? $result->order_id : '';
|
|
|
- if($state == 'FINISHED'){
|
|
|
- $this->model->where(['id'=>$id])->update(['revenue_status'=>1,'revenue_order_id'=>$orderId,'update_time'=>time()]);
|
|
|
+ $state = isset($result->state) ? $result->state : 0;
|
|
|
+ $message = isset($result->message) ? $result->message : '分账失败';
|
|
|
+ $orderId = isset($result->order_id) ? $result->order_id : '';
|
|
|
+ if ($state == 'FINISHED') {
|
|
|
+ $this->model->where(['id' => $id])->update(['revenue_status' => 1, 'revenue_order_id' => $orderId, 'update_time' => time()]);
|
|
|
RedisService::clear($cacheLockKey);
|
|
|
RedisService::clear("caches:orders:revenueList");
|
|
|
$this->error = '分账处理成功';
|
|
|
return true;
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
RedisService::clear($cacheLockKey);
|
|
|
$this->error = $message;
|
|
|
return false;
|