From 882127a9bb33bbd3dab79d3f107a174c70e66ee1 Mon Sep 17 00:00:00 2001 From: wucongxing <815046773@qq.com> Date: Fri, 14 Apr 2023 14:26:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=88=91=E7=9A=84=E5=8C=BB?= =?UTF-8?q?=E7=94=9F=EF=BC=8C=E6=96=B0=E5=A2=9E=E4=BC=98=E6=83=A0=E5=8D=B7?= =?UTF-8?q?=E8=BF=87=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CouponExpiredDelayDirectConsumer.php | 50 -------- .../UserCouponExpiredDelayDirectConsumer.php | 117 ++++++++++++++++++ ... UserCouponExpiredDelayDirectProducer.php} | 6 +- app/Controller/TestController.php | 9 -- app/Services/CouponService.php | 27 +++- app/Services/InquiryService.php | 20 +-- app/Services/LoginService.php | 5 - app/Services/PatientDoctorService.php | 4 +- 8 files changed, 149 insertions(+), 89 deletions(-) delete mode 100644 app/Amqp/Consumer/CouponExpiredDelayDirectConsumer.php create mode 100644 app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php rename app/Amqp/Producer/{CouponExpiredDelayDirectProducer.php => UserCouponExpiredDelayDirectProducer.php} (74%) diff --git a/app/Amqp/Consumer/CouponExpiredDelayDirectConsumer.php b/app/Amqp/Consumer/CouponExpiredDelayDirectConsumer.php deleted file mode 100644 index 9f48ba7..0000000 --- a/app/Amqp/Consumer/CouponExpiredDelayDirectConsumer.php +++ /dev/null @@ -1,50 +0,0 @@ -error("开始执行 取消过期优惠卷 队列:" . json_encode($data, JSON_UNESCAPED_UNICODE)); - - Db::beginTransaction(); - try { - - Db::commit(); - Log::getInstance()->info("取消过期优惠卷 队列执行成功"); - return Result::ACK; - } catch (\Exception $e) { - Db::rollBack(); - Log::getInstance()->error("取消过期优惠卷 队列执行失败:" . $e->getMessage()); - return Result::ACK; // 重回队列 - } - } -} diff --git a/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php new file mode 100644 index 0000000..f2006cf --- /dev/null +++ b/app/Amqp/Consumer/UserCouponExpiredDelayDirectConsumer.php @@ -0,0 +1,117 @@ +error("开始执行 处理用户优惠卷过期 队列:" . json_encode($data, JSON_UNESCAPED_UNICODE)); + + Db::beginTransaction(); + try { + // 检测参数 + if (!isset($data['user_coupon_id'])){ + Db::rollBack(); + Log::getInstance()->error("处理用户优惠卷过期队列 执行失败:入参错误"); + return Result::DROP; + } + + // 获取优惠卷数据 + $params = array(); + $params['user_coupon_id'] = $data['user_coupon_id']; + $user_coupon = UserCoupon::getOne($params); + if (empty($user_coupon)){ + Db::rollBack(); + Log::getInstance()->info("处理用户优惠卷过期队列 执行结束:无优惠卷数据"); + return Result::DROP; + } + + // 检测优惠卷是否被使用 + if ($user_coupon['user_coupon_status'] == 1){ + Db::rollBack(); + Log::getInstance()->info("处理用户优惠卷过期队列 执行结束:优惠卷已被使用,无需处理"); + return Result::DROP; + } + + // 检测优惠卷是否已执行过期处理 + if ($user_coupon['user_coupon_status'] == 3){ + Db::rollBack(); + Log::getInstance()->info("处理用户优惠卷过期队列 执行结束:优惠卷已执行过期处理,无需处理"); + return Result::DROP; + } + + // 检测优惠卷过期时间 + $valid_end_time = strtotime($user_coupon['valid_end_time']); + + // 处理未过期事件 + // 先删除-重新添加队列 + if ($valid_end_time > time()){ + $time = $valid_end_time - time(); + + $queue_data = array(); + $queue_data['order_inquiry_id'] = $data['order_inquiry_id']; + + $message = new UserCouponExpiredDelayDirectProducer($queue_data); + $message->setDelayMs(1000 * $time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + Db::rollBack(); + Log::getInstance()->error("处理用户优惠卷过期队列 执行失败:未到过期时间,重新添加队列失败"); + return Result::REQUEUE; + } + + return Result::DROP; + } + + // 处理已过期事件 + $params = array(); + $params['user_coupon_id'] = $user_coupon['user_coupon_id']; + + $data = array(); + $data['user_coupon_status'] = 3; + UserCoupon::edit($params, $data); + + Db::commit(); + Log::getInstance()->info("处理用户优惠卷过期 队列执行成功"); + return Result::ACK; + } catch (\Exception $e) { + Db::rollBack(); + Log::getInstance()->error("处理用户优惠卷过期 队列执行失败:" . $e->getMessage()); + return Result::REQUEUE; // 重回队列 + } + } +} diff --git a/app/Amqp/Producer/CouponExpiredDelayDirectProducer.php b/app/Amqp/Producer/UserCouponExpiredDelayDirectProducer.php similarity index 74% rename from app/Amqp/Producer/CouponExpiredDelayDirectProducer.php rename to app/Amqp/Producer/UserCouponExpiredDelayDirectProducer.php index ad0ab0d..a5223f9 100644 --- a/app/Amqp/Producer/CouponExpiredDelayDirectProducer.php +++ b/app/Amqp/Producer/UserCouponExpiredDelayDirectProducer.php @@ -10,10 +10,10 @@ use Hyperf\Amqp\Message\ProducerMessage; use Hyperf\Amqp\Message\Type; /** - * 优惠卷过期 + * 处理用户优惠卷过期 */ #[Producer] -class CouponExpiredDelayDirectProducer extends ProducerMessage +class UserCouponExpiredDelayDirectProducer extends ProducerMessage { use ProducerDelayedMessageTrait; @@ -21,7 +21,7 @@ class CouponExpiredDelayDirectProducer extends ProducerMessage protected string $type = Type::DIRECT; - protected string|array $routingKey = 'CouponExpired'; + protected string|array $routingKey = 'UserCouponExpired'; public function __construct($data) { diff --git a/app/Controller/TestController.php b/app/Controller/TestController.php index 7386ae0..96046f5 100644 --- a/app/Controller/TestController.php +++ b/app/Controller/TestController.php @@ -775,15 +775,6 @@ class TestController extends AbstractController // 快递订阅 public function test_14(){ - $data = array(); - $data['order_inquiry_id'] = "505311998932189184"; - $message = new AutoCompleteInquiryDelayDirectProducer($data); - $message->setDelayMs(1000 * 10); - $producer = $this->container->get(Producer::class); - $res = $producer->produce($message); - if (!$res) { - return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败"); - } } } \ No newline at end of file diff --git a/app/Services/CouponService.php b/app/Services/CouponService.php index f5ba376..7e83d48 100644 --- a/app/Services/CouponService.php +++ b/app/Services/CouponService.php @@ -2,8 +2,15 @@ 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; /** * 优惠卷 @@ -76,6 +83,8 @@ class CouponService extends BaseService * @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 { @@ -113,8 +122,22 @@ class CouponService extends BaseService return false; } - $res = UserCoupon::addUserCoupon($data); - if (empty($res)){ + $user_coupon = UserCoupon::addUserCoupon($data); + if (empty($user_coupon)){ + return false; + } + + // 添加用户优惠卷自动过期队列 + // 添加自动完成队列 + $data = array(); + $data['user_coupon_id'] = $user_coupon['user_coupon_id']; + + $time = $data['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; } } diff --git a/app/Services/InquiryService.php b/app/Services/InquiryService.php index d7f4bef..ae12296 100644 --- a/app/Services/InquiryService.php +++ b/app/Services/InquiryService.php @@ -1086,24 +1086,8 @@ class InquiryService extends BaseService // 处理订单优惠卷 if (!empty($order_inquiry['coupon_amount_total']) && $order_inquiry['coupon_amount_total'] > 0) { - // 获取用户优惠卷信息 - $params = array(); - $params['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; - $order_inquiry_coupon = OrderInquiryCoupon::getOne($params); - if (!empty($order_inquiry_coupon)) { - // 恢复优惠卷 - $data = array(); - $data['user_coupon_status'] = 0; - $data['coupon_use_date'] = date('Y-m-d H:i:s', time()); - - $params = array(); - $params['user_coupon_id'] = $order_inquiry_coupon['user_coupon_id']; - UserCoupon::edit($params, $data); - - // 发送站内消息-优惠卷退还 - $MessagePush = new MessagePush($order_inquiry['user_id'],$order_inquiry['order_inquiry_id']); - $MessagePush->patientRefundCoupon(); - } + $InquiryService = new InquiryService(); + $InquiryService->returnInquiryCoupon($order_inquiry['order_inquiry_id'], $order_inquiry['user_id']); } return $result; diff --git a/app/Services/LoginService.php b/app/Services/LoginService.php index 0f8e1a4..4191bdf 100644 --- a/app/Services/LoginService.php +++ b/app/Services/LoginService.php @@ -45,14 +45,9 @@ class LoginService extends BaseService if (empty($phone_info) || empty($phone_info['phone_info']) || empty($phone_info['phone_info']['purePhoneNumber'])){ return fail(HttpEnumCode::GET_WX_ERROR); } -// $phone_info['phone_info']['purePhoneNumber'] = "18221234162"; // 获取用户openid $wx_info_data = $weChat->codeToSession($wx_code); -// $wx_info_data = array( -// "session_key" => "SWfpkHtKZRq/G0ONoxigaQ==", -// "openid" => "o9gYG441zEAHuYoNX7lwFKiQBzKE", -// ); if (empty($wx_info_data['session_key']) || empty($wx_info_data['openid'])) { return fail(HttpEnumCode::GET_WX_ERROR); } diff --git a/app/Services/PatientDoctorService.php b/app/Services/PatientDoctorService.php index 3ff93a5..4deb6ed 100644 --- a/app/Services/PatientDoctorService.php +++ b/app/Services/PatientDoctorService.php @@ -508,7 +508,7 @@ class PatientDoctorService extends BaseService // 处理数据 if (!empty($result['data'])) { - foreach ($result['data'] as $item) { + foreach ($result['data'] as &$item) { $data = array(); // 医生专长 @@ -531,7 +531,7 @@ class PatientDoctorService extends BaseService // 职称 $data['user_doctor']['doctor_title_name'] = empty($data['user_doctor']['doctor_title']) ? "" : DoctorTitleCode::getMessage($data['user_doctor']['doctor_title']); - $result['data'][] = $data; + $item = $data; } }