Files
code-bang/backend/application/common/service/SubscribeMessageService.php
T

242 lines
11 KiB
PHP
Raw Normal View History

2026-09-17 16:25:31 +08:00
<?php
namespace app\common\service;
use think\Log;
class SubscribeMessageService
{
2026-09-23 17:06:46 +08:00
const MSG_TEMP_DEMAND_RECEIVE = 'JGQJ3a-enop3Jfrcb7av4e5bX8p0Cah_5txloDHhBNw'; //接单成功
const MSG_TEMP_DEMAND_MATCH_SUCCESS = 'dhLlEFPxhLkhrqKcDzvMA3tngRiyzDBy9nwxvqIAASg'; //工单匹配成功
const MSG_TEMP_DEMAND_SETTLE = 'Xpqqk4si-Jh6HqfD-1VS9IH2AtlgVgGJLzgVS7RRMFk'; //工单结算
const MSG_TEMP_WORK_START = 'fuSe71gltzwYTjNrc6N2bWg4cuO4qlhYjgo-09D3Gg8'; //项目开工
const MSG_TEMP_WORK_ACCEPT = 'Gl_t3R5a_NoAvmVaDLeERCfFmTLiHURv9eIixtnOKYI'; //工单验收
const MSG_TEMP_WORK_ACCEPT_RESULT = '0H4GVHXI9G8RtZ1FuS_BuWN8yzOiBQ0-47ym6f08X_I'; //验收结果
const MSG_TEMP_CONTRACT_PAY = 'RxZ1VlzI5cFl_q8fF-WfQlkUqMKp1HGhDCGzAYcmRtk'; //合同付款
const MSG_TEMP_CONTRACT_SIGN = '1Yz9jAXFaySOQyeUfM1V2utomImvVKBRx7m-9FvQ3xo'; //合同签约
const MSG_TEMP_ORDER_SHIPPED = 'jGxNQ11on1yD0d5tGwk4S8jP_CEdddfAkrp9-xVeeZY'; //订单发货
2026-09-30 15:35:40 +08:00
const MSG_TEMP_CONFIRM_RECEIPT = 'Utj3mlCNu0uiwshpoCeTPVMggXWYC6hVGqFBgGm9TFk'; //确认收货通知
2026-09-23 17:06:46 +08:00
const MSG_TEMP_DEVELOPER_JOIN = '0LRwQET1LgJohEok6EbcfMTnikuICe6-NZ7pc0WSbOY'; //申请入驻
2026-09-17 16:25:31 +08:00
const PAGE_DEMAND_LIST = 'pages/demand/list/index';
2026-09-30 15:35:40 +08:00
const PAGE_DEMAND_DETAIL = 'pages/demand/detail/index';
2026-09-17 16:25:31 +08:00
const PAGE_ORDER_LIST = 'pages/order/order-list/index';
2026-10-14 16:26:41 +08:00
const PAGE_ORDER_DETAIL = 'pages/order/order-detail/index';
2026-09-17 16:25:31 +08:00
const PAGE_HOME = 'pages/home/home';
const MSG_MAP = [
self::MSG_TEMP_DEMAND_RECEIVE => [
2026-10-08 16:28:21 +08:00
'name' => '接单成功通知', //站内消息标题
'message_type' => MessageService::TYPE_DEMAND, //站内消息类型
2026-09-17 16:25:31 +08:00
'page' => self::PAGE_DEMAND_LIST . '?opType=myQuote', //我的报价需求列表
'remark' => '恭喜中标,请到我投标的需求确认接单!',
/*
工单号:JG202003310001
服务项目:logo设计
任务名称:共享精英团队logo设计
备注:接单成功,请尽快安排排产
*/
2026-10-08 16:28:21 +08:00
'fields' => ['character_string1', 'thing9', 'thing10', 'thing4'],
'valueNames' => ['工单号', '服务项目', '任务名称', '备注'], //与fields一一对应,用于站内消息内容组装
2026-09-17 16:25:31 +08:00
],
self::MSG_TEMP_DEMAND_MATCH_SUCCESS => [
2026-10-08 16:28:21 +08:00
'name' => '工单匹配成功通知',
'message_type' => MessageService::TYPE_DEMAND,
2026-09-17 16:25:31 +08:00
'page' => self::PAGE_DEMAND_LIST . '?opType=my', //我发布的需求列表
'remark' => '匹配工程师成功,请到需求详情查看沟通',
/*
匹配服务方:字节
服务类别:安装预约
温馨提醒:您的工单已成功匹配,请您电话保持畅通。
*/
'fields' => ['thing1', 'phrase2', 'thing5'],
2026-10-08 16:28:21 +08:00
'valueNames' => ['匹配服务方', '服务类别', '温馨提醒'],
2026-09-17 16:25:31 +08:00
],
self::MSG_TEMP_DEMAND_SETTLE => [
2026-10-08 16:28:21 +08:00
'name' => '工单结算通知',
'message_type' => MessageService::TYPE_DEMAND,
2026-09-17 16:25:31 +08:00
'page' => self::PAGE_DEMAND_LIST . '?opType=myQuote', //我报价的需求列表
'remark' => '该工单已结算完成',
/*
订单编号:200912162851392635fdbf4149
结算金额:99.9元
结算说明:订单已收货结算完成
*/
'fields' => ['character_string4', 'amount1', 'thing2'],
2026-10-08 16:28:21 +08:00
'valueNames' => ['订单编号', '结算金额', '结算说明'],
2026-09-17 16:25:31 +08:00
],
self::MSG_TEMP_WORK_START => [
2026-10-08 16:28:21 +08:00
'name' => '项目开工通知',
'message_type' => MessageService::TYPE_DEMAND,
2026-09-17 16:25:31 +08:00
'page' => self::PAGE_DEMAND_LIST . '?opType=myQuote', //我报价的需求列表
'remark' => '客户已支付预付款,可以开始工作',
/*
项目名称:比克大厦四期
工作日期:2020.12.02 ~ 2020.12.08
备注:请在上下班时间安排对工人进行考勤
*/
'fields' => ['thing1', 'time2', 'thing4'],
2026-10-08 16:28:21 +08:00
'valueNames' => ['项目名称', '工作日期', '备注'],
2026-09-17 16:25:31 +08:00
],
self::MSG_TEMP_WORK_ACCEPT => [
2026-10-08 16:28:21 +08:00
'name' => '工单验收通知',
'message_type' => MessageService::TYPE_DEMAND,
2026-09-17 16:25:31 +08:00
'page' => self::PAGE_DEMAND_LIST . '?opType=my', //我发布的需求列表
'remark' => '需求开发工作已完成,请前去验收成果',
/*
工单编号:11021024307548
工单标题:电脑问题
验收内容:验收工单以及现场完工图
温馨提醒:登录平台确保验收,给予工程师中肯评价吧~
*/
'fields' => ['character_string1', 'thing8', 'thing2', 'thing5'],
2026-10-08 16:28:21 +08:00
'valueNames' => ['工单编号', '工单标题', '验收内容', '温馨提醒'],
2026-09-17 16:25:31 +08:00
],
self::MSG_TEMP_WORK_ACCEPT_RESULT => [
2026-10-08 16:28:21 +08:00
'name' => '验收结果通知',
'message_type' => MessageService::TYPE_DEMAND,
2026-09-17 16:25:31 +08:00
'page' => self::PAGE_DEMAND_LIST . '?opType=myQuote', //我报价的需求列表
'remark' => '客户已验收并支付尾款,可以发送源码',
'remarkFail' => '客户验收未通过,请根据要求修改',
/*
验收阶段:第一阶段(1/2)
验收结果:拒绝
备注:阶段结算金额7日后即可提现
原因:不符合需求描述的内容
*/
'fields' => ['thing1', 'thing3', 'thing5', 'thing4'],
2026-10-08 16:28:21 +08:00
'valueNames' => ['验收阶段', '验收结果', '备注', '原因'],
2026-09-17 16:25:31 +08:00
],
self::MSG_TEMP_CONTRACT_PAY => [
2026-10-08 16:28:21 +08:00
'name' => '合同付款通知',
'message_type' => MessageService::TYPE_DEMAND,
2026-09-17 16:25:31 +08:00
'page' => self::PAGE_ORDER_LIST, //我的订单列表
'remark' => '请到我的订单完成合同尾款支付',
/*
项目名称:峰爆剧组
合同编号:Q001
结算金额:1.23元
结算周期:2025.01.01~2025.03.31
备注:您有以上合同需要付款,请及时发起流程
*/
'fields' => ['thing1', 'character_string2', 'amount5', 'time4', 'thing3'],
2026-10-08 16:28:21 +08:00
'valueNames' => ['项目名称', '合同编号', '结算金额', '结算周期', '备注'],
2026-09-17 16:25:31 +08:00
],
self::MSG_TEMP_CONTRACT_SIGN => [
2026-10-08 16:28:21 +08:00
'name' => '合同签约通知',
'message_type' => MessageService::TYPE_DEMAND,
2026-09-17 16:25:31 +08:00
'page' => self::PAGE_DEMAND_LIST . '?opType=my', //我发布的需求列表
'remark' => '需求已确认,请前去完成合同签约',
/*
合同编号:2019年合字001号
项目名称:某某项目
签约金额:3000
备注:【签约成功】请及时缴纳首期款办理入住
*/
'fields' => ['thing1', 'thing2', 'amount12', 'thing5'],
2026-10-08 16:28:21 +08:00
'valueNames' => ['合同编号', '项目名称', '签约金额', '备注'],
2026-09-17 16:25:31 +08:00
],
self::MSG_TEMP_ORDER_SHIPPED => [
2026-10-08 16:28:21 +08:00
'name' => '订单发货通知',
'message_type' => MessageService::TYPE_DEMAND,
2026-09-17 16:25:31 +08:00
'page' => self::PAGE_ORDER_LIST, //订单列表
'remark' => '发货成功,请到订单详情查看激活码',
/*
订单号:A12345678984
商品名称:2019秋冬女装春装新款上衣连衣裙加绒蕾丝
订单状态:充值成功
备注:快递配送中,请留意电话或者短信
*/
'fields' => ['character_string2', 'thing1', 'phrase19', 'thing6'],
2026-10-08 16:28:21 +08:00
'valueNames' => ['订单号', '商品名称', '订单状态', '备注'],
2026-09-17 16:25:31 +08:00
],
2026-09-30 15:35:40 +08:00
self::MSG_TEMP_CONFIRM_RECEIPT => [
2026-10-08 16:28:21 +08:00
'name' => '确认收货通知',
'message_type' => MessageService::TYPE_DEMAND,
2026-09-30 15:35:40 +08:00
'page' => self::PAGE_DEMAND_DETAIL, //需求详情(发送时携带需求id)
'remark' => '开发成果已交付,请查看交付内容并确认收货',
/*
产品名称:JG202609300001(注:character_string 字段不支持中文,产品名称填需求编号)
订单号:A12345678984
付款金额:1750.00
备注:开发成果已交付,请查看交付内容并确认收货
*/
'fields' => ['character_string1', 'character_string2', 'amount3', 'thing5'],
2026-10-08 16:28:21 +08:00
'valueNames' => ['产品名称', '订单号', '付款金额', '备注'],
2026-09-30 15:35:40 +08:00
],
2026-09-17 16:25:31 +08:00
self::MSG_TEMP_DEVELOPER_JOIN => [
2026-10-08 16:28:21 +08:00
'name' => '入驻审核通知',
'message_type' => MessageService::TYPE_SYSTEM, //入驻审核属系统消息
2026-09-17 16:25:31 +08:00
'page' => self::PAGE_HOME, //首页
'remark' => '开发者入驻成功,前去接单大厅接单',
/*
申请人:周星星
申请时间:2021-10-16 00:00:00
状态:审核通过
备注:备注说明
*/
'fields' => ['thing2', 'time3', 'phrase4', 'thing5'],
2026-10-08 16:28:21 +08:00
'valueNames' => ['申请人', '申请时间', '状态', '备注'],
2026-09-17 16:25:31 +08:00
],
];
/**
* 订阅消息
* @param $user_id
* @param $template_ids
* @return mixed
* @throws \Exception
*/
public static function subMsg($user_id, $template_ids)
{
$template_ids = explode(',', $template_ids);
foreach ($template_ids as $template_id) {
if (!isset(self::MSG_MAP[$template_id])) {
throw new \Exception('该模板消息未定义');
}
$data = [
'user_id' => $user_id,
'template_id' => $template_id,
'page' => self::MSG_MAP[$template_id]['page'] ?? '',
];
}
return true;
}
/**
* @param $user_id
* @param $template_id
* @param array $param
* @return array
*/
public static function packMsg($user_id, $template_id, array $param = [])
{
$paramStr = http_build_query($param['param'] ?? []);
$user = UserService::getOne(['id' => $user_id]);
$page = $param['page'] ?? (self::MSG_MAP[$template_id]['page'] ?? '');
return [
'template_id' => $template_id,
'touser' => $user->openid ?? '',
'page' => $page && $paramStr ? $page . '?' . $paramStr : $page,
'data' => self::packData($template_id, $param['values'] ?? []),
];
}
/**
* @param $template_id
* @param $values
* @return array
*/
public static function packData($template_id, $values): array
{
$fields = self::MSG_MAP[$template_id]['fields'] ?? [];
foreach ($fields as $key => $field) {
$param_data[$field] = ['value' => $values[$key] ?? ''];
}
return $param_data ?? [];
}
}