NotifyService.php 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <?php
  2. namespace addons\TinyShop\services\common;
  3. use Yii;
  4. use common\helpers\ArrayHelper;
  5. use common\components\Service;
  6. use common\enums\NotifyTypeEnum;
  7. use common\enums\MemberTypeEnum;
  8. use common\enums\StatusEnum;
  9. use common\enums\PayTypeEnum;
  10. use common\enums\PayStatusEnum;
  11. use addons\TinyShop\common\models\common\Notify;
  12. use addons\TinyShop\common\models\common\NotifyMember;
  13. use addons\TinyShop\common\enums\SubscriptionActionEnum;
  14. use addons\TinyShop\common\enums\OrderStatusEnum;
  15. use addons\TinyShop\common\enums\OrderTypeEnum;
  16. use addons\TinyShop\common\enums\AccessTokenGroupEnum;
  17. use addons\TinyShop\common\enums\MarketingEnum;
  18. use addons\TinyShop\common\enums\ShippingTypeEnum;
  19. use addons\TinyShop\common\enums\RangeTypeEnum;
  20. use addons\TinyShop\common\enums\DiscountTypeEnum;
  21. use addons\TinyShop\common\enums\CouponGetTypeEnum;
  22. use addons\TinyShop\common\enums\RefundStatusEnum;
  23. /**
  24. * Class NotifyService
  25. * @package addons\TinyShop\services\common
  26. * @author jianyan74 <751393839@qq.com>
  27. */
  28. class NotifyService extends Service
  29. {
  30. /**
  31. * 解析数据
  32. *
  33. * @param $data
  34. * @return array|array[]|object|object[]|string|string[]
  35. * @throws \yii\base\InvalidConfigException
  36. */
  37. public function analysisData($data)
  38. {
  39. $data = ArrayHelper::toArray($data);
  40. // 订单
  41. if (isset($data['order']) && !empty($data['order'])) {
  42. $order = $data['order'];
  43. $order['order_status'] = OrderStatusEnum::getValue($order['order_status']);
  44. $order['pay_type'] = PayTypeEnum::getValue($order['pay_type']);
  45. $order['shipping_type'] = ShippingTypeEnum::getValue($order['shipping_type']);
  46. $order['order_type'] = OrderTypeEnum::getValue($order['order_type']);
  47. $order['order_from'] = AccessTokenGroupEnum::relevance($order['order_from']);
  48. $order['marketing_type'] = MarketingEnum::getValue($order['marketing_type']);
  49. $order['pay_status'] = PayStatusEnum::getValue($order['pay_status']);
  50. $order['pay_time'] = Yii::$app->formatter->asDatetime($order['pay_time']);
  51. $order['receiving_time'] = Yii::$app->formatter->asDatetime($order['receiving_time']);
  52. $order['shipping_time'] = Yii::$app->formatter->asDatetime($order['shipping_time']);
  53. $order['sign_time'] = Yii::$app->formatter->asDatetime($order['sign_time']);
  54. $order['consign_time'] = Yii::$app->formatter->asDatetime($order['consign_time']);
  55. $order['finish_time'] = Yii::$app->formatter->asDatetime($order['finish_time']);
  56. $order['close_time'] = Yii::$app->formatter->asDatetime($order['close_time']);
  57. $order['created_at'] = Yii::$app->formatter->asDatetime($order['created_at']);
  58. $order['updated_at'] = Yii::$app->formatter->asDatetime($order['updated_at']);
  59. $data['order'] = $order;
  60. }
  61. // 订单产品
  62. if (isset($data['orderProduct']) && !empty($data['orderProduct'])) {
  63. $orderProduct = $data['orderProduct'];
  64. $data['orderProduct'] = $orderProduct;
  65. }
  66. // 优惠券
  67. if (isset($data['couponType']) && !empty($data['couponType'])) {
  68. $couponType = $data['couponType'];
  69. $couponType['get_type'] = CouponGetTypeEnum::getValue($couponType['get_type']);
  70. $couponType['discount_type'] = DiscountTypeEnum::getValue($couponType['discount_type']);
  71. $couponType['range_type'] = RangeTypeEnum::getValue($couponType['range_type']);
  72. $couponType['created_at'] = Yii::$app->formatter->asDatetime($couponType['created_at']);
  73. $couponType['updated_at'] = Yii::$app->formatter->asDatetime($couponType['updated_at']);
  74. $data['couponType'] = $couponType;
  75. }
  76. // 砍价
  77. if (isset($data['launch']) && !empty($data['launch'])) {
  78. $launch = $data['launch'];
  79. $data['launch'] = $launch;
  80. }
  81. // 好友砍价
  82. if (isset($data['bargainPartake']) && !empty($data['bargainPartake'])) {
  83. $bargainPartake = $data['bargainPartake'];
  84. $data['bargainPartake'] = $bargainPartake;
  85. }
  86. // 开团
  87. if (isset($data['wholesale']) && !empty($data['wholesale'])) {
  88. $wholesale = $data['wholesale'];
  89. $data['wholesale'] = $wholesale;
  90. }
  91. // 售后
  92. if (isset($data['afterSale']) && !empty($data['afterSale'])) {
  93. $afterSale = $data['afterSale'];
  94. $afterSale['get_type'] = RefundStatusEnum::getValue($afterSale['refund_status']);
  95. $data['afterSale'] = $afterSale;
  96. }
  97. $data['time'] = Yii::$app->formatter->asDatetime(time());
  98. $data['ip'] = Yii::$app->services->base->getUserIp();
  99. return $data;
  100. }
  101. /**
  102. * 创建提醒
  103. *
  104. * @param int $target_id 触发id
  105. * @param string $targetType 触发类型
  106. * @param string $action 提醒关联动作
  107. * @param int $sender_id 发送者(用户)id
  108. * @param array $data 内容
  109. */
  110. public function createRemind($targetId, $targetType, $merchant_id, $data = [])
  111. {
  112. $data = $this->analysisData($data);
  113. $defaultMerchantId = Yii::$app->services->merchant->getId();
  114. if (Yii::$app->services->devPattern->isB2C()) {
  115. $auth = Yii::$app->services->memberAuth->findByMemberType(0, MemberTypeEnum::MANAGER);
  116. } elseif (Yii::$app->services->devPattern->isB2B2C()) {
  117. $auth = Yii::$app->services->memberAuth->findByMemberType($merchant_id, MemberTypeEnum::MERCHANT);
  118. } else {
  119. $auth = Yii::$app->services->memberAuth->findByMemberType($merchant_id, MemberTypeEnum::MERCHANT);
  120. }
  121. // 配置
  122. $notifyConfigs = Yii::$app->services->notifyConfig->findByName($targetType, 0, 'TinyShop');
  123. Yii::$app->services->notifyConfig->send($notifyConfigs, $auth, $targetId, $targetType, $data);
  124. Yii::$app->services->merchant->setId($defaultMerchantId);
  125. }
  126. /**
  127. * 创建提醒
  128. *
  129. * @param $target_id
  130. * @param $targetType
  131. * @param $receiver_id
  132. * @param array $data
  133. * @return bool
  134. */
  135. public function createRemindByReceiver($target_id, $targetType, $receiver_id, $data = [])
  136. {
  137. $data = $this->analysisData($data);
  138. $defaultMerchantId = Yii::$app->services->merchant->getAutoId();
  139. $sysConfig = Yii::$app->services->notifyConfig->findSysByName($targetType, 0, 'TinyShop');
  140. if (empty($sysConfig->content)) {
  141. $sysConfig->attributes = SubscriptionActionEnum::default($targetType);
  142. }
  143. // 创建系统提醒
  144. $model = new Notify();
  145. $model->target_id = $target_id;
  146. $model->target_type = $targetType;
  147. $model->action = $targetType;
  148. $model->sender_id = 0;
  149. $model->type = NotifyTypeEnum::REMIND;
  150. $model->title = SubscriptionActionEnum::getValue($targetType);
  151. $model->content = ArrayHelper::recursionGetVal($sysConfig->content, $data);
  152. if ($model->save()) {
  153. $notifyMember = new NotifyMember();
  154. $notifyMember->notify_id = $model->id;
  155. $notifyMember->member_id = $receiver_id;
  156. $notifyMember->type = NotifyTypeEnum::REMIND;
  157. $notifyMember->save();
  158. }
  159. // 未开启通知
  160. $memberConfig = Yii::$app->tinyShopService->notifySubscriptionConfig->findByMemberId($receiver_id, Yii::$app->services->merchant->getNotNullId());
  161. if ($memberConfig['action']['all'] == StatusEnum::DISABLED) {
  162. return false;
  163. }
  164. // 用户授权
  165. $auth = Yii::$app->services->memberAuth->findByMemberId($receiver_id);
  166. // 配置
  167. $notifyConfigs = Yii::$app->services->notifyConfig->findByName($targetType, 0, 'TinyShop');
  168. Yii::$app->services->notifyConfig->send($notifyConfigs, $auth, $target_id, $targetType, $data);
  169. Yii::$app->services->merchant->setId($defaultMerchantId);
  170. }
  171. /**
  172. * 创建一条信息(私信)
  173. *
  174. * @param int $sender_id 触发id
  175. * @param string $content 内容
  176. * @param int $receiver 接收id
  177. */
  178. public function createMessage($content, $sender_id, $receiver)
  179. {
  180. $model = new Notify();
  181. $model->content = $content;
  182. $model->sender_id = $sender_id;
  183. $model->type = NotifyTypeEnum::MESSAGE;
  184. if ($model->save()) {
  185. $NotifyMember = new NotifyMember();
  186. $NotifyMember->notify_id = $model->id;
  187. $NotifyMember->member_id = $receiver;
  188. $NotifyMember->type = NotifyTypeEnum::MESSAGE;
  189. return $NotifyMember->save();
  190. }
  191. return false;
  192. }
  193. /**
  194. * 创建公告
  195. *
  196. * @param $title
  197. * @param $status
  198. * @param $sender_id
  199. * @return bool
  200. */
  201. public function createAnnounce($title, $status, $sender_id)
  202. {
  203. $model = Notify::find()
  204. ->where([
  205. 'sender_id' => $sender_id,
  206. 'type' => NotifyTypeEnum::ANNOUNCE,
  207. ])
  208. ->one();
  209. if (empty($model)) {
  210. $model = new Notify();
  211. $model = $model->loadDefaultValues();
  212. $model->type = NotifyTypeEnum::ANNOUNCE;
  213. $model->sender_id = $sender_id;
  214. }
  215. $model->title = $title;
  216. $model->status = $status;
  217. return $model->save();
  218. }
  219. }
粤ICP备19079148号