周总批发商场
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
dianshang/crmeb/app/services/message/SystemNotificationServices.php

493 lines
21 KiB

<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
declare (strict_types=1);
namespace app\services\message;
use app\dao\system\SystemNotificationDao;
use app\services\BaseServices;
use crmeb\exceptions\AdminException;
use crmeb\services\FormBuilder as Form;
use think\facade\Route as Url;
/**
* 消息管理类
* Class SystemNotificationServices
* @package app\services\system
* @method value($where, $value) 条件获取某个字段的值
*/
class SystemNotificationServices extends BaseServices
{
protected $messageData = [
//短信验证码
'verify_code' => [
['label' => '验证码', 'value' => 'code'],
['label' => '有效时间', 'value' => 'time'],
],
//用户登录
'login_success' => [
['label' => '用户昵称', 'value' => 'nickname'],
['label' => '用户电话', 'value' => 'phone'],
['label' => '上次登录时间', 'value' => 'last_time'],
['label' => '用户余额', 'value' => 'now_money'],
['label' => '用户佣金', 'value' => 'brokerage_price'],
['label' => '用户积分', 'value' => 'integral'],
['label' => '用户经验', 'value' => 'exp'],
['label' => '登录时间', 'value' => 'time'],
],
//用户绑定关系
'spread_success' => [
['label' => '用户昵称', 'value' => 'nickname'],
['label' => '绑定时间', 'value' => 'time'],
],
//未支付订单修改金额
'price_change_price' => [
['label' => '订单order_id', 'value' => 'order_id'],
['label' => '订单原金额', 'value' => 'pay_price'],
['label' => '修改后金额', 'value' => 'change_price'],
],
//订单支付成功
'order_pay_success' => [
['label' => '用户uid', 'value' => 'uid'],
['label' => '订单order_id', 'value' => 'order_id'],
['label' => '用户名称', 'value' => 'real_name'],
['label' => '用户电话', 'value' => 'user_phone'],
['label' => '用户地址', 'value' => 'user_address'],
['label' => '商品总数', 'value' => 'total_num'],
['label' => '支付金额', 'value' => 'pay_price'],
['label' => '支付邮费', 'value' => 'pay_postage'],
['label' => '积分抵扣金额', 'value' => 'deduction_price'],
['label' => '优惠券抵扣金额', 'value' => 'coupon_price'],
['label' => '支付类型', 'value' => 'pay_type'],
['label' => '商品名称', 'value' => 'storeName'],
['label' => '下单时间', 'value' => 'time'],
],
//订单快递发货
'order_express_success' => [
['label' => '用户uid', 'value' => 'uid'],
['label' => '订单order_id', 'value' => 'order_id'],
['label' => '用户名称', 'value' => 'real_name'],
['label' => '用户电话', 'value' => 'user_phone'],
['label' => '用户地址', 'value' => 'user_address'],
['label' => '商品总数', 'value' => 'total_num'],
['label' => '支付金额', 'value' => 'pay_price'],
['label' => '支付邮费', 'value' => 'pay_postage'],
['label' => '积分抵扣金额', 'value' => 'deduction_price'],
['label' => '优惠券抵扣金额', 'value' => 'coupon_price'],
['label' => '支付类型', 'value' => 'pay_type'],
['label' => '商品名称', 'value' => 'storeName'],
['label' => '快递公司', 'value' => 'delivery_name'],
['label' => '快递单号', 'value' => 'delivery_id'],
['label' => '发货时间', 'value' => 'time'],
],
//订单配送员送货
'order_send_success' => [
['label' => '用户uid', 'value' => 'uid'],
['label' => '订单order_id', 'value' => 'order_id'],
['label' => '用户名称', 'value' => 'real_name'],
['label' => '用户电话', 'value' => 'user_phone'],
['label' => '用户地址', 'value' => 'user_address'],
['label' => '商品总数', 'value' => 'total_num'],
['label' => '支付金额', 'value' => 'pay_price'],
['label' => '支付邮费', 'value' => 'pay_postage'],
['label' => '积分抵扣金额', 'value' => 'deduction_price'],
['label' => '优惠券抵扣金额', 'value' => 'coupon_price'],
['label' => '支付类型', 'value' => 'pay_type'],
['label' => '商品名称', 'value' => 'storeName'],
['label' => '配送员姓名', 'value' => 'delivery_name'],
['label' => '配送员电话', 'value' => 'delivery_id'],
['label' => '送货时间', 'value' => 'time'],
],
//订单收货
'order_take' => [
['label' => '用户uid', 'value' => 'uid'],
['label' => '订单order_id', 'value' => 'order_id'],
['label' => '用户名称', 'value' => 'real_name'],
['label' => '用户电话', 'value' => 'user_phone'],
['label' => '用户地址', 'value' => 'user_address'],
['label' => '商品总数', 'value' => 'total_num'],
['label' => '支付金额', 'value' => 'pay_price'],
['label' => '支付邮费', 'value' => 'pay_postage'],
['label' => '积分抵扣金额', 'value' => 'deduction_price'],
['label' => '优惠券抵扣金额', 'value' => 'coupon_price'],
['label' => '支付类型', 'value' => 'pay_type'],
['label' => '商品名称', 'value' => 'storeTitle'],
['label' => '配送员姓名', 'value' => 'delivery_name'],
['label' => '配送员电话', 'value' => 'delivery_id'],
['label' => '签收时间', 'value' => 'time'],
],
//订单发起退款
// 'order_initiated_refund' => [
// ['label' => '用户uid', 'value' => 'uid'],
// ['label' => '订单order_id', 'value' => 'order_id'],
// ['label' => '用户名称', 'value' => 'real_name'],
// ['label' => '用户电话', 'value' => 'user_phone'],
// ['label' => '用户地址', 'value' => 'user_address'],
// ['label' => '商品总数', 'value' => 'total_num'],
// ['label' => '支付金额', 'value' => 'pay_price'],
// ['label' => '支付邮费', 'value' => 'pay_postage'],
// ['label' => '积分抵扣金额', 'value' => 'deduction_price'],
// ['label' => '优惠券抵扣金额', 'value' => 'coupon_price'],
// ['label' => '支付类型', 'value' => 'pay_type'],
// ],
//订单成功退款
'order_refund_success' => [
['label' => '用户uid', 'value' => 'uid'],
['label' => '订单order_id', 'value' => 'order_id'],
['label' => '用户名称', 'value' => 'real_name'],
['label' => '用户电话', 'value' => 'user_phone'],
['label' => '用户地址', 'value' => 'user_address'],
['label' => '商品总数', 'value' => 'total_num'],
['label' => '支付金额', 'value' => 'pay_price'],
['label' => '支付邮费', 'value' => 'pay_postage'],
['label' => '积分抵扣金额', 'value' => 'deduction_price'],
['label' => '优惠券抵扣金额', 'value' => 'coupon_price'],
['label' => '支付类型', 'value' => 'pay_type'],
['label' => '退款理由类型', 'value' => 'refund_reason_wap'],
['label' => '退款理由', 'value' => 'refund_reason_wap_explain'],
['label' => '实际退款金额', 'value' => 'refund_price'],
],
//订单拒绝退款
'order_refund_fail' => [
['label' => '用户uid', 'value' => 'uid'],
['label' => '退款金额', 'value' => 'refund_price'],
['label' => '拒绝退款理由', 'value' => 'refuse_reason'],
['label' => '拒绝时间', 'value' => 'time'],
],
//用户充值
'recharge_success' => [
['label' => '用户uid', 'value' => 'uid'],
['label' => '用户昵称', 'value' => 'nickname'],
['label' => '用户电话', 'value' => 'phone'],
['label' => '充值金额', 'value' => 'price'],
['label' => '赠送金额', 'value' => 'give_price'],
['label' => '充值后用户余额', 'value' => 'now_money'],
['label' => '充值时间', 'value' => 'time'],
],
//用户充值退款
'recharge_refund' => [
['label' => '用户uid', 'value' => 'uid'],
['label' => '用户昵称', 'value' => 'nickname'],
['label' => '用户电话', 'value' => 'phone'],
['label' => '退款金额', 'value' => 'price'],
['label' => '退款后用户余额', 'value' => 'now_money'],
['label' => '退款时间', 'value' => 'time'],
],
//用户提现通过
'extract_success' => [
['label' => '用户uid', 'value' => 'uid'],
['label' => '用户昵称', 'value' => 'nickname'],
['label' => '用户电话', 'value' => 'phone'],
['label' => '提现金额', 'value' => 'price'],
['label' => '提现时间', 'value' => 'time'],
],
//用户提现失败
'extract_fail' => [
['label' => '用户uid', 'value' => 'uid'],
['label' => '用户昵称', 'value' => 'nickname'],
['label' => '失败理由', 'value' => 'message'],
['label' => '提现金额', 'value' => 'price'],
['label' => '失败时间', 'value' => 'time'],
],
//佣金到账
'brokerage_received' => [
['label' => '用户uid', 'value' => 'uid'],
['label' => '用户电话', 'value' => 'phone'],
['label' => '到账金额', 'value' => 'brokeragePrice'],
['label' => '商品名称', 'value' => 'goodsName'],
['label' => '商品金额', 'value' => 'goodsPrice'],
['label' => '到账时间', 'value' => 'time'],
],
//积分到账
'point_received' => [
['label' => '用户uid', 'value' => 'uid'],
['label' => '用户电话', 'value' => 'phone'],
['label' => '积分数量', 'value' => 'give_integral'],
['label' => '商品名称', 'value' => 'storeTitle'],
['label' => '积分总数', 'value' => 'integral'],
['label' => '到账时间', 'value' => 'time'],
],
];
/**
* SystemNotificationServices constructor.
* @param SystemNotificationDao $dao
*/
public function __construct(SystemNotificationDao $dao)
{
$this->dao = $dao;
}
/**
* 单个配置
* @param int $where
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getOneNotce(array $where)
{
return $this->dao->getOne($where);
}
/**
* 后台获取列表
* @param array $where
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getNotList(array $where)
{
return $this->dao->getList($where);
}
/**
* 添加自定义消息表单
* @return array
* @throws \FormBuilder\Exception\FormBuilderException
* @author wuhaotian
* @email 442384644@qq.com
* @date 2024/2/19
*/
public function getNotForm($id = 0)
{
if ($id) {
$info = $this->dao->get($id);
if ($info) $info = $info->toArray();
} else {
$info = [];
}
$data = [
['value' => 'login_success', 'label' => '用户登录成功场景'],
['value' => 'spread_success', 'label' => '绑定推广关系成功场景'],
['value' => 'price_change_price', 'label' => '未支付订单修改价格场景'],
['value' => 'order_pay_success', 'label' => '订单支付成功场景'],
['value' => 'order_express_success', 'label' => '订单快递发货成功场景'],
['value' => 'order_send_success', 'label' => '订单配送员开始送货场景'],
['value' => 'order_take', 'label' => '订单成功收货场景'],
['value' => 'order_initiated_refund', 'label' => '订单发起退款场景'],
['value' => 'order_refund_success', 'label' => '订单退款成功场景'],
['value' => 'order_refund_fail', 'label' => '订单退款失败场景'],
['value' => 'recharge_success', 'label' => '充值成功场景'],
['value' => 'recharge_refund', 'label' => '充值退款场景'],
['value' => 'extract_success', 'label' => '提现成功场景'],
['value' => 'extract_fail', 'label' => '提现失败场景'],
['value' => 'brokerage_received', 'label' => '佣金到账场景'],
['value' => 'point_received', 'label' => '积分到账场景'],
// ['value' => 'login_success', 'label' => '砍价成功场景'],
// ['value' => 'login_success', 'label' => '开团成功场景'],
// ['value' => 'login_success', 'label' => '参团成功场景'],
// ['value' => 'login_success', 'label' => '拼团成功场景'],
// ['value' => 'login_success', 'label' => '拼团失败场景'],
// ['value' => 'login_success', 'label' => '取消拼团场景'],
];
$field = [];
$field[] = Form::select('custom_trigger', '触发位置', $info['custom_trigger'] ?? '')->options($data);
$field[] = Form::input('name', '名称', $info['name'] ?? '')->placeholder('请填写消息名称,例:支付成功消息');
$field[] = Form::input('mark', '标识', $info['mark'] ?? '')->placeholder('请填写消息标识,使用英文和下划线,例:order_pay_success');
return create_form('添加消息', $field, Url::buildUrl('/setting/notification/not_form_save/' . $id), 'POST');
}
/**
* 保存自定义消息
* @param $id
* @param $data
* @return bool
* @author wuhaotian
* @email 442384644@qq.com
* @date 2024/2/20
*/
public function notFormSave($id, $data)
{
if ($id) {
$data['title'] = $data['name'];
$res = $this->dao->update($id, $data);
} else {
$data['type'] = 3;
$data['title'] = $data['name'];
$data['is_system'] = $data['is_wechat'] = $data['is_routine'] = $data['is_sms'] = $data['is_ent_wechat'] = 2;
$data['add_time'] = time();
$res = $this->dao->save($data);
}
if ($res) return true;
throw new AdminException(100006);
}
/**
* 获取单条数据
* @param array $where
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getNotInfo(array $where)
{
$type = $where['type'];
unset($where['type']);
$info = $this->dao->getOne($where);
if (!$info) return [];
$info = $info->toArray();
switch ($type) {
case 'is_system':
$info['content'] = $info['system_text'] ?? '';
break;
case 'is_sms':
$info['content'] = $info['sms_text'];
break;
case 'is_wechat':
$info['tempkey'] = $info['wechat_tempkey'] ?? '';
$info['tempid'] = $info['wechat_tempid'] ?? '';
$info['content'] = $info['wechat_content'] ?? '';
$info['key_list'] = json_decode($info['wechat_data'], true) ?? [];
break;
case 'is_routine':
$info['tempkey'] = $info['routine_tempkey'] ?? '';
$info['tempid'] = $info['routine_tempid'] ?? '';
$info['content'] = $info['routine_content'] ?? '';
$info['key_list'] = json_decode($info['routine_data'], true) ?? [];
break;
case 'is_ent_wechat':
$info['content'] = $info['ent_wechat_text'];
break;
}
if ($info['type'] == 3) {
$info['custom_variable'] = $this->messageData[$info['custom_trigger']];
if (in_array($type, ['is_system', 'is_sms', 'is_ent_wechat'])) {
foreach ($info['custom_variable'] as &$item) {
$item['value'] = '{' . $item['value'] . '}';
}
}
}
return $info;
}
/**
* 保存数据
* @param array $data
* @return bool|\crmeb\basic\BaseModel|null
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function saveData(array $data)
{
$type = $data['type'];
$id = $data['id'];
$info = $this->dao->get($id);
if (!$info) {
throw new AdminException(100026);
}
$res = null;
switch ($type) {
case 'is_system':
$update = [];
$update['name'] = $data['name'];
$update['title'] = $data['title'];
$update['is_system'] = $data['is_system'];
$update['is_app'] = $data['is_app'];
$update['system_title'] = $data['system_title'];
$update['system_text'] = $data['system_text'];
$res = $this->dao->update((int)$id, $update);
break;
case 'is_sms':
$update = [];
$update['name'] = $data['name'];
$update['title'] = $data['title'];
$update['is_sms'] = $data['is_sms'];
$update['sms_id'] = $data['sms_id'];
$update['sms_text'] = $data['sms_text'];
$res = $this->dao->update((int)$id, $update);
break;
case 'is_wechat':
$update['is_wechat'] = $data['is_wechat'];
$update['wechat_tempid'] = $data['tempid'];
$update['wechat_tempkey'] = $data['tempkey'];
$update['wechat_content'] = $data['content'];
$update['wechat_link'] = $data['wechat_link'];
$update['wechat_to_routine'] = $data['wechat_to_routine'];
$update['wechat_data'] = json_encode($data['key_list']);
$res = $this->dao->update((int)$id, $update);
break;
case 'is_routine':
$update['is_routine'] = $data['is_routine'];
$update['routine_tempid'] = $data['tempid'];
$update['routine_tempkey'] = $data['tempkey'];
$update['routine_content'] = $data['content'];
$update['routine_data'] = json_encode($data['key_list']);
$update['routine_link'] = $data['routine_link'];
$res = $this->dao->update((int)$id, $update);
break;
case 'is_ent_wechat':
$update['name'] = $data['name'];
$update['title'] = $data['title'];
$update['is_ent_wechat'] = $data['is_ent_wechat'];
$update['ent_wechat_text'] = $data['ent_wechat_text'];
$update['url'] = $data['url'];
$res = $this->dao->update((int)$id, $update);
break;
}
return $res;
}
/**
* 获取tempid
* @param $type
* @return array
* @author: 吴汐
* @email: 442384644@qq.com
* @date: 2023/8/16
*/
public function getTempId($type)
{
return $this->dao->getTempId($type);
}
/**
* 获取tempkey
* @param $type
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @author: 吴汐
* @email: 442384644@qq.com
* @date: 2023/8/16
*/
public function getTempKey($type)
{
return $this->dao->getTempKey($type);
}
}