(string)$user_coupon->user_coupon_id, // 优惠卷金额 'coupon_price' => $coupon['coupon_price'], // 优惠卷金额 'application_scope' => $coupon['application_scope'], // 适用范围(1:全场通用 2:问诊 3:按品牌适用 4:按类别类别适用 5:单品使用) 'inquiry_type' => $coupon['inquiry_type'], // 关联问诊类型,application_scope=问诊时存在生效,逗号分隔(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测) 'valid_type' => $coupon['valid_type'], // 有效类型(1:绝对时效,xxx-xxx时间段有效 2:相对时效 n天内有效) 'valid_days' => $coupon['valid_days'], // 自领取之日起有效天数 'valid_start_time' => $coupon['valid_start_time'], // 开始使用时间 'valid_end_time' => $coupon['valid_end_time'], // 结束使用时间 ]; $data['popup_content'] = json_encode($popup_content, JSON_UNESCAPED_UNICODE); $popup = Popup::addPopup($data); if (empty($popup)) { return false; } } // 优惠卷过期时间 $valid_end_time = strtotime($user_coupon['valid_end_time']); // 当天结束时间 $day_end_time = strtotime(date('Y-m-d 23:59:59',time())); if ($valid_end_time <= $day_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; } } }catch (\Throwable $e){ Log::getInstance("CouponService-GrantUserCoupon")->error($e->getMessage()); return false; } try { // 通知-患者-优惠卷发放 $MessagePush = new MessagePush($user_id); $MessagePush->patientDistributeCoupon($coupon['coupon_name']); }catch (\Throwable $e){ Log::getInstance("CouponService-GrantUserCoupon")->error($e->getMessage()); } return true; } /** * 发放注册用户优惠卷 * @param string $user_id 用户id * @return bool */ public function GrantRegisterCoupon(string $user_id): bool { // 获取注册用户可领取的优惠卷列表 $coupon = Coupon::getRegisterCouponList(); if (empty($coupon)) { return true; } foreach ($coupon as $value){ // 发放优惠卷 $res = $this->GrantUserCoupon($value['coupon_id'],$user_id); if (!$res){ // 发放失败 Log::getInstance("CouponService-GrantRegisterCoupon")->error("发放注册用户优惠卷"); } } return true; } /** * 发放购买服务包的关联优惠卷 * @param string $user_id 用户id * @return bool */ public function GrantBuyOrderServicePackageCoupon(string $user_id): bool { // 获取购买服务包的用户可领取的优惠卷列表 $coupons = Coupon::getOrderServicePackageCouponList(); if (empty($coupons)) { return true; } foreach ($coupons as $coupon){ // 发放优惠卷 $res = $this->GrantUserCoupon($coupon['coupon_id'],$user_id); if (!$res){ // 发放失败 return false; } } return true; } /** * 再次发放订单优惠卷 * @param string $order_id * @return bool */ public function againGrantOrderCoupon(string $order_id): bool { try { // 获取订单优惠卷数据 $params = array(); $params['order_id'] = $order_id; $order_coupons = OrderCoupon::getList($params); if (empty($order_coupons)){ // 无订单优惠卷。无需再次发放 return true; } foreach ($order_coupons as $order_coupon) { // 获取用户优惠卷数据 $params = array(); $params['user_coupon_id'] = $order_coupon['user_coupon_id']; $user_coupon = UserCoupon::getOne($params); if (empty($user_coupon)){ // 未查到患者历史优惠卷数据。无需再次发放 continue; } // 获取优惠卷数据 $params = array(); $params['coupon_id'] = $user_coupon['coupon_id']; $coupon = Coupon::getOne($params); if (empty($coupon)){ // 未查到优惠卷数据。无需再次发放 continue; } // 确认收货后的再次发放间隔天数 if ($coupon['reissue_interval_days'] == 0){ // 无需再次发放 continue; } $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("CouponService-againGrantOrderCoupon")->error("再次发放优惠卷失败"); } } }catch (\Throwable $e){ Log::getInstance("CouponService-againGrantOrderCoupon")->error($e->getMessage()); } return true; } }