|
@@ -587,7 +587,7 @@ class OrderService
|
|
|
$discountData = json_decode($discountData, true);
|
|
|
}
|
|
|
foreach ($coupon as $couponId) {
|
|
|
- $couponDetail = CouponDetail::leftJoin('coupon_goods', 'coupon_goods.join_goods_coupon_id', '=', 'coupon_detail.join_detail_coupon_id')
|
|
|
+ $couponDetail = Db::table('coupon_detail')->leftJoin('coupon_goods', 'coupon_goods.join_goods_coupon_id', '=', 'coupon_detail.join_detail_coupon_id')
|
|
|
->leftJoin('coupon', 'coupon.coupon_id', '=', 'coupon_detail.join_detail_coupon_id')
|
|
|
->select('coupon_detail.coupon_detail_id', 'coupon_goods.coupon_goods_id', 'coupon_id', 'coupon_classify', 'coupon_value', 'coupon_minimum_limit', 'coupon_category')
|
|
|
->where('coupon_goods.join_coupon_goods_id', $goodsId)
|
|
@@ -762,8 +762,18 @@ class OrderService
|
|
|
* @param $amountBalance
|
|
|
* @return array|void
|
|
|
*/
|
|
|
- public static function chooseCoupon($settlementNow, $memberId, $goods, $good, $coupon, $amountBalance)
|
|
|
+ public static function chooseCoupon($settlementNow, $memberId, $goods, $good, $coupon, $amountBalance, $orderId)
|
|
|
{
|
|
|
+ $couponDetailIds = [];
|
|
|
+ if (!empty($orderId)) {
|
|
|
+ $order = Order::where('order_id', $orderId)->first();
|
|
|
+ if (!empty($order->order_discount_json)) {
|
|
|
+ $orderDiscountJson = json_decode($order->order_discount_json, true);
|
|
|
+ foreach ($orderDiscountJson as $coupon) {
|
|
|
+ $couponDetailIds = $coupon['coupon_detail_id'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
try {
|
|
|
$cacheKey = "ORDER:USE:COUPON:" . $memberId;
|
|
|
$payAmount = $amountBalance['pay_amount'];
|
|
@@ -775,17 +785,27 @@ class OrderService
|
|
|
$couponDetail = CouponDetail::leftJoin('coupon_goods', 'coupon_goods.join_goods_coupon_id', '=', 'coupon_detail.join_detail_coupon_id')
|
|
|
->leftJoin('coupon', 'coupon.coupon_id', '=', 'coupon_detail.join_detail_coupon_id')
|
|
|
->select('coupon_detail.coupon_detail_id', 'coupon_goods.coupon_goods_id', 'coupon_id', 'coupon_classify', 'coupon_value', 'coupon_minimum_limit', 'coupon_category')
|
|
|
- ->where('coupon_goods.join_coupon_goods_id', $goodsId)
|
|
|
-// ->where('coupon_goods.join_coupon_goods_sku_id', $good['sku_id'])
|
|
|
- ->where('join_goods_coupon_id', $couponId)
|
|
|
- ->where('coupon_detail.join_coupon_detail_member_id', $memberId)
|
|
|
- ->where('coupon_detail.coupon_detail_gain_datetime', '<=', date('Y-m-d H:i:s'))
|
|
|
- ->where('coupon_detail.coupon_detail_deadline_datetime', '>=', date('Y-m-d H:i:s'));
|
|
|
- if ($settlementNow == 'Y') {
|
|
|
- $couponDetail = $couponDetail->whereIn('coupon_detail.coupon_detail_status', ['ACTIVED']);
|
|
|
- } else {
|
|
|
- $couponDetail = $couponDetail->where('coupon_detail.coupon_detail_status', 'ACTIVED');
|
|
|
- }
|
|
|
+ ->whereIn('coupon_detail_id',$couponDetailIds)
|
|
|
+ ->orWhere(function($query) use ($goodsId,$couponId,$memberId){
|
|
|
+ $query->where('coupon_goods.join_coupon_goods_id', $goodsId)
|
|
|
+ ->where('join_goods_coupon_id', $couponId)
|
|
|
+ ->where('coupon_detail.join_coupon_detail_member_id', $memberId)
|
|
|
+ ->where('coupon_detail.coupon_detail_gain_datetime', '<=', date('Y-m-d H:i:s'))
|
|
|
+ ->where('coupon_detail.coupon_detail_deadline_datetime', '>=', date('Y-m-d H:i:s'))
|
|
|
+ ->where('coupon_detail.coupon_detail_status', 'ACTIVED');
|
|
|
+ });
|
|
|
+
|
|
|
+// ->where('coupon_goods.join_coupon_goods_id', $goodsId)
|
|
|
+// ->where('join_goods_coupon_id', $couponId)
|
|
|
+// ->where('coupon_detail.join_coupon_detail_member_id', $memberId)
|
|
|
+// ->where('coupon_detail.coupon_detail_gain_datetime', '<=', date('Y-m-d H:i:s'))
|
|
|
+// ->where('coupon_detail.coupon_detail_deadline_datetime', '>=', date('Y-m-d H:i:s'))
|
|
|
+// ->where('coupon_detail.coupon_detail_status', 'ACTIVED');
|
|
|
+// if ($settlementNow == 'Y') {
|
|
|
+// $couponDetail = $couponDetail->whereIn('coupon_detail.coupon_detail_status', ['ACTIVED']);
|
|
|
+// } else {
|
|
|
+// $couponDetail = $couponDetail->where('coupon_detail.coupon_detail_status', 'ACTIVED');
|
|
|
+// }
|
|
|
$couponDetail = $couponDetail->orderBy('coupon_detail_id', 'DESC')
|
|
|
->first();
|
|
|
if (!$couponDetail) {
|
|
@@ -797,7 +817,7 @@ class OrderService
|
|
|
if ($couponDetail->coupon_category == 'PIECE' && $countAndAmount['count'] < $couponDetail->coupon_minimum_limit) {
|
|
|
continue;
|
|
|
}
|
|
|
- if (in_array($couponDetail->coupon_classify, ['立减券','满减券'])) {
|
|
|
+ if (in_array($couponDetail->coupon_classify, ['立减券', '满减券'])) {
|
|
|
if (Redis::sIsMember($cacheKey, $couponId)) {
|
|
|
continue;
|
|
|
}
|
|
@@ -996,35 +1016,35 @@ class OrderService
|
|
|
/**
|
|
|
* 检查产品限额
|
|
|
*/
|
|
|
- public static function checkGoodsLimit($goods,$memberId)
|
|
|
+ public static function checkGoodsLimit($goods, $memberId)
|
|
|
{
|
|
|
- foreach($goods as $good){
|
|
|
+ foreach ($goods as $good) {
|
|
|
$goodsLimit = 'no';
|
|
|
- $goodsModel = Goods::where('goods_id',$good['goods_id'])->select('goods_attribute_json')->first();
|
|
|
- if (!empty($goodsModel) && !empty($goodsModel->goods_attribute_json)){
|
|
|
- $goodsAttributeJson = json_decode($goodsModel->goods_attribute_json,true);
|
|
|
- if (!empty($goodsAttributeJson['max-limit'])){
|
|
|
+ $goodsModel = Goods::where('goods_id', $good['goods_id'])->select('goods_attribute_json')->first();
|
|
|
+ if (!empty($goodsModel) && !empty($goodsModel->goods_attribute_json)) {
|
|
|
+ $goodsAttributeJson = json_decode($goodsModel->goods_attribute_json, true);
|
|
|
+ if (!empty($goodsAttributeJson['max-limit'])) {
|
|
|
$goodsLimit = $goodsAttributeJson['max-limit'];
|
|
|
- if ($goodsLimit != 0 && $goodsLimit != '' && $good['nbr'] > $goodsLimit){
|
|
|
+ if ($goodsLimit != 0 && $goodsLimit != '' && $good['nbr'] > $goodsLimit) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
$sheetNbr = 0;
|
|
|
- if ($goodsLimit != 'no'){
|
|
|
- $sheetNbr = OrderSheet::where('join_sheet_member_id',$memberId)
|
|
|
- ->where('join_sheet_goods_id',$good['goods_id'])
|
|
|
- ->where('order_sheet_status','<>','CANCEL')
|
|
|
+ if ($goodsLimit != 'no') {
|
|
|
+ $sheetNbr = OrderSheet::where('join_sheet_member_id', $memberId)
|
|
|
+ ->where('join_sheet_goods_id', $good['goods_id'])
|
|
|
+ ->where('order_sheet_status', '<>', 'CANCEL')
|
|
|
->sum('order_sheet_num');
|
|
|
- if ($goodsLimit != 0 && $goodsLimit != '' && $good['nbr'] + $sheetNbr > $goodsLimit){
|
|
|
+ if ($goodsLimit != 0 && $goodsLimit != '' && $good['nbr'] + $sheetNbr > $goodsLimit) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
|
|
|
public static $couponClassify = [
|