hospital-applets-api/app/Services/CouponService.php
2023-04-14 14:43:57 +08:00

149 lines
5.8 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
namespace App\Services;
use App\Amqp\Producer\AutoCompleteInquiryDelayDirectProducer;
use App\Amqp\Producer\UserCouponExpiredDelayDirectProducer;
use App\Constants\HttpEnumCode;
use App\Model\Coupon;
use App\Model\UserCoupon;
use Hyperf\Amqp\Producer;
use Hyperf\DbConnection\Db;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
/**
* 优惠卷
*/
class CouponService extends BaseService
{
/**
* 获取用户某状态全部优惠卷-列表
* @param string|int $user_id 用户id
* @param array $inquiry_type [1,2,3,4,5]适用范围1:全部 2:快速问诊 3:专家问诊 4:公益问诊 5:问诊购药)
* @param int $user_coupon_status 状态0:未使用 1:已使用 3:已过期)
* @return array
*/
public function getUserCouponStatusList(string|int $user_id, array $inquiry_type, int $user_coupon_status): array
{
$params = array();
$params[] = ['user_id','=',$user_id];
$params[] = ['user_coupon_status','=',$user_coupon_status];// 状态0:未使用 1:已使用 3:已过期)
$coupon_params = array();
$coupon_params[] = ['coupon_client','=',1];
$coupon_params[] = ['coupon_status','=',1]; // 状态1:正常 2:强制失效 3:结束 4:删除)
$application_scope_params = $inquiry_type; // 适用范围1:全部 2:快速问诊 3:专家问诊 4:公益问诊 5:问诊购药)
$user_coupon = UserCoupon::getWithCouponList($params,$coupon_params,$application_scope_params);
if (empty($user_coupon)){
return array();
}
return $user_coupon->toArray();
}
/**
* 获取用户可用优惠卷-单条
* @param string|int $user_id 用户id
* @param string|int $inquiry_type 订单类型1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
* @param int $coupon_client 使用平台1:小程序)
* @return array
*/
public function getUserUsableCouponOne(string|int $user_id, string|int $inquiry_type, int $coupon_client = 1): array
{
// 问诊类型需加1
$inquiry_type = $inquiry_type + 1;
$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 = UserCoupon::getDateWithCouponOne($params,$coupon_params,$application_scope_params);
if (empty($user_coupon)){
return array();
}
return $user_coupon->toArray();
}
/**
* 发放用户优惠卷
* @param int $distribution_object 发放对象1:新注册用户 2:会员 3:近期消费 4:近期购药)
* @param string $user_id
* @param string $patient_id
* @param int $coupon_client 使用平台1:小程序)
* @return bool
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function DistributeCoupon(int $distribution_object,string $user_id,string $patient_id,int $coupon_client = 1): bool
{
$params = array();
$params['coupon_client'] = $coupon_client;
$params['coupon_status'] = 1;
$params['distribution_object'] = $distribution_object; // 发放对象1:新注册用户 2:会员 3:近期消费 4:近期购药)
$coupon = Coupon::getList($params);
if (empty($coupon)){
return true;
}
foreach ($coupon as $key => $value){
// 判断发放数量
if ($value['coupon_count'] == $value['coupon_take_count']){
continue;
}
// 进行发放
$data = array();
$data['user_id'] = $user_id;
$data['patient_id'] = $patient_id;
$data['coupon_id'] = $value['coupon_id'];
if ($value['valid_type'] == 1){
// 有效类型1:绝对时效xxx-xxx时间段有效 2:相对时效 n天内有效
$data['valid_start_time'] = $value['valid_start_time']; // 有效使用时间
$data['valid_end_time'] = $value['valid_end_time']; // 过期使用时间
}elseif ($value['valid_type'] == 2){
// 有效类型1:绝对时效xxx-xxx时间段有效 2:相对时效 n天内有效
$data['valid_start_time'] = date('Y-m-d H:i:s',time()); // 有效使用时间
$data['valid_end_time'] = date("Y-m-d H:i:s",strtotime($value['valid_days'] . " day"));
}else{
return false;
}
$user_coupon = UserCoupon::addUserCoupon($data);
if (empty($user_coupon)){
return false;
}
// 添加用户优惠卷自动过期队列
// 添加自动完成队列
$valid_end_time = strtotime($data['valid_end_time']);
$data = array();
$data['user_coupon_id'] = $user_coupon['user_coupon_id'];
$time = $valid_end_time - time();
$message = new UserCouponExpiredDelayDirectProducer($data);
$message->setDelayMs(1000 * $time);
$producer = $this->container->get(Producer::class);
$res = $producer->produce($message);
if (!$res) {
return false;
}
}
return true;
}
}