$coupon_high_price) { $coupon_high_price = $coupon['coupon_price']; // 选中的优惠卷数据置空 $selected_coupons = array(); $selected_coupons[] = $coupon; continue; } } $selected_coupons[] = $coupon; // 选中的优惠卷数据 } return $selected_coupons; } /** * 获取可用优惠卷总金额 * @param array $coupons 优惠卷数据 * @return int */ public function getCouponTotalPrice(array $coupons): int { $coupon_total_price = 0; foreach ($coupons as $coupon){ $coupon_total_price = bcadd($coupon_total_price,$coupon['coupon_price'],2); } 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; } }