1.1.41
This commit is contained in:
parent
dd83a2e9da
commit
6ec2a91921
11
README.md
11
README.md
@ -10,6 +10,17 @@
|
|||||||
|
|
||||||
## 更新日志
|
## 更新日志
|
||||||
|
|
||||||
|
### v1.1.41
|
||||||
|
```
|
||||||
|
新增:微信小程序订阅消息
|
||||||
|
修复:多开小程序直播间同步ID问题
|
||||||
|
修复:库存1下单后提示商品库存不足
|
||||||
|
修复:拼团商品预览sku图片报错
|
||||||
|
优化:超管后台删除商家用户
|
||||||
|
|
||||||
|
注:本次更新须重新发布小程序
|
||||||
|
```
|
||||||
|
|
||||||
### v1.1.40
|
### v1.1.40
|
||||||
```
|
```
|
||||||
新增:微信小程序直播功能
|
新增:微信小程序直播功能
|
||||||
|
@ -5603,3 +5603,22 @@ INSERT INTO `yoshop_store_access` VALUES ('10460', '删除场次', 'apps.sharp.a
|
|||||||
INSERT INTO `yoshop_store_access` VALUES ('10461', '基础设置', 'apps.sharp.setting/index', '10444', '125', '1564449650', '1564449650');
|
INSERT INTO `yoshop_store_access` VALUES ('10461', '基础设置', 'apps.sharp.setting/index', '10444', '125', '1564449650', '1564449650');
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE `yoshop_wxapp_live_room` (
|
||||||
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
|
||||||
|
`room_id` int(11) unsigned NOT NULL COMMENT '直播间id',
|
||||||
|
`room_name` varchar(200) NOT NULL DEFAULT '' COMMENT '直播间名称',
|
||||||
|
`cover_img` varchar(255) DEFAULT '' COMMENT '分享卡片封面',
|
||||||
|
`share_img` varchar(255) DEFAULT '' COMMENT '直播间背景墙封面',
|
||||||
|
`anchor_name` varchar(30) NOT NULL DEFAULT '' COMMENT '主播昵称',
|
||||||
|
`start_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '开播时间',
|
||||||
|
`end_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '结束时间',
|
||||||
|
`live_status` tinyint(3) unsigned NOT NULL DEFAULT '102' COMMENT '直播状态(101: 直播中, 102: 未开始, 103: 已结束, 104: 禁播, 105: 暂停中, 106: 异常, 107: 已过期)',
|
||||||
|
`is_top` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '置顶状态(0未置顶 1已置顶)',
|
||||||
|
`is_delete` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '软删除(0未删除 1已删除)',
|
||||||
|
`wxapp_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '小程序id',
|
||||||
|
`create_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||||
|
`update_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
KEY `room_id` (`room_id`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8 COMMENT='微信小程序直播间记录表';
|
||||||
|
|
||||||
|
9
doc/database/upgrade/v1.1.41.sql
Normal file
9
doc/database/upgrade/v1.1.41.sql
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE `yoshop_wxapp_live_room`
|
||||||
|
ADD COLUMN `id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键id' FIRST ,
|
||||||
|
DROP PRIMARY KEY,
|
||||||
|
ADD PRIMARY KEY (`id`),
|
||||||
|
ADD INDEX `room_id` (`room_id`),
|
||||||
|
AUTO_INCREMENT=10001;
|
||||||
|
|
19
doc/更新日志.txt
19
doc/更新日志.txt
@ -1,4 +1,23 @@
|
|||||||
|
|
||||||
|
### v1.1.41 更新日志 ###
|
||||||
|
|
||||||
|
新增:微信小程序订阅消息
|
||||||
|
修复:多开小程序直播间同步ID问题
|
||||||
|
修复:库存1下单后提示商品库存不足
|
||||||
|
修复:拼团商品预览sku图片报错
|
||||||
|
优化:超管后台删除商家用户
|
||||||
|
--------------------------------
|
||||||
|
注:本次更新须重新发布小程序
|
||||||
|
|
||||||
|
|
||||||
|
### v1.1.40 更新日志 ###
|
||||||
|
|
||||||
|
新增:微信小程序直播功能
|
||||||
|
优化:商品评价过滤无效内容
|
||||||
|
--------------------------------
|
||||||
|
注:本次更新须重新发布小程序
|
||||||
|
|
||||||
|
|
||||||
### v1.1.39 更新日志 ###
|
### v1.1.39 更新日志 ###
|
||||||
|
|
||||||
优化:后台菜单超出显示滚动条
|
优化:后台菜单超出显示滚动条
|
||||||
|
@ -56,7 +56,6 @@ class Store extends Controller
|
|||||||
/**
|
/**
|
||||||
* 添加小程序
|
* 添加小程序
|
||||||
* @return array|mixed
|
* @return array|mixed
|
||||||
* @throws \think\exception\PDOException
|
|
||||||
*/
|
*/
|
||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
|
@ -90,7 +90,12 @@ class Wxapp extends WxappModel
|
|||||||
*/
|
*/
|
||||||
public function setDelete()
|
public function setDelete()
|
||||||
{
|
{
|
||||||
|
return $this->transaction(function () {
|
||||||
|
// 删除商家用户信息
|
||||||
|
(new StoreUser)->setDelete($this['wxapp_id']);
|
||||||
|
// 设置当前商城为已删除
|
||||||
return $this->save(['is_delete' => 1]);
|
return $this->save(['is_delete' => 1]);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -139,518 +139,4 @@ class Access extends AccessModel
|
|||||||
$this->buildData($defaultData);
|
$this->buildData($defaultData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 生成并写入默认数据
|
|
||||||
* @param $defaultData
|
|
||||||
* @param int $parent_id
|
|
||||||
*/
|
|
||||||
private function buildData(&$defaultData, $parent_id = 0)
|
|
||||||
{
|
|
||||||
foreach ($defaultData as $key => $item) {
|
|
||||||
// 保存数据
|
|
||||||
$model = new static;
|
|
||||||
$model->save([
|
|
||||||
'name' => $item['name'],
|
|
||||||
'url' => $item['url'],
|
|
||||||
'parent_id' => $parent_id,
|
|
||||||
'sort' => 100,
|
|
||||||
]);
|
|
||||||
if (isset($item['subset']) && !empty($item['subset'])) {
|
|
||||||
$this->buildData($item['subset'], $model['access_id']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 默认权限数据
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
private function defaultData()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
[
|
|
||||||
'name' => '首页',
|
|
||||||
'url' => 'index/index'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '管理员',
|
|
||||||
'url' => 'store',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '管理员管理',
|
|
||||||
'url' => 'store.user',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '管理员列表',
|
|
||||||
'url' => 'store.user/index'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '添加管理员',
|
|
||||||
'url' => 'store.user/add'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '编辑管理员',
|
|
||||||
'url' => 'store.user/edit'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '删除管理员',
|
|
||||||
'url' => 'store.user/delete'
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '角色管理',
|
|
||||||
'url' => 'store.role',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '角色列表',
|
|
||||||
'url' => 'store.role/index'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '添加角色',
|
|
||||||
'url' => 'store.role/add'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '编辑角色',
|
|
||||||
'url' => 'store.role/edit'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '删除角色',
|
|
||||||
'url' => 'store.role/delete'
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '权限管理',
|
|
||||||
'url' => 'store.access',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '权限列表',
|
|
||||||
'url' => 'store.access/index'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '添加权限',
|
|
||||||
'url' => 'store.access/add'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '编辑权限',
|
|
||||||
'url' => 'store.access/edit'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '删除权限',
|
|
||||||
'url' => 'store.access/delete'
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '商品管理',
|
|
||||||
'url' => 'goods',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '商品管理',
|
|
||||||
'url' => 'goods',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '商品列表',
|
|
||||||
'url' => 'goods/index',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '添加商品',
|
|
||||||
'url' => 'goods/add',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '编辑商品',
|
|
||||||
'url' => 'goods/edit',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '复制商品',
|
|
||||||
'url' => 'goods/copy',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '删除商品',
|
|
||||||
'url' => 'goods/delete',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '商品上下架',
|
|
||||||
'url' => 'goods/state',
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '商品分类',
|
|
||||||
'url' => 'goods.category',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '分类列表',
|
|
||||||
'url' => 'goods.category/index',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '添加分类',
|
|
||||||
'url' => 'goods.category/add',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '编辑分类',
|
|
||||||
'url' => 'goods.category/edit',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '删除分类',
|
|
||||||
'url' => 'goods.category/delete',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '商品评价',
|
|
||||||
'url' => 'goods.comment',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '评价列表',
|
|
||||||
'url' => 'goods.comment/index',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '评价详情',
|
|
||||||
'url' => 'goods.comment/detail',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '删除评价',
|
|
||||||
'url' => 'goods.comment/delete',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '订单管理',
|
|
||||||
'url' => 'order',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '订单列表',
|
|
||||||
'url' => '',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '待发货',
|
|
||||||
'url' => 'order/delivery_list'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '待收货',
|
|
||||||
'url' => 'order/receipt_list'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '待付款',
|
|
||||||
'url' => 'order/pay_list'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '已完成',
|
|
||||||
'url' => 'order/complete_list'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '已取消',
|
|
||||||
'url' => 'order/cancel_list'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '全部订单',
|
|
||||||
'url' => 'order/all_list',
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '订单详情',
|
|
||||||
'url' => '',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '详情信息',
|
|
||||||
'url' => 'order/detail',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '确认发货',
|
|
||||||
'url' => 'order/delivery',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '修改订单价格',
|
|
||||||
'url' => 'order/updateprice',
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '订单导出',
|
|
||||||
'url' => 'order.operate/export',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '批量发货',
|
|
||||||
'url' => 'order.operate/batchdelivery',
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '用户管理',
|
|
||||||
'url' => 'user',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '用户列表',
|
|
||||||
'url' => 'user/index'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '删除用户',
|
|
||||||
'url' => 'user/delete'
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '营销设置',
|
|
||||||
'url' => 'market',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '优惠券',
|
|
||||||
'url' => 'coupon',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '优惠券列表',
|
|
||||||
'url' => 'market.coupon/index',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '新增优惠券',
|
|
||||||
'url' => 'market.coupon/add',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '编辑优惠券',
|
|
||||||
'url' => 'market.coupon/edit',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '删除优惠券',
|
|
||||||
'url' => 'market.coupon/delete',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '领取记录',
|
|
||||||
'url' => 'market.coupon/receive',
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '小程序',
|
|
||||||
'url' => 'wxapp',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '小程序设置',
|
|
||||||
'url' => 'wxapp/setting',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '页面管理',
|
|
||||||
'url' => 'wxapp.page',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '页面设计',
|
|
||||||
'url' => '',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '页面列表',
|
|
||||||
'url' => 'wxapp.page/index',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '新增页面',
|
|
||||||
'url' => 'wxapp.page/add',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '编辑页面',
|
|
||||||
'url' => 'wxapp.page/edit',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '设为首页',
|
|
||||||
'url' => 'wxapp.page/sethome',
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '分类页模板',
|
|
||||||
'url' => 'wxapp.page/category',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '页面链接',
|
|
||||||
'url' => 'wxapp.page/links',
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '帮助中心',
|
|
||||||
'url' => 'wxapp.help',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '帮助列表',
|
|
||||||
'url' => 'wxapp.help/index',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '新增帮助',
|
|
||||||
'url' => 'wxapp.help/add',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '编辑帮助',
|
|
||||||
'url' => 'wxapp.help/edit',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '删除帮助',
|
|
||||||
'url' => 'wxapp.help/delete',
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '应用中心',
|
|
||||||
'url' => 'apps',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '分销中心',
|
|
||||||
'url' => 'apps.dealer',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '入驻申请',
|
|
||||||
'url' => 'apps.dealer.apply',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '申请列表',
|
|
||||||
'url' => 'apps.dealer.apply/index'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '分销商审核',
|
|
||||||
'url' => 'apps.dealer.apply/submit'
|
|
||||||
]
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '分销商用户',
|
|
||||||
'url' => 'apps.dealer.user',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '分销商列表',
|
|
||||||
'url' => 'apps.dealer.user/index',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '删除分销商',
|
|
||||||
'url' => 'apps.dealer.user/delete'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '分销商二维码',
|
|
||||||
'url' => 'apps.dealer.user/qrcode'
|
|
||||||
]
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '分销订单',
|
|
||||||
'url' => 'apps.dealer.order/index',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '提现申请',
|
|
||||||
'url' => 'apps.dealer.withdraw',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '申请列表',
|
|
||||||
'url' => 'apps.dealer.withdraw/index',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '提现审核',
|
|
||||||
'url' => 'apps.dealer.withdraw/submit'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '确认打款',
|
|
||||||
'url' => 'apps.dealer.withdraw/money'
|
|
||||||
]
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '分销设置',
|
|
||||||
'url' => 'apps.dealer.setting/index',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '分销海报',
|
|
||||||
'url' => 'apps.dealer.setting/qrcode',
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '设置',
|
|
||||||
'url' => 'setting',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '商城设置',
|
|
||||||
'url' => 'setting/store',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '交易设置',
|
|
||||||
'url' => 'setting/trade',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '配送设置',
|
|
||||||
'url' => 'setting.delivery',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '运费模板列表',
|
|
||||||
'url' => 'setting.delivery/index'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '新增运费模板',
|
|
||||||
'url' => 'setting.delivery/add'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '编辑运费模板',
|
|
||||||
'url' => 'setting.delivery/edit'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '删除运费模板',
|
|
||||||
'url' => 'setting.delivery/delete'
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '物流公司',
|
|
||||||
'url' => 'setting.express',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '物流公司列表',
|
|
||||||
'url' => 'setting.express/index'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '新增物流公司',
|
|
||||||
'url' => 'setting.express/add'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '编辑物流公司',
|
|
||||||
'url' => 'setting.express/edit'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '删除物流公司',
|
|
||||||
'url' => 'setting.express/delete'
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '短信通知',
|
|
||||||
'url' => 'setting/sms',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '模板消息',
|
|
||||||
'url' => 'setting/tplmsg',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '上传设置',
|
|
||||||
'url' => 'setting/storage',
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => '其他',
|
|
||||||
'url' => '',
|
|
||||||
'subset' => [
|
|
||||||
[
|
|
||||||
'name' => '清理缓存',
|
|
||||||
'url' => 'setting.cache/clear',
|
|
||||||
],
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace app\admin\model\store;
|
namespace app\admin\model\store;
|
||||||
|
|
||||||
|
use app\common\exception\BaseException;
|
||||||
use app\common\model\store\User as StoreUserModel;
|
use app\common\model\store\User as StoreUserModel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -13,30 +14,55 @@ class User extends StoreUserModel
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* 新增商家用户记录
|
* 新增商家用户记录
|
||||||
* @param $wxapp_id
|
* @param int $wxappId
|
||||||
* @param $data
|
* @param array $data
|
||||||
* @return bool|false|int
|
* @return bool|false|int
|
||||||
*/
|
*/
|
||||||
public function add($wxapp_id, $data)
|
public function add($wxappId, $data)
|
||||||
{
|
{
|
||||||
return $this->save([
|
return $this->save([
|
||||||
'user_name' => $data['user_name'],
|
'user_name' => $data['user_name'],
|
||||||
'password' => yoshop_hash($data['password']),
|
'password' => yoshop_hash($data['password']),
|
||||||
'wxapp_id' => $wxapp_id,
|
'is_super' => 1,
|
||||||
|
'wxapp_id' => $wxappId,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 商家用户登录
|
* 商家用户登录
|
||||||
* @param $wxapp_id
|
* @param int $wxappId
|
||||||
* @throws \think\Exception
|
* @throws \think\Exception
|
||||||
* @throws \think\exception\DbException
|
* @throws \think\exception\DbException
|
||||||
*/
|
*/
|
||||||
public function login($wxapp_id)
|
public function login($wxappId)
|
||||||
{
|
{
|
||||||
// 验证用户名密码是否正确
|
// 获取获取商城超级管理员用户信息
|
||||||
$user = self::detail(['wxapp_id' => $wxapp_id], ['wxapp']);
|
$user = $this->getSuperStoreUser($wxappId);
|
||||||
|
if (empty($user)) {
|
||||||
|
throw new BaseException(['msg' => '超级管理员用户信息不存在']);
|
||||||
|
}
|
||||||
$this->loginState($user);
|
$this->loginState($user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取获取商城超级管理员用户信息
|
||||||
|
* @param $wxappId
|
||||||
|
* @return User|null
|
||||||
|
* @throws \think\exception\DbException
|
||||||
|
*/
|
||||||
|
private function getSuperStoreUser($wxappId)
|
||||||
|
{
|
||||||
|
return static::detail(['wxapp_id' => $wxappId, 'is_super' => 1], ['wxapp']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除小程序下的商家用户
|
||||||
|
* @param $wxappId
|
||||||
|
* @return false|int
|
||||||
|
*/
|
||||||
|
public function setDelete($wxappId)
|
||||||
|
{
|
||||||
|
return $this->save(['is_delete' => 1], ['wxapp_id' => $wxappId]);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,10 @@ class PaySuccess
|
|||||||
private function onCommonEvent()
|
private function onCommonEvent()
|
||||||
{
|
{
|
||||||
// 发送消息通知
|
// 发送消息通知
|
||||||
(new MessageService)->payment($this->order, $this->orderType);
|
MessageService::send('order.payment', [
|
||||||
|
'order' => $this->order,
|
||||||
|
'order_type' => $this->orderType,
|
||||||
|
]);
|
||||||
// 小票打印
|
// 小票打印
|
||||||
(new PrinterService)->printTicket($this->order, OrderStatusEnum::ORDER_PAYMENT);
|
(new PrinterService)->printTicket($this->order, OrderStatusEnum::ORDER_PAYMENT);
|
||||||
}
|
}
|
||||||
|
@ -13,13 +13,14 @@ use app\api\model\sharing\Setting as SettingModel;
|
|||||||
class Setting extends Controller
|
class Setting extends Controller
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* 获取所有设置
|
* 获取拼团设置
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getAll()
|
public function getAll()
|
||||||
{
|
{
|
||||||
$basic = SettingModel::getItem('basic');
|
// 获取拼团设置
|
||||||
return $this->renderSuccess(['setting' => compact('basic')]);
|
$setting = SettingModel::getSetting();
|
||||||
|
return $this->renderSuccess(compact('setting'));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,6 @@ class Apply extends Controller
|
|||||||
* @param string $mobile
|
* @param string $mobile
|
||||||
* @return array
|
* @return array
|
||||||
* @throws \think\exception\DbException
|
* @throws \think\exception\DbException
|
||||||
* @throws \think\exception\PDOException
|
|
||||||
*/
|
*/
|
||||||
public function submit($name = '', $mobile = '')
|
public function submit($name = '', $mobile = '')
|
||||||
{
|
{
|
||||||
|
@ -47,7 +47,7 @@ class Withdraw extends Controller
|
|||||||
$formData = json_decode(htmlspecialchars_decode($data), true);
|
$formData = json_decode(htmlspecialchars_decode($data), true);
|
||||||
$model = new WithdrawModel;
|
$model = new WithdrawModel;
|
||||||
if ($model->submit($this->dealer, $formData)) {
|
if ($model->submit($this->dealer, $formData)) {
|
||||||
return $this->renderSuccess([], '申请提现成功');
|
return $this->renderSuccess([], '提现申请已提交成功,请等待审核');
|
||||||
}
|
}
|
||||||
return $this->renderError($model->getError() ?: '提交失败');
|
return $this->renderError($model->getError() ?: '提交失败');
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,9 @@
|
|||||||
namespace app\api\controller\wxapp;
|
namespace app\api\controller\wxapp;
|
||||||
|
|
||||||
use app\api\controller\Controller;
|
use app\api\controller\Controller;
|
||||||
use app\api\model\wxapp\Formid as FormidModel;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* form_id 管理
|
* form_id 管理 (已废弃)
|
||||||
* Class Formid
|
* Class Formid
|
||||||
* @package app\api\controller\wxapp
|
* @package app\api\controller\wxapp
|
||||||
*/
|
*/
|
||||||
@ -17,20 +16,10 @@ class Formid extends Controller
|
|||||||
* (因微信模板消息已下线,所以formId取消不再收集)
|
* (因微信模板消息已下线,所以formId取消不再收集)
|
||||||
* @param $formId
|
* @param $formId
|
||||||
* @return array
|
* @return array
|
||||||
* @throws \app\common\exception\BaseException
|
|
||||||
* @throws \think\exception\DbException
|
|
||||||
*/
|
*/
|
||||||
public function save($formId)
|
public function save($formId)
|
||||||
{
|
{
|
||||||
return $this->renderSuccess();
|
return $this->renderSuccess();
|
||||||
|
|
||||||
// if (!$user = $this->getUser(false)) {
|
|
||||||
// return $this->renderSuccess();
|
|
||||||
// }
|
|
||||||
// if (FormidModel::add($user['user_id'], $formId)) {
|
|
||||||
// return $this->renderSuccess();
|
|
||||||
// }
|
|
||||||
// return $this->renderError();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
25
source/application/api/controller/wxapp/Submsg.php
Normal file
25
source/application/api/controller/wxapp/Submsg.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\api\controller\wxapp;
|
||||||
|
|
||||||
|
use app\api\controller\Controller;
|
||||||
|
use app\api\model\Setting as SettingModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信小程序订阅消息
|
||||||
|
* Class Submsg
|
||||||
|
* @package app\api\controller\wxapp
|
||||||
|
*/
|
||||||
|
class Submsg extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 获取订阅消息配置
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function setting()
|
||||||
|
{
|
||||||
|
$setting = SettingModel::getSubmsg();
|
||||||
|
return $this->renderSuccess(compact('setting'));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -20,4 +20,18 @@ class Setting extends SettingModel
|
|||||||
return static::getItem('points')['points_name'];
|
return static::getItem('points')['points_name'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取微信订阅消息设置
|
||||||
|
*/
|
||||||
|
public static function getSubmsg()
|
||||||
|
{
|
||||||
|
$data = [];
|
||||||
|
foreach (static::getItem('submsg') as $groupName => $group) {
|
||||||
|
foreach ($group as $itemName => $item) {
|
||||||
|
$data[$groupName][$itemName]['template_id'] = $item['template_id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,14 +2,15 @@
|
|||||||
|
|
||||||
namespace app\api\model\sharing;
|
namespace app\api\model\sharing;
|
||||||
|
|
||||||
use app\common\model\sharing\Setting as SettingModel;
|
use app\api\model\Setting as SettingModel;
|
||||||
|
use app\common\model\sharing\Setting as SharingSettingModel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拼团设置模型
|
* 拼团设置模型
|
||||||
* Class Setting
|
* Class Setting
|
||||||
* @package app\api\model\sharing
|
* @package app\api\model\sharing
|
||||||
*/
|
*/
|
||||||
class Setting extends SettingModel
|
class Setting extends SharingSettingModel
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* 隐藏字段
|
* 隐藏字段
|
||||||
@ -19,4 +20,19 @@ class Setting extends SettingModel
|
|||||||
'update_time',
|
'update_time',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
public static function getSetting()
|
||||||
|
{
|
||||||
|
// 订阅消息
|
||||||
|
$submsgList = [];
|
||||||
|
foreach (SettingModel::getItem('submsg')['sharing'] as $key => $item) {
|
||||||
|
$submsgList[$key] = $item['template_id'];
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
// 基础设置
|
||||||
|
'basic' => static::getItem('basic'),
|
||||||
|
// 订阅消息
|
||||||
|
'order_submsg' => $submsgList,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -300,8 +300,6 @@ class Checkout
|
|||||||
{
|
{
|
||||||
// 系统支持的配送方式 (后台设置)
|
// 系统支持的配送方式 (后台设置)
|
||||||
$deliveryType = SettingModel::getItem('store')['delivery_type'];
|
$deliveryType = SettingModel::getItem('store')['delivery_type'];
|
||||||
// 积分设置
|
|
||||||
$pointsSetting = SettingModel::getItem('points');
|
|
||||||
return [
|
return [
|
||||||
// 配送类型
|
// 配送类型
|
||||||
'delivery' => $this->param['delivery'] > 0 ? $this->param['delivery'] : $deliveryType[0],
|
'delivery' => $this->param['delivery'] > 0 ? $this->param['delivery'] : $deliveryType[0],
|
||||||
@ -326,15 +324,32 @@ class Checkout
|
|||||||
// 支付方式
|
// 支付方式
|
||||||
'pay_type' => $this->param['pay_type'],
|
'pay_type' => $this->param['pay_type'],
|
||||||
// 系统设置
|
// 系统设置
|
||||||
'setting' => [
|
'setting' => $this->getSetting(),
|
||||||
|
// 记忆的自提联系方式
|
||||||
|
'last_extract' => UserService::getLastExtract($this->user['user_id']),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取订单页面中使用到的系统设置
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
private function getSetting()
|
||||||
|
{
|
||||||
|
// 系统支持的配送方式 (后台设置)
|
||||||
|
$deliveryType = SettingModel::getItem('store')['delivery_type'];
|
||||||
|
// 积分设置
|
||||||
|
$pointsSetting = SettingModel::getItem('points');
|
||||||
|
// 订阅消息
|
||||||
|
$orderSubMsgList = [];
|
||||||
|
foreach (SettingModel::getItem('submsg')['order'] as $item) {
|
||||||
|
!empty($item['template_id']) && $orderSubMsgList[] = $item['template_id'];
|
||||||
|
}
|
||||||
|
return [
|
||||||
'delivery' => $deliveryType, // 支持的配送方式
|
'delivery' => $deliveryType, // 支持的配送方式
|
||||||
'points_name' => $pointsSetting['points_name'], // 积分名称
|
'points_name' => $pointsSetting['points_name'], // 积分名称
|
||||||
'points_describe' => $pointsSetting['describe'], // 积分说明
|
'points_describe' => $pointsSetting['describe'], // 积分说明
|
||||||
],
|
'order_submsg' => $orderSubMsgList, // 订阅消息
|
||||||
// 记忆的自提联系方式
|
|
||||||
'last_extract' => UserService::getLastExtract($this->user['user_id']),
|
|
||||||
// todo: delete - 兼容处理
|
|
||||||
'deliverySetting' => $deliveryType,
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -299,8 +299,6 @@ class Checkout
|
|||||||
{
|
{
|
||||||
// 系统支持的配送方式 (后台设置)
|
// 系统支持的配送方式 (后台设置)
|
||||||
$deliveryType = SettingModel::getItem('store')['delivery_type'];
|
$deliveryType = SettingModel::getItem('store')['delivery_type'];
|
||||||
// 积分设置
|
|
||||||
$pointsSetting = SettingModel::getItem('points');
|
|
||||||
return [
|
return [
|
||||||
// 订单类型
|
// 订单类型
|
||||||
'order_type' => $this->param['order_type'],
|
'order_type' => $this->param['order_type'],
|
||||||
@ -327,11 +325,7 @@ class Checkout
|
|||||||
// 支付方式
|
// 支付方式
|
||||||
'pay_type' => $this->param['pay_type'],
|
'pay_type' => $this->param['pay_type'],
|
||||||
// 系统设置
|
// 系统设置
|
||||||
'setting' => [
|
'setting' => $this->getSetting(),
|
||||||
'delivery' => $deliveryType, // 支持的配送方式
|
|
||||||
'points_name' => $pointsSetting['points_name'], // 积分名称
|
|
||||||
'points_describe' => $pointsSetting['describe'], // 积分说明
|
|
||||||
],
|
|
||||||
// 记忆的自提联系方式
|
// 记忆的自提联系方式
|
||||||
'last_extract' => UserService::getLastExtract($this->user['user_id']),
|
'last_extract' => UserService::getLastExtract($this->user['user_id']),
|
||||||
// todo: 兼容处理
|
// todo: 兼容处理
|
||||||
@ -339,6 +333,29 @@ class Checkout
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取订单页面中使用到的系统设置
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
private function getSetting()
|
||||||
|
{
|
||||||
|
// 系统支持的配送方式 (后台设置)
|
||||||
|
$deliveryType = SettingModel::getItem('store')['delivery_type'];
|
||||||
|
// 积分设置
|
||||||
|
$pointsSetting = SettingModel::getItem('points');
|
||||||
|
// 订阅消息
|
||||||
|
$orderSubMsgList = [];
|
||||||
|
foreach (SettingModel::getItem('submsg')['order'] as $item) {
|
||||||
|
!empty($item['template_id']) && $orderSubMsgList[] = $item['template_id'];
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
'delivery' => $deliveryType, // 支持的配送方式
|
||||||
|
'points_name' => $pointsSetting['points_name'], // 积分名称
|
||||||
|
'points_describe' => $pointsSetting['describe'], // 积分说明
|
||||||
|
'order_submsg' => $orderSubMsgList, // 订阅消息
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 当前用户可用的优惠券列表
|
* 当前用户可用的优惠券列表
|
||||||
* @param $orderTotalPrice
|
* @param $orderTotalPrice
|
||||||
|
@ -346,3 +346,17 @@ function filter_emoji($text)
|
|||||||
// 如需支持emoji表情, 需将mysql的编码改为utf8mb4
|
// 如需支持emoji表情, 需将mysql的编码改为utf8mb4
|
||||||
return preg_replace('/[\xf0-\xf7].{3}/', '', $text);
|
return preg_replace('/[\xf0-\xf7].{3}/', '', $text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据指定长度截取字符串
|
||||||
|
* @param $str
|
||||||
|
* @param int $length
|
||||||
|
* @return bool|string
|
||||||
|
*/
|
||||||
|
function str_substr($str, $length = 30)
|
||||||
|
{
|
||||||
|
if (strlen($str) > $length) {
|
||||||
|
$str = mb_substr($str, 0, $length);
|
||||||
|
}
|
||||||
|
return $str;
|
||||||
|
}
|
||||||
|
@ -18,8 +18,8 @@ class Setting extends EnumBasics
|
|||||||
// 短信通知
|
// 短信通知
|
||||||
const SMS = 'sms';
|
const SMS = 'sms';
|
||||||
|
|
||||||
// 模板消息
|
// // 模板消息
|
||||||
const TPL_MSG = 'tplMsg';
|
// const TPL_MSG = 'tplMsg';
|
||||||
|
|
||||||
// 上传设置
|
// 上传设置
|
||||||
const STORAGE = 'storage';
|
const STORAGE = 'storage';
|
||||||
@ -36,6 +36,9 @@ class Setting extends EnumBasics
|
|||||||
// 积分设置
|
// 积分设置
|
||||||
const POINTS = 'points';
|
const POINTS = 'points';
|
||||||
|
|
||||||
|
// 订阅消息设置
|
||||||
|
const SUBMSG = 'submsg';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取订单类型值
|
* 获取订单类型值
|
||||||
* @return array
|
* @return array
|
||||||
@ -55,10 +58,10 @@ class Setting extends EnumBasics
|
|||||||
'value' => self::SMS,
|
'value' => self::SMS,
|
||||||
'describe' => '短信通知',
|
'describe' => '短信通知',
|
||||||
],
|
],
|
||||||
self::TPL_MSG => [
|
// self::TPL_MSG => [
|
||||||
'value' => self::TPL_MSG,
|
// 'value' => self::TPL_MSG,
|
||||||
'describe' => '模板消息',
|
// 'describe' => '模板消息',
|
||||||
],
|
// ],
|
||||||
self::STORAGE => [
|
self::STORAGE => [
|
||||||
'value' => self::STORAGE,
|
'value' => self::STORAGE,
|
||||||
'describe' => '上传设置',
|
'describe' => '上传设置',
|
||||||
@ -79,6 +82,10 @@ class Setting extends EnumBasics
|
|||||||
'value' => self::POINTS,
|
'value' => self::POINTS,
|
||||||
'describe' => '积分设置',
|
'describe' => '积分设置',
|
||||||
],
|
],
|
||||||
|
self::SUBMSG => [
|
||||||
|
'value' => self::SUBMSG,
|
||||||
|
'describe' => '小程序订阅消息',
|
||||||
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
45
source/application/common/enum/dealer/ApplyStatus.php
Normal file
45
source/application/common/enum/dealer/ApplyStatus.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\common\enum\dealer;
|
||||||
|
|
||||||
|
use app\common\enum\EnumBasics;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 枚举类:分销商入驻审核状态
|
||||||
|
* Class ApplyStatus
|
||||||
|
* @package app\common\enum\dealer
|
||||||
|
*/
|
||||||
|
class ApplyStatus extends EnumBasics
|
||||||
|
{
|
||||||
|
// 待审核
|
||||||
|
const AUDIT_WAIT = 10;
|
||||||
|
|
||||||
|
// 审核通过
|
||||||
|
const AUDIT_PASS = 20;
|
||||||
|
|
||||||
|
// 驳回
|
||||||
|
const AUDIT_REJECT = 30;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取枚举类型值
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function data()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
self::AUDIT_WAIT => [
|
||||||
|
'name' => '待审核',
|
||||||
|
'value' => self::AUDIT_WAIT,
|
||||||
|
],
|
||||||
|
self::AUDIT_PASS => [
|
||||||
|
'name' => '审核通过',
|
||||||
|
'value' => self::AUDIT_PASS,
|
||||||
|
],
|
||||||
|
self::AUDIT_REJECT => [
|
||||||
|
'name' => '驳回',
|
||||||
|
'value' => self::AUDIT_REJECT,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\common\enum\dealer\withdraw;
|
||||||
|
|
||||||
|
use app\common\enum\EnumBasics;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 枚举类:分销商提现审核状态
|
||||||
|
* Class ApplyStatus
|
||||||
|
* @package app\common\enum\dealer\withdraw
|
||||||
|
*/
|
||||||
|
class ApplyStatus extends EnumBasics
|
||||||
|
{
|
||||||
|
// 待审核
|
||||||
|
const AUDIT_WAIT = 10;
|
||||||
|
|
||||||
|
// 审核通过
|
||||||
|
const AUDIT_PASS = 20;
|
||||||
|
|
||||||
|
// 驳回
|
||||||
|
const AUDIT_REJECT = 30;
|
||||||
|
|
||||||
|
// 已打款
|
||||||
|
const AUDIT_PAID = 40;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取枚举类型值
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function data()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
self::AUDIT_WAIT => [
|
||||||
|
'name' => '待审核',
|
||||||
|
'value' => self::AUDIT_WAIT,
|
||||||
|
],
|
||||||
|
self::AUDIT_PASS => [
|
||||||
|
'name' => '审核通过',
|
||||||
|
'value' => self::AUDIT_PASS,
|
||||||
|
],
|
||||||
|
self::AUDIT_REJECT => [
|
||||||
|
'name' => '驳回',
|
||||||
|
'value' => self::AUDIT_REJECT,
|
||||||
|
],
|
||||||
|
self::AUDIT_PAID => [
|
||||||
|
'name' => '已打款',
|
||||||
|
'value' => self::AUDIT_PAID,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
51
source/application/common/enum/sharing/ActiveStatus.php
Normal file
51
source/application/common/enum/sharing/ActiveStatus.php
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\common\enum\sharing;
|
||||||
|
|
||||||
|
use app\common\enum\EnumBasics;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 拼团拼单状态
|
||||||
|
* Class ActiveStatus
|
||||||
|
* @package app\common\enum\sharing
|
||||||
|
*/
|
||||||
|
class ActiveStatus extends EnumBasics
|
||||||
|
{
|
||||||
|
// 未拼单
|
||||||
|
const ACTIVE_STATE_NORMAL = 0;
|
||||||
|
|
||||||
|
// 拼单中
|
||||||
|
const ACTIVE_STATE_BEGIN = 10;
|
||||||
|
|
||||||
|
// 拼单成功
|
||||||
|
const ACTIVE_STATE_SUCCESS = 20;
|
||||||
|
|
||||||
|
// 拼单失败
|
||||||
|
const ACTIVE_STATE_FAIL = 30;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取枚举数据
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function data()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
self::ACTIVE_STATE_NORMAL => [
|
||||||
|
'name' => '未拼单',
|
||||||
|
'value' => self::ACTIVE_STATE_NORMAL,
|
||||||
|
],
|
||||||
|
self::ACTIVE_STATE_BEGIN => [
|
||||||
|
'name' => '拼单中',
|
||||||
|
'value' => self::ACTIVE_STATE_BEGIN,
|
||||||
|
],
|
||||||
|
self::ACTIVE_STATE_SUCCESS => [
|
||||||
|
'name' => '拼单成功',
|
||||||
|
'value' => self::ACTIVE_STATE_SUCCESS,
|
||||||
|
],
|
||||||
|
self::ACTIVE_STATE_FAIL => [
|
||||||
|
'name' => '拼单失败',
|
||||||
|
'value' => self::ACTIVE_STATE_FAIL,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
@ -25,7 +25,7 @@ class helper
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取数组中指定的列
|
* 获取数组中指定的列 [支持多列]
|
||||||
* @param $source
|
* @param $source
|
||||||
* @param $columns
|
* @param $columns
|
||||||
* @return array
|
* @return array
|
||||||
@ -83,6 +83,21 @@ class helper
|
|||||||
return $sum / 100;
|
return $sum / 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在二维数组中查找指定值
|
||||||
|
* @param array $array 二维数组
|
||||||
|
* @param string $searchIdx 查找的索引
|
||||||
|
* @param string $searchVal 查找的值
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function arraySearch($array, $searchIdx, $searchVal)
|
||||||
|
{
|
||||||
|
foreach ($array as $item) {
|
||||||
|
if ($item[$searchIdx] == $searchVal) return $item;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public static function setDataAttribute(&$source, $defaultData, $isArray = false)
|
public static function setDataAttribute(&$source, $defaultData, $isArray = false)
|
||||||
{
|
{
|
||||||
if (!$isArray) $dataSource = [&$source]; else $dataSource = &$source;
|
if (!$isArray) $dataSource = [&$source]; else $dataSource = &$source;
|
||||||
|
@ -123,6 +123,29 @@ class WxBase
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模拟POST请求 [第二种方式, 用于兼容微信api]
|
||||||
|
* @param $url
|
||||||
|
* @param array $data
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
protected function post2($url, $data = [])
|
||||||
|
{
|
||||||
|
$header = [
|
||||||
|
'Content-Type: application/x-www-form-urlencoded'
|
||||||
|
];
|
||||||
|
$ch = curl_init();
|
||||||
|
curl_setopt($ch, CURLOPT_URL, $url);
|
||||||
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
|
||||||
|
curl_setopt($ch, CURLOPT_POST, true);
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//这个是重点。
|
||||||
|
$result = curl_exec($ch);
|
||||||
|
curl_close($ch);
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数组转json
|
* 数组转json
|
||||||
* @param $data
|
* @param $data
|
||||||
|
110
source/application/common/library/wechat/WxSubMsg.php
Normal file
110
source/application/common/library/wechat/WxSubMsg.php
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\common\library\wechat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序订阅消息
|
||||||
|
* Class WxSubMsg
|
||||||
|
* @package app\common\library\wechat
|
||||||
|
*/
|
||||||
|
class WxSubMsg extends WxBase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 发送订阅消息
|
||||||
|
* @param $param
|
||||||
|
* @return bool
|
||||||
|
* @throws \app\common\exception\BaseException
|
||||||
|
*/
|
||||||
|
public function sendTemplateMessage($param)
|
||||||
|
{
|
||||||
|
// 微信接口url
|
||||||
|
$accessToken = $this->getAccessToken();
|
||||||
|
$url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={$accessToken}";
|
||||||
|
// 构建请求
|
||||||
|
$params = [
|
||||||
|
'touser' => $param['touser'],
|
||||||
|
'template_id' => $param['template_id'],
|
||||||
|
'page' => $param['page'],
|
||||||
|
'data' => $param['data'],
|
||||||
|
];
|
||||||
|
$result = $this->post($url, $this->jsonEncode($params));
|
||||||
|
// 记录日志
|
||||||
|
$describe = '发送订阅消息';
|
||||||
|
$this->doLogs(compact('describe', 'url', 'params', 'result'));
|
||||||
|
// 返回结果
|
||||||
|
$response = $this->jsonDecode($result);
|
||||||
|
if (!isset($response['errcode'])) {
|
||||||
|
$this->error = 'not found errcode';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ($response['errcode'] != 0) {
|
||||||
|
$this->error = $response['errmsg'];
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前帐号下的模板列表
|
||||||
|
* @throws \app\common\exception\BaseException
|
||||||
|
*/
|
||||||
|
public function getTemplateList()
|
||||||
|
{
|
||||||
|
// 微信接口url
|
||||||
|
$accessToken = $this->getAccessToken();
|
||||||
|
$url = "https://api.weixin.qq.com/wxaapi/newtmpl/gettemplate?access_token={$accessToken}";
|
||||||
|
// 执行post请求
|
||||||
|
$result = $this->get($url);
|
||||||
|
// 记录日志
|
||||||
|
$this->doLogs(['describe' => '获取当前帐号下的订阅消息模板列表', 'url' => $url, 'result' => $result]);
|
||||||
|
// 处理返回结果
|
||||||
|
$response = $this->jsonDecode($result);
|
||||||
|
if (!isset($response['errcode'])) {
|
||||||
|
$this->error = 'not found errcode';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ($response['errcode'] != 0) {
|
||||||
|
$this->error = $response['errmsg'];
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加订阅消息模板
|
||||||
|
* [addTemplates 组合模板并添加至帐号下的个人模板库](订阅消息)
|
||||||
|
* @param int $tid 模板标题id
|
||||||
|
* @param array $kidList 模板关键词列表
|
||||||
|
* @param string $sceneDesc 服务场景描述
|
||||||
|
* @return bool
|
||||||
|
* @throws \app\common\exception\BaseException
|
||||||
|
*/
|
||||||
|
public function addTemplate($tid, $kidList, $sceneDesc)
|
||||||
|
{
|
||||||
|
// 微信接口url
|
||||||
|
$accessToken = $this->getAccessToken();
|
||||||
|
$url = "https://api.weixin.qq.com/wxaapi/newtmpl/addtemplate?access_token={$accessToken}";
|
||||||
|
// 构建请求
|
||||||
|
$params = [
|
||||||
|
'tid' => $tid,
|
||||||
|
'kidList' => $kidList,
|
||||||
|
'sceneDesc' => $sceneDesc,
|
||||||
|
];
|
||||||
|
// 执行post请求
|
||||||
|
$result = $this->post2($url, $params);
|
||||||
|
// 记录日志
|
||||||
|
$this->doLogs(['describe' => '添加订阅消息模板', 'url' => $url, 'params' => $params, 'result' => $result]);
|
||||||
|
// 处理返回结果
|
||||||
|
$response = $this->jsonDecode($result);
|
||||||
|
if (!isset($response['errcode'])) {
|
||||||
|
$this->error = 'not found errcode';
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ($response['errcode'] != 0) {
|
||||||
|
$this->error = $response['errmsg'];
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -3,7 +3,7 @@
|
|||||||
namespace app\common\library\wechat;
|
namespace app\common\library\wechat;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 微信模板消息
|
* 微信模板消息 (废弃)
|
||||||
* Class WxTplMsg
|
* Class WxTplMsg
|
||||||
* @package app\common\library\wechat
|
* @package app\common\library\wechat
|
||||||
*/
|
*/
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
namespace app\common\model;
|
namespace app\common\model;
|
||||||
|
|
||||||
use think\Cache;
|
use think\Cache;
|
||||||
|
use app\common\enum\Setting as SettingEnum;
|
||||||
use app\common\enum\DeliveryType as DeliveryTypeEnum;
|
use app\common\enum\DeliveryType as DeliveryTypeEnum;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -98,6 +99,7 @@ class Setting extends BaseModel
|
|||||||
public function defaultData($storeName = null)
|
public function defaultData($storeName = null)
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
|
// 商城设置
|
||||||
'store' => [
|
'store' => [
|
||||||
'key' => 'store',
|
'key' => 'store',
|
||||||
'describe' => '商城设置',
|
'describe' => '商城设置',
|
||||||
@ -113,6 +115,7 @@ class Setting extends BaseModel
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
// 交易设置
|
||||||
'trade' => [
|
'trade' => [
|
||||||
'key' => 'trade',
|
'key' => 'trade',
|
||||||
'describe' => '交易设置',
|
'describe' => '交易设置',
|
||||||
@ -125,6 +128,7 @@ class Setting extends BaseModel
|
|||||||
'freight_rule' => '10',
|
'freight_rule' => '10',
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
// 上传设置
|
||||||
'storage' => [
|
'storage' => [
|
||||||
'key' => 'storage',
|
'key' => 'storage',
|
||||||
'describe' => '上传设置',
|
'describe' => '上传设置',
|
||||||
@ -154,6 +158,7 @@ class Setting extends BaseModel
|
|||||||
]
|
]
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
// 短信通知
|
||||||
'sms' => [
|
'sms' => [
|
||||||
'key' => 'sms',
|
'key' => 'sms',
|
||||||
'describe' => '短信通知',
|
'describe' => '短信通知',
|
||||||
@ -173,24 +178,26 @@ class Setting extends BaseModel
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'tplMsg' => [
|
// 模板消息
|
||||||
'key' => 'tplMsg',
|
// 'tplMsg' => [
|
||||||
'describe' => '模板消息',
|
// 'key' => 'tplMsg',
|
||||||
'values' => [
|
// 'describe' => '模板消息',
|
||||||
'payment' => [
|
// 'values' => [
|
||||||
'is_enable' => '0',
|
// 'payment' => [
|
||||||
'template_id' => '',
|
// 'is_enable' => '0',
|
||||||
],
|
// 'template_id' => '',
|
||||||
'delivery' => [
|
// ],
|
||||||
'is_enable' => '0',
|
// 'delivery' => [
|
||||||
'template_id' => '',
|
// 'is_enable' => '0',
|
||||||
],
|
// 'template_id' => '',
|
||||||
'refund' => [
|
// ],
|
||||||
'is_enable' => '0',
|
// 'refund' => [
|
||||||
'template_id' => '',
|
// 'is_enable' => '0',
|
||||||
],
|
// 'template_id' => '',
|
||||||
],
|
// ],
|
||||||
],
|
// ],
|
||||||
|
// ],
|
||||||
|
// 小票打印机设置
|
||||||
'printer' => [
|
'printer' => [
|
||||||
'key' => 'printer',
|
'key' => 'printer',
|
||||||
'describe' => '小票打印机设置',
|
'describe' => '小票打印机设置',
|
||||||
@ -200,6 +207,7 @@ class Setting extends BaseModel
|
|||||||
'order_status' => [], // 订单类型 10下单打印 20付款打印 30确认收货打印
|
'order_status' => [], // 订单类型 10下单打印 20付款打印 30确认收货打印
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
// 满额包邮设置
|
||||||
'full_free' => [
|
'full_free' => [
|
||||||
'key' => 'full_free',
|
'key' => 'full_free',
|
||||||
'describe' => '满额包邮设置',
|
'describe' => '满额包邮设置',
|
||||||
@ -214,6 +222,7 @@ class Setting extends BaseModel
|
|||||||
'notin_goods' => [], // 不参与包邮的商品 (商品id集)
|
'notin_goods' => [], // 不参与包邮的商品 (商品id集)
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
// 用户充值设置
|
||||||
'recharge' => [
|
'recharge' => [
|
||||||
'key' => 'recharge',
|
'key' => 'recharge',
|
||||||
'describe' => '用户充值设置',
|
'describe' => '用户充值设置',
|
||||||
@ -227,9 +236,10 @@ class Setting extends BaseModel
|
|||||||
"4. 若有其它疑问,可拨打客服电话400-000-1234", // 充值说明
|
"4. 若有其它疑问,可拨打客服电话400-000-1234", // 充值说明
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'points' => [
|
// 积分设置
|
||||||
'key' => 'points',
|
SettingEnum::POINTS => [
|
||||||
'describe' => '积分设置',
|
'key' => SettingEnum::POINTS,
|
||||||
|
'describe' => SettingEnum::data()[SettingEnum::POINTS]['describe'],
|
||||||
'values' => [
|
'values' => [
|
||||||
'points_name' => '积分', // 积分名称自定义
|
'points_name' => '积分', // 积分名称自定义
|
||||||
'is_shopping_gift' => '0', // 是否开启购物送积分
|
'is_shopping_gift' => '0', // 是否开启购物送积分
|
||||||
@ -247,6 +257,64 @@ class Setting extends BaseModel
|
|||||||
"d) 买家在完成该笔交易(订单状态为“已签收”)后才能得到此笔交易的相应积分,如购买商品参加店铺其他优惠,则优惠的金额部分不享受积分获取;",
|
"d) 买家在完成该笔交易(订单状态为“已签收”)后才能得到此笔交易的相应积分,如购买商品参加店铺其他优惠,则优惠的金额部分不享受积分获取;",
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
// 订阅消息设置
|
||||||
|
SettingEnum::SUBMSG => [
|
||||||
|
'key' => SettingEnum::SUBMSG,
|
||||||
|
'describe' => SettingEnum::data()[SettingEnum::SUBMSG]['describe'],
|
||||||
|
'values' => [
|
||||||
|
// 订单消息
|
||||||
|
'order' => [
|
||||||
|
// 支付成功通知
|
||||||
|
'payment' => [
|
||||||
|
'template_id' => '',
|
||||||
|
'keywords' => ['character_string1', 'time2', 'amount4', 'thing3'],
|
||||||
|
'title' => '新订单提醒',
|
||||||
|
],
|
||||||
|
// 订单发货通知
|
||||||
|
'delivery' => [
|
||||||
|
'template_id' => '',
|
||||||
|
'keywords' => ['character_string1', 'thing2', 'name12', 'thing11', 'thing17'],
|
||||||
|
'title' => '订单发货通知',
|
||||||
|
],
|
||||||
|
// 售后状态通知
|
||||||
|
'refund' => [
|
||||||
|
'template_id' => '',
|
||||||
|
'keywords' => ['phrase1', 'thing6', 'character_string2', 'date3', 'thing4'],
|
||||||
|
'title' => '售后状态通知',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
// 拼团消息
|
||||||
|
'sharing' => [
|
||||||
|
// 拼团进度通知
|
||||||
|
'active_status' => [
|
||||||
|
'template_id' => '',
|
||||||
|
'keywords' => ['thing1', 'amount5', 'number7', 'thing3', 'thing6'],
|
||||||
|
'title' => '拼团进度通知',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
// 分销商消息
|
||||||
|
'dealer' => [
|
||||||
|
// 分销商入驻审核通知
|
||||||
|
'apply' => [
|
||||||
|
'template_id' => '',
|
||||||
|
'keywords' => ['date1', 'phrase2', 'date3', 'thing4'],
|
||||||
|
'title' => '代理商入驻审核通知',
|
||||||
|
],
|
||||||
|
// 提现成功通知
|
||||||
|
'withdraw_01' => [
|
||||||
|
'template_id' => '',
|
||||||
|
'keywords' => ['amount1', 'thing3', 'thing4'],
|
||||||
|
'title' => '提现成功通知',
|
||||||
|
],
|
||||||
|
// 提现失败通知
|
||||||
|
'withdraw_02' => [
|
||||||
|
'template_id' => '',
|
||||||
|
'keywords' => ['amount1', 'time3', 'thing4'],
|
||||||
|
'title' => '提现失败通知',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,13 +25,13 @@ class Wxapp extends BaseModel
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取小程序信息
|
* 获取小程序信息
|
||||||
* @param null $wxapp_id
|
* @param int|null $wxappId
|
||||||
* @return static|null
|
* @return static|null
|
||||||
* @throws \think\exception\DbException
|
* @throws \think\exception\DbException
|
||||||
*/
|
*/
|
||||||
public static function detail($wxapp_id = null)
|
public static function detail($wxappId = null)
|
||||||
{
|
{
|
||||||
return static::get($wxapp_id ?: []);
|
return static::get($wxappId ?: []);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -93,8 +93,6 @@ class Setting extends BaseModel
|
|||||||
"每次砍价金额随机,可砍出最高商品日常价内的随机金额,参与好友越多越容易成功。\n\n" .
|
"每次砍价金额随机,可砍出最高商品日常价内的随机金额,参与好友越多越容易成功。\n\n" .
|
||||||
"以最终砍价后的优惠价格购买该商品,且用户须在活动时间结束之前进行支付购买,否则砍价商品价格将过期失效。\n\n" .
|
"以最终砍价后的优惠价格购买该商品,且用户须在活动时间结束之前进行支付购买,否则砍价商品价格将过期失效。\n\n" .
|
||||||
"商品库存有限,以前台展示的库存数量为准,先到先得。",
|
"商品库存有限,以前台展示的库存数量为准,先到先得。",
|
||||||
// 模板消息
|
|
||||||
'template_msg' => []
|
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
@ -13,16 +13,6 @@ class Apply extends BaseModel
|
|||||||
{
|
{
|
||||||
protected $name = 'dealer_apply';
|
protected $name = 'dealer_apply';
|
||||||
|
|
||||||
/**
|
|
||||||
* 申请状态
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
public $applyStatus = [
|
|
||||||
10 => '待审核',
|
|
||||||
20 => '审核通过',
|
|
||||||
30 => '驳回',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取器:申请时间
|
* 获取器:申请时间
|
||||||
* @param $value
|
* @param $value
|
||||||
@ -44,7 +34,7 @@ class Apply extends BaseModel
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关联推荐人表
|
* 关联用户表
|
||||||
* @return \think\model\relation\BelongsTo
|
* @return \think\model\relation\BelongsTo
|
||||||
*/
|
*/
|
||||||
public function referee()
|
public function referee()
|
||||||
@ -53,6 +43,16 @@ class Apply extends BaseModel
|
|||||||
->field(['user_id', 'nickName']);
|
->field(['user_id', 'nickName']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关联会员记录表
|
||||||
|
* @return \think\model\relation\BelongsTo
|
||||||
|
*/
|
||||||
|
public function user()
|
||||||
|
{
|
||||||
|
$module = self::getCalledModule() ?: 'common';
|
||||||
|
return $this->belongsTo("app\\{$module}\\model\\User");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 销商申请记录详情
|
* 销商申请记录详情
|
||||||
* @param $where
|
* @param $where
|
||||||
|
@ -348,14 +348,6 @@ class Setting extends BaseModel
|
|||||||
'withdraw_apply' => self::$base_url . 'assets/api/dealer-bg.png',
|
'withdraw_apply' => self::$base_url . 'assets/api/dealer-bg.png',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'template_msg' => [
|
|
||||||
'key' => 'template_msg',
|
|
||||||
'describe' => '模板消息',
|
|
||||||
'values' => [
|
|
||||||
'apply_tpl' => '', // 分销商审核通知
|
|
||||||
'withdraw_tpl' => '', // 提现状态通知
|
|
||||||
]
|
|
||||||
],
|
|
||||||
'qrcode' => [
|
'qrcode' => [
|
||||||
'key' => 'template_msg',
|
'key' => 'template_msg',
|
||||||
'describe' => '分销海报',
|
'describe' => '分销海报',
|
||||||
|
@ -13,27 +13,6 @@ class Withdraw extends BaseModel
|
|||||||
{
|
{
|
||||||
protected $name = 'dealer_withdraw';
|
protected $name = 'dealer_withdraw';
|
||||||
|
|
||||||
/**
|
|
||||||
* 打款方式
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
public $payType = [
|
|
||||||
10 => '微信',
|
|
||||||
20 => '支付宝',
|
|
||||||
30 => '银行卡',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 申请状态
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
public $applyStatus = [
|
|
||||||
10 => '待审核',
|
|
||||||
20 => '审核通过',
|
|
||||||
30 => '驳回',
|
|
||||||
40 => '已打款',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关联分销商用户表
|
* 关联分销商用户表
|
||||||
* @return \think\model\relation\BelongsTo
|
* @return \think\model\relation\BelongsTo
|
||||||
|
@ -5,6 +5,7 @@ namespace app\common\model\sharing;
|
|||||||
use think\Hook;
|
use think\Hook;
|
||||||
use app\common\model\BaseModel;
|
use app\common\model\BaseModel;
|
||||||
use app\common\service\Message as MessageService;
|
use app\common\service\Message as MessageService;
|
||||||
|
use app\common\enum\sharing\ActiveStatus as ActiveStatusEnum;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拼团拼单模型
|
* 拼团拼单模型
|
||||||
@ -34,13 +35,7 @@ class Active extends BaseModel
|
|||||||
*/
|
*/
|
||||||
public function getStatusAttr($value)
|
public function getStatusAttr($value)
|
||||||
{
|
{
|
||||||
$state = [
|
return ['text' => ActiveStatusEnum::data()[$value]['name'], 'value' => $value];
|
||||||
0 => '未拼单',
|
|
||||||
10 => '拼单中',
|
|
||||||
20 => '拼单成功',
|
|
||||||
30 => '拼单失败',
|
|
||||||
];
|
|
||||||
return ['text' => $state[$value], 'value' => $value];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -157,13 +152,12 @@ class Active extends BaseModel
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新拼单记录
|
* 更新拼单记录
|
||||||
* @param $user_id
|
* @param $userId
|
||||||
* @param $order_id
|
* @param $orderId
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws \app\common\exception\BaseException
|
|
||||||
* @throws \think\exception\DbException
|
* @throws \think\exception\DbException
|
||||||
*/
|
*/
|
||||||
public function onUpdate($user_id, $order_id)
|
public function onUpdate($userId, $orderId)
|
||||||
{
|
{
|
||||||
// 验证当前拼单是否允许加入新成员
|
// 验证当前拼单是否允许加入新成员
|
||||||
if (!$this->checkAllowJoin()) {
|
if (!$this->checkAllowJoin()) {
|
||||||
@ -172,8 +166,8 @@ class Active extends BaseModel
|
|||||||
// 新增拼单成员记录
|
// 新增拼单成员记录
|
||||||
ActiveUsers::add([
|
ActiveUsers::add([
|
||||||
'active_id' => $this['active_id'],
|
'active_id' => $this['active_id'],
|
||||||
'order_id' => $order_id,
|
'order_id' => $orderId,
|
||||||
'user_id' => $user_id,
|
'user_id' => $userId,
|
||||||
'is_creator' => 0,
|
'is_creator' => 0,
|
||||||
'wxapp_id' => $this['wxapp_id']
|
'wxapp_id' => $this['wxapp_id']
|
||||||
]);
|
]);
|
||||||
@ -185,10 +179,13 @@ class Active extends BaseModel
|
|||||||
'actual_people' => $actual_people,
|
'actual_people' => $actual_people,
|
||||||
'status' => $status
|
'status' => $status
|
||||||
]);
|
]);
|
||||||
// 拼单成功, 发送模板消息
|
// 拼单成功, 发送订阅消息
|
||||||
if ($status == 20) {
|
if ($status == 20) {
|
||||||
$model = static::detail($this['active_id']);
|
$model = static::detail($this['active_id']);
|
||||||
(new MessageService)->sharingActive($model, '拼团成功');
|
MessageService::send('sharing.active_status', [
|
||||||
|
'active' => $model,
|
||||||
|
'status' => ActiveStatusEnum::ACTIVE_STATE_SUCCESS,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -95,8 +95,6 @@ class Setting extends BaseModel
|
|||||||
'rule_brief' => '好友拼单 · 人满发货 · 人不满退款',
|
'rule_brief' => '好友拼单 · 人满发货 · 人不满退款',
|
||||||
// 拼团规则 详述
|
// 拼团规则 详述
|
||||||
'rule_detail' => "开团:选择商品,点击“发起拼单”按钮,付款完成后即开团成功,就可以邀请小伙伴一起拼团啦;\n\n参团:进入朋友分享的页面,点击“立即参团”按钮,付款完成后参团成功,在有效时间内凑齐人数即成团,就可以等待收货喽;\n\n成团:在开团或参团成功后,点击“立即分享”将页面分享给好友,在有效时间内凑齐人数即成团,成团后商家开始发货;\n\n组团失败:在有效时间内未凑齐人数,即组团失败,组团失败后订单所付款将原路退回到支付账户。",
|
'rule_detail' => "开团:选择商品,点击“发起拼单”按钮,付款完成后即开团成功,就可以邀请小伙伴一起拼团啦;\n\n参团:进入朋友分享的页面,点击“立即参团”按钮,付款完成后参团成功,在有效时间内凑齐人数即成团,就可以等待收货喽;\n\n成团:在开团或参团成功后,点击“立即分享”将页面分享给好友,在有效时间内凑齐人数即成团,成团后商家开始发货;\n\n组团失败:在有效时间内未凑齐人数,即组团失败,组团失败后订单所付款将原路退回到支付账户。",
|
||||||
// 拼单状态模板消息id
|
|
||||||
'tpl_msg_id' => '',
|
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
@ -2,351 +2,47 @@
|
|||||||
|
|
||||||
namespace app\common\service;
|
namespace app\common\service;
|
||||||
|
|
||||||
//use app\common\model\User as UserModel;
|
|
||||||
use app\common\model\Wxapp as WxappModel;
|
|
||||||
use app\common\model\Setting as SettingModel;
|
|
||||||
//use app\common\model\dealer\Setting as DealerSettingModel;
|
|
||||||
//use app\common\model\sharing\Setting as SharingSettingModel;
|
|
||||||
//use app\common\service\wxapp\FormId as FormIdService;
|
|
||||||
use app\common\enum\OrderType as OrderTypeEnum;
|
|
||||||
use app\common\library\wechat\WxTplMsg;
|
|
||||||
use app\common\library\sms\Driver as SmsDriver;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消息通知服务
|
* 消息通知服务
|
||||||
* Class Message
|
* Class Message
|
||||||
* @package app\common\service
|
* @package app\common\service
|
||||||
*/
|
*/
|
||||||
class Message
|
class Message extends Basics
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* 订单支付成功后通知
|
* 场景列表
|
||||||
* @param \think\Model $order
|
* [场景名称] => [场景类]
|
||||||
* @param int $orderType 订单类型 (10商城订单 20拼团订单)
|
* @var array
|
||||||
* @return bool
|
|
||||||
// * @throws \app\common\exception\BaseException
|
|
||||||
* @throws \think\Exception
|
|
||||||
// * @throws \think\exception\DbException
|
|
||||||
*/
|
*/
|
||||||
public function payment($order, $orderType = OrderTypeEnum::MASTER)
|
private static $sceneList = [
|
||||||
{
|
// 订单支付成功
|
||||||
// // 1. 微信模板消息
|
'order.payment' => 'app\common\service\message\order\Payment',
|
||||||
// $template = SettingModel::getItem('tplMsg', $order['wxapp_id'])['payment'];
|
// 订单发货
|
||||||
// if (!$template['is_enable'] || empty($template['template_id'])) {
|
'order.delivery' => 'app\common\service\message\order\Delivery',
|
||||||
// return false;
|
// 订单退款
|
||||||
// }
|
'order.refund' => 'app\common\service\message\order\Refund',
|
||||||
// // 获取可用的formid
|
|
||||||
// if (!$formId = FormIdService::getAvailableFormId($order['user_id'])) {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// // 页面链接
|
|
||||||
// $urls = [
|
|
||||||
// OrderTypeEnum::MASTER => 'pages/order/detail',
|
|
||||||
// OrderTypeEnum::SHARING => 'pages/sharing/order/detail/detail',
|
|
||||||
// ];
|
|
||||||
// // 发送模板消息
|
|
||||||
// $status = $this->sendTemplateMessage($order['wxapp_id'], [
|
|
||||||
// 'touser' => $order['user']['open_id'],
|
|
||||||
// 'template_id' => $template['template_id'],
|
|
||||||
// 'page' => $urls[$orderType] . '?order_id=' . $order['order_id'],
|
|
||||||
// 'form_id' => $formId['form_id'],
|
|
||||||
// 'data' => [
|
|
||||||
// // 订单编号
|
|
||||||
// 'keyword1' => $order['order_no'],
|
|
||||||
// // 支付时间
|
|
||||||
// 'keyword2' => date('Y-m-d H:i:s', $order['pay_time']),
|
|
||||||
// // 订单金额
|
|
||||||
// 'keyword3' => $order['pay_price'],
|
|
||||||
// // 商品名称
|
|
||||||
// 'keyword4' => $this->formatGoodsName($order['goods']),
|
|
||||||
// ]
|
|
||||||
// ]);
|
|
||||||
// // 标记formid已使用
|
|
||||||
// $status === true && FormIdService::setIsUsed($formId['id']);
|
|
||||||
|
|
||||||
// 2. 商家短信通知
|
// 拼团进度通知
|
||||||
$smsConfig = SettingModel::getItem('sms', $order['wxapp_id']);
|
'sharing.active_status' => 'app\common\service\message\sharing\ActiveStatus',
|
||||||
$SmsDriver = new SmsDriver($smsConfig);
|
|
||||||
return $SmsDriver->sendSms('order_pay', ['order_no' => $order['order_no']]);
|
// 分销商入驻通知
|
||||||
}
|
'dealer.apply' => 'app\common\service\message\dealer\Apply',
|
||||||
|
// 分销商提现通知
|
||||||
|
'dealer.withdraw' => 'app\common\service\message\dealer\Withdraw',
|
||||||
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 后台发货通知
|
* 发送消息通知
|
||||||
* @param \think\Model $order
|
* @param string $sceneName 场景名称
|
||||||
* @param int $orderType 订单类型 (10商城订单 20拼团订单)
|
* @param array $param 参数
|
||||||
* @return bool
|
* @return bool
|
||||||
// * @throws \app\common\exception\BaseException
|
|
||||||
// * @throws \think\Exception
|
|
||||||
// * @throws \think\exception\DbException
|
|
||||||
*/
|
*/
|
||||||
public function delivery($order, $orderType = OrderTypeEnum::MASTER)
|
public static function send($sceneName, $param)
|
||||||
{
|
{
|
||||||
return true;
|
if (!isset(self::$sceneList[$sceneName]))
|
||||||
// // 微信模板消息
|
return false;
|
||||||
// $template = SettingModel::getItem('tplMsg', $order['wxapp_id'])['delivery'];
|
$className = self::$sceneList[$sceneName];
|
||||||
// if (!$template['is_enable'] || empty($template['template_id'])) {
|
return class_exists($className) ? (new $className)->send($param) : false;
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// // 获取可用的formid
|
|
||||||
// if (!$formId = FormIdService::getAvailableFormId($order['user_id'])) {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// // 页面链接
|
|
||||||
// $urls = [
|
|
||||||
// OrderTypeEnum::MASTER => 'pages/order/detail',
|
|
||||||
// OrderTypeEnum::SHARING => 'pages/sharing/order/detail/detail',
|
|
||||||
// ];
|
|
||||||
// // 发送模板消息
|
|
||||||
// $status = $this->sendTemplateMessage($order['wxapp_id'], [
|
|
||||||
// 'touser' => $order['user']['open_id'],
|
|
||||||
// 'template_id' => $template['template_id'],
|
|
||||||
// 'page' => $urls[$orderType] . '?order_id=' . $order['order_id'],
|
|
||||||
// 'form_id' => $formId['form_id'],
|
|
||||||
// 'data' => [
|
|
||||||
// // 订单编号
|
|
||||||
// 'keyword1' => $order['order_no'],
|
|
||||||
// // 商品信息
|
|
||||||
// 'keyword2' => $this->formatGoodsName($order['goods']),
|
|
||||||
// // 收货人
|
|
||||||
// 'keyword3' => $order['address']['name'],
|
|
||||||
// // 收货地址
|
|
||||||
// 'keyword4' => implode('', $order['address']['region']) . $order['address']['detail'],
|
|
||||||
// // 物流公司
|
|
||||||
// 'keyword5' => $order['express']['express_name'],
|
|
||||||
// // 物流单号
|
|
||||||
// 'keyword6' => $order['express_no'],
|
|
||||||
// ]
|
|
||||||
// ]);
|
|
||||||
// // 标记formid已使用
|
|
||||||
// $status === true && FormIdService::setIsUsed($formId['id']);
|
|
||||||
// return $status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 后台售后单状态通知
|
|
||||||
* @param \think\Model $refund
|
|
||||||
* @param $order_no
|
|
||||||
* @param int $orderType 订单类型 (10商城订单 20拼团订单)
|
|
||||||
* @return bool
|
|
||||||
// * @throws \app\common\exception\BaseException
|
|
||||||
// * @throws \think\Exception
|
|
||||||
// * @throws \think\exception\DbException
|
|
||||||
*/
|
|
||||||
public function refund($refund, $order_no, $orderType = OrderTypeEnum::MASTER)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
// // 微信模板消息
|
|
||||||
// $template = SettingModel::getItem('tplMsg', $refund['wxapp_id'])['refund'];
|
|
||||||
// if (!$template['is_enable'] || empty($template['template_id'])) {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// // 获取可用的formid
|
|
||||||
// if (!$formId = FormIdService::getAvailableFormId($refund['user_id'])) {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// // 页面链接
|
|
||||||
// $urls = [
|
|
||||||
// OrderTypeEnum::MASTER => 'pages/order/refund/index',
|
|
||||||
// OrderTypeEnum::SHARING => 'pages/sharing/order/refund/index',
|
|
||||||
// ];
|
|
||||||
// // 发送模板消息
|
|
||||||
// $status = $this->sendTemplateMessage($refund['wxapp_id'], [
|
|
||||||
// 'touser' => $refund['user']['open_id'],
|
|
||||||
// 'template_id' => $template['template_id'],
|
|
||||||
// 'page' => $urls[$orderType],
|
|
||||||
// 'form_id' => $formId['form_id'],
|
|
||||||
// 'data' => [
|
|
||||||
// // 售后类型
|
|
||||||
// 'keyword1' => $refund['type']['text'],
|
|
||||||
// // 状态
|
|
||||||
// 'keyword2' => $refund['status']['text'],
|
|
||||||
// // 订单号
|
|
||||||
// 'keyword3' => $order_no,
|
|
||||||
// // 商品名称
|
|
||||||
// 'keyword4' => $refund['order_goods']['goods_name'],
|
|
||||||
// // 申请时间
|
|
||||||
// 'keyword5' => $refund['create_time'],
|
|
||||||
// // 申请原因
|
|
||||||
// 'keyword6' => $refund['apply_desc'],
|
|
||||||
// ]
|
|
||||||
// ]);
|
|
||||||
// // 标记formid已使用
|
|
||||||
// FormIdService::setIsUsed($formId['id']);
|
|
||||||
// return $status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 拼团拼单状态通知
|
|
||||||
* @param \app\common\model\sharing\Active $active
|
|
||||||
* @param string $status_text
|
|
||||||
* @return bool
|
|
||||||
// * @throws \app\common\exception\BaseException
|
|
||||||
// * @throws \think\exception\DbException
|
|
||||||
*/
|
|
||||||
public function sharingActive($active, $status_text)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
// // 微信模板消息
|
|
||||||
// $config = SharingSettingModel::getItem('basic', $active['wxapp_id']);
|
|
||||||
// if (empty($config['tpl_msg_id'])) {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// foreach ($active['users'] as $item) {
|
|
||||||
// // 获取可用的formid
|
|
||||||
// if (!$formId = FormIdService::getAvailableFormId($item['user']['user_id'])) {
|
|
||||||
// continue;
|
|
||||||
// }
|
|
||||||
// // 发送模板消息
|
|
||||||
// $this->sendTemplateMessage($active['wxapp_id'], [
|
|
||||||
// 'touser' => $item['user']['open_id'],
|
|
||||||
// 'template_id' => $config['tpl_msg_id'],
|
|
||||||
// 'page' => 'pages/sharing/active/index?active_id=' . $active['active_id'],
|
|
||||||
// 'form_id' => $formId['form_id'],
|
|
||||||
// 'data' => [
|
|
||||||
// // 订单编号
|
|
||||||
// 'keyword1' => $item['sharing_order']['order_no'],
|
|
||||||
// // 商品名称
|
|
||||||
// 'keyword2' => $active['goods']['goods_name'],
|
|
||||||
// // 拼团价格
|
|
||||||
// 'keyword3' => $item['sharing_order']['pay_price'],
|
|
||||||
// // 拼团人数
|
|
||||||
// 'keyword4' => $active['people'],
|
|
||||||
// // 拼团时间
|
|
||||||
// 'keyword5' => $item['create_time'],
|
|
||||||
// // 拼团结果
|
|
||||||
// 'keyword6' => $status_text,
|
|
||||||
// ]
|
|
||||||
// ]);
|
|
||||||
// // 标记formid已使用
|
|
||||||
// FormIdService::setIsUsed($formId['id']);
|
|
||||||
// }
|
|
||||||
// return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分销商提现审核通知
|
|
||||||
* @param \app\common\model\dealer\Withdraw $withdraw
|
|
||||||
* @return bool
|
|
||||||
// * @throws \app\common\exception\BaseException
|
|
||||||
// * @throws \think\exception\DbException
|
|
||||||
*/
|
|
||||||
public function withdraw($withdraw)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
// // 模板消息id
|
|
||||||
// $template = DealerSettingModel::getItem('template_msg', $withdraw['wxapp_id']);
|
|
||||||
// if (empty($template['withdraw_tpl'])) {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// // 获取可用的formid
|
|
||||||
// if (!$formId = FormIdService::getAvailableFormId($withdraw['user_id'])) {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// // 获取用户信息
|
|
||||||
// $user = UserModel::detail($withdraw['user_id']);
|
|
||||||
// // 发送模板消息
|
|
||||||
// $remark = '无';
|
|
||||||
// if ($withdraw['apply_status'] == 30) {
|
|
||||||
// $remark = $withdraw['reject_reason'];
|
|
||||||
// }
|
|
||||||
// $status = $this->sendTemplateMessage($withdraw['wxapp_id'], [
|
|
||||||
// 'touser' => $user['open_id'],
|
|
||||||
// 'template_id' => $template['withdraw_tpl'],
|
|
||||||
// 'page' => 'pages/dealer/withdraw/list/list',
|
|
||||||
// 'form_id' => $formId['form_id'],
|
|
||||||
// 'data' => [
|
|
||||||
// // 提现时间
|
|
||||||
// 'keyword1' => $withdraw['create_time'],
|
|
||||||
// // 提现方式
|
|
||||||
// 'keyword2' => $withdraw['pay_type']['text'],
|
|
||||||
// // 提现金额
|
|
||||||
// 'keyword3' => $withdraw['money'],
|
|
||||||
// // 提现状态
|
|
||||||
// 'keyword4' => $withdraw->applyStatus[$withdraw['apply_status']],
|
|
||||||
// // 备注
|
|
||||||
// 'keyword5' => $remark,
|
|
||||||
// ]
|
|
||||||
// ]);
|
|
||||||
// // 标记formid已使用
|
|
||||||
// FormIdService::setIsUsed($formId['id']);
|
|
||||||
// return $status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 分销商入驻审核通知
|
|
||||||
* @param \app\common\model\dealer\Apply $dealer
|
|
||||||
* @return bool
|
|
||||||
// * @throws \app\common\exception\BaseException
|
|
||||||
// * @throws \think\exception\DbException
|
|
||||||
*/
|
|
||||||
public function dealer($dealer)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
// // 模板消息id
|
|
||||||
// $template = DealerSettingModel::getItem('template_msg', $dealer['wxapp_id']);
|
|
||||||
// if (empty($template['apply_tpl'])) {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// // 获取可用的formid
|
|
||||||
// if (!$formId = FormIdService::getAvailableFormId($dealer['user_id'])) {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// // 获取用户信息
|
|
||||||
// $user = UserModel::detail($dealer['user_id']);
|
|
||||||
// // 发送模板消息
|
|
||||||
// $remark = '分销商入驻审核通知';
|
|
||||||
// if ($dealer['apply_status'] == 30) {
|
|
||||||
// $remark .= "\n\n驳回原因:" . $dealer['reject_reason'];
|
|
||||||
// }
|
|
||||||
// $status = $this->sendTemplateMessage($dealer['wxapp_id'], [
|
|
||||||
// 'touser' => $user['open_id'],
|
|
||||||
// 'template_id' => $template['apply_tpl'],
|
|
||||||
// 'page' => 'pages/dealer/index/index',
|
|
||||||
// 'form_id' => $formId['form_id'],
|
|
||||||
// 'data' => [
|
|
||||||
// // 申请时间
|
|
||||||
// 'keyword1' => $dealer['apply_time'],
|
|
||||||
// // 审核状态
|
|
||||||
// 'keyword2' => $dealer->applyStatus[$dealer['apply_status']],
|
|
||||||
// // 审核时间
|
|
||||||
// 'keyword3' => $dealer['audit_time'],
|
|
||||||
// // 备注信息
|
|
||||||
// 'keyword4' => $remark,
|
|
||||||
// ]
|
|
||||||
// ]);
|
|
||||||
// // 标记formid已使用
|
|
||||||
// FormIdService::setIsUsed($formId['id']);
|
|
||||||
// return $status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 发送模板消息
|
|
||||||
* @param $wxappId
|
|
||||||
* @param $params
|
|
||||||
* @return bool
|
|
||||||
* @throws \app\common\exception\BaseException
|
|
||||||
* @throws \think\exception\DbException
|
|
||||||
*/
|
|
||||||
private function sendTemplateMessage($wxappId, $params)
|
|
||||||
{
|
|
||||||
// 微信模板消息
|
|
||||||
$wxConfig = WxappModel::getWxappCache($wxappId);
|
|
||||||
$WxTplMsg = new WxTplMsg($wxConfig['app_id'], $wxConfig['app_secret']);
|
|
||||||
return $WxTplMsg->sendTemplateMessage($params);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 格式化商品名称
|
|
||||||
* @param $goodsData
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
private function formatGoodsName($goodsData)
|
|
||||||
{
|
|
||||||
$str = '';
|
|
||||||
foreach ($goodsData as $goods) {
|
|
||||||
$str .= $goods['goods_name'] . ' ';
|
|
||||||
}
|
|
||||||
return $str;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
71
source/application/common/service/message/Basics.php
Normal file
71
source/application/common/service/message/Basics.php
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\common\service\message;
|
||||||
|
|
||||||
|
use app\common\model\Wxapp as WxappModel;
|
||||||
|
use app\common\model\Setting as SettingModel;
|
||||||
|
use app\common\library\sms\Driver as SmsDriver;
|
||||||
|
use app\common\library\wechat\WxSubMsg;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息通知服务[基类]
|
||||||
|
* Class Basics
|
||||||
|
* @package app\common\service\message
|
||||||
|
*/
|
||||||
|
abstract class Basics extends \app\common\service\Basics
|
||||||
|
{
|
||||||
|
// 参数列表
|
||||||
|
protected $param = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送消息通知
|
||||||
|
* @param array $param 参数
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
abstract public function send($param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送短信提醒
|
||||||
|
* @param $msgType
|
||||||
|
* @param $templateParams
|
||||||
|
* @param $wxappId
|
||||||
|
* @return bool
|
||||||
|
* @throws \think\Exception
|
||||||
|
*/
|
||||||
|
protected function sendSms($msgType, $templateParams, $wxappId)
|
||||||
|
{
|
||||||
|
$smsConfig = SettingModel::getItem('sms', $wxappId);
|
||||||
|
return (new SmsDriver($smsConfig))->sendSms($msgType, $templateParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送微信订阅消息
|
||||||
|
* @param $wxappId
|
||||||
|
* @param $params
|
||||||
|
* @return mixed
|
||||||
|
* @throws \app\common\exception\BaseException
|
||||||
|
* @throws \think\Exception
|
||||||
|
* @throws \think\exception\DbException
|
||||||
|
*/
|
||||||
|
protected function sendWxSubMsg($wxappId, $params)
|
||||||
|
{
|
||||||
|
// 获取小程序配置
|
||||||
|
$wxConfig = WxappModel::getWxappCache($wxappId);
|
||||||
|
// 请求微信api执行发送
|
||||||
|
$WxSubMsg = new WxSubMsg($wxConfig['app_id'], $wxConfig['app_secret']);
|
||||||
|
return $WxSubMsg->sendTemplateMessage($params);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字符串截取前20字符
|
||||||
|
* [用于兼容thing数据类型]
|
||||||
|
* @param $content
|
||||||
|
* @param int $length
|
||||||
|
* @return bool|string
|
||||||
|
*/
|
||||||
|
protected function getSubstr($content, $length = 20)
|
||||||
|
{
|
||||||
|
return str_substr($content, $length);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
90
source/application/common/service/message/dealer/Apply.php
Normal file
90
source/application/common/service/message/dealer/Apply.php
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\common\service\message\dealer;
|
||||||
|
|
||||||
|
use app\common\service\message\Basics;
|
||||||
|
use app\common\model\Setting as SettingModel;
|
||||||
|
use app\common\enum\dealer\ApplyStatus as ApplyStatusEnum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息通知服务 [分销商入驻]
|
||||||
|
* Class Apply
|
||||||
|
* @package app\common\service\message\dealer
|
||||||
|
*/
|
||||||
|
class Apply extends Basics
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 参数列表
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $param = [
|
||||||
|
'apply' => [], // 申请记录
|
||||||
|
'user' => [], // 用户信息
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送消息通知
|
||||||
|
* @param array $param
|
||||||
|
* @return mixed|void
|
||||||
|
* @throws \think\Exception
|
||||||
|
*/
|
||||||
|
public function send($param)
|
||||||
|
{
|
||||||
|
// 记录参数
|
||||||
|
$this->param = $param;
|
||||||
|
// 微信订阅消息通知用户
|
||||||
|
$this->onSendWxSubMsg();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信订阅消息通知用户
|
||||||
|
* @return bool|mixed
|
||||||
|
* @throws \app\common\exception\BaseException
|
||||||
|
* @throws \think\Exception
|
||||||
|
* @throws \think\exception\DbException
|
||||||
|
*/
|
||||||
|
private function onSendWxSubMsg()
|
||||||
|
{
|
||||||
|
$applyInfo = $this->param['apply'];
|
||||||
|
$userInfo = $this->param['user'];
|
||||||
|
$wxappId = $applyInfo['wxapp_id'];
|
||||||
|
|
||||||
|
// 获取订阅消息配置
|
||||||
|
$template = SettingModel::getItem('submsg', $wxappId)['dealer']['apply'];
|
||||||
|
if (empty($template['template_id'])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送订阅消息
|
||||||
|
return $this->sendWxSubMsg($wxappId, [
|
||||||
|
'touser' => $userInfo['open_id'],
|
||||||
|
'template_id' => $template['template_id'],
|
||||||
|
'page' => 'pages/dealer/index/index',
|
||||||
|
'data' => [
|
||||||
|
// 申请时间
|
||||||
|
$template['keywords'][0] => ['value' => $applyInfo['apply_time']],
|
||||||
|
// 审核状态
|
||||||
|
$template['keywords'][1] => ['value' => ApplyStatusEnum::data()[$applyInfo['apply_status']]['name']],
|
||||||
|
// 审核时间
|
||||||
|
$template['keywords'][2] => ['value' => $applyInfo['audit_time']],
|
||||||
|
// 备注信息
|
||||||
|
$template['keywords'][3] => ['value' => $this->getRemarkValue($applyInfo)],
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注信息
|
||||||
|
* @param $applyInfo
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function getRemarkValue($applyInfo)
|
||||||
|
{
|
||||||
|
$remark = '分销商入驻审核通知';
|
||||||
|
if ($applyInfo['apply_status'] == 30) {
|
||||||
|
$remark .= "\n驳回原因:{$applyInfo['reject_reason']}";
|
||||||
|
}
|
||||||
|
return $this->getSubstr($remark);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
122
source/application/common/service/message/dealer/Withdraw.php
Normal file
122
source/application/common/service/message/dealer/Withdraw.php
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\common\service\message\dealer;
|
||||||
|
|
||||||
|
use app\common\service\message\Basics;
|
||||||
|
use app\common\model\Setting as SettingModel;
|
||||||
|
use app\common\enum\dealer\withdraw\ApplyStatus as ApplyStatusEnum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息通知服务 [分销商提现]
|
||||||
|
* Class Withdraw
|
||||||
|
* @package app\common\service\message\dealer
|
||||||
|
*/
|
||||||
|
class Withdraw extends Basics
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 参数列表
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $param = [
|
||||||
|
'withdraw' => [], // 提现记录
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送消息通知
|
||||||
|
* @param array $param
|
||||||
|
* @return mixed|void
|
||||||
|
* @throws \think\Exception
|
||||||
|
*/
|
||||||
|
public function send($param)
|
||||||
|
{
|
||||||
|
// 记录参数
|
||||||
|
$this->param = $param;
|
||||||
|
// 微信订阅消息通知用户
|
||||||
|
$this->onSendWxSubMsg();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信订阅消息通知用户
|
||||||
|
* @return bool|mixed
|
||||||
|
* @throws \app\common\exception\BaseException
|
||||||
|
* @throws \think\Exception
|
||||||
|
* @throws \think\exception\DbException
|
||||||
|
*/
|
||||||
|
private function onSendWxSubMsg()
|
||||||
|
{
|
||||||
|
$withdrawInfo = $this->param['withdraw'];
|
||||||
|
$userInfo = $this->param['user'];
|
||||||
|
$wxappId = $withdrawInfo['wxapp_id'];
|
||||||
|
|
||||||
|
// 根据提现状态获取对应的消息模板
|
||||||
|
$template = $this->getTemplateByStatus($withdrawInfo);
|
||||||
|
if ($template === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送订阅消息
|
||||||
|
return $this->sendWxSubMsg($wxappId, [
|
||||||
|
'touser' => $userInfo['open_id'],
|
||||||
|
'template_id' => $template['template_id'],
|
||||||
|
'page' => 'pages/dealer/index/index',
|
||||||
|
'data' => $this->getTemplateData($withdrawInfo, $template)
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成消息内容
|
||||||
|
* @param $withdrawInfo
|
||||||
|
* @param $template
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
private function getTemplateData($withdrawInfo, $template)
|
||||||
|
{
|
||||||
|
if ($withdrawInfo['apply_status'] == ApplyStatusEnum::AUDIT_PASS) {
|
||||||
|
return [
|
||||||
|
// 提现金额
|
||||||
|
$template['keywords'][0] => ['value' => $withdrawInfo['money']],
|
||||||
|
// 打款方式
|
||||||
|
$template['keywords'][1] => ['value' => $withdrawInfo['pay_type']['text']],
|
||||||
|
// 打款原因
|
||||||
|
$template['keywords'][2] => ['value' => '分销商提现'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
if ($withdrawInfo['apply_status'] == ApplyStatusEnum::AUDIT_REJECT) {
|
||||||
|
return [
|
||||||
|
// 提现金额
|
||||||
|
$template['keywords'][0] => ['value' => $withdrawInfo['money']],
|
||||||
|
// 申请时间
|
||||||
|
$template['keywords'][1] => ['value' => $withdrawInfo['create_time']],
|
||||||
|
// 原因
|
||||||
|
$template['keywords'][2] => ['value' => $this->getSubstr($withdrawInfo['reject_reason'])],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据提现状态获取对应的消息模板
|
||||||
|
* @param $withdrawInfo
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
private function getTemplateByStatus($withdrawInfo)
|
||||||
|
{
|
||||||
|
$wxappId = $withdrawInfo['wxapp_id'];
|
||||||
|
// 获取订阅消息配置
|
||||||
|
$templateGroup = SettingModel::getItem('submsg', $wxappId)['dealer'];
|
||||||
|
if (
|
||||||
|
$withdrawInfo['apply_status'] == ApplyStatusEnum::AUDIT_PASS
|
||||||
|
&& !empty($templateGroup['withdraw_01']['template_id'])
|
||||||
|
) {
|
||||||
|
return $templateGroup['withdraw_01'];
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
$withdrawInfo['apply_status'] == ApplyStatusEnum::AUDIT_REJECT
|
||||||
|
&& !empty($templateGroup['withdraw_02']['template_id'])
|
||||||
|
) {
|
||||||
|
return $templateGroup['withdraw_02'];
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
116
source/application/common/service/message/order/Delivery.php
Normal file
116
source/application/common/service/message/order/Delivery.php
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\common\service\message\order;
|
||||||
|
|
||||||
|
use app\common\service\message\Basics;
|
||||||
|
use app\common\model\Setting as SettingModel;
|
||||||
|
use app\common\enum\OrderType as OrderTypeEnum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息通知服务 [订单发货]
|
||||||
|
* Class Delivery
|
||||||
|
* @package app\common\service\message\order
|
||||||
|
*/
|
||||||
|
class Delivery extends Basics
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 参数列表
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $param = [
|
||||||
|
'order' => [],
|
||||||
|
'order_type' => OrderTypeEnum::MASTER,
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单页面链接
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $pageUrl = [
|
||||||
|
OrderTypeEnum::MASTER => 'pages/order/detail',
|
||||||
|
OrderTypeEnum::SHARING => 'pages/sharing/order/detail/detail',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送消息通知
|
||||||
|
* @param array $param
|
||||||
|
* @return mixed|void
|
||||||
|
* @throws \think\Exception
|
||||||
|
*/
|
||||||
|
public function send($param)
|
||||||
|
{
|
||||||
|
// 记录参数
|
||||||
|
$this->param = $param;
|
||||||
|
// 微信订阅消息通知用户
|
||||||
|
$this->onSendWxSubMsg();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信订阅消息通知用户
|
||||||
|
* @return bool|mixed
|
||||||
|
* @throws \app\common\exception\BaseException
|
||||||
|
* @throws \think\Exception
|
||||||
|
* @throws \think\exception\DbException
|
||||||
|
*/
|
||||||
|
private function onSendWxSubMsg()
|
||||||
|
{
|
||||||
|
$orderInfo = $this->param['order'];
|
||||||
|
$orderType = $this->param['order_type'];
|
||||||
|
$wxappId = $orderInfo['wxapp_id'];
|
||||||
|
|
||||||
|
// 获取订阅消息配置
|
||||||
|
$template = SettingModel::getItem('submsg', $wxappId)['order']['delivery'];
|
||||||
|
if (empty($template['template_id'])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送订阅消息
|
||||||
|
return $this->sendWxSubMsg($wxappId, [
|
||||||
|
'touser' => $orderInfo['user']['open_id'],
|
||||||
|
'template_id' => $template['template_id'],
|
||||||
|
'page' => "{$this->pageUrl[$orderType]}?order_id={$orderInfo['order_id']}",
|
||||||
|
'data' => [
|
||||||
|
// 订单号
|
||||||
|
$template['keywords'][0] => ['value' => $orderInfo['order_no']],
|
||||||
|
// 商品名称
|
||||||
|
$template['keywords'][1] => ['value' => $this->getFormatGoodsName($orderInfo['goods'])],
|
||||||
|
// 收货人
|
||||||
|
$template['keywords'][2] => ['value' => $orderInfo['address']['name']],
|
||||||
|
// 收货地址
|
||||||
|
$template['keywords'][3] => ['value' => $this->getFormatAddress($orderInfo)],
|
||||||
|
// 物流公司
|
||||||
|
$template['keywords'][4] => ['value' => $this->getFormatExpressName($orderInfo)],
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式化物流公司
|
||||||
|
* @param $orderInfo
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
private function getFormatExpressName($orderInfo)
|
||||||
|
{
|
||||||
|
return $this->getSubstr($orderInfo['express']['express_name']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式化用户收货地址
|
||||||
|
* @param $orderInfo
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function getFormatAddress($orderInfo)
|
||||||
|
{
|
||||||
|
return implode('', $orderInfo['address']['region']) . $orderInfo['address']['detail'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式化商品名称
|
||||||
|
* @param $goodsData
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function getFormatGoodsName($goodsData)
|
||||||
|
{
|
||||||
|
return $this->getSubstr($goodsData[0]['goods_name']);
|
||||||
|
}
|
||||||
|
}
|
107
source/application/common/service/message/order/Payment.php
Normal file
107
source/application/common/service/message/order/Payment.php
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\common\service\message\order;
|
||||||
|
|
||||||
|
use app\common\service\message\Basics;
|
||||||
|
use app\common\model\Setting as SettingModel;
|
||||||
|
use app\common\enum\OrderType as OrderTypeEnum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息通知服务 [订单支付成功]
|
||||||
|
* Class Payment
|
||||||
|
* @package app\common\service\message\order
|
||||||
|
*/
|
||||||
|
class Payment extends Basics
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 参数列表
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $param = [
|
||||||
|
'order' => [],
|
||||||
|
'order_type' => OrderTypeEnum::MASTER,
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单页面链接
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $pageUrl = [
|
||||||
|
OrderTypeEnum::MASTER => 'pages/order/detail',
|
||||||
|
OrderTypeEnum::SHARING => 'pages/sharing/order/detail/detail',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送消息通知
|
||||||
|
* @param array $param
|
||||||
|
* @return mixed|void
|
||||||
|
* @throws \think\Exception
|
||||||
|
*/
|
||||||
|
public function send($param)
|
||||||
|
{
|
||||||
|
// 记录参数
|
||||||
|
$this->param = $param;
|
||||||
|
// 短信通知商家
|
||||||
|
$this->onSendSms();
|
||||||
|
// 微信订阅消息通知用户
|
||||||
|
$this->onSendWxSubMsg();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 短信通知商家
|
||||||
|
* @return bool
|
||||||
|
* @throws \think\Exception
|
||||||
|
*/
|
||||||
|
private function onSendSms()
|
||||||
|
{
|
||||||
|
$orderInfo = $this->param['order'];
|
||||||
|
$wxappId = $orderInfo['wxapp_id'];
|
||||||
|
return $this->sendSms('order_pay', ['order_no' => $orderInfo['order_no']], $wxappId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信订阅消息通知用户
|
||||||
|
* @return bool|mixed
|
||||||
|
* @throws \app\common\exception\BaseException
|
||||||
|
* @throws \think\Exception
|
||||||
|
* @throws \think\exception\DbException
|
||||||
|
*/
|
||||||
|
private function onSendWxSubMsg()
|
||||||
|
{
|
||||||
|
$orderInfo = $this->param['order'];
|
||||||
|
$orderType = $this->param['order_type'];
|
||||||
|
$wxappId = $orderInfo['wxapp_id'];
|
||||||
|
|
||||||
|
// 获取订阅消息配置
|
||||||
|
$template = SettingModel::getItem('submsg', $wxappId)['order']['payment'];
|
||||||
|
if (empty($template['template_id'])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// 发送订阅消息
|
||||||
|
return $this->sendWxSubMsg($wxappId, [
|
||||||
|
'touser' => $orderInfo['user']['open_id'],
|
||||||
|
'template_id' => $template['template_id'],
|
||||||
|
'page' => "{$this->pageUrl[$orderType]}?order_id={$orderInfo['order_id']}",
|
||||||
|
'data' => [
|
||||||
|
// 订单编号
|
||||||
|
$template['keywords'][0] => ['value' => $orderInfo['order_no']],
|
||||||
|
// 下单时间
|
||||||
|
$template['keywords'][1] => ['value' => format_time($orderInfo['pay_time'])],
|
||||||
|
// 订单金额
|
||||||
|
$template['keywords'][2] => ['value' => $orderInfo['pay_price']],
|
||||||
|
// 商品名称
|
||||||
|
$template['keywords'][3] => ['value' => $this->getFormatGoodsName($orderInfo['goods'])],
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 格式化商品名称
|
||||||
|
* @param $goodsData
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function getFormatGoodsName($goodsData)
|
||||||
|
{
|
||||||
|
return $this->getSubstr($goodsData[0]['goods_name']);
|
||||||
|
}
|
||||||
|
}
|
89
source/application/common/service/message/order/Refund.php
Normal file
89
source/application/common/service/message/order/Refund.php
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\common\service\message\order;
|
||||||
|
|
||||||
|
use app\common\service\message\Basics;
|
||||||
|
use app\common\model\Setting as SettingModel;
|
||||||
|
use app\common\enum\OrderType as OrderTypeEnum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息通知服务 [订单售后]
|
||||||
|
* Class Refund
|
||||||
|
* @package app\common\service\message\order
|
||||||
|
*/
|
||||||
|
class Refund extends Basics
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 参数列表
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $param = [
|
||||||
|
'refund' => [], // 退款单信息
|
||||||
|
'order_no' => [], // 订单信息
|
||||||
|
'order_type' => OrderTypeEnum::MASTER, // 订单类型
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单页面链接
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $pageUrl = [
|
||||||
|
OrderTypeEnum::MASTER => 'pages/order/refund/index',
|
||||||
|
OrderTypeEnum::SHARING => 'pages/sharing/order/refund/index',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送消息通知
|
||||||
|
* @param array $param
|
||||||
|
* @return mixed|void
|
||||||
|
* @throws \think\Exception
|
||||||
|
*/
|
||||||
|
public function send($param)
|
||||||
|
{
|
||||||
|
// 记录参数
|
||||||
|
$this->param = $param;
|
||||||
|
// 微信订阅消息通知用户
|
||||||
|
$this->onSendWxSubMsg();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信订阅消息通知用户
|
||||||
|
* @return bool|mixed
|
||||||
|
* @throws \app\common\exception\BaseException
|
||||||
|
* @throws \think\Exception
|
||||||
|
* @throws \think\exception\DbException
|
||||||
|
*/
|
||||||
|
private function onSendWxSubMsg()
|
||||||
|
{
|
||||||
|
$refundInfo = $this->param['refund'];
|
||||||
|
$orderNo = $this->param['order_no'];
|
||||||
|
$orderType = $this->param['order_type'];
|
||||||
|
$wxappId = $refundInfo['wxapp_id'];
|
||||||
|
|
||||||
|
// 获取订阅消息配置
|
||||||
|
$template = SettingModel::getItem('submsg', $wxappId)['order']['refund'];
|
||||||
|
if (empty($template['template_id'])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送订阅消息
|
||||||
|
return $this->sendWxSubMsg($wxappId, [
|
||||||
|
'touser' => $refundInfo['user']['open_id'],
|
||||||
|
'template_id' => $template['template_id'],
|
||||||
|
'page' => "{$this->pageUrl[$orderType]}",
|
||||||
|
'data' => [
|
||||||
|
// 售后类型
|
||||||
|
$template['keywords'][0] => ['value' => $refundInfo['type']['text']],
|
||||||
|
// 状态
|
||||||
|
$template['keywords'][1] => ['value' => $refundInfo['status']['text']],
|
||||||
|
// 订单编号
|
||||||
|
$template['keywords'][2] => ['value' => $orderNo],
|
||||||
|
// 申请时间
|
||||||
|
$template['keywords'][3] => ['value' => $refundInfo['create_time']],
|
||||||
|
// 申请原因
|
||||||
|
$template['keywords'][4] => ['value' => $this->getSubstr($refundInfo['apply_desc'])],
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,82 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\common\service\message\sharing;
|
||||||
|
|
||||||
|
use app\common\service\message\Basics;
|
||||||
|
use app\common\model\Setting as SettingModel;
|
||||||
|
use app\common\enum\sharing\ActiveStatus as ActiveStatusEnum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息通知服务 [拼团进度]
|
||||||
|
* Class ActiveStatus
|
||||||
|
* @package app\common\service\message\sharing
|
||||||
|
*/
|
||||||
|
class ActiveStatus extends Basics
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 参数列表
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $param = [
|
||||||
|
'active' => [], // 拼单详情
|
||||||
|
'status' => false, // 拼单状态
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送消息通知
|
||||||
|
* @param array $param
|
||||||
|
* @return mixed|void
|
||||||
|
* @throws \think\Exception
|
||||||
|
*/
|
||||||
|
public function send($param)
|
||||||
|
{
|
||||||
|
// 记录参数
|
||||||
|
$this->param = $param;
|
||||||
|
// 微信订阅消息通知用户
|
||||||
|
$this->onSendWxSubMsg();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信订阅消息通知用户
|
||||||
|
* @return bool
|
||||||
|
* @throws \app\common\exception\BaseException
|
||||||
|
* @throws \think\Exception
|
||||||
|
* @throws \think\exception\DbException
|
||||||
|
*/
|
||||||
|
private function onSendWxSubMsg()
|
||||||
|
{
|
||||||
|
// 拼单详情
|
||||||
|
$activeInfo = $this->param['active'];
|
||||||
|
$status = $this->param['status'];
|
||||||
|
$wxappId = $activeInfo['wxapp_id'];
|
||||||
|
|
||||||
|
// 获取订阅消息配置
|
||||||
|
$template = SettingModel::getItem('submsg', $wxappId)['sharing']['active_status'];
|
||||||
|
if (empty($template['template_id'])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// 发送订阅消息
|
||||||
|
foreach ($activeInfo['users'] as $item) {
|
||||||
|
$this->sendWxSubMsg($wxappId, [
|
||||||
|
'touser' => $item['user']['open_id'],
|
||||||
|
'template_id' => $template['template_id'],
|
||||||
|
'page' => "pages/sharing/active/index?active_id={$activeInfo['active_id']}",
|
||||||
|
'data' => [
|
||||||
|
// 拼团商品
|
||||||
|
$template['keywords'][0] => ['value' => str_substr($activeInfo['goods']['goods_name'], 20)],
|
||||||
|
// 拼团价格
|
||||||
|
$template['keywords'][1] => ['value' => $item['sharing_order']['pay_price']],
|
||||||
|
// 成团人数
|
||||||
|
$template['keywords'][2] => ['value' => $activeInfo['people']],
|
||||||
|
// 拼团进度
|
||||||
|
$template['keywords'][3] => ['value' => "已有{$activeInfo['actual_people']}人参与"],
|
||||||
|
// 温馨提示
|
||||||
|
$template['keywords'][4] => ['value' => ActiveStatusEnum::data()[$status]['name']],
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -25,7 +25,7 @@ class Refund
|
|||||||
* @throws \think\exception\DbException
|
* @throws \think\exception\DbException
|
||||||
* @throws \app\common\exception\BaseException
|
* @throws \app\common\exception\BaseException
|
||||||
*/
|
*/
|
||||||
public function execute(&$order, $money = null)
|
public function execute($order, $money = null)
|
||||||
{
|
{
|
||||||
// 退款金额,如不指定则默认为订单实付款金额
|
// 退款金额,如不指定则默认为订单实付款金额
|
||||||
is_null($money) && $money = $order['pay_price'];
|
is_null($money) && $money = $order['pay_price'];
|
||||||
|
@ -44,7 +44,7 @@ class Setting extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 模板消息
|
* 发送订阅消息
|
||||||
* @return mixed
|
* @return mixed
|
||||||
* @throws \think\exception\DbException
|
* @throws \think\exception\DbException
|
||||||
*/
|
*/
|
||||||
|
@ -29,10 +29,8 @@ class Apply extends Controller
|
|||||||
/**
|
/**
|
||||||
* 分销商审核
|
* 分销商审核
|
||||||
* @param $apply_id
|
* @param $apply_id
|
||||||
* @return array
|
* @return array|bool
|
||||||
* @throws \app\common\exception\BaseException
|
|
||||||
* @throws \think\exception\DbException
|
* @throws \think\exception\DbException
|
||||||
* @throws \think\exception\PDOException
|
|
||||||
*/
|
*/
|
||||||
public function submit($apply_id)
|
public function submit($apply_id)
|
||||||
{
|
{
|
||||||
|
@ -33,7 +33,6 @@ class Withdraw extends Controller
|
|||||||
* 提现审核
|
* 提现审核
|
||||||
* @param $id
|
* @param $id
|
||||||
* @return array
|
* @return array
|
||||||
* @throws \app\common\exception\BaseException
|
|
||||||
* @throws \think\exception\DbException
|
* @throws \think\exception\DbException
|
||||||
*/
|
*/
|
||||||
public function submit($id)
|
public function submit($id)
|
||||||
@ -65,6 +64,7 @@ class Withdraw extends Controller
|
|||||||
* @param $id
|
* @param $id
|
||||||
* @return array|bool
|
* @return array|bool
|
||||||
* @throws \app\common\exception\BaseException
|
* @throws \app\common\exception\BaseException
|
||||||
|
* @throws \think\Exception
|
||||||
* @throws \think\exception\DbException
|
* @throws \think\exception\DbException
|
||||||
*/
|
*/
|
||||||
public function wechat_pay($id)
|
public function wechat_pay($id)
|
||||||
|
@ -49,7 +49,7 @@ class Room extends Controller
|
|||||||
*/
|
*/
|
||||||
public function settop($room_id, $is_top)
|
public function settop($room_id, $is_top)
|
||||||
{
|
{
|
||||||
// 商品详情
|
// 直播间详情
|
||||||
$model = LiveRoomModel::detail($room_id);
|
$model = LiveRoomModel::detail($room_id);
|
||||||
if (!$model->setIsTop($is_top)) {
|
if (!$model->setIsTop($is_top)) {
|
||||||
return $this->renderError('操作失败');
|
return $this->renderError('操作失败');
|
||||||
|
@ -7,7 +7,7 @@ use app\store\model\wxapp\Formid as FormidModel;
|
|||||||
use app\store\service\wxapp\Message as MessageService;
|
use app\store\service\wxapp\Message as MessageService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 消息推送
|
* 消息推送 (废弃)
|
||||||
* Class Push
|
* Class Push
|
||||||
* @package app\store\controller\market
|
* @package app\store\controller\market
|
||||||
*/
|
*/
|
||||||
@ -17,6 +17,7 @@ class Push extends Controller
|
|||||||
* 发送消息
|
* 发送消息
|
||||||
* @return array|mixed
|
* @return array|mixed
|
||||||
* @throws \app\common\exception\BaseException
|
* @throws \app\common\exception\BaseException
|
||||||
|
* @throws \think\Exception
|
||||||
* @throws \think\exception\DbException
|
* @throws \think\exception\DbException
|
||||||
*/
|
*/
|
||||||
public function send()
|
public function send()
|
||||||
|
50
source/application/store/controller/wxapp/Submsg.php
Normal file
50
source/application/store/controller/wxapp/Submsg.php
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\store\controller\wxapp;
|
||||||
|
|
||||||
|
use app\store\controller\Controller;
|
||||||
|
use app\store\model\Setting as SettingModel;
|
||||||
|
use app\store\service\wxapp\SubMsg as SubMsgService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序订阅消息设置
|
||||||
|
* Class Submsg
|
||||||
|
* @package app\store\controller\wxapp
|
||||||
|
*/
|
||||||
|
class Submsg extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 小程序订阅消息设置
|
||||||
|
* @return array|bool|mixed
|
||||||
|
* @throws \think\exception\DbException
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
if (!$this->request->isAjax()) {
|
||||||
|
$values = SettingModel::getItem('submsg');
|
||||||
|
return $this->fetch('index', compact('values'));
|
||||||
|
}
|
||||||
|
$model = new SettingModel;
|
||||||
|
if ($model->edit('submsg', $this->postData('submsg'))) {
|
||||||
|
return $this->renderSuccess('操作成功');
|
||||||
|
}
|
||||||
|
return $this->renderError($model->getError() ?: '操作失败');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 一键添加订阅消息
|
||||||
|
* @return array
|
||||||
|
* @throws \app\common\exception\BaseException
|
||||||
|
* @throws \think\Exception
|
||||||
|
* @throws \think\exception\DbException
|
||||||
|
*/
|
||||||
|
public function shuttle()
|
||||||
|
{
|
||||||
|
$SubMsgService = new SubMsgService;
|
||||||
|
if ($SubMsgService->shuttle()) {
|
||||||
|
return $this->renderSuccess('操作成功');
|
||||||
|
}
|
||||||
|
return $this->renderError($SubMsgService->getError() ?: '操作失败');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -360,6 +360,13 @@ return [
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'name' => '订阅消息',
|
||||||
|
'index' => 'wxapp.submsg/index',
|
||||||
|
'uris' => [
|
||||||
|
'wxapp.submsg/index',
|
||||||
|
]
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'name' => '帮助中心',
|
'name' => '帮助中心',
|
||||||
'index' => 'wxapp.help/index',
|
'index' => 'wxapp.help/index',
|
||||||
@ -607,15 +614,15 @@ return [
|
|||||||
'name' => '短信通知',
|
'name' => '短信通知',
|
||||||
'index' => 'setting/sms'
|
'index' => 'setting/sms'
|
||||||
],
|
],
|
||||||
[
|
// [
|
||||||
'name' => '模板消息',
|
// 'name' => '模板消息',
|
||||||
'index' => 'setting/tplmsg',
|
// 'index' => 'setting/tplmsg',
|
||||||
'uris' => [
|
// 'uris' => [
|
||||||
'setting/tplmsg',
|
// 'setting/tplmsg',
|
||||||
'setting.help/tplmsg'
|
// 'setting.help/tplmsg'
|
||||||
|
//
|
||||||
],
|
// ],
|
||||||
],
|
// ],
|
||||||
[
|
[
|
||||||
'name' => '退货地址',
|
'name' => '退货地址',
|
||||||
'index' => 'setting.address/index',
|
'index' => 'setting.address/index',
|
||||||
|
@ -249,19 +249,17 @@ class Order extends OrderModel
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 确认发货后发送消息通知
|
* 确认发货后发送消息通知
|
||||||
* @param array|\think\Collection $orderList
|
* @param $orderList
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws \app\common\exception\BaseException
|
|
||||||
* @throws \think\Exception
|
|
||||||
* @throws \think\exception\DbException
|
|
||||||
*/
|
*/
|
||||||
private function sendDeliveryMessage($orderList)
|
private function sendDeliveryMessage($orderList)
|
||||||
{
|
{
|
||||||
// 实例化消息通知服务类
|
|
||||||
$Service = new MessageService;
|
|
||||||
foreach ($orderList as $item) {
|
|
||||||
// 发送消息通知
|
// 发送消息通知
|
||||||
$Service->delivery($item, OrderTypeEnum::MASTER);
|
foreach ($orderList as $item) {
|
||||||
|
MessageService::send('order.delivery', [
|
||||||
|
'order' => $item,
|
||||||
|
'order_type' => OrderTypeEnum::MASTER,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,6 @@ class OrderRefund extends OrderRefundModel
|
|||||||
* 商家审核
|
* 商家审核
|
||||||
* @param $data
|
* @param $data
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws \think\exception\PDOException
|
|
||||||
*/
|
*/
|
||||||
public function audit($data)
|
public function audit($data)
|
||||||
{
|
{
|
||||||
@ -71,8 +70,7 @@ class OrderRefund extends OrderRefundModel
|
|||||||
$this->error = '请选择退货地址';
|
$this->error = '请选择退货地址';
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$this->startTrans();
|
$this->transaction(function () use ($data) {
|
||||||
try {
|
|
||||||
// 拒绝申请, 标记售后单状态为已拒绝
|
// 拒绝申请, 标记售后单状态为已拒绝
|
||||||
$data['is_agree'] == 20 && $data['status'] = 10;
|
$data['is_agree'] == 20 && $data['status'] = 10;
|
||||||
// 同意换货申请, 标记售后单状态为已完成
|
// 同意换货申请, 标记售后单状态为已完成
|
||||||
@ -81,21 +79,18 @@ class OrderRefund extends OrderRefundModel
|
|||||||
$this->allowField(true)->save($data);
|
$this->allowField(true)->save($data);
|
||||||
// 同意售后申请, 记录退货地址
|
// 同意售后申请, 记录退货地址
|
||||||
if ($data['is_agree'] == 10) {
|
if ($data['is_agree'] == 10) {
|
||||||
$model = new OrderRefundAddress;
|
(new OrderRefundAddress)->add($this['order_refund_id'], $data['address_id']);
|
||||||
$model->add($this['order_refund_id'], $data['address_id']);
|
|
||||||
}
|
}
|
||||||
// 订单详情
|
// 订单详情
|
||||||
$order = Order::detail($this['order_id']);
|
$order = Order::detail($this['order_id']);
|
||||||
// 发送模板消息
|
// 发送消息通知
|
||||||
(new MessageService)->refund(self::detail($this['order_refund_id']), $order['order_no'], OrderTypeEnum::MASTER);
|
MessageService::send('order.refund', [
|
||||||
// 事务提交
|
'refund' => $this, // 退款单信息
|
||||||
$this->commit();
|
'order_no' => $order['order_no'], // 订单信息
|
||||||
|
'order_type' => OrderTypeEnum::MASTER, // 订单类型
|
||||||
|
]);
|
||||||
|
});
|
||||||
return true;
|
return true;
|
||||||
} catch (\Exception $e) {
|
|
||||||
$this->error = $e->getMessage();
|
|
||||||
$this->rollback();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -126,8 +121,12 @@ class OrderRefund extends OrderRefundModel
|
|||||||
}
|
}
|
||||||
// 执行原路退款
|
// 执行原路退款
|
||||||
(new RefundService)->execute($order, $data['refund_money']);
|
(new RefundService)->execute($order, $data['refund_money']);
|
||||||
// 发送模板消息
|
// 发送消息通知
|
||||||
(new MessageService)->refund(self::detail($this['order_refund_id']), $order['order_no'], OrderTypeEnum::MASTER);
|
MessageService::send('order.refund', [
|
||||||
|
'refund' => $this, // 退款单信息
|
||||||
|
'order_no' => $order['order_no'], // 订单信息
|
||||||
|
'order_type' => OrderTypeEnum::MASTER, // 订单类型
|
||||||
|
]);
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
namespace app\store\model;
|
namespace app\store\model;
|
||||||
|
|
||||||
use app\common\model\Wxapp as WxappModel;
|
|
||||||
use think\Cache;
|
use think\Cache;
|
||||||
|
use app\common\model\Wxapp as WxappModel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 微信小程序模型
|
* 微信小程序模型
|
||||||
@ -65,40 +65,6 @@ class Wxapp extends WxappModel
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 记录图片信息
|
|
||||||
* @param $wxapp_id
|
|
||||||
* @param $oldFileId
|
|
||||||
* @param $newFileName
|
|
||||||
* @param $fromType
|
|
||||||
* @return int|mixed
|
|
||||||
*/
|
|
||||||
private function uploadImage($wxapp_id, $oldFileId, $newFileName, $fromType)
|
|
||||||
{
|
|
||||||
// $UploadFile = new UploadFile;
|
|
||||||
$UploadFileUsed = new UploadFileUsed;
|
|
||||||
if ($oldFileId > 0) {
|
|
||||||
// 获取原图片path
|
|
||||||
$oldFileName = UploadFile::getFileName($oldFileId);
|
|
||||||
// 新文件与原来路径一致, 代表用户未修改, 不做更新
|
|
||||||
if ($newFileName === $oldFileName)
|
|
||||||
return $oldFileId;
|
|
||||||
// 删除原文件使用记录
|
|
||||||
$UploadFileUsed->remove('service', $oldFileId);
|
|
||||||
}
|
|
||||||
// 删除图片
|
|
||||||
if (empty($newFileName)) return 0;
|
|
||||||
// 查询新文件file_id
|
|
||||||
$fileId = UploadFile::getFildIdByName($newFileName);
|
|
||||||
// 添加文件使用记录
|
|
||||||
$UploadFileUsed->add([
|
|
||||||
'file_id' => $fileId,
|
|
||||||
'wxapp_id' => $wxapp_id,
|
|
||||||
'from_type' => $fromType
|
|
||||||
]);
|
|
||||||
return $fileId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除wxapp缓存
|
* 删除wxapp缓存
|
||||||
* @return bool
|
* @return bool
|
||||||
|
@ -3,7 +3,8 @@
|
|||||||
namespace app\store\model\dealer;
|
namespace app\store\model\dealer;
|
||||||
|
|
||||||
use app\common\model\dealer\Apply as ApplyModel;
|
use app\common\model\dealer\Apply as ApplyModel;
|
||||||
use app\common\service\Message;
|
use app\common\service\Message as MessageService;
|
||||||
|
use app\common\enum\dealer\ApplyStatus as ApplyStatusEnum;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分销商入驻申请模型
|
* 分销商入驻申请模型
|
||||||
@ -38,18 +39,15 @@ class Apply extends ApplyModel
|
|||||||
* 分销商入驻审核
|
* 分销商入驻审核
|
||||||
* @param $data
|
* @param $data
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws \app\common\exception\BaseException
|
|
||||||
* @throws \think\exception\DbException
|
|
||||||
* @throws \think\exception\PDOException
|
|
||||||
*/
|
*/
|
||||||
public function submit($data)
|
public function submit($data)
|
||||||
{
|
{
|
||||||
if ($data['apply_status'] == '30' && empty($data['reject_reason'])) {
|
if ($data['apply_status'] == ApplyStatusEnum::AUDIT_REJECT && empty($data['reject_reason'])) {
|
||||||
$this->error = '请填写驳回原因';
|
$this->error = '请填写驳回原因';
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$this->startTrans();
|
$this->transaction(function () use ($data) {
|
||||||
if ($data['apply_status'] == '20') {
|
if ($data['apply_status'] == ApplyStatusEnum::AUDIT_PASS) {
|
||||||
// 新增分销商用户
|
// 新增分销商用户
|
||||||
User::add($this['user_id'], [
|
User::add($this['user_id'], [
|
||||||
'real_name' => $this['real_name'],
|
'real_name' => $this['real_name'],
|
||||||
@ -60,9 +58,12 @@ class Apply extends ApplyModel
|
|||||||
// 更新申请记录
|
// 更新申请记录
|
||||||
$data['audit_time'] = time();
|
$data['audit_time'] = time();
|
||||||
$this->allowField(true)->save($data);
|
$this->allowField(true)->save($data);
|
||||||
// 发送模板消息
|
// 发送订阅消息
|
||||||
(new Message)->dealer($this);
|
MessageService::send('dealer.apply', [
|
||||||
$this->commit();
|
'apply' => $this, // 申请记录
|
||||||
|
'user' => $this['user'], // 用户信息
|
||||||
|
]);
|
||||||
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,6 @@ class Setting extends SettingModel
|
|||||||
'words' => '自定义文字',
|
'words' => '自定义文字',
|
||||||
'license' => '申请协议',
|
'license' => '申请协议',
|
||||||
'background' => '页面背景图',
|
'background' => '页面背景图',
|
||||||
'template_msg' => '模板消息',
|
|
||||||
'qrcode' => '分销海报',
|
'qrcode' => '分销海报',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -2,11 +2,13 @@
|
|||||||
|
|
||||||
namespace app\store\model\dealer;
|
namespace app\store\model\dealer;
|
||||||
|
|
||||||
use app\common\service\Message;
|
use app\store\model\User as UserModel;
|
||||||
use app\common\service\Order as OrderService;
|
|
||||||
use app\common\library\wechat\WxPay;
|
|
||||||
use app\store\model\Wxapp as WxappModel;
|
use app\store\model\Wxapp as WxappModel;
|
||||||
use app\common\model\dealer\Withdraw as WithdrawModel;
|
use app\common\model\dealer\Withdraw as WithdrawModel;
|
||||||
|
use app\common\library\wechat\WxPay;
|
||||||
|
use app\common\service\Order as OrderService;
|
||||||
|
use app\common\service\Message as MessageService;
|
||||||
|
use app\common\enum\dealer\withdraw\ApplyStatus as ApplyStatusEnum;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分销商提现明细模型
|
* 分销商提现明细模型
|
||||||
@ -32,7 +34,7 @@ class Withdraw extends WithdrawModel
|
|||||||
*/
|
*/
|
||||||
public function getPayTypeAttr($value)
|
public function getPayTypeAttr($value)
|
||||||
{
|
{
|
||||||
return ['text' => $this->payType[$value], 'value' => $value];
|
return ['text' => ApplyStatusEnum::data()[$value]['name'], 'value' => $value];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -68,34 +70,40 @@ class Withdraw extends WithdrawModel
|
|||||||
* 分销商提现审核
|
* 分销商提现审核
|
||||||
* @param $data
|
* @param $data
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws \app\common\exception\BaseException
|
|
||||||
* @throws \think\exception\DbException
|
|
||||||
*/
|
*/
|
||||||
public function submit($data)
|
public function submit($data)
|
||||||
{
|
{
|
||||||
if ($data['apply_status'] == '30' && empty($data['reject_reason'])) {
|
if (
|
||||||
|
$data['apply_status'] == ApplyStatusEnum::AUDIT_REJECT
|
||||||
|
&& empty($data['reject_reason'])
|
||||||
|
) {
|
||||||
$this->error = '请填写驳回原因';
|
$this->error = '请填写驳回原因';
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
$this->transaction(function () use ($data) {
|
||||||
// 更新申请记录
|
// 更新申请记录
|
||||||
$data['audit_time'] = time();
|
$data['audit_time'] = time();
|
||||||
$this->allowField(true)->save($data);
|
$this->allowField(true)->save($data);
|
||||||
// 提现驳回:解冻分销商资金
|
// 提现驳回:解冻分销商资金
|
||||||
$data['apply_status'] == '30' && User::backFreezeMoney($this['user_id'], $this['money']);
|
if ($data['apply_status'] == ApplyStatusEnum::AUDIT_REJECT) {
|
||||||
// 发送模板消息
|
User::backFreezeMoney($this['user_id'], $this['money']);
|
||||||
(new Message)->withdraw($this);
|
}
|
||||||
|
// 发送消息通知
|
||||||
|
MessageService::send('dealer.withdraw', [
|
||||||
|
'withdraw' => $this,
|
||||||
|
'user' => UserModel::detail($this['user_id']),
|
||||||
|
]);
|
||||||
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 确认已打款
|
* 确认已打款
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws \think\exception\PDOException
|
|
||||||
*/
|
*/
|
||||||
public function money()
|
public function money()
|
||||||
{
|
{
|
||||||
$this->startTrans();
|
$this->transaction(function () {
|
||||||
try {
|
|
||||||
// 更新申请状态
|
// 更新申请状态
|
||||||
$this->allowField(true)->save([
|
$this->allowField(true)->save([
|
||||||
'apply_status' => 40,
|
'apply_status' => 40,
|
||||||
@ -110,24 +118,16 @@ class Withdraw extends WithdrawModel
|
|||||||
'money' => -$this['money'],
|
'money' => -$this['money'],
|
||||||
'describe' => '申请提现',
|
'describe' => '申请提现',
|
||||||
]);
|
]);
|
||||||
// 发送模板消息
|
});
|
||||||
(new Message)->withdraw($this);
|
|
||||||
// 事务提交
|
|
||||||
$this->commit();
|
|
||||||
return true;
|
return true;
|
||||||
} catch (\Exception $e) {
|
|
||||||
$this->error = $e->getMessage();
|
|
||||||
$this->rollback();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分销商提现:微信支付企业付款
|
* 分销商提现:微信支付企业付款
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws \app\common\exception\BaseException
|
* @throws \app\common\exception\BaseException
|
||||||
|
* @throws \think\Exception
|
||||||
* @throws \think\exception\DbException
|
* @throws \think\exception\DbException
|
||||||
* @throws \think\exception\PDOException
|
|
||||||
*/
|
*/
|
||||||
public function wechatPay()
|
public function wechatPay()
|
||||||
{
|
{
|
||||||
|
@ -183,7 +183,6 @@ class Order extends OrderModel
|
|||||||
* 确认发货(单独订单)
|
* 确认发货(单独订单)
|
||||||
* @param $data
|
* @param $data
|
||||||
* @return array|bool|false
|
* @return array|bool|false
|
||||||
* @throws \app\common\exception\BaseException
|
|
||||||
* @throws \think\Exception
|
* @throws \think\Exception
|
||||||
* @throws \think\exception\DbException
|
* @throws \think\exception\DbException
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
@ -262,19 +261,17 @@ class Order extends OrderModel
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 确认发货后发送消息通知
|
* 确认发货后发送消息通知
|
||||||
* @param array|\think\Collection $orderList
|
* @param $orderList
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws \app\common\exception\BaseException
|
|
||||||
* @throws \think\Exception
|
|
||||||
* @throws \think\exception\DbException
|
|
||||||
*/
|
*/
|
||||||
private function sendDeliveryMessage($orderList)
|
private function sendDeliveryMessage($orderList)
|
||||||
{
|
{
|
||||||
// 实例化消息通知服务类
|
|
||||||
$Service = new MessageService;
|
|
||||||
foreach ($orderList as $item) {
|
|
||||||
// 发送消息通知
|
// 发送消息通知
|
||||||
$Service->delivery($item, OrderTypeEnum::SHARING);
|
foreach ($orderList as $item) {
|
||||||
|
MessageService::send('order.delivery', [
|
||||||
|
'order' => $item,
|
||||||
|
'order_type' => OrderTypeEnum::SHARING,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,6 @@ class OrderRefund extends OrderRefundModel
|
|||||||
* 商家审核
|
* 商家审核
|
||||||
* @param $data
|
* @param $data
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws \think\exception\PDOException
|
|
||||||
*/
|
*/
|
||||||
public function audit($data)
|
public function audit($data)
|
||||||
{
|
{
|
||||||
@ -71,8 +70,7 @@ class OrderRefund extends OrderRefundModel
|
|||||||
$this->error = '请选择退货地址';
|
$this->error = '请选择退货地址';
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$this->startTrans();
|
$this->transaction(function ($data) {
|
||||||
try {
|
|
||||||
// 拒绝申请, 标记售后单状态为已拒绝
|
// 拒绝申请, 标记售后单状态为已拒绝
|
||||||
$data['is_agree'] == 20 && $data['status'] = 10;
|
$data['is_agree'] == 20 && $data['status'] = 10;
|
||||||
// 同意换货申请, 标记售后单状态为已完成
|
// 同意换货申请, 标记售后单状态为已完成
|
||||||
@ -81,21 +79,18 @@ class OrderRefund extends OrderRefundModel
|
|||||||
$this->allowField(true)->save($data);
|
$this->allowField(true)->save($data);
|
||||||
// 同意售后申请, 记录退货地址
|
// 同意售后申请, 记录退货地址
|
||||||
if ($data['is_agree'] == 10) {
|
if ($data['is_agree'] == 10) {
|
||||||
$model = new OrderRefundAddress;
|
(new OrderRefundAddress)->add($this['order_refund_id'], $data['address_id']);
|
||||||
$model->add($this['order_refund_id'], $data['address_id']);
|
|
||||||
}
|
}
|
||||||
// 订单详情
|
// 订单详情
|
||||||
$order = Order::detail($this['order_id']);
|
$order = Order::detail($this['order_id']);
|
||||||
// 发送模板消息
|
// 发送消息通知
|
||||||
(new MessageService)->refund(static::detail($this['order_refund_id']), $order['order_no'], OrderTypeEnum::SHARING);
|
MessageService::send('order.refund', [
|
||||||
// 事务提交
|
'refund' => $this, // 退款单信息
|
||||||
$this->commit();
|
'order_no' => $order['order_no'], // 订单信息
|
||||||
|
'order_type' => OrderTypeEnum::SHARING, // 订单类型
|
||||||
|
]);
|
||||||
|
});
|
||||||
return true;
|
return true;
|
||||||
} catch (\Exception $e) {
|
|
||||||
$this->error = $e->getMessage();
|
|
||||||
$this->rollback();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -126,8 +121,12 @@ class OrderRefund extends OrderRefundModel
|
|||||||
}
|
}
|
||||||
// 执行原路退款
|
// 执行原路退款
|
||||||
(new RefundService)->execute($order, $data['refund_money']);
|
(new RefundService)->execute($order, $data['refund_money']);
|
||||||
// 发送模板消息
|
// 发送消息通知
|
||||||
(new MessageService)->refund(self::detail($this['order_refund_id']), $order['order_no'], OrderTypeEnum::SHARING);
|
MessageService::send('order.refund', [
|
||||||
|
'refund' => $this, // 退款单信息
|
||||||
|
'order_no' => $order['order_no'], // 订单信息
|
||||||
|
'order_type' => OrderTypeEnum::SHARING, // 订单类型
|
||||||
|
]);
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -113,7 +113,7 @@ class LiveRoom extends LiveRoomModel
|
|||||||
*/
|
*/
|
||||||
private function getLocalRoomIds()
|
private function getLocalRoomIds()
|
||||||
{
|
{
|
||||||
return $this->where('is_delete', '=', 0)->column('room_id');
|
return $this->where('is_delete', '=', 0)->column('room_id', 'id');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -162,11 +162,14 @@ class LiveRoom extends LiveRoomModel
|
|||||||
// 需要新增的直播间ID
|
// 需要新增的直播间ID
|
||||||
$updatedLiveRoomIds = array_values(array_intersect($originRoomIds, $localRoomIds));
|
$updatedLiveRoomIds = array_values(array_intersect($originRoomIds, $localRoomIds));
|
||||||
if (empty($updatedLiveRoomIds)) return true;
|
if (empty($updatedLiveRoomIds)) return true;
|
||||||
|
// 根据直播间id获取主键id
|
||||||
|
$idArr = $this->getLocalIdsByRoomIds($localRoomIds);
|
||||||
// 整理新增数据
|
// 整理新增数据
|
||||||
$saveData = [];
|
$saveData = [];
|
||||||
foreach ($updatedLiveRoomIds as $roomId) {
|
foreach ($updatedLiveRoomIds as $roomId) {
|
||||||
$item = $originRoomList[$roomId];
|
$item = $originRoomList[$roomId];
|
||||||
$saveData[] = [
|
$saveData[] = [
|
||||||
|
'id' => $idArr[$roomId],
|
||||||
'room_id' => $roomId,
|
'room_id' => $roomId,
|
||||||
'room_name' => $item['name'],
|
'room_name' => $item['name'],
|
||||||
'cover_img' => $item['cover_img'],
|
'cover_img' => $item['cover_img'],
|
||||||
@ -191,11 +194,30 @@ class LiveRoom extends LiveRoomModel
|
|||||||
*/
|
*/
|
||||||
private function refreshLiveRemove($localRoomIds, $originRoomIds)
|
private function refreshLiveRemove($localRoomIds, $originRoomIds)
|
||||||
{
|
{
|
||||||
// 需要新增的直播间ID
|
// 需要删除的直播间ID
|
||||||
$removedLiveRoomIds = array_values(array_diff($localRoomIds, $originRoomIds));
|
$removedLiveRoomIds = array_values(array_diff($localRoomIds, $originRoomIds));
|
||||||
if (empty($removedLiveRoomIds)) return true;
|
if (empty($removedLiveRoomIds)) return true;
|
||||||
|
// 根据直播间id获取主键id
|
||||||
|
$removedIds = $this->getLocalIdsByRoomIds($localRoomIds, $removedLiveRoomIds);
|
||||||
// 批量删除直播间
|
// 批量删除直播间
|
||||||
return self::destroy($removedLiveRoomIds);
|
return self::destroy(array_values($removedIds));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据直播间id获取主键id
|
||||||
|
* @param array $localRoomIds
|
||||||
|
* @param array $searchRoomIds
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
private function getLocalIdsByRoomIds($localRoomIds, $searchRoomIds = [])
|
||||||
|
{
|
||||||
|
$data = [];
|
||||||
|
foreach ($localRoomIds as $id => $roomId) {
|
||||||
|
if (empty($searchRoomIds) || in_array($roomId, $searchRoomIds)) {
|
||||||
|
$data[$roomId] = $id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -80,8 +80,10 @@ class Auth
|
|||||||
// 商家登录信息
|
// 商家登录信息
|
||||||
$this->store = Session::get('yoshop_store');
|
$this->store = Session::get('yoshop_store');
|
||||||
// 当前用户信息
|
// 当前用户信息
|
||||||
|
if (!empty($this->store)) {
|
||||||
$this->user = User::detail($this->store['user']['store_user_id']);
|
$this->user = User::detail($this->store['user']['store_user_id']);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 私有化克隆方法
|
* 私有化克隆方法
|
||||||
@ -117,6 +119,7 @@ class Auth
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 验证url的权限
|
||||||
* @param string $url
|
* @param string $url
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws \think\db\exception\DataNotFoundException
|
* @throws \think\db\exception\DataNotFoundException
|
||||||
@ -126,7 +129,7 @@ class Auth
|
|||||||
private function checkAccess($url)
|
private function checkAccess($url)
|
||||||
{
|
{
|
||||||
// 超级管理员无需验证
|
// 超级管理员无需验证
|
||||||
if ($this->user['is_super']) {
|
if (!empty($this->user) && $this->user['is_super']) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// 验证当前请求是否在白名单
|
// 验证当前请求是否在白名单
|
||||||
|
@ -8,7 +8,7 @@ use app\common\library\wechat\WxTplMsg;
|
|||||||
use app\common\service\wxapp\FormId as FormIdService;
|
use app\common\service\wxapp\FormId as FormIdService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 推送模板消息服务类
|
* 推送模板消息服务类 (已废弃)
|
||||||
* Class Message
|
* Class Message
|
||||||
* @package app\store\service\wxapp
|
* @package app\store\service\wxapp
|
||||||
*/
|
*/
|
||||||
@ -27,6 +27,7 @@ class Message
|
|||||||
* 构造方法
|
* 构造方法
|
||||||
* Message constructor.
|
* Message constructor.
|
||||||
* @throws \app\common\exception\BaseException
|
* @throws \app\common\exception\BaseException
|
||||||
|
* @throws \think\Exception
|
||||||
* @throws \think\exception\DbException
|
* @throws \think\exception\DbException
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
|
194
source/application/store/service/wxapp/SubMsg.php
Normal file
194
source/application/store/service/wxapp/SubMsg.php
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\store\service\wxapp;
|
||||||
|
|
||||||
|
use app\store\model\Wxapp as WxappModel;
|
||||||
|
use app\store\model\Setting as SettingModel;
|
||||||
|
use app\common\library\helper;
|
||||||
|
use app\common\service\Basics;
|
||||||
|
use app\common\library\wechat\WxSubMsg;
|
||||||
|
use app\common\exception\BaseException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序订阅消息服务类
|
||||||
|
* Class SubMsg
|
||||||
|
* @package app\store\service\wxapp
|
||||||
|
*/
|
||||||
|
class SubMsg extends Basics
|
||||||
|
{
|
||||||
|
/* @var $WxSubMsg WxSubMsg 小程序订阅消息api类 */
|
||||||
|
private $WxSubMsg;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构造方法
|
||||||
|
* SubMsg constructor.
|
||||||
|
* @param null $wxappId
|
||||||
|
* @throws \app\common\exception\BaseException
|
||||||
|
* @throws \think\Exception
|
||||||
|
* @throws \think\exception\DbException
|
||||||
|
*/
|
||||||
|
public function __construct($wxappId = null)
|
||||||
|
{
|
||||||
|
// 小程序订阅消息api类
|
||||||
|
$wxConfig = WxappModel::getWxappCache($wxappId);
|
||||||
|
$this->WxSubMsg = new WxSubMsg($wxConfig['app_id'], $wxConfig['app_secret']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 一键添加订阅消息
|
||||||
|
* @return bool
|
||||||
|
* @throws BaseException
|
||||||
|
* @throws \think\exception\DbException
|
||||||
|
*/
|
||||||
|
public function shuttle()
|
||||||
|
{
|
||||||
|
// 拉取我的模板列表
|
||||||
|
$myList = $this->getMyTemplateList();
|
||||||
|
// 筛选出未添加的模板
|
||||||
|
$addedList = $this->getNotAddedTemplates($myList);
|
||||||
|
// 批量添加订阅消息模板
|
||||||
|
$newList = $this->onBatchAdd($addedList);
|
||||||
|
// 全部模板列表
|
||||||
|
$tplList = array_merge($newList, $myList);
|
||||||
|
// 保存全部模板id
|
||||||
|
return $this->saveAll($tplList);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存全部模板id
|
||||||
|
* @param $tplList
|
||||||
|
* @return bool
|
||||||
|
* @throws \think\exception\DbException
|
||||||
|
*/
|
||||||
|
private function saveAll($tplList)
|
||||||
|
{
|
||||||
|
// 整理模板id
|
||||||
|
$data = SettingModel::getItem('submsg');
|
||||||
|
foreach ($data as &$group) {
|
||||||
|
foreach ($group as &$item) {
|
||||||
|
if (!isset($item['title'])) continue;
|
||||||
|
$tpl = helper::arraySearch($tplList, 'title', $item['title']);
|
||||||
|
$tpl != false && $item['template_id'] = $tpl['priTmplId'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 保存数据
|
||||||
|
return (new SettingModel)->edit('submsg', $data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量添加订阅消息模板
|
||||||
|
* [并且记录返回的priTmplId]
|
||||||
|
* @param $newList
|
||||||
|
* @return array
|
||||||
|
* @throws BaseException
|
||||||
|
*/
|
||||||
|
private function onBatchAdd($newList)
|
||||||
|
{
|
||||||
|
foreach ($newList as &$item) {
|
||||||
|
// 请求微信api, 添加模板记录
|
||||||
|
$response = $this->WxSubMsg->addTemplate($item['tid'], $item['kidList'], $item['sceneDesc']);
|
||||||
|
if ($response === false) {
|
||||||
|
throw new BaseException(['msg' => "添加模板[{$item['sceneDesc']}]失败:" . $this->WxSubMsg->getError()]);
|
||||||
|
}
|
||||||
|
// 记录template_id
|
||||||
|
$item['priTmplId'] = $response['priTmplId'];
|
||||||
|
}
|
||||||
|
return $newList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 筛选出未添加的模板
|
||||||
|
* @param $myList
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
private function getNotAddedTemplates($myList)
|
||||||
|
{
|
||||||
|
// 所有订阅消息模板列表
|
||||||
|
$templateLists = $this->getTemplates();
|
||||||
|
if (empty($myList)) return $templateLists;
|
||||||
|
// 整理未添加的
|
||||||
|
$data = [];
|
||||||
|
foreach ($templateLists as $item) {
|
||||||
|
if (helper::arraySearch($myList, 'title', $item['title']) === false) {
|
||||||
|
$data[] = $item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所有订阅消息模板列表
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
private function getTemplates()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
// 支付成功通知
|
||||||
|
[
|
||||||
|
'tid' => 9344,
|
||||||
|
'title' => '新订单提醒',
|
||||||
|
'kidList' => [1, 2, 4, 3],
|
||||||
|
'sceneDesc' => '新订单提醒',
|
||||||
|
],
|
||||||
|
// 订单发货通知
|
||||||
|
[
|
||||||
|
'tid' => 855,
|
||||||
|
'title' => '订单发货通知',
|
||||||
|
'kidList' => [1, 2, 12, 11, 17],
|
||||||
|
'sceneDesc' => '订单发货通知',
|
||||||
|
],
|
||||||
|
// 售后状态通知
|
||||||
|
[
|
||||||
|
'tid' => 5049,
|
||||||
|
'title' => '售后状态通知',
|
||||||
|
'kidList' => [1, 6, 2, 3, 4],
|
||||||
|
'sceneDesc' => '售后状态通知',
|
||||||
|
],
|
||||||
|
// 拼团进度通知
|
||||||
|
[
|
||||||
|
'tid' => 5008,
|
||||||
|
'title' => '拼团进度通知',
|
||||||
|
'kidList' => [1, 5, 7, 3, 6],
|
||||||
|
'sceneDesc' => '拼团进度通知',
|
||||||
|
],
|
||||||
|
// 分销商入驻审核通知
|
||||||
|
[
|
||||||
|
'tid' => 4050,
|
||||||
|
'title' => '代理商入驻审核通知',
|
||||||
|
'kidList' => [1, 2, 3, 4],
|
||||||
|
'sceneDesc' => '分销商入驻审核通知',
|
||||||
|
],
|
||||||
|
// 提现成功通知
|
||||||
|
[
|
||||||
|
'tid' => 2001,
|
||||||
|
'title' => '提现成功通知',
|
||||||
|
'kidList' => [1, 3, 4],
|
||||||
|
'sceneDesc' => '提现成功通知',
|
||||||
|
],
|
||||||
|
// 提现失败通知
|
||||||
|
[
|
||||||
|
'tid' => 3173,
|
||||||
|
'title' => '提现失败通知',
|
||||||
|
'kidList' => [1, 3, 4],
|
||||||
|
'sceneDesc' => '提现失败通知',
|
||||||
|
],
|
||||||
|
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 拉取我的模板列表
|
||||||
|
* @return mixed
|
||||||
|
* @throws BaseException
|
||||||
|
*/
|
||||||
|
private function getMyTemplateList()
|
||||||
|
{
|
||||||
|
$response = $this->WxSubMsg->getTemplateList();
|
||||||
|
if ($response === false) {
|
||||||
|
throw new BaseException(['msg' => '拉取模板列表失败:' . $this->WxSubMsg->getError()]);
|
||||||
|
}
|
||||||
|
return $response['data'];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -13,7 +13,6 @@
|
|||||||
<li><a href="#tab5">自定义文字</a></li>
|
<li><a href="#tab5">自定义文字</a></li>
|
||||||
<li><a href="#tab6">申请协议</a></li>
|
<li><a href="#tab6">申请协议</a></li>
|
||||||
<li><a href="#tab7">页面背景图</a></li>
|
<li><a href="#tab7">页面背景图</a></li>
|
||||||
<li><a href="#tab8">模板消息</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
<div class="am-tabs-bd">
|
<div class="am-tabs-bd">
|
||||||
<div class="am-tab-panel am-active am-margin-top-lg" id="tab1">
|
<div class="am-tab-panel am-active am-margin-top-lg" id="tab1">
|
||||||
@ -786,38 +785,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="am-tab-panel am-margin-top-lg" id="tab8">
|
|
||||||
<div class="am-form-group">
|
|
||||||
<label class="am-u-sm-3 am-form-label form-require">
|
|
||||||
分销商入驻审核通知
|
|
||||||
</label>
|
|
||||||
<div class="am-u-sm-9">
|
|
||||||
<input type="text" class="tpl-form-input"
|
|
||||||
name="setting[template_msg][apply_tpl]"
|
|
||||||
placeholder="请填写模板消息ID"
|
|
||||||
value="<?= $data['template_msg']['values']['apply_tpl'] ?>">
|
|
||||||
<small>模板编号AT0674,关键词 (申请时间、审核状态、审核时间、备注信息)</small>
|
|
||||||
<small class="am-margin-left-xs">
|
|
||||||
<a href="<?= url('store/setting.help/tplmsg') ?>" target="_blank">如何获取模板消息ID?</a>
|
|
||||||
</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="am-form-group">
|
|
||||||
<label class="am-u-sm-3 am-form-label form-require">
|
|
||||||
提现状态通知
|
|
||||||
</label>
|
|
||||||
<div class="am-u-sm-9">
|
|
||||||
<input type="text" class="tpl-form-input"
|
|
||||||
name="setting[template_msg][withdraw_tpl]"
|
|
||||||
placeholder="请填写模板消息ID"
|
|
||||||
value="<?= $data['template_msg']['values']['withdraw_tpl'] ?>">
|
|
||||||
<small>模板编号AT0324,关键词 (提现时间、提现方式、提现金额、提现状态、备注)</small>
|
|
||||||
<small class="am-margin-left-xs">
|
|
||||||
<a href="<?= url('store/setting.help/tplmsg') ?>" target="_blank">如何获取模板消息ID?</a>
|
|
||||||
</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="am-form-group">
|
<div class="am-form-group">
|
||||||
|
@ -87,22 +87,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="widget-head am-cf">
|
|
||||||
<div class="widget-title am-fl">模板消息</div>
|
|
||||||
</div>
|
|
||||||
<div class="am-form-group am-padding-top-lg">
|
|
||||||
<label class="am-u-sm-3 am-form-label form-require"> 拼团拼单状态通知 </label>
|
|
||||||
<div class="am-u-sm-9">
|
|
||||||
<input type="text" class="tpl-form-input" name="basic[tpl_msg_id]"
|
|
||||||
placeholder="请填写模板消息ID" value="<?= $values['tpl_msg_id'] ?>">
|
|
||||||
<small>模板编号AT1814,关键词 (订单编号、商品名称、拼团价格、拼团人数、拼团时间、拼团结果)</small>
|
|
||||||
<small class="am-margin-left-xs">
|
|
||||||
<a href="<?= url('store/setting.help/tplmsg') ?>"
|
|
||||||
target="_blank">如何获取模板消息ID?</a>
|
|
||||||
</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="am-form-group">
|
<div class="am-form-group">
|
||||||
<div class="am-u-sm-9 am-u-sm-push-3 am-margin-top-lg">
|
<div class="am-u-sm-9 am-u-sm-push-3 am-margin-top-lg">
|
||||||
<button type="submit" class="j-submit am-btn am-btn-secondary">提交
|
<button type="submit" class="j-submit am-btn am-btn-secondary">提交
|
||||||
|
146
source/application/store/view/wxapp/submsg/index.php
Normal file
146
source/application/store/view/wxapp/submsg/index.php
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
<div class="row-content am-cf">
|
||||||
|
<div class="row">
|
||||||
|
<div class="am-u-sm-12 am-u-md-12 am-u-lg-12">
|
||||||
|
<div class="widget am-cf">
|
||||||
|
<form id="my-form" class="am-form tpl-form-line-form" method="post">
|
||||||
|
<div class="widget-body">
|
||||||
|
<fieldset>
|
||||||
|
<div class="tips am-margin-top-sm">
|
||||||
|
<div class="pre">
|
||||||
|
<p class="">
|
||||||
|
1. 订阅消息仅支持小程序 "<strong>服装/鞋/箱包</strong>" 类目,请登录 "<a
|
||||||
|
href="https://mp.weixin.qq.com" target="_blank">小程序运营平台</a>",左侧菜单栏 "设置"
|
||||||
|
- "基本设置" - "服务类目" 中添加
|
||||||
|
</p>
|
||||||
|
<p class="am-padding-top-xs">2. 建议使用当前页面下方的 " <a href="#shuttle">一键添加</a>"
|
||||||
|
按钮,自动完成订阅消息模板的添加</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="widget-head am-cf">
|
||||||
|
<div class="widget-title am-fl">订单消息通知</div>
|
||||||
|
</div>
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label class="am-u-sm-3 am-u-lg-2 am-form-label form-require"> 新订单提醒 </label>
|
||||||
|
<div class="am-u-sm-9 am-u-md-6 am-u-lg-5 am-u-end">
|
||||||
|
<input type="text" class="tpl-form-input" name="submsg[order][payment][template_id]"
|
||||||
|
value="<?= $values['order']['payment']['template_id'] ?>">
|
||||||
|
<div class="help-block">
|
||||||
|
<small>关键词:[订单编号、下单时间、订单金额、商品名称]</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label class="am-u-sm-3 am-u-lg-2 am-form-label form-require"> 订单发货通知 </label>
|
||||||
|
<div class="am-u-sm-9 am-u-md-6 am-u-lg-5 am-u-end">
|
||||||
|
<input type="text" class="tpl-form-input"
|
||||||
|
name="submsg[order][delivery][template_id]"
|
||||||
|
value="<?= $values['order']['delivery']['template_id'] ?>">
|
||||||
|
<div class="help-block">
|
||||||
|
<small>关键词:[订单号、商品名称、收货人、收货地址、物流公司]</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label class="am-u-sm-3 am-u-lg-2 am-form-label form-require"> 售后状态通知 </label>
|
||||||
|
<div class="am-u-sm-9 am-u-md-6 am-u-lg-5 am-u-end">
|
||||||
|
<input type="text" class="tpl-form-input" name="submsg[order][refund][template_id]"
|
||||||
|
value="<?= $values['order']['refund']['template_id'] ?>">
|
||||||
|
<div class="help-block">
|
||||||
|
<small>关键词:[售后类型、状态、订单编号、申请时间、申请原因]</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="widget-head am-cf">
|
||||||
|
<div class="widget-title am-fl">拼团进度通知</div>
|
||||||
|
</div>
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label class="am-u-sm-3 am-u-lg-2 am-form-label form-require"> 拼团进度通知 </label>
|
||||||
|
<div class="am-u-sm-9 am-u-md-6 am-u-lg-5 am-u-end">
|
||||||
|
<input type="text" class="tpl-form-input"
|
||||||
|
name="submsg[sharing][active_status][template_id]"
|
||||||
|
value="<?= $values['sharing']['active_status']['template_id'] ?>">
|
||||||
|
<div class="help-block">
|
||||||
|
<small>关键词:[拼团商品、拼团价格、成团人数、拼团进度、温馨提示]</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="widget-head am-cf">
|
||||||
|
<div class="widget-title am-fl">分销商消息通知</div>
|
||||||
|
</div>
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label class="am-u-sm-3 am-u-lg-2 am-form-label form-require"> 分销商入驻审核通知 </label>
|
||||||
|
<div class="am-u-sm-9 am-u-md-6 am-u-lg-5 am-u-end">
|
||||||
|
<input type="text" class="tpl-form-input" name="submsg[dealer][apply][template_id]"
|
||||||
|
value="<?= $values['dealer']['apply']['template_id'] ?>">
|
||||||
|
<div class="help-block">
|
||||||
|
<small>关键词:[申请时间、审核状态、审核时间、备注信息]</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label class="am-u-sm-3 am-u-lg-2 am-form-label form-require"> 提现成功通知 </label>
|
||||||
|
<div class="am-u-sm-9 am-u-md-6 am-u-lg-5 am-u-end">
|
||||||
|
<input type="text" class="tpl-form-input"
|
||||||
|
name="submsg[dealer][withdraw_01][template_id]"
|
||||||
|
value="<?= $values['dealer']['withdraw_01']['template_id'] ?>">
|
||||||
|
<div class="help-block">
|
||||||
|
<small>关键词:[提现金额、打款方式、打款原因]</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="am-form-group">
|
||||||
|
<label class="am-u-sm-3 am-u-lg-2 am-form-label form-require"> 提现失败通知 </label>
|
||||||
|
<div class="am-u-sm-9 am-u-md-6 am-u-lg-5 am-u-end">
|
||||||
|
<input type="text" class="tpl-form-input"
|
||||||
|
name="submsg[dealer][withdraw_02][template_id]"
|
||||||
|
value="<?= $values['dealer']['withdraw_02']['template_id'] ?>">
|
||||||
|
<div class="help-block">
|
||||||
|
<small>关键词:[提现金额、申请时间、原因]</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="shuttle" class="am-form-group">
|
||||||
|
<div class="am-u-sm-9 am-u-sm-push-3 am-margin-top-lg">
|
||||||
|
<button type="submit"
|
||||||
|
class="j-submit am-btn am-btn-sm am-btn-secondary am-margin-right-sm">保存
|
||||||
|
</button>
|
||||||
|
<button type="button" class="j-shuttle am-btn am-btn-sm am-btn-success">一键添加
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
|
||||||
|
// 一键配置
|
||||||
|
$('.j-shuttle').on('click', function () {
|
||||||
|
var url = "<?= url('wxapp.submsg/shuttle') ?>";
|
||||||
|
var load = layer.load();
|
||||||
|
layer.confirm('该操作将自动为您的小程序添加订阅消息<br>请先确保 "订阅消息" - "我的模板" 中没有记录<br>确定添加吗?', {
|
||||||
|
title: '友情提示'
|
||||||
|
}, function (index) {
|
||||||
|
$.post(url, {}, function (result) {
|
||||||
|
result.code === 1 ? $.show_success(result.msg, result.url)
|
||||||
|
: $.show_error(result.msg);
|
||||||
|
layer.close(load);
|
||||||
|
});
|
||||||
|
layer.close(index);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表单验证提交
|
||||||
|
* @type {*}
|
||||||
|
*/
|
||||||
|
$('#my-form').superForm();
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
@ -3,10 +3,11 @@
|
|||||||
namespace app\task\behavior\sharing;
|
namespace app\task\behavior\sharing;
|
||||||
|
|
||||||
use think\Cache;
|
use think\Cache;
|
||||||
use app\common\service\Message;
|
|
||||||
use app\task\model\sharing\Setting;
|
|
||||||
use app\task\model\sharing\Active as ActiveModel;
|
|
||||||
use app\task\model\sharing\Order as OrderModel;
|
use app\task\model\sharing\Order as OrderModel;
|
||||||
|
use app\task\model\sharing\Active as ActiveModel;
|
||||||
|
use app\task\model\sharing\Setting as SettingModel;
|
||||||
|
use app\common\service\Message as MessageService;
|
||||||
|
use app\common\enum\sharing\ActiveStatus as ActiveStatusEnum;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拼团订单行为管理
|
* 拼团订单行为管理
|
||||||
@ -35,7 +36,7 @@ class Active
|
|||||||
if (!Cache::has('__task_space__sharing_active__' . $model::$wxapp_id)) {
|
if (!Cache::has('__task_space__sharing_active__' . $model::$wxapp_id)) {
|
||||||
try {
|
try {
|
||||||
// 拼团设置
|
// 拼团设置
|
||||||
$config = Setting::getItem('basic');
|
$config = SettingModel::getItem('basic');
|
||||||
// 已过期的拼单更新状态(拼单失败)
|
// 已过期的拼单更新状态(拼单失败)
|
||||||
$this->onUpdateActiveEnd();
|
$this->onUpdateActiveEnd();
|
||||||
// 更新拼团失败的订单并退款
|
// 更新拼团失败的订单并退款
|
||||||
@ -44,7 +45,7 @@ class Active
|
|||||||
}
|
}
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
}
|
}
|
||||||
Cache::set('__task_space__sharing_active__' . $model::$wxapp_id, time(), 10);
|
Cache::set('__task_space__sharing_active__' . $model::$wxapp_id, time(), 1);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -52,7 +53,6 @@ class Active
|
|||||||
/**
|
/**
|
||||||
* 已过期的拼单更新状态
|
* 已过期的拼单更新状态
|
||||||
* @return false|int
|
* @return false|int
|
||||||
* @throws \app\common\exception\BaseException
|
|
||||||
* @throws \think\db\exception\DataNotFoundException
|
* @throws \think\db\exception\DataNotFoundException
|
||||||
* @throws \think\db\exception\ModelNotFoundException
|
* @throws \think\db\exception\ModelNotFoundException
|
||||||
* @throws \think\exception\DbException
|
* @throws \think\exception\DbException
|
||||||
@ -70,10 +70,12 @@ class Active
|
|||||||
$this->dologs('onSetActiveEnd', [
|
$this->dologs('onSetActiveEnd', [
|
||||||
'activeIds' => json_encode($activeIds),
|
'activeIds' => json_encode($activeIds),
|
||||||
]);
|
]);
|
||||||
// 发送拼团失败模板消息
|
// 发送拼团失败订阅消息
|
||||||
$Message = new Message;
|
|
||||||
foreach ($list as $item) {
|
foreach ($list as $item) {
|
||||||
$Message->sharingActive($item, '拼团失败');
|
MessageService::send('sharing.active_status', [
|
||||||
|
'active' => $item,
|
||||||
|
'status' => ActiveStatusEnum::ACTIVE_STATE_FAIL
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
// 更新已过期状态
|
// 更新已过期状态
|
||||||
return $this->model->updateEndedStatus($activeIds);
|
return $this->model->updateEndedStatus($activeIds);
|
||||||
@ -82,7 +84,6 @@ class Active
|
|||||||
/**
|
/**
|
||||||
* 更新拼团失败的订单并退款
|
* 更新拼团失败的订单并退款
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws \app\common\exception\BaseException
|
|
||||||
* @throws \think\db\exception\DataNotFoundException
|
* @throws \think\db\exception\DataNotFoundException
|
||||||
* @throws \think\db\exception\ModelNotFoundException
|
* @throws \think\db\exception\ModelNotFoundException
|
||||||
* @throws \think\exception\DbException
|
* @throws \think\exception\DbException
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"version": "1.1.40"
|
"version": "1.1.41"
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user