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 {