作者 xwp

最新逻辑

... ... @@ -77,14 +77,15 @@ class CourseStore extends Backend
$array['end'] = $k['date'].' '.$v['time_end'];
$array['count'] = $params['count'];
$array['notify_count'] = $params['notify_count'];
$array['status'] = 'new';
$array['is_end'] = false;
$data[] = $array;
}
}
$result = false;
Db::startTrans();
if(!empty($data)){
foreach ($data as $k){
$this->model->insert($k);
$this->model->insertGetId($k);
}
}
$this->success();
}else{
... ...
... ... @@ -66,7 +66,7 @@
<script id="eventtpl_1" type="text/html">
<dd class="form-inline">
<ins><input type="text" name="<%=name%>[<%=index%>][time_start]" data-rule="required" class="form-control datetimepicker" data-date-format="HH:mm:ss" value="<%=row.time_start%>" placeholder="{:__('Time_start')}" size="10"/></ins>
<ins><input type="text" name="<%=name%>[<%=index%>][time_end]" data-rule="required" class="form-control datetimepicker" data-date-format="HH:mm:ss" value="<%=row.time_end%>" placeholder="{:__('Time_end')}" size="10"/></ins>
<ins><input type="text" name="<%=name%>[<%=index%>][time_end]" data-rule="required match(gte, row[time][<%=index%>][time_start], time)" class="form-control datetimepicker" data-date-format="HH:mm:ss" value="<%=row.time_end%>" placeholder="{:__('Time_end')}" size="10"/></ins>
<!--下面的两个按钮务必保留-->
<span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span>
<span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span>
... ...
... ... @@ -41,7 +41,7 @@
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Time_end')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-time_end" data-rule="required match(gte, row[time_start], date)" class="form-control datetimepicker" data-date-format="HH:mm:ss" data-use-current="true" name="row[time_end]" type="text" value="{$row.time_end}">
<input id="c-time_end" data-rule="required match(gte, row[time_start], time)" class="form-control datetimepicker" data-date-format="HH:mm:ss" data-use-current="true" name="row[time_end]" type="text" value="{$row.time_end}">
</div>
</div>
<div class="form-group layer-footer">
... ...
... ... @@ -6,11 +6,13 @@ use app\common\controller\Api;
use fast\Tree;
use think\Config;
use think\Db;
use WeMini\Template;
use WeChat\Exceptions\InvalidResponseException;
use WeChat\Exceptions\LocalCacheException;
use WeMini\Newtmpl;
/**
* 课程接口
*/
* 课程接口
*/
class Course extends Api
{
protected $noNeedLogin = ['*'];
... ... @@ -114,7 +116,11 @@ class Course extends Api
if(!empty($date)){
$courseStore = new \app\admin\model\CourseStore();
$courseStore = $courseStore->where(['date'=>$date])->select();
$where1['status'] = 'confirmed';
$where1['is_end'] = false;
$where1['end'] = ['>',date('Y-m-d H:i:s')];
$where1['date'] = $date;
$courseStore = $courseStore->where($where1)->select();
if(empty($courseStore)){
$this->success('请求成功',[]);
}
... ... @@ -132,6 +138,53 @@ class Course extends Api
}
/**
* 获得课程列表(日历)
*
* @ApiTitle (获得课程列表(日历))
* @ApiSummary (获得课程列表(日历))
* @ApiMethod (POST)
* @ApiParams (name="start", type="string", required=false, description="开始时间")
* @ApiParams (name="end", type="string", required=false, description="结束时间")
* @ApiReturnParams (name="code", type="integer", required=true, sample="0")
* @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功")
* @ApiReturnParams (name="data", type="object", sample="{'prepay_id':'123','options':{},'order':{}}", description="扩展数据返回")
* @ApiReturn ({'code':'1','msg':'返回成功'})
*/
public function get_date_list()
{
$start= $this->request->request('start');
$end = $this->request->request('end');
if(empty($start)){
$start = date('Y-m-1',time());
}
if(empty($end)){
$end = date('Y-m-d',mktime(23,59,59,date('m'),date('t'),date('Y')));
}
for($i = strtotime($start); $i <= strtotime($end); $i += 86400)
{
$return[date("Y-m-d",$i)] = [];
}
$where['status'] = 'confirmed';
$where['is_end'] = false;
$where['end'] = ['>',date('Y-m-d H:i:s')];
$where['date'] = ['between',[$start,$end]];
$courseStore = new \app\admin\model\CourseStore();
$courseStore = $courseStore->with('course')->where($where)->select();
if(!empty($courseStore)){
foreach ($courseStore as $k){
$return[$k['date']][$k['course_id']] = $k['course'];
}
}
$this->success('请求成功',$return);
}
/**
* 获得课程
*
* @ApiTitle (获得课程)
... ... @@ -139,15 +192,17 @@ class Course extends Api
* @ApiMethod (POST)
* @ApiParams (name="id", type="string", required=true, description="ID")
* @ApiParams (name="store_id", type="string", required=false, description="门店id")
* @ApiParams (name="user_id", type="string", required=false, description="用户id")
* @ApiReturnParams (name="code", type="integer", required=true, sample="0")
* @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功")
* @ApiReturnParams (name="data", type="object", sample="{'prepay_id':'123','options':{},'order':{}}", description="扩展数据返回")
* @ApiReturn ({'code':'1','msg':'返回成功'})
*/
public function ge_id()
public function get_id()
{
$id = $this->request->request('id');
$store_id = $this->request->request('store_id');
$user_id = $this->request->request('user_id');
if(!$id){
$this->error(__('Invalid parameters'));
}
... ... @@ -160,44 +215,66 @@ class Course extends Api
$course = $course->toArray();
$course['cover'] = cdnurl($course['cover'],true);
$banner = explode(",", $course['banner']);
foreach ($banner as &$k){
$k = cdnurl($k,true);
foreach ($banner as &$m){
$m = cdnurl($m,true);
}
$course['banner'] = $banner;
//查询门店课程
$courseStore = new \app\admin\model\CourseStore();
$where['course_id'] = $id;
$where['status'] = 'confirmed';
$where['is_end'] = false;
$where['end'] = ['>',date('Y-m-d H:i:s')];
if(!empty($store_id)){
$where['store_id'] = $store_id;
}
$courseStore = $courseStore->with('store')->where($where)->order('date','desc')->select();
$courseStore = $courseStore->where($where)->order('date','asc')->select();
$store = [];
foreach ($courseStore as $k){
$k['enable'] = true;
if(!empty($user_id)){
$sign = new \app\admin\model\CourseSign();
$sign = $sign->where(['course_store_id'=>$k['id'],'user_id'=>$user_id])->find();
if(!empty($sign)){
$k['enable'] = false;
}
}
if(!isset($store[$k['store_id']])){
$k['store']['start'] = $k['date'];
$k['store']['end'] = $k['date'];
$store1 = new \app\admin\model\Store();
$store1 = $store1->where(['id'=>$k['store_id']])->find();
if(empty($store1)){
continue;
}
$store1 = $store1->toArray();
$store1['start'] = $k['start'];
$store1['end'] = $k['end'];
$store1['course'] = [];
$sign = new \app\admin\model\CourseSign();
$k['store']['sign_count'] = $sign->where(['course_id'=>$id,'store_id'=>$k['store_id'],'publish_time'=>['>',date('Y-m-d H:i:s')]])->count();
$store[$k['store_id']] = $k['store'];
$k['sign_count'] = $sign->where(['course_store_id'=>$k['id']])->count();
$store[$k['store_id']] = $store1;
}
if( $k['date'] < $store[$k['store_id']]['start']){
$store[$k['store_id']]['start'] = $k['date'];
if( $k['start'] < $store[$k['store_id']]['start']){
$store[$k['store_id']]['start'] = $k['start'];
}
if( $k['date'] > $store[$k['store_id']]['end']){
$store[$k['store_id']]['end'] = $k['date'];
if( $k['end'] > $store[$k['store_id']]['end']){
$store[$k['store_id']]['end'] = $k['end'];
}
$store[$k['store_id']]['course'][] = $k;
}
$course['store'] = array_values($store);
foreach ($course['store'] as &$k){
/* foreach ($course['store'] as &$k){
$courseStore = new \app\admin\model\CourseStore();
$where['course_id'] = $id;
$where['store_id'] = $k['id'];
$where['status'] = 'confirmed';
$where['is_end'] = false;
$where['end'] = ['>',date('Y-m-d H:i:s')];
$k['course'] = $courseStore->with('store')->where($where)->order('date','desc')->select();
}
}*/
//查询评价
$star = new \app\admin\model\CourseSignStart();
... ... @@ -346,7 +423,7 @@ class Course extends Api
}
$courseStore = new \app\admin\model\CourseStore();
$courseStore = $courseStore->with(['course','store'])->where(['id'=>$course_store_id,'status'=>'confirmed'])->find();
$courseStore = $courseStore->with(['course','store'])->where(['id'=>$course_store_id,'status'=>'confirmed','is_end'=>false,'end'=>['>',date('Y-m-d H:i:s')]])->find();
if(empty($courseStore)){
$this->error(__('Invalid parameters'));
}
... ... @@ -358,7 +435,12 @@ class Course extends Api
$this->error('已经报名了');
}
$user = new \app\admin\model\User;
$user = $user->where(['id'=>$user_id])->field('password,salt',true)->find();
if(empty($user)){
}
$user = $user->toArray();
//查看支付情况
/*$order = new \app\admin\model\Order();
... ... @@ -406,11 +488,12 @@ class Course extends Api
$order->save(['remain'=>$remain-1],['id'=>$order_id]);
//开课人数够了
$sign_count = $sign->where(['course_store_id'=>$course_store_id])->count();
if($sign_count >= $courseStore['notify_count']){
$template = new Template(Config::get('weChat'));
$sign = new \app\admin\model\CourseSign();
$sign_data = $sign->with('user')->where(['course_store_id'=>$course_store_id,'notify'=>false])->select();
$signCount = $sign->where(['course_store_id'=>$course_store_id])->count();
if($signCount >= $courseStore['notify_count']){
$template = new Newtmpl(Config::get('weChat'));
$sign = new \app\admin\model\CourseSign();
$sign_data = $sign->with(['user','CourseStore'])->where(['course_store_id'=>$course_store_id,'notify'=>false])->select();
$notice = new \app\admin\model\UserNotice();
foreach ($sign_data as $k){
... ... @@ -426,19 +509,24 @@ class Course extends Api
//小程序通知
/* $data = [
$data = [
'touser' => $k['user']['openid'],
'template_id' => '',
'form_id'=>'',
'page'=>'pages/index/index',
'template_id' => Config::get('course_sign_tmp'),
'form_id'=>$k['id'],
'page'=>'pages/classReserve/classReserve',
'data'=>[
"keyword1"=>["value"=> "1", "color"=> "#173177"],
"keyword2"=>["value"=> "2", "color"=> "#173177"],
"keyword3"=>["value"=> "3", "color"=> "#173177"]
"thing1" => ["value" => $courseStore['course']['name']],
"date2" => ["value" => $k['CourseStore']['start']],
"name3" => ["value" => $k['user']['nickname']],
"thing4" => ["value" => "课程预约成功"],
],
];
$template->send($data);*/
try {
$template->send($data);
} catch (InvalidResponseException $e) {
} catch (LocalCacheException $e) {
}
}
}
... ...
... ... @@ -146,7 +146,7 @@ class Order extends Api
$data['success_time'] = '';
$order = new \app\admin\model\Order();
$order = $order->save($data);
$order = $order->insertGetId($data);
$return['order'] = $order;
$return['options'] = $options;
... ... @@ -163,24 +163,26 @@ class Order extends Api
$wechat = \WeChat\Pay::instance($this->config);
$data = $wechat->getNotify();
if ($data['return_code'] === 'SUCCESS' && $data['result_code'] === 'SUCCESS') {
$order_no = $data['out_trade_no'];
$order = new \app\admin\model\Order();
$order = $order->where(['order_id'=>$order_no])->find();
if(empty($product)){
if(empty($order)){
exit;
}
if($order['total']*100 != $data['total_fee']){
$order = $order->toArray();
if((int)($order['total']*100) != $data['total_fee']){
exit;
}
$order = $order->toArray();
$user = new \app\admin\model\User();
$user->save(['status' => 'normal'], ['id' => $order['user_id']]);
$order = new \app\admin\model\Order();
$user->save([
$order1 = new \app\admin\model\Order();
$order1->save([
'status' => 'success',
'success_time' => date('Y-m-d H:i:s'),
'third_order_id' => $data['transaction_id']
... ...
... ... @@ -132,6 +132,8 @@ class Store extends Api
$courseStore = new \app\admin\model\CourseStore();
$where['store_id'] = $id;
$where['status'] = 'confirmed';
$where['is_end'] = false;
$where['end'] = ['>',date('Y-m-d H:i:s')];
$courseStore = $courseStore->with('course')->where($where)->order('date','desc')->select();
$course = [];
foreach ($courseStore as $k){
... ...
... ... @@ -730,7 +730,7 @@ class User extends Api
foreach ($notice as &$k){
if($k['type'] == 'course_sign' || $k['type'] == 'course_start'){
$course = new \app\admin\model\Course();
$course= $course->where(['id'=>$k['content_id']])->find();
$course= $course->where(['id'=>$k['course_sign']['course_id']])->find();
if(empty($course)){
$course = [];
}else{
... ... @@ -738,6 +738,16 @@ class User extends Api
}
$k['course'] = $course;
$store = new \app\admin\model\Store();
$store= $store->where(['id'=>$k['course_sign']['store_id']])->find();
if(empty($store)){
$store = [];
}else{
$store = $store->toArray();
}
$k['store'] = $store;
}
}
$this->success('ok',$notice);
... ...
... ... @@ -20,6 +20,9 @@ return [
'mch_key' => 'MmXiXHO16b89tNx75t3T8rHTYMQBbn19',
//'notify_url' => '127.0.0.1/wake/public/api/order/notify',
'notify_url' => 'http://wake.w.brotop.cn/api/order/notify',
'course_sign_tmp' => '0A7sPV2VrDo7_3Fo5q9z-Ddh-m85_GvF15ANspbo70Ey',
'course_start_tmp' => '0A7sPV2VrDo7_3Fo5q9z-Ddh-m85_GvF15ANspbo70Ey',
'order_over_tmp' => '586FN0OLJ1DPZgwPwh7Ke2P4wewhm7l67awB77qrOi8',
],
... ...
... ... @@ -25,7 +25,7 @@
*/
use think\Config;
use WeMini\Template;
use WeMini\Newtmpl;
use Workerman\Lib\Timer;
... ... @@ -51,13 +51,16 @@ class Events
'mch_key' => 'MmXiXHO16b89tNx75t3T8rHTYMQBbn19',
//'notify_url' => '127.0.0.1/wake/public/api/order/notify',
'notify_url' => 'http://wake.w.brotop.cn/api/order/notify',
'course_sign_tmp' => '0A7sPV2VrDo7_3Fo5q9z-Ddh-m85_GvF15ANspbo70Ey',
'course_start_tmp' => '0A7sPV2VrDo7_3Fo5q9z-Ddh-m85_GvF15ANspbo70Ey',
'order_over_tmp' => '586FN0OLJ1DPZgwPwh7Ke2P4wewhm7l67awB77qrOi8',
];
//订单到期
$timer = 60*1;
Timer::add($timer, function ($config){
error_log('order_over');
$template = new Template($config);
$template = new Newtmpl($config);
$order = new \app\admin\model\Order();
$order = $order->where(['status'=>'success','end'=>['<',date('Y-m-d H:i:s')]])->with('user')->select();
$notice = new \app\admin\model\UserNotice();
... ... @@ -76,13 +79,13 @@ class Events
//小程序通知
$data = [
'touser' => $k['user']['openid'],
'template_id' => '',
'form_id'=>'',
'page'=>'pages/index/index',
'template_id' => $config['order_over_tmp'],
'form_id'=> $k['id'],
'page'=>'pages/classReserve/classReserve',
'data'=>[
"keyword1"=>["value"=> "1", "color"=> "#173177"],
"keyword2"=>["value"=> "2", "color"=> "#173177"],
"keyword3"=>["value"=> "3", "color"=> "#173177"]
"thing1" => ["value" => "维克猩球"],
"number2" => ["value" => "0"],
"name3" => ["value" => $k['user']['nickname']],
],
];
$template->send($data);
... ... @@ -97,7 +100,7 @@ class Events
error_log('course_start');
$template = new Template($config);
$template = new Newtmpl($config);
$setting = new \app\admin\model\CourseSetting();
$setting = $setting->where(['setting_key'=>'course_start'])->find();
... ... @@ -108,13 +111,13 @@ class Events
}
$courseStore = new \app\admin\model\CourseStore();
$courseStore = $courseStore->where(['notify'=>false,'status'=>'confirmed','date'=>date('Y-m-d'),'time_start' => ['<',date('H:i:s',time()-$time)] ])->select();
$courseStore = $courseStore->where(['notify'=>false,'status'=>'confirmed','start' => ['<',date('Y-m-d H:i:s',time()+$time)] ])->select();
$notice = new \app\admin\model\UserNotice();
foreach ($courseStore as $k){
$courseStore = new \app\admin\model\CourseStore();
$courseStore->save(['notify'=>true],['id'=>$k['id']]);
$sign = new \app\admin\model\CourseSign();
$sign = $sign->with('user')->where(['course_store_id'=>$k['id']])->select();
$sign = $sign->with(['user','CourseStore'])->where(['course_store_id'=>$k['id']])->select();
foreach ($sign as $v){
$insert = [
... ... @@ -128,13 +131,14 @@ class Events
//小程序通知
$data = [
'touser' => $v['user']['openid'],
'template_id' => '',
'form_id'=>'',
'page'=>'pages/index/index',
'template_id' => $config['course_start_tmp'],
'form_id'=> $v['id'],
'page'=>'pages/classReserve/classReserve',
'data'=>[
"keyword1"=>["value"=> "1", "color"=> "#173177"],
"keyword2"=>["value"=> "2", "color"=> "#173177"],
"keyword3"=>["value"=> "3", "color"=> "#173177"]
"thing1" => ["value" => $courseStore['course']['name']],
"date2" => ["value" => $v['CourseStore']['start']],
"name3" => ["value" => $v['user']['nickname']],
"thing4" => ["value" => "课程即将开始"],
],
];
... ...
... ... @@ -31,7 +31,7 @@ $worker->name = 'wake';
// bussinessWorker进程数量
$worker->count = 1;
// 服务注册地址
$worker->registerAddress = '127.0.0.1:6978';
$worker->registerAddress = '127.0.0.1:16978';
// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START'))
... ...
... ... @@ -23,7 +23,7 @@ require_once __DIR__ . '/../../vendor/workerman/workerman/Autoloader.php';
Autoloader::setRootPath(__DIR__);
// gateway 进程
$gateway = new Gateway("Websocket://0.0.0.0:6868");
$gateway = new Gateway("Websocket://0.0.0.0:16868");
// 设置名称,方便status时查看
$gateway->name = 'ChatGateway';
// 设置进程数,gateway进程数建议与cpu核数相同
... ... @@ -32,13 +32,13 @@ $gateway->count = 1;
$gateway->lanIp = '127.0.0.1';
// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口
$gateway->startPort = 4000;
$gateway->startPort = 14000;
// 心跳间隔
$gateway->pingInterval = 10;
// 心跳数据
$gateway->pingData = '{"type":"ping"}';
// 服务注册地址
$gateway->registerAddress = '127.0.0.1:6978';
$gateway->registerAddress = '127.0.0.1:16978';
/*
// 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调
... ...
... ... @@ -20,7 +20,7 @@ require_once __DIR__ . '/../../vendor/workerman/workerman/Autoloader.php';
//require_once __DIR__ . '/../../vendor/workerman/gateway-worker-for-win/src/Register.php';
// register 服务必须是text协议
$register = new Register('text://0.0.0.0:6978');
$register = new Register('text://0.0.0.0:16978');
// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START'))
... ...
... ... @@ -15,11 +15,11 @@ require_once __DIR__ . '/../../vendor/workerman/workerman/Autoloader.php';
Autoloader::setRootPath(__DIR__);
// #### 内部推送端口(假设当前服务器内网ip为192.168.100.100) ####
$internal_gateway = new Gateway("Text://0.0.0.0:6878");
$internal_gateway = new Gateway("Text://0.0.0.0:16878");
$internal_gateway->name='internalGateway';
$internal_gateway->startPort = 6800;
// 服务注册地址
$internal_gateway->registerAddress = '127.0.0.1:6978';
$internal_gateway->registerAddress = '127.0.0.1:16978';
// #### 内部推送端口设置完毕 ####
if(!defined('GLOBAL_START'))
... ...
此 diff 太大无法显示。
... ... @@ -136,42 +136,6 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
bindevent: function () {
Form.api.bindevent($("form[role=form]"));
},
events : {
operate: {
'click .btn-publish': function (e, value, row, index) {
e.stopPropagation();
e.preventDefault(); //事件冒泡阻止
var that = this;
var table = $(that).closest('table');
var options = table.bootstrapTable('getOptions');
var load = Layer.prompt({title: '修改密码', shadeClose: true}, function (text, index) {
var id = row[options.pk];
$.ajax({
type : "POST",
url : "users/users/upPassword",
data : {
uid : id,
newPwd: newPwd
},
dataType: "json",
success : function (data) {
// console.log(data);
if (data.code == 1) {
Layer.msg('修改密码成功')
Layer.closeAll()
$('.btn-refresh').trigger('click')
} else {
Layer.msg('修改密码失败')
Layer.closeAll()
}
}
})
}
)
}
}
},
},
};
... ...