hasOne(Coupon::class, 'coupon_id', 'coupon_id'); } /** * 获取-单条 * @param array $params * @param array $fields * @return object|null */ public static function getOne(array $params, array $fields = ['*']): object|null { return self::where($params)->first($fields); } /** * 获取优惠卷信息-多条 * @param array $params * @param array $fields * @return Collection|array */ public static function getWithCouponList(array $params,array $fields = ['*']): Collection|array { return self::with(['Coupon']) ->whereHas('Coupon' , function($query){ $query->where("coupon_client",1)->whereNotIn("coupon_status",[2,4]); }) ->where($params)->get($fields); } /** * 新增用户优惠卷 * @param array $data * @return \Hyperf\Database\Model\Model|UserCoupon */ public static function addUserCoupon(array $data): \Hyperf\Database\Model\Model|UserCoupon { return self::create($data); } /** * 修改 * @param array $params * @param array $data * @return int */ public static function edit(array $params = [], array $data = []): int { 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']) ->whereHas('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) ->groupBy("coupon_id") ->get($fields); } /** * 获取患者购药可用的优惠卷 * @param string|int $user_id 用户id * @param array $coupon_product_datas * @param array $fields 字段 * @return Collection|array */ public static function getUserProductUsableCoupon(string|int $user_id,array $coupon_product_datas = [],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']) ->whereHas('Coupon', function ($query) use ($coupon_product_datas) { $query->where("coupon_client",1) ->where("coupon_status",1) ->whereIn("application_scope",[1,3,4,5,6]); // ->when(function ($query) use ($coupon_product_datas) { // foreach ($coupon_product_datas as $coupon_product_data){ // $query->orwhere("product_id","=",$coupon_product_data['product_id']); // } // }); }) ->where($params) ->groupBy("coupon_id") ->get($fields); } /** * 获取患者某一类型下的可用优惠卷 * @param string|int $user_id * @param int $distribution_object * @param array $fields * @return Collection|array */ public static function getUserObjectTypeCoupon(string|int $user_id,int $distribution_object,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']) ->whereHas('Coupon', function ($query) use ($distribution_object) { $query->where("coupon_client",1) ->where("coupon_status",1) ->where(function ($query) use ($distribution_object) { $query->orwhere("distribution_object",$distribution_object); }); }) ->where($params) ->groupBy("coupon_id") ->get($fields); } /** * 获取患者某一类型下的全部优惠卷 * @param string|int $user_id * @param int $distribution_object * @param array $fields * @return Collection|array */ public static function getUserAllObjectTypeCoupon(string|int $user_id,int $distribution_object,array $fields = ['*']): Collection|array { $params = array(); $params[] = ['user_id', '=', $user_id]; $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']) ->whereHas('Coupon', function ($query) use ($distribution_object) { $query->where("coupon_client",1) ->where("coupon_status",1) ->where(function ($query) use ($distribution_object) { $query->orwhere("distribution_object",$distribution_object); }); }) ->where($params) ->groupBy("coupon_id") ->get($fields); } /** * 获取患者今日过期优惠卷 * @param array $params * @param array $valid_end_time * @param array $fields * @return Collection|array */ public static function getUserTodayExpiredCoupon(array $params,array $valid_end_time,array $fields = ['*']): Collection|array { return self::where($params) // ->where('valid_start_time',">=","2024-05-01 00:00:00") // 此处是为了区分于1.3版本上线前的优惠卷 ->whereBetween('valid_end_time', $valid_end_time) ->get($fields); } }