hospital-applets-api/app/Model/UserCoupon.php

229 lines
8.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
declare(strict_types=1);
namespace App\Model;
use Carbon\Carbon;
use Hyperf\Database\Model\Collection;
use Hyperf\Database\Model\Relations\HasOne;
use Hyperf\Snowflake\Concern\Snowflake;
/**
* @property int $user_coupon_id 主键id
* @property int $user_id 用户id
* @property int $patient_id 患者id
* @property int $coupon_id 优惠卷id
* @property int $user_coupon_status 状态0:未使用 1:已使用 3:已过期)
* @property string $coupon_use_date 使用时间
* @property string $valid_start_time 开始使用时间
* @property string $valid_end_time 过期使用时间
* @property Carbon $created_at 创建时间
* @property Carbon $updated_at 修改时间
* @property-read Coupon $Coupon
*/
class UserCoupon extends Model
{
use Snowflake;
/**
* The table associated with the model.
*/
protected ?string $table = 'user_coupon';
/**
* The attributes that are mass assignable.
*/
protected array $fillable = ['user_coupon_id', 'user_id', 'patient_id', 'coupon_id', 'user_coupon_status', 'coupon_use_date', 'valid_start_time', 'valid_end_time', 'created_at', 'updated_at'];
protected string $primaryKey = "user_coupon_id";
/**
* 关联优惠券表
*/
public function Coupon(): HasOne
{
return $this->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);
}
}