修改创建问诊订单 优惠卷部分

This commit is contained in:
wucongxing 2023-11-08 14:11:13 +08:00
parent f333fd2722
commit d7a4d9ab4a
3 changed files with 101 additions and 44 deletions

View File

@ -74,23 +74,6 @@ class UserCoupon extends Model
->where($params)->get($fields); ->where($params)->get($fields);
} }
/**
* 获取优惠卷信息-单条
* @param array $params
* @param array $coupon_params
* @param array $fields
* @return object|null
*/
public static function getDateWithCouponOne(array $params, array $coupon_params, array $application_scope_params, array $fields = ['*']): object|null
{
return self::with(['Coupon'])
->whereHas('Coupon' , function($query) use ($coupon_params,$application_scope_params){
$query->where($coupon_params)->whereIn('application_scope',$application_scope_params);
})
->where($params)
->first($fields);
}
/** /**
* 新增用户优惠卷 * 新增用户优惠卷
* @param array $data * @param array $data
@ -111,4 +94,32 @@ class UserCoupon extends Model
{ {
return self::where($params)->update($data); return self::where($params)->update($data);
} }
/**
* 获取患者问诊可用的优惠卷
* @param string|int $user_id 用户id
* @param string|int $inquiry_type 关联问诊类型application_scope=问诊时存在生效逗号分隔1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测)
* @param array $fields 字段
* @return Collection|array
*/
public static function getUserInquiryUsableCoupon(string|int $user_id, string|int $inquiry_type,array $fields = ['*']): Collection|array
{
$params = array();
$params[] = ['user_id', '=', $user_id];
$params[] = ['user_coupon_status', '=', 0];// 状态0:未使用 1:已使用 3:已过期)
$params[] = ['valid_start_time', '<', date('Y-m-d H:i:s', time())]; // 有效使用时间
$params[] = ['valid_end_time', '>', date('Y-m-d H:i:s', time())]; // 过期使用时间
return self::with(['Coupon'=> function($query) use($inquiry_type){
$query->where("coupon_client",1)
->where("coupon_status",1)
->where("application_scope",2)
->where(function ($query) use ($inquiry_type) {
$query->orwhere("inquiry_type","like",'%' . $inquiry_type+1 . '%');
$query->orwhere("inquiry_type","like",'%1%');
});
}])
->where($params)
->get($fields);
}
} }

View File

@ -150,14 +150,20 @@ class InquiryService extends BaseService
return fail(HttpEnumCode::HTTP_ERROR, "当前非医生接诊时间"); return fail(HttpEnumCode::HTTP_ERROR, "当前非医生接诊时间");
} }
// 定义优惠卷金额默认值
$coupon_amount_total = 0;
// 获取问诊价格 // 获取问诊价格
$DoctorInquiryService = new DoctorInquiryService(); $DoctorInquiryService = new DoctorInquiryService();
$inquiry_price = $DoctorInquiryService->getDoctorInquiryPrice($request_params['inquiry_type'], $request_params['inquiry_mode'], $request_params['doctor_id'] ?: ""); $inquiry_price = $DoctorInquiryService->getDoctorInquiryPrice($request_params['inquiry_type'], $request_params['inquiry_mode'], $request_params['doctor_id'] ?: "");
if ($inquiry_price > 0) { if ($inquiry_price > 0) {
// 获取用户可用优惠卷 // 获取患者问诊可用的优惠卷
$userCouponService = new UserCouponService(); $userCouponService = new UserCouponService();
$user_coupon = $userCouponService->getUserUsableCouponOne($user_info['user_id'], $request_params['inquiry_type']); $user_coupon = $userCouponService->getUserInquiryUsableCoupon($user_info['user_id'], $request_params['inquiry_type']);
// 获取可用优惠卷总金额
$coupon_amount_total = $userCouponService->getCouponTotalPrice($user_coupon);
} }
// 确定支付渠道 // 确定支付渠道
@ -174,8 +180,7 @@ class InquiryService extends BaseService
try { try {
// 实际付款金额 // 实际付款金额
$coupon_amount_total = $user_coupon['coupon']['coupon_price'] ?? 0; $payment_amount_total = bcsub($inquiry_price , $coupon_amount_total,2);
$payment_amount_total = $inquiry_price - $coupon_amount_total;
if ($payment_amount_total < 0) { if ($payment_amount_total < 0) {
$payment_amount_total = 0; $payment_amount_total = 0;
} }

View File

@ -10,34 +10,75 @@ use App\Model\UserCoupon;
class UserCouponService extends BaseService class UserCouponService extends BaseService
{ {
/** /**
* 获取用户可用优惠卷-单条 * 获取患者问诊可用的优惠卷
* @param string|int $user_id 用户id * @param string|int $user_id
* @param string|int $inquiry_type 订单类型1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药) * @param string|int $inquiry_type
* @param int $coupon_client 使用平台1:小程序)
* @return array * @return array
*/ */
public function getUserUsableCouponOne(string|int $user_id, string|int $inquiry_type, int $coupon_client = 1): array public function getUserInquiryUsableCoupon(string|int $user_id, string|int $inquiry_type): array
{ {
// 问诊类型需加1 $user_coupons = UserCoupon::getUserInquiryUsableCoupon($user_id, $inquiry_type);
$inquiry_type = $inquiry_type + 1; if (empty($user_coupons)) {
$params = array();
$params[] = ['user_id', '=', $user_id];
$params[] = ['user_coupon_status', '=', 0];// 状态0:未使用 1:已使用 3:已过期)
$params[] = ['valid_start_time', '<', date('Y-m-d H:i:s', time())]; // 有效使用时间
$params[] = ['valid_end_time', '>', date('Y-m-d H:i:s', time())]; // 过期使用时间
$coupon_params = array();
$coupon_params[] = ['coupon_client', '=', $coupon_client];
$coupon_params[] = ['coupon_status', '=', 1]; // 状态1:正常 2:强制失效 3:结束 4:删除)
$application_scope_params = [1, $inquiry_type]; // 适用范围1:全部 2:快速问诊 3:专家问诊 4:公益问诊 5:问诊购药)
$user_coupon = \App\Model\UserCoupon::getDateWithCouponOne($params, $coupon_params, $application_scope_params);
if (empty($user_coupon)) {
return array(); return array();
} }
return $user_coupon->toArray(); // 选中的优惠卷
$selected_coupons = array();
// 优惠卷最高金额
$coupon_high_price = 0;
// 是否存在互斥卷
$is_mutex = 0;
// 可选择优惠卷中是否存在互斥卷
foreach ($user_coupons as $coupon) {
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;
}
// 获取可用优惠卷总金额
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;
} }
} }