From ab8db606ef98e52390b5cdd8e80e0c48a1421430 Mon Sep 17 00:00:00 2001 From: wucongxing <815046773@qq.com> Date: Thu, 9 Nov 2023 11:19:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8D=AF=E5=93=81=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=94=AF=E4=BB=98=E6=88=90=E5=8A=9F=E5=86=8D=E6=AC=A1?= =?UTF-8?q?=E5=8F=91=E6=94=BE=E4=BC=98=E6=83=A0=E5=8D=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GrantUserCouponDelayDirectConsumer.php | 57 +++++++++++++++++++ .../GrantUserCouponDelayDirectProducer.php | 37 ++++++++++++ app/Controller/CallBackController.php | 49 ++++++++++++++++ app/Services/CouponService.php | 4 +- 4 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 app/Amqp/Consumer/GrantUserCouponDelayDirectConsumer.php create mode 100644 app/Amqp/Producer/GrantUserCouponDelayDirectProducer.php diff --git a/app/Amqp/Consumer/GrantUserCouponDelayDirectConsumer.php b/app/Amqp/Consumer/GrantUserCouponDelayDirectConsumer.php new file mode 100644 index 0000000..e4acdd3 --- /dev/null +++ b/app/Amqp/Consumer/GrantUserCouponDelayDirectConsumer.php @@ -0,0 +1,57 @@ +info("开始执行 延迟发放用户优惠卷 队列:" . json_encode($data, JSON_UNESCAPED_UNICODE)); + + // 获取优惠卷数据 + $params = array(); + $params['coupon_id'] = $data["coupon_id"]; + $coupon = Coupon::getOne($params); + if (empty($coupon)){ + Log::getInstance("queue-GrantUserCoupon")->error("无优惠卷数据"); + return Result::DROP; + } + + Db::beginTransaction(); + + try { + $couponService = new CouponService(); + $res = $couponService->GrantUserCoupon($data["coupon_id"],$data['user_id']); + if (!$res){ + // 发放失败 + Db::rollBack(); + Log::getInstance("queue-GrantUserCoupon")->error("发放优惠卷失败"); + return Result::DROP; + } + }catch (\Throwable $e){ + Db::rollBack(); + Log::getInstance("queue-GrantUserCoupon")->error($e->getMessage()); + return Result::DROP; + } + + Db::commit(); + + return Result::ACK; + } +} diff --git a/app/Amqp/Producer/GrantUserCouponDelayDirectProducer.php b/app/Amqp/Producer/GrantUserCouponDelayDirectProducer.php new file mode 100644 index 0000000..57273dc --- /dev/null +++ b/app/Amqp/Producer/GrantUserCouponDelayDirectProducer.php @@ -0,0 +1,37 @@ +payload = $data; + } +} diff --git a/app/Controller/CallBackController.php b/app/Controller/CallBackController.php index d984eb4..2947336 100644 --- a/app/Controller/CallBackController.php +++ b/app/Controller/CallBackController.php @@ -6,11 +6,13 @@ use App\Amqp\Producer\AssignDoctorDelayDirectProducer; use App\Amqp\Producer\AutoCompleteInquiryDelayDirectProducer; use App\Amqp\Producer\DetectionCompleteDelayDirectProducer; use App\Amqp\Producer\DoctorNotYetInquiryDelayDirectProducer; +use App\Amqp\Producer\GrantUserCouponDelayDirectProducer; use App\Constants\DoctorTitleCode; use App\Constants\HttpEnumCode; use App\Exception\BusinessException; use App\Model\BasicDetectionOrgan; use App\Model\BasicLogisticsCompany; +use App\Model\Coupon; use App\Model\DetectionProject; use App\Model\Hospital; use App\Model\MessageIm; @@ -483,6 +485,53 @@ class CallBackController extends AbstractController } Log::getInstance()->error("药品微信支付回调数据处理成功"); + + try { + // 再次发放优惠卷数据 + if ($order_product['coupon_amount_total'] > 0){ + // 获取药品订单优惠卷数据 + $params = array(); + $params['order_product_id'] = $order_product['order_product_id']; + $order_product_coupons = OrderProductCoupon::getList($params); + if (!empty($order_product_coupons)){ + foreach ($order_product_coupons as $order_product_coupon){ + // 获取用户优惠卷数据 + $params = array(); + $params['user_coupon_id'] = $order_product_coupon['user_coupon_id']; + $user_coupon = UserCoupon::getOne($params); + if (!empty($user_coupon)){ + // 获取优惠卷数据 + $params = array(); + $params['coupon_id'] = $user_coupon['coupon_id']; + $coupon = Coupon::getOne($params); + if (!empty($coupon)){ + if ($coupon['reissue_interval_days'] > 0){ + $data = array(); + $data['coupon_id'] = $coupon['coupon_id']; + $data['user_id'] = $user_coupon['user_id']; + + $time = $coupon['reissue_interval_days'] * 24 * 60 * 60 * 1000; + + $message = new GrantUserCouponDelayDirectProducer($data); + $message->setDelayMs($time); + $producer = $this->container->get(Producer::class); + $res = $producer->produce($message); + if (!$res) { + Log::getInstance()->error("再次发放优惠卷失败"); + } + } + } + } + } + } + } + + + + + }catch (\Throwable $e){ + Log::getInstance()->error("药品微信支付回调数据处理失败:" . $e->getMessage()); + } return $server->serve(); } diff --git a/app/Services/CouponService.php b/app/Services/CouponService.php index 629af51..bb92b89 100644 --- a/app/Services/CouponService.php +++ b/app/Services/CouponService.php @@ -56,7 +56,9 @@ class CouponService extends BaseService $params['coupon_id'] = $coupon['coupon_id']; $user_coupon = UserCoupon::getOne($params); if (!empty($user_coupon)){ - return true; + if ($user_coupon['user_coupon_status'] == 0){ + return true; + } } try {