修改支付中心数据,增加优惠卷不可使用原因
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Model\Product;
|
||||
use App\Model\UserCoupon;
|
||||
|
||||
/**
|
||||
@@ -70,7 +71,11 @@ class UserCouponService extends BaseService
|
||||
return $selected_coupons;
|
||||
}
|
||||
|
||||
// 获取可用优惠卷总金额
|
||||
/**
|
||||
* 获取可用优惠卷总金额
|
||||
* @param array $coupons 优惠卷数据
|
||||
* @return int
|
||||
*/
|
||||
public function getCouponTotalPrice(array $coupons): int
|
||||
{
|
||||
$coupon_total_price = 0;
|
||||
@@ -81,4 +86,127 @@ class UserCouponService extends BaseService
|
||||
|
||||
return $coupon_total_price;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取患者购药可用的优惠卷
|
||||
* @param string|int $user_id
|
||||
* @param array $coupon_product_datas
|
||||
* @return array
|
||||
*/
|
||||
public function getUserProductUsableCoupon(string|int $user_id, array $coupon_product_datas): array
|
||||
{
|
||||
$user_coupons = UserCoupon::getUserProductUsableCoupon($user_id,$coupon_product_datas);
|
||||
if (empty($user_coupons)) {
|
||||
return array();
|
||||
}
|
||||
|
||||
// 选中的优惠卷
|
||||
$selected_coupons = array();
|
||||
|
||||
// 优惠卷最高金额
|
||||
$coupon_high_price = 0;
|
||||
|
||||
// 是否存在互斥卷
|
||||
$is_mutex = 0;
|
||||
|
||||
// 新增字段
|
||||
foreach ($user_coupons as $key => $coupon) {
|
||||
$user_coupons[$key]['is_can_use'] = 1;// 是否可使用
|
||||
$user_coupons[$key]['cannot_use_coupon_reason'] = ""; // 不可使用原因
|
||||
}
|
||||
|
||||
foreach ($user_coupons as $key => $coupon) {
|
||||
// 处理优惠卷数量限制问题
|
||||
if ($coupon['coupon_type'] == 3 && !empty($coupon['product_id'])){
|
||||
// 数量是否足够标识字段
|
||||
$quantity_quantity = 0;
|
||||
|
||||
foreach ($coupon_product_datas as $coupon_product_data){
|
||||
// 如该优惠卷不包含此商品,跳过
|
||||
if (!str_contains($coupon['product_id'], $coupon_product_data['product_id'])){
|
||||
continue;
|
||||
}
|
||||
|
||||
// 判断商品数量是否满足
|
||||
if($coupon['min_usable_number'] > $coupon_product_data['product_num']){
|
||||
continue;
|
||||
}
|
||||
|
||||
// 标记为数量足够
|
||||
$quantity_quantity = 1;
|
||||
}
|
||||
|
||||
if ($quantity_quantity == 0){
|
||||
// 此优惠卷无商品能达到规定最小数量
|
||||
$user_coupons[$key]['is_can_use'] = 0;
|
||||
$user_coupons[$key]['cannot_use_coupon_reason'] = "商品不足" . $coupon['min_usable_number'] . "盒,不满足使用优惠卷条件";
|
||||
}
|
||||
}
|
||||
|
||||
// 处理满减金额问题
|
||||
if ($coupon['coupon_type'] == 2 && !empty($coupon['product_id'])){
|
||||
// 可共用一个优惠卷的商品金额问题
|
||||
$product_price = 0;
|
||||
|
||||
foreach ($coupon_product_datas as $coupon_product_data) {
|
||||
// 如该优惠卷不包含此商品,跳过
|
||||
if (!str_contains($coupon['product_id'], $coupon_product_data['product_id'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$product_price = bcadd($product_price,$coupon_product_data['product_price'],2);
|
||||
}
|
||||
|
||||
if ($coupon['with_amount'] > $product_price){
|
||||
// 此优惠卷因商品金额不足,无法使用
|
||||
$user_coupons[$key]['is_can_use'] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 判断品牌是否符合-暂无品牌
|
||||
}
|
||||
|
||||
// 可选择优惠卷中是否存在互斥卷
|
||||
foreach ($user_coupons as $coupon) {
|
||||
if ($coupon['is_can_use'] == 0){
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($coupon['is_mutex'] == 1) {
|
||||
$is_mutex = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// 处理存在互斥卷情况
|
||||
foreach ($user_coupons as $coupon) {
|
||||
if (empty($selected_coupon)) {
|
||||
$selected_coupons[] = $coupon; // 选中的优惠卷数据
|
||||
|
||||
$coupon_high_price = $coupon['coupon_price'];
|
||||
continue;
|
||||
}
|
||||
|
||||
// 处理存在互斥卷情况
|
||||
if ($is_mutex == 1) {
|
||||
// 选择金额最高的为选中
|
||||
if ($coupon['coupon_price'] < $coupon_high_price){
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($coupon['coupon_price'] > $coupon_high_price) {
|
||||
$coupon_high_price = $coupon['coupon_price'];
|
||||
|
||||
// 选中的优惠卷数据置空
|
||||
$selected_coupons = array();
|
||||
$selected_coupons[] = $coupon;
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$selected_coupons[] = $coupon; // 选中的优惠卷数据
|
||||
}
|
||||
|
||||
return $selected_coupons;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user