| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603 |
- <?php
- /**
- * 系统通知消息服务
- */
- namespace app\common\services;
- use app\backend\modules\coupon\models\Coupon;
- use app\common\facades\SiteSetting;
- use app\common\models\systemMsg\SysMsgLog;
- use app\backend\modules\order\models\Order;
- use app\common\models\UniAccount;
- use app\common\models\Withdraw;
- use app\framework\Support\Facades\Log;
- class SystemMsgService
- {
- public static $msg_type = [
- [
- 'id' => 1,
- 'type_name' => '系统通知',
- 'icon_src' => 'icon-ht_content_systemmessage',
- ],
- [
- 'id' => 2,
- 'type_name' => '订单通知',
- 'icon_src' => 'icon-ht_content_order',
- ],
- [
- 'id' => 3,
- 'type_name' => '提现通知',
- 'icon_src' => 'icon-ht_content_tixian',
- ],
- [
- 'id' => 4,
- 'type_name' => '申请通知',
- 'icon_src' => 'icon-ht_content_apply',
- ],
- [
- 'id' => 5,
- 'type_name' => '商品通知',
- 'icon_src' => 'icon-ht_content_goods',
- ],
- [
- 'id' => 6,
- 'type_name' => '优惠券',
- 'icon_src' => 'icon-ht_content_coupons',
- ],
- [
- 'id' => 7,
- 'type_name' => '退款通知',
- 'icon_src' => 'icon-ht_content_coupons',
- ],
- ];
- //链接跳转配置
- public static $url = [
- 'order' => 'order.list.index', //商城全部订单页面
- 'cashier_order' => 'plugin.store-cashier.admin.order.detail',//商城收银台订单
- 'store_order' => 'plugin.store-cashier.admin.stores.store-order.detail',//商城门店订单
- 'group_order' => 'plugin.fight-groups.admin.controllers.order-management.list-order',//商城拼团订单
- 'lease_order' => 'plugin.lease-toy.admin.order.index',//商城租凭订单
- 'supplier_order' => 'plugin.supplier.admin.controllers.order.supplier-order.index',//商城供应商订单
- 'jd_order' => 'plugin.jd-supply.admin.order-list.index',//商城聚合供应链订单
- 'yz_order' => 'plugin.yz-supply.admin.order-vue-list.index',//商城芸众供应链订单
- 'appointment_order' => 'plugin.appointment.admin.order.index',//商城预约订单
- 'withdraw' => 'withdraw.records', //提现记录页面
- 'coupon' => 'coupon.coupon.index', //优惠券列表页面
- 'goods' => 'goods.goods.index', //商品列表页面
- 'goods_edit' => 'goods.goods.edit', //商品编辑页面
- 'store_goods_edit'=>'plugin.store-cashier.admin.goods.edit',//门店商品编辑页面
- 'cashier_goods_edit'=>'plugin.store-cashier.admin.goods.edit',//门店收银台商品编辑页面
- 'hotel_goods_edit'=>'plugin.hotel.admin.goods.edit',//酒店商品编辑页面
- 'lease_toy_goods_edit'=>'plugin.lease-toy.admin.goods.edit',//租聘商品编辑页面
- 'net_car_goods_edit'=>'plugin.net-car.admin.net-car-goods.edit',//网约车商品编辑页面
- 'jd_supply_goods_edit'=>'plugin.jd-supply.admin.shop-goods.edit',//京东-聚合供应链商品编辑页面
- 'yz_supply_goods_edit'=>'plugin.yz-supply.admin.shop-goods.edit',//芸众供应链商品编辑页面
- 'supplier_goods_edit'=>'plugin.supplier.admin.controllers.goods.goods-operation.edit',//供应商商品编辑页面
- 'supplier_apply' => 'plugin.supplier.admin.controllers.apply.supplier-apply.index', //供应商申请页面
- 'area-dividend_apply' => 'plugin.area-dividend.admin.agent.agent-apply', //区域分红代理申请页面
- 'merchant_apply' => 'plugin.merchant.backend.merchant-apply.index', //招商中心/招商员申请页面
- 'store-cashier_apply' => 'plugin.store-cashier.admin.store-apply.apply-list', //门店申请页面
- 'hotel_apply' => 'plugin.hotel.admin.apply.index', //酒店申请页面
- 'package-deliver_apply' => 'plugin.package-deliver.admin.apply.manage', //自提点申请页面
- 'provider-platform_apply' => 'plugin.provider-platform.admin.tripartiteProvider.list.subplatform-audit', //第三方子平台入驻申请页面
- 'advert-market_apply' => 'plugin.advert-market.admin.apply.manage.index', //广告主申请页面
- 'room_apply' => 'plugin.room.admin.anchor-manage.apply', //主播申请页面
- 'circle_apply' => 'plugin.circle.admin.circle.index', //圈子审核页面
- 'member_cancel_apply' => 'member.member-cancel.verify', //账号注销申请页面
- 'hotel_order' => 'plugin.hotel.admin.hotels.hotel-order.index', // 酒店订单页面
- 'micro_communities_trick' => 'plugin.micro-communities.admin.trick.index', // 微社区帖子页面
- 'video_share' => 'plugin.video-share.admin.videoGoods.index', // 视频分享页面
- ];
- public function __construct($uniacid = '')
- {
- if ($uniacid) {
- \Setting::$uniqueAccountId = \YunShop::app()->uniacid = $uniacid;
- } else{
- \Setting::$uniqueAccountId = \YunShop::app()->uniacid;
- }
- }
- /**
- * @param $msgType
- * @param array $params
- * @return bool
- */
- public function sendSysMsg($msgType,array $params)
- {
- switch ($msgType)
- {
- case 1:
- //系统通知
- case 2:
- //订单通知
- case 3:
- //提现通知
- case 4:
- //申请通知
- case 5:
- //商品库存
- case 6:
- //优惠券
- case 7:
- //退款通知
- return $this->addMessage($params,$msgType);break;
- default:
- \Log::error("系统通知-------消息类型错误");
- return false;
- }
- }
- //添加消息数据到数据库
- private function addMessage($params,$msgType)
- {
- //todo 可使用队列?
- $data = [
- 'uniacid' => \YunShop::app()->uniacid,
- 'type_id' => $msgType,
- 'title' => $params['title'],
- 'content' => $params['content'],
- 'redirect_url' => $params['redirect_url'],
- 'redirect_param' => $params['redirect_param'],
- 'msg_data' => serialize($params),
- ];
- $sysMsg = new SysMsgLog();
- $sysMsg->fill($data);
- if($sysMsg->save()){
- return true;
- }
- \Log::error("---------系统通知失败---------");
- return false;
- }
- public static function addWorkMessage($params,$uniacid='')
- {
- $queueSetting = SiteSetting::get('queue');
- if ($queueSetting['receive_message'] == 1) {
- return;
- }
- $data = [];
- $uniacid = $uniacid ?:\YunShop::app()->uniacid;
- if ($uniacid) {
- $uniAccount[] = ['uniacid'=>$uniacid];
- } else {
- $uniAccount = UniAccount::getEnable();
- }
- foreach ($uniAccount as $u) {
- $data[] = [
- 'uniacid' => $u['uniacid'],
- 'type_id' => 1,
- 'title' => $params['title'],
- 'content' => mb_substr($params['content'],0,800,'utf-8'),
- 'redirect_url' => '',
- 'redirect_param' => '',
- 'msg_data' => serialize($params),
- 'created_at' => time(),
- 'updated_at' => time(),
- ];
- }
- if ($data) {
- SysMsgLog::insert($data);
- }
- }
- private function getPlugins($order_sn,$order_id = 0)
- {
- return $plugin = [
- 0=>[
- 'name'=>'商城',
- 'redirect_url'=>'order',
- 'redirect_param' => [
- 'search[ambiguous][string]'=>$order_sn,
- 'search[ambiguous][field]'=>'order'
- ]
- ],
- 31 => [
- 'name'=>'收银台',
- 'redirect_url'=>'cashier_order',
- 'redirect_param' => [
- 'order_id'=>$order_id
- ]
- ],
- 32 => [
- 'name'=>'门店',
- 'redirect_url'=>'store_order',
- 'redirect_param' => [
- 'id'=>$order_id,
- ]
- ],
- 54=>[
- 'name'=>'拼团',
- 'redirect_url'=>'group_order',
- 'redirect_param' => [
- 'search[ambiguous][string]'=>$order_sn,
- 'search[ambiguous][field]'=>'order'
- ]
- ],
- 40=>[
- 'name'=>'租赁',
- 'redirect_url'=>'lease_order',
- 'redirect_param' => [
- 'search[ambiguous][string]'=>$order_sn,
- 'search[ambiguous][field]'=>'order'
- ]
- ],
- 92=>[
- 'name'=>'供应商',
- 'redirect_url'=>'supplier_order',
- 'redirect_param' => [
- 'search[ambiguous][string]'=>$order_sn,
- 'search[ambiguous][field]'=>'order'
- ]
- ],
- 44=>[
- 'name'=>'聚合供应链',
- 'redirect_url'=>'jd_order',
- 'redirect_param' => [
- 'search[ambiguous][string]'=>$order_sn,
- 'search[ambiguous][field]'=>'order'
- ]
- ],
- 120=>[
- 'name'=>'供应链',
- 'redirect_url'=>'yz_order',
- 'redirect_param' => [
- 'search[ambiguous][string]'=>$order_sn,
- 'search[ambiguous][field]'=>'order'
- ]
- ],
- 101=>[
- 'name'=>'门店预约',
- 'redirect_url'=>'appointment_order',
- 'redirect_param' => [
- 'search[ambiguous][string]'=>$order_sn,
- 'search[ambiguous][field]'=>'order'
- ]
- ],
- ];
- }
- //订单收货消息
- public function received($order)
- {
- $msg_type = 2; //通知类型 1系统通知 2订单通知 3提现通知 4申请通知 5商品库存 6优惠券
- $plugin = $this->getPlugins($order->order_sn,$order->id);
- if(empty($plugin[$order->plugin_id])){
- return false;
- }
- $param = [
- 'title'=>'您有'.$plugin[$order->plugin_id]['name'].'订单买家已确认收货!',
- 'content' => '时间:'.$order->finish_time->toDateTimeString().' || '
- .'订单编号:'.$order->order_sn.' || '
- .'会员:'.$order->belongsToMember->nickname.' || '
- .'状态:'.$order->status_name,
- 'redirect_url' => $plugin[$order->plugin_id]['redirect_url'],
- 'redirect_param' => $plugin[$order->plugin_id]['redirect_param']
- ];
- return $this->sendSysMsg($msg_type,$param);
- }
- //订单退款、退货、换货
- public function applyRefundNotice($refundOrder)
- {
- $msg_type = 2; //通知类型 1系统通知 2订单通知 3提现通知 4申请通知 5商品库存 6优惠券
- $nickname = $this->getMemberNickname($refundOrder->uid);
- $order = Order::find($refundOrder->order_id);
- if(empty($order)){
- Log::error('【系统消息通知】--订单退款-未找到订单信息');
- return false;
- }
- $plugin = $this->getPlugins($order->order_sn,$refundOrder->order_id);
- if(empty($plugin[$order->plugin_id])){
- return false;
- }
- $param = [
- 'title'=>'您有'.$plugin[$order->plugin_id]['name'].$refundOrder->refund_type_name.'订单,请及时处理!',
- 'content' => '时间:'.$refundOrder->create_time.' || '
- .'订单编号:'.$order->order_sn.' || '
- .'会员:'.$nickname.' || '
- .'状态:'.$refundOrder->status_name,
- 'redirect_url' => $plugin[$order->plugin_id]['redirect_url'],
- 'redirect_param' => $plugin[$order->plugin_id]['redirect_param']
- ];
- return $this->sendSysMsg($msg_type,$param);
- }
- //订单支付,待发货通知
- public function paid($order)
- {
- $msg_type = 2; //通知类型 1系统通知 2订单通知 3提现通知 4申请通知 5商品库存 6优惠券
- $plugin = $this->getPlugins($order->order_sn,$order->id);
- if(empty($plugin[$order->plugin_id])){
- return false;
- }
- $param = [
- 'title'=>'您有新的'.$plugin[$order->plugin_id]['name'].'订单,请及时处理!',
- 'content' => '时间:'.$order['pay_time']->toDateTimeString().' || '
- .'订单编号:'.$order->order_sn.' || '
- .'会员:'.$order->belongsToMember->nickname.' || '
- .'状态:'.$order->status_name,
- 'redirect_url' => $plugin[$order->plugin_id]['redirect_url'],
- 'redirect_param' => $plugin[$order->plugin_id]['redirect_param']
- ];
- return $this->sendSysMsg($msg_type,$param);
- }
- //提现申请
- public function withdrawNotice($withdrawModel)
- {
- $msg_type = 3; //通知类型 1系统通知 2订单通知 3提现通知 4申请通知 5商品库存 6优惠券
- $statusComment = [
- Withdraw::STATUS_INVALID => '审核无效',
- Withdraw::STATUS_INITIAL => '提现申请',
- Withdraw::STATUS_AUDIT => '审核通过',
- Withdraw::STATUS_PAY => '已打款',
- Withdraw::STATUS_REBUT => '审核驳回',
- Withdraw::STATUS_PAYING => '打款中',
- ];
- $param = [
- 'title'=>'您有会员发起'.$withdrawModel->type_name.'提现,请及时处理!',
- 'content' => '时间:'.$withdrawModel->created_at.' || '
- .'提现编号:'.$withdrawModel->withdraw_sn.' || '
- .'会员:'.$withdrawModel->hasOneMember->nickname.' || '
- .'提现金额:'.$withdrawModel->amounts.' || '
- // .' 方式:'.$statusComment[$withdrawModel->pay_way_name],
- .'状态:'.$statusComment[$withdrawModel->status],
- 'redirect_url' => 'withdraw',
- 'redirect_param' => [
- 'search[withdraw_sn]'=>$withdrawModel->withdraw_sn
- ]
- ];
- return $this->sendSysMsg($msg_type,$param);
- }
- //申请通知
- public function applyNotice($dataModel,$plugin = '')
- {
- $msg_type = 4; //通知类型 1系统通知 2订单通知 3提现通知 4申请通知 5商品库存 6优惠券
- $param = $this->getParams($dataModel,$plugin);
- if(!$param){
- Log::error("申请通知--没有此插件类型通知");
- return false;
- }
- return $this->sendSysMsg($msg_type,$param);
- }
- //优惠券通知
- public function couponNotice()
- {
- //获取剩余数量为0的优惠券集合
- $couponData = Coupon::uniacid()
- ->withCount('hasManyMemberCoupon')
- ->where('total','>',-1)//非无限领取
- ->where('plugin_id',0)//商城优惠券
- ->get()->toArray();
- if(empty($couponData)){
- return false;
- }
- foreach ($couponData as $k=>$v){
- if($v['total'] >= $v['has_many_member_coupon_count']){
- unset($couponData[$k]);
- }
- }
- if(empty($couponData)){
- return false;
- }
- $msg_type = 6;
- $param = [
- 'title'=>'您有'.count($couponData).'种优惠券数量为0,请及时处理!',
- 'content' => '',
- 'redirect_url' => 'coupon',
- 'redirect_param' => [
- 'last_stock'=>0
- ]
- ];
- return $this->sendSysMsg($msg_type,$param);
- }
- //限时购商品下架
- public function limitBuyClose($goods)
- {
- $msg_type = 5;
- $param = [
- 'title'=>'您有限时购商品下架了,请及时处理!',
- 'content' => '时间:'.date('Y-m-d H:i:s').' || '
- .'ID:'.$goods->id.' || '
- .'商品:'.$goods->title,
- 'redirect_url' => 'goods',
- 'redirect_param' => []
- ];
- \Setting::$uniqueAccountId = \YunShop::app()->uniacid = $goods->uniacid;
- return $this->sendSysMsg($msg_type,$param);
- }
- //商品库存不足
- public function stockNotEnough($goods,$specs = null)
- {
- $redirect_url = [
- '0'=> 'goods_edit',
- '31'=>'store_goods_edit',
- '32'=>'cashier_goods_edit',
- '33'=>'hotel_goods_edit',
- '40'=>'lease_toy_goods_edit',
- '41'=>'net_car_goods_edit',
- '44'=>'jd_supply_goods_edit',
- '120'=>'yz_supply_goods_edit',
- '92'=>'supplier_goods_edit',
- ];
- $msg_type = 5;
- if(!empty($specs)){
- $content = '时间:'.date('Y-m-d H:i:s').' || '
- .'ID:'.$goods->id.' || '
- .'规格:'.$specs->title.' || '
- .'库存:'.$specs->stock;
- }else{
- $content = '时间:'.date('Y-m-d H:i:s').' || '
- .'ID:'.$goods->id.' || '
- .'库存:'.$goods->stock;
- }
- $param = [
- 'title'=>'您有商品售罄,请及时处理!',
- 'content' => $content,
- 'redirect_url' => $redirect_url[$goods->plugin_id]?:'goods_edit',
- 'redirect_param' => [
- 'id'=>$goods->id
- ]
- ];
- return $this->sendSysMsg($msg_type,$param);
- }
- //申请通知获取各类型参数
- public function getParams($model,$plugin)
- {
- switch ($plugin){
- case 'supplier':
- $nickname = $this->getMemberNickname($model->member_id);
- return [
- 'title'=>'您有会员发起供应商申请,请及时处理!',
- 'content' => '时间:'.$model->created_at.' || 会员:'.$nickname.' || 状态:'.($model->status==1?'审核通过':'等待审核'),
- 'redirect_url' => 'supplier_apply',
- 'redirect_param' => [
- 'search[member]'=>$model->member_id
- ]
- ];
- case 'area-dividend':
- $nickname = $this->getMemberNickname($model->member_id);
- return [
- 'title'=>'您有会员发起区域分红代理申请,请及时处理!',
- 'content' => '时间:'.$model->created_at.' || 会员:'.$nickname.' || 状态:'.$model->status_name,
- 'redirect_url' => 'area-dividend_apply',
- 'redirect_param' => [
- 'search[member]'=>$model->member_id
- ]
- ];
- case 'merchant':
- $nickname = $this->getMemberNickname($model->member_id);
- return [
- 'title'=>'您有会员发起'.$model->apply_name.'申请,请及时处理!',
- 'content' => '时间:'.$model->created_at.' || 会员:'.$nickname.' || 状态:'.$model->status_name,
- 'redirect_url' => 'merchant_apply',
- 'redirect_param' => [
- 'search[is_center]'=>$model->is_center
- ]
- ];
- case 'store-cashier':
- $nickname = $this->getMemberNickname($model->uid);
- return [
- 'title'=>'您有会员发起门店申请,请及时处理!',
- 'content' => '时间:'.$model->created_at.' || 会员:'.$nickname.' || 状态:'.$model->status_name,
- 'redirect_url' => 'store-cashier_apply',
- 'redirect_param' => [
- 'search[id]'=>$model->uid
- ]
- ];
- case 'hotel':
- $nickname = $this->getMemberNickname($model->uid);
- return [
- 'title'=>'您有会员发起酒店申请,请及时处理!',
- 'content' => '时间:'.$model->created_at.' || 会员:'.$nickname.' || 状态:'.$model->status_name,
- 'redirect_url' => 'hotel_apply',
- 'redirect_param' => [
- 'search[id]'=>$model->uid
- ]
- ];
- case 'package-deliver':
- $nickname = $this->getMemberNickname($model->uid);
- return [
- 'title'=>'您有会员发起自提点申请,请及时处理!',
- 'content' => '时间:'.$model->created_at.' || 会员:'.$nickname.' || 状态:'.$model->status_name,
- 'redirect_url' => 'package-deliver_apply',
- 'redirect_param' => [
- 'search[member]'=>$model->mobile
- ]
- ];
- case 'provider-platform':
- $nickname = $this->getMemberNickname($model->uid);
- return [
- 'title'=>'您有会员发起第三方子平台入驻申请,请及时处理!',
- 'content' => '时间:'.$model->created_at.' || 会员:'.$nickname.' || 状态:审核中',
- 'redirect_url' => 'provider-platform_apply',
- 'redirect_param' => [
- 'search[name]'=>$model->mobile
- ]
- ];
- case 'advert-market':
- $nickname = $this->getMemberNickname($model->uid);
- return [
- 'title'=>'您有会员发起广告主申请,请及时处理!',
- 'content' => '时间:'.$model->created_at.' || 会员:'.$nickname.' || 状态:'.($model->status==1?'审核通过':'待审核'),
- 'redirect_url' => 'advert-market_apply',
- 'redirect_param' => [
- 'search[uid]'=>$model->uid
- ]
- ];
- case 'room':
- $nickname = $this->getMemberNickname($model->member_id);
- return [
- 'title'=>'您有会员发起主播申请,请及时处理!',
- 'content' => '时间:'.$model->created_at.' || 会员:'.$nickname.' || 状态:'.$model->status_name,
- 'redirect_url' => 'room_apply',
- 'redirect_param' => [
- 'search[member_id]'=>$model->member_id
- ]
- ];
- case 'circle':
- $nickname = $this->getMemberNickname($model->member_id);
- return [
- 'title'=>'您有会员发起创建圈子申请,请及时处理!',
- 'content' => '时间:'.$model->created_at.' || 会员:'.$nickname.' || 状态:'.($model->is_review==1?'审核通过':'待审核'),
- 'redirect_url' => 'circle_apply',
- 'redirect_param' => [
- 'search[member_id]'=>$model->member_id
- ]
- ];
- case 'member_cancel':
- $nickname = $this->getMemberNickname($model->member_id);
- return [
- 'title'=>'您有会员发起注销申请,请及时处理!',
- 'content' => '时间:'.date('Y-m-d H:i:s').' || 会员:'.$nickname.' || 状态:待审核',
- 'redirect_url' => 'member_cancel_apply',
- 'redirect_param' => [
- 'member_id'=>$model->id
- ]
- ];
- case 'micro-communities':
- $nickname = $this->getMemberNickname($model->user_id);
- return [
- 'title'=>'您有会员发布新的帖子,请及时处理审核!',
- 'content' => '时间:'.$model->created_at.' || 会员:'.$nickname.' || 状态:待审核',
- 'redirect_url' => 'micro_communities_trick',
- 'redirect_param' => [
- 'search[uid]'=>$model->user_id
- ]
- ];
- case 'video-share':
- $nickname = $this->getMemberNickname($model->uid);
- return [
- 'title'=>'您有会员发布新的视频,请及时处理审核!',
- 'content' => '时间:'.$model->created_at.' || 会员:'.$nickname.' || 状态:待审核',
- 'redirect_url' => 'video_share',
- 'redirect_param' => [
- 'id'=>$model->id
- ]
- ];
- default:
- return false;
- }
- }
- public function getMemberNickname($member_id)
- {
- $nickname = \app\common\models\Member::where('uid', $member_id)->first()->nickname;
- if(empty($nickname)){
- return '未关注';
- }
- return $nickname;
- }
- }
|