cxhxy/app/common/model/food/Setting.php
test_service d3170b4d1c 1
2023-12-01 15:43:29 +08:00

421 lines
16 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\common\model\food;
use think\facade\Cache;
use hema\wechat\Driver as Wechat;
/**
* 配置模型
*/
class Setting extends BaseModel
{
// 定义表名
protected $name = 'food_setting';
protected $createTime = false;
// 追加字段
protected $append = [];
/**
* 设置项描述
*/
private $describe = [
'mode' => '功能设置',
'wxapptpl' => '微信小程序订阅消息',
'wechattpl' => '微信公众号模板消息',
'trade' => '交易设置',
'recharge' => '充值设置',
'delivery' => '配送设置',
'pact' => '预约设置',
'vip' => '会员卡设置',
'other' => '其它设置',
'sign' => '签到设置',
'center' => '用户中心设置',
];
/**
* 获取器: 转义数组格式
*/
public function getValuesAttr($value)
{
return json_decode($value, true);
}
/**
* 修改器: 转义成json格式
*/
public function setValuesAttr($value)
{
return json_encode($value);
}
/**
* 获取指定项设置
*/
public static function getItem(string $key, $applet_id = null)
{
$data = self::getAll($applet_id);
return isset($data[$key]) ? $data[$key]['values'] : [];
}
/**
* 获取设置项信息
*/
public static function detail(string $key,$applet_id = null)
{
is_null($applet_id) && $applet_id = self::$applet_id;
$filter = [];// 筛选条件
$filter['key'] = $key;
$filter['applet_id'] = $applet_id;
return self::withoutGlobalScope()->where($filter)->find();
}
/**
* 全局缓存: 系统设置
*/
public static function getAll($applet_id = null)
{
$self = new static;
is_null($applet_id) && $applet_id = $self::$applet_id;
$filter = [];// 筛选条件
$filter['applet_id'] = $applet_id;
if (!$data = Cache::get('food_setting_' . $applet_id)) {
$data = array_column($self::withoutGlobalScope()->where($filter)->select()->toArray(), null, 'key');
Cache::set('food_setting_' . $applet_id, $data);
}
return array_merge_multiple($self->defaultData(), $data);
}
/**
* 更新系统设置
*/
public function edit(string $key, array $values, $applet_id = null)
{
is_null($applet_id) && $applet_id = self::$applet_id;
//如果是设置微信小程序订阅消息
if($key == 'wxapptpl'){
if(!$values = $this->wxapptpl($values,$applet_id)){
return false;
}
}
$model = self::detail($key,$applet_id) ?: $this;
Cache::delete('food_setting_' . $applet_id);// 删除系统设置缓存
return $model->save([
'key' => $key,
'describe' => $this->describe[$key],
'values' => $values,
'applet_id' => $applet_id,
]) !== false;
}
/**
* 餐饮微信订阅消息设置
*/
private function wxapptpl(array $values,$applet_id)
{
//验证是否添加小程序餐饮服务目录
$wx = new Wechat;
//获取已设置的服务类目
$result = $wx->getCategory($applet_id);
$isSet = false;//是否符合设置要求
if($result['errcode']==0){
foreach ($result['categories'] as $item){
if($item['first']==402 AND $item['second']==1273 AND $item['audit_status']==3){
$isSet = true;
break;
}
}
if(!$isSet){
$this->error = '为该小程序添加“商业服务-软件/建站/技术开发”服务类目,并通过审核';
return false;
}
}else{
$this->error = $result['errmsg'];
return false;
}
//获取帐号下的模板列表
if(!$result = $wx->getMessageTemplateList($applet_id)){
$this->error = $wx->getError();
return false;
}
//循环删除订阅消息模板
foreach ($result['data'] as $item){
if(!$wx->deleteMessageTemplate($applet_id,$item['priTmplId'])){
$this->error = $wx->getError();
return false;
}
}
//添加商家接单通知
$tid = '31781';
//1商家名称2订单状态3接单时间
$kidlist = [1,2,3];
$desc ='商家接单通知';
if(!$result = $wx->addMessageTemplate($applet_id,$tid,$kidlist,$desc)){
$this->error = $wx->getError();
return false;
}
$values['receive'] = $result['priTmplId'];
//添加骑手取货通知
$tid = '31780';
//1商家名称、2订单状态、3接单时间
$kidlist = [1,2,3];
$desc ='骑手接单通知';
if(!$result = $wx->addMessageTemplate($applet_id,$tid,$kidlist,$desc)){
$this->error = $wx->getError();
return false;
}
$values['horseman'] = $result['priTmplId'];
//订单配送通知
$tid = '31339';
//8商家名称 9订单状态 5配送人、6配送电话 10送出时间
$kidlist = [8,9,5,6,10];
$desc ='订单配送通知';
if(!$result = $wx->addMessageTemplate($applet_id,$tid,$kidlist,$desc)){
$this->error = $wx->getError();
return false;
}
$values['delivery'] = $result['priTmplId'];
//提货通知
$tid = '30804';
//3提货门店、2状态、6提货码、9提货地点、7联系电话
$kidlist = [3,2,6,9,7];
$desc ='提货通知';
if(!$result = $wx->addMessageTemplate($applet_id,$tid,$kidlist,$desc)){
$this->error = $wx->getError();
return false;
}
$values['take'] = $result['priTmplId'];
//退款状态通知
$tid = '31441';
//8订单编号、9退款金额、4退款状态、5备注、
$kidlist = [8,9,4,5];
$desc ='退款状态通知';
if(!$result = $wx->addMessageTemplate($applet_id,$tid,$kidlist,$desc)){
$this->error = $wx->getError();
return false;
}
$values['refund'] = $result['priTmplId'];
return $values;
}
/**
* 默认配置
*/
public function defaultData()
{
return [
'pact' => [
'key' => 'pacttable',
'describe' => '预约设置',
'values' => [
'is_open' => 0,
'is_print' => 0,
'range' => 50,
],
],
'vip' => [
'key' => 'vip',
'describe' => '会员卡设置',
'values' => [
'is_open' => 1,//是否开启
'buy_price' => '10',//购买价格
'vip_discount' => 1,//1开启 0关闭
'vip' => [
0 => [
'card_cover' => base_url() . 'addons/food/img/v1.png',
'name' => 'V1',
'discount' => 100,//等级折扣
'score' => 0,
'free_delivery' => 0,//是否免配送费
'gift' => []
],
1 => [
'card_cover' => base_url() . 'addons/food/img/v2.png',
'name' => 'V2',
'discount' => 95,//等级折扣
'score' => 500,
'free_delivery' => 0,//是否免配送费
'gift' => []
],
2 => [
'card_cover' => base_url() . 'addons/food/img/v3.png',
'name' => 'V3',
'discount' => 90,//等级折扣
'score' => 1000,
'free_delivery' => 0,//是否免配送费
'gift' => []
],
3 => [
'card_cover' => base_url() . 'addons/food/img/v4.png',
'name' => 'V4',
'discount' => 85,//等级折扣
'score' => 2000,
'free_delivery' => 0,//是否免配送费
'gift' => []
],
4 => [
'card_cover' => base_url() . 'addons/food/img/v5.png',
'name' => 'V5',
'discount' => 80,//等级折扣
'score' => 5000,
'free_delivery' => 0,//是否免配送费
'gift' => []
],
5 => [
'card_cover' => base_url() . 'addons/food/img/v6.png',
'name' => 'V6',
'discount' => 75,//等级折扣
'score' => 10000,//所需积分
'free_delivery' => 0,//是否免配送费
'gift' => []
],
]
],
],
'sign' => [
'key' => 'sign',
'describe' => '签到设置',
'values' => [
'type' => 'score',//奖励类型 score=积分money=余额
'mode' => 'fixed',//奖励模式 fixed=固定random=随机
'number' => 1,//
'plan' => [
/*0 => [
'days' => 15,//连续天数
'number' => 10,//额外奖励
'type' => 'score',//奖励类型
],*/
],
'describe' => '1. 每次签到赠送1积分
2. 连续签到15天额外赠送10积分
3. 连续签到30天额外赠送40积分', //签到说明
],
],
'trade' => [
'key' => 'trade',
'describe' => '交易设置',
'values' => [
'order' => [
'time' => '10',//任务执行间隔
'close_time' => '30',//未支付订单关闭时间
'delivery_time' => '30',//已配送订单自动配送完成时间
'receive_time' => '30', //配送完毕订单用户自动确认收货时间
'cmt_time' => '120', //收货订单用户自动评价时间
'refund_time' => '0' //退款订单自动退款时间
],
'freight_rule' => '10',
]
],
'delivery' => [
'key' => 'delivery',
'describe' => '配送设置',
'values' => [
'delivery_range' => '3000', //配送范围
'free_range' => '0', //免费配送范围
'delivery_price' => '5', //配送费用
'min_price' => '15', //起送价格
]
],
'other' => [
'key' => 'other',
'describe' => '其它设置',
'values' => [
'bind_phone' => 1,//登录小程序是否强制用户绑定手机号
'is_stock' => 0,//是否启用商品库存
'order_export' => 'col', //订单导出样式 col竖排row横排
'postpaid' => [
'10' => 0,
'20' => 0,
'30' => 0,
],//后付费设置
'open_shop' => 1,//首次打开小程序点单页,是否弹出门店列表
'is_calling' => 1,//是否开启叫号服务,需对接叫号器,堂食扫码有效
'balance_pay' => 0,//余额买单
'goods' => [
'sell_out' => 1,//售罄显示
'delisting' => 0,//下架显示
],//商品设置
]
],
'wxapptpl' => [
'key' => 'wxapptpl',
'describe' => '微信小程序订阅消息',
'values' => [
'receive' => '',//商家接单通知
'horseman' => '',//骑手取货通知
'delivery' => '', //订单配送通知
'take' => '', //取餐提醒
'refund' => '', //退款状态通知
],
],
'wechattpl' => [
'key' => 'wechattpl',
'describe' => '微信公众号模板消息',
'values' => [
'receive' => '',//商家接单通知
'horseman' => '',//骑手取货通知
'delivery' => '', //订单配送通知
'take' => '', //取餐提醒
'finish' => '', //订单完成通知
'refund' => '', //退款状态通知
],
],
'recharge' => [
'key' => 'recharge',
'describe' => '充值设置',
'values' => [
'is_open' => 1, //是否开启
'is_custom' => 1, //是否允许用户自定义金额
'describe' => '1. 账户充值仅限微信在线支付方式,充值金额实时到账
2. 账户充值套餐赠送的金额即时到账
3. 账户余额有效期:自充值日起至用完即止
4. 储值金额不可提现、不计利息、不可转赠', //充值说明
],
],
'center' => [
'key' => 'center',
'describe' => '用户中心设置',
'values' => [
'vip' => 1, //会员卡
'setting' => 1, //权限设置
'helper' => 1, //商家助手
'contact' => [//联系我们
'is_open' => 1,
'type' => 'wechat',//wechat=微信客服 phone=联系电话
'phone' => '',//电话号码
],
'menu' => [
0 => [
'logo' => base_url() . 'addons/food/img/applet/pact.png',
'title' => '预约订桌',
'path' => 'user/pact/index',
'sort' => 10
],
1 => [
'logo' => base_url() . 'addons/food/img/applet/coupon.png',
'title' => '我的卡券',
'path' => 'user/coupon/index',
'sort' => 20
],
2 => [
'logo' => base_url() . 'addons/food/img/applet/address.png',
'title' => '我的地址',
'path' => 'user/address/index',
'sort' => 30
],
3 => [
'logo' => base_url() . 'addons/food/img/applet/collection.png',
'title' => '签到中心',
'path' => 'user/sign/index',
'sort' => 40
],
4 => [
'logo' => base_url() . 'addons/food/img/applet/comment.png',
'title' => '评价记录',
'path' => 'user/comment/index',
'sort' => 50
],
],
],
],
];
}
}