123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487 |
- <?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' => '积分到账场景'],
- ];
- $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);
- }
- }
|