正在显示
15 个修改的文件
包含
178 行增加
和
104 行删除
@@ -77,14 +77,15 @@ class CourseStore extends Backend | @@ -77,14 +77,15 @@ class CourseStore extends Backend | ||
77 | $array['end'] = $k['date'].' '.$v['time_end']; | 77 | $array['end'] = $k['date'].' '.$v['time_end']; |
78 | $array['count'] = $params['count']; | 78 | $array['count'] = $params['count']; |
79 | $array['notify_count'] = $params['notify_count']; | 79 | $array['notify_count'] = $params['notify_count']; |
80 | + $array['status'] = 'new'; | ||
81 | + $array['is_end'] = false; | ||
80 | $data[] = $array; | 82 | $data[] = $array; |
81 | } | 83 | } |
82 | } | 84 | } |
83 | - | ||
84 | - $result = false; | ||
85 | - Db::startTrans(); | 85 | + if(!empty($data)){ |
86 | foreach ($data as $k){ | 86 | foreach ($data as $k){ |
87 | - $this->model->insert($k); | 87 | + $this->model->insertGetId($k); |
88 | + } | ||
88 | } | 89 | } |
89 | $this->success(); | 90 | $this->success(); |
90 | }else{ | 91 | }else{ |
@@ -66,7 +66,7 @@ | @@ -66,7 +66,7 @@ | ||
66 | <script id="eventtpl_1" type="text/html"> | 66 | <script id="eventtpl_1" type="text/html"> |
67 | <dd class="form-inline"> | 67 | <dd class="form-inline"> |
68 | <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> | 68 | <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> |
69 | - <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> | 69 | + <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> |
70 | <!--下面的两个按钮务必保留--> | 70 | <!--下面的两个按钮务必保留--> |
71 | <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span> | 71 | <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span> |
72 | <span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span> | 72 | <span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span> |
@@ -41,7 +41,7 @@ | @@ -41,7 +41,7 @@ | ||
41 | <div class="form-group"> | 41 | <div class="form-group"> |
42 | <label class="control-label col-xs-12 col-sm-2">{:__('Time_end')}:</label> | 42 | <label class="control-label col-xs-12 col-sm-2">{:__('Time_end')}:</label> |
43 | <div class="col-xs-12 col-sm-8"> | 43 | <div class="col-xs-12 col-sm-8"> |
44 | - <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}"> | 44 | + <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}"> |
45 | </div> | 45 | </div> |
46 | </div> | 46 | </div> |
47 | <div class="form-group layer-footer"> | 47 | <div class="form-group layer-footer"> |
@@ -6,11 +6,13 @@ use app\common\controller\Api; | @@ -6,11 +6,13 @@ use app\common\controller\Api; | ||
6 | use fast\Tree; | 6 | use fast\Tree; |
7 | use think\Config; | 7 | use think\Config; |
8 | use think\Db; | 8 | use think\Db; |
9 | -use WeMini\Template; | 9 | +use WeChat\Exceptions\InvalidResponseException; |
10 | +use WeChat\Exceptions\LocalCacheException; | ||
11 | +use WeMini\Newtmpl; | ||
10 | 12 | ||
11 | /** | 13 | /** |
12 | - * 课程接口 | ||
13 | - */ | 14 | +* 课程接口 |
15 | +*/ | ||
14 | class Course extends Api | 16 | class Course extends Api |
15 | { | 17 | { |
16 | protected $noNeedLogin = ['*']; | 18 | protected $noNeedLogin = ['*']; |
@@ -114,7 +116,11 @@ class Course extends Api | @@ -114,7 +116,11 @@ class Course extends Api | ||
114 | 116 | ||
115 | if(!empty($date)){ | 117 | if(!empty($date)){ |
116 | $courseStore = new \app\admin\model\CourseStore(); | 118 | $courseStore = new \app\admin\model\CourseStore(); |
117 | - $courseStore = $courseStore->where(['date'=>$date])->select(); | 119 | + $where1['status'] = 'confirmed'; |
120 | + $where1['is_end'] = false; | ||
121 | + $where1['end'] = ['>',date('Y-m-d H:i:s')]; | ||
122 | + $where1['date'] = $date; | ||
123 | + $courseStore = $courseStore->where($where1)->select(); | ||
118 | if(empty($courseStore)){ | 124 | if(empty($courseStore)){ |
119 | $this->success('请求成功',[]); | 125 | $this->success('请求成功',[]); |
120 | } | 126 | } |
@@ -132,6 +138,53 @@ class Course extends Api | @@ -132,6 +138,53 @@ class Course extends Api | ||
132 | } | 138 | } |
133 | 139 | ||
134 | /** | 140 | /** |
141 | + * 获得课程列表(日历) | ||
142 | + * | ||
143 | + * @ApiTitle (获得课程列表(日历)) | ||
144 | + * @ApiSummary (获得课程列表(日历)) | ||
145 | + * @ApiMethod (POST) | ||
146 | + * @ApiParams (name="start", type="string", required=false, description="开始时间") | ||
147 | + * @ApiParams (name="end", type="string", required=false, description="结束时间") | ||
148 | + * @ApiReturnParams (name="code", type="integer", required=true, sample="0") | ||
149 | + * @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功") | ||
150 | + * @ApiReturnParams (name="data", type="object", sample="{'prepay_id':'123','options':{},'order':{}}", description="扩展数据返回") | ||
151 | + * @ApiReturn ({'code':'1','msg':'返回成功'}) | ||
152 | + */ | ||
153 | + public function get_date_list() | ||
154 | + { | ||
155 | + $start= $this->request->request('start'); | ||
156 | + $end = $this->request->request('end'); | ||
157 | + | ||
158 | + if(empty($start)){ | ||
159 | + $start = date('Y-m-1',time()); | ||
160 | + } | ||
161 | + if(empty($end)){ | ||
162 | + $end = date('Y-m-d',mktime(23,59,59,date('m'),date('t'),date('Y'))); | ||
163 | + } | ||
164 | + | ||
165 | + for($i = strtotime($start); $i <= strtotime($end); $i += 86400) | ||
166 | + { | ||
167 | + $return[date("Y-m-d",$i)] = []; | ||
168 | + } | ||
169 | + | ||
170 | + | ||
171 | + $where['status'] = 'confirmed'; | ||
172 | + $where['is_end'] = false; | ||
173 | + $where['end'] = ['>',date('Y-m-d H:i:s')]; | ||
174 | + $where['date'] = ['between',[$start,$end]]; | ||
175 | + | ||
176 | + $courseStore = new \app\admin\model\CourseStore(); | ||
177 | + $courseStore = $courseStore->with('course')->where($where)->select(); | ||
178 | + if(!empty($courseStore)){ | ||
179 | + foreach ($courseStore as $k){ | ||
180 | + $return[$k['date']][$k['course_id']] = $k['course']; | ||
181 | + } | ||
182 | + } | ||
183 | + | ||
184 | + $this->success('请求成功',$return); | ||
185 | + } | ||
186 | + | ||
187 | + /** | ||
135 | * 获得课程 | 188 | * 获得课程 |
136 | * | 189 | * |
137 | * @ApiTitle (获得课程) | 190 | * @ApiTitle (获得课程) |
@@ -139,15 +192,17 @@ class Course extends Api | @@ -139,15 +192,17 @@ class Course extends Api | ||
139 | * @ApiMethod (POST) | 192 | * @ApiMethod (POST) |
140 | * @ApiParams (name="id", type="string", required=true, description="ID") | 193 | * @ApiParams (name="id", type="string", required=true, description="ID") |
141 | * @ApiParams (name="store_id", type="string", required=false, description="门店id") | 194 | * @ApiParams (name="store_id", type="string", required=false, description="门店id") |
195 | + * @ApiParams (name="user_id", type="string", required=false, description="用户id") | ||
142 | * @ApiReturnParams (name="code", type="integer", required=true, sample="0") | 196 | * @ApiReturnParams (name="code", type="integer", required=true, sample="0") |
143 | * @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功") | 197 | * @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功") |
144 | * @ApiReturnParams (name="data", type="object", sample="{'prepay_id':'123','options':{},'order':{}}", description="扩展数据返回") | 198 | * @ApiReturnParams (name="data", type="object", sample="{'prepay_id':'123','options':{},'order':{}}", description="扩展数据返回") |
145 | * @ApiReturn ({'code':'1','msg':'返回成功'}) | 199 | * @ApiReturn ({'code':'1','msg':'返回成功'}) |
146 | */ | 200 | */ |
147 | - public function ge_id() | 201 | + public function get_id() |
148 | { | 202 | { |
149 | $id = $this->request->request('id'); | 203 | $id = $this->request->request('id'); |
150 | $store_id = $this->request->request('store_id'); | 204 | $store_id = $this->request->request('store_id'); |
205 | + $user_id = $this->request->request('user_id'); | ||
151 | if(!$id){ | 206 | if(!$id){ |
152 | $this->error(__('Invalid parameters')); | 207 | $this->error(__('Invalid parameters')); |
153 | } | 208 | } |
@@ -160,44 +215,66 @@ class Course extends Api | @@ -160,44 +215,66 @@ class Course extends Api | ||
160 | $course = $course->toArray(); | 215 | $course = $course->toArray(); |
161 | $course['cover'] = cdnurl($course['cover'],true); | 216 | $course['cover'] = cdnurl($course['cover'],true); |
162 | $banner = explode(",", $course['banner']); | 217 | $banner = explode(",", $course['banner']); |
163 | - foreach ($banner as &$k){ | ||
164 | - $k = cdnurl($k,true); | 218 | + foreach ($banner as &$m){ |
219 | + $m = cdnurl($m,true); | ||
165 | } | 220 | } |
166 | $course['banner'] = $banner; | 221 | $course['banner'] = $banner; |
167 | //查询门店课程 | 222 | //查询门店课程 |
168 | $courseStore = new \app\admin\model\CourseStore(); | 223 | $courseStore = new \app\admin\model\CourseStore(); |
169 | $where['course_id'] = $id; | 224 | $where['course_id'] = $id; |
170 | $where['status'] = 'confirmed'; | 225 | $where['status'] = 'confirmed'; |
226 | + $where['is_end'] = false; | ||
227 | + $where['end'] = ['>',date('Y-m-d H:i:s')]; | ||
171 | if(!empty($store_id)){ | 228 | if(!empty($store_id)){ |
172 | $where['store_id'] = $store_id; | 229 | $where['store_id'] = $store_id; |
173 | } | 230 | } |
174 | - $courseStore = $courseStore->with('store')->where($where)->order('date','desc')->select(); | 231 | + $courseStore = $courseStore->where($where)->order('date','asc')->select(); |
175 | $store = []; | 232 | $store = []; |
176 | foreach ($courseStore as $k){ | 233 | foreach ($courseStore as $k){ |
234 | + $k['enable'] = true; | ||
235 | + if(!empty($user_id)){ | ||
236 | + $sign = new \app\admin\model\CourseSign(); | ||
237 | + $sign = $sign->where(['course_store_id'=>$k['id'],'user_id'=>$user_id])->find(); | ||
238 | + if(!empty($sign)){ | ||
239 | + $k['enable'] = false; | ||
240 | + } | ||
241 | + } | ||
242 | + | ||
177 | if(!isset($store[$k['store_id']])){ | 243 | if(!isset($store[$k['store_id']])){ |
178 | - $k['store']['start'] = $k['date']; | ||
179 | - $k['store']['end'] = $k['date']; | 244 | + $store1 = new \app\admin\model\Store(); |
245 | + $store1 = $store1->where(['id'=>$k['store_id']])->find(); | ||
246 | + if(empty($store1)){ | ||
247 | + continue; | ||
248 | + } | ||
249 | + $store1 = $store1->toArray(); | ||
250 | + $store1['start'] = $k['start']; | ||
251 | + $store1['end'] = $k['end']; | ||
252 | + $store1['course'] = []; | ||
180 | $sign = new \app\admin\model\CourseSign(); | 253 | $sign = new \app\admin\model\CourseSign(); |
181 | - $k['store']['sign_count'] = $sign->where(['course_id'=>$id,'store_id'=>$k['store_id'],'publish_time'=>['>',date('Y-m-d H:i:s')]])->count(); | ||
182 | - $store[$k['store_id']] = $k['store']; | 254 | + $k['sign_count'] = $sign->where(['course_store_id'=>$k['id']])->count(); |
255 | + $store[$k['store_id']] = $store1; | ||
183 | } | 256 | } |
184 | - if( $k['date'] < $store[$k['store_id']]['start']){ | ||
185 | - $store[$k['store_id']]['start'] = $k['date']; | 257 | + if( $k['start'] < $store[$k['store_id']]['start']){ |
258 | + $store[$k['store_id']]['start'] = $k['start']; | ||
186 | } | 259 | } |
187 | - if( $k['date'] > $store[$k['store_id']]['end']){ | ||
188 | - $store[$k['store_id']]['end'] = $k['date']; | 260 | + if( $k['end'] > $store[$k['store_id']]['end']){ |
261 | + $store[$k['store_id']]['end'] = $k['end']; | ||
189 | } | 262 | } |
263 | + | ||
264 | + $store[$k['store_id']]['course'][] = $k; | ||
190 | } | 265 | } |
191 | 266 | ||
192 | $course['store'] = array_values($store); | 267 | $course['store'] = array_values($store); |
193 | 268 | ||
194 | - foreach ($course['store'] as &$k){ | 269 | + /* foreach ($course['store'] as &$k){ |
195 | $courseStore = new \app\admin\model\CourseStore(); | 270 | $courseStore = new \app\admin\model\CourseStore(); |
196 | $where['course_id'] = $id; | 271 | $where['course_id'] = $id; |
197 | $where['store_id'] = $k['id']; | 272 | $where['store_id'] = $k['id']; |
198 | $where['status'] = 'confirmed'; | 273 | $where['status'] = 'confirmed'; |
274 | + $where['is_end'] = false; | ||
275 | + $where['end'] = ['>',date('Y-m-d H:i:s')]; | ||
199 | $k['course'] = $courseStore->with('store')->where($where)->order('date','desc')->select(); | 276 | $k['course'] = $courseStore->with('store')->where($where)->order('date','desc')->select(); |
200 | - } | 277 | + }*/ |
201 | 278 | ||
202 | //查询评价 | 279 | //查询评价 |
203 | $star = new \app\admin\model\CourseSignStart(); | 280 | $star = new \app\admin\model\CourseSignStart(); |
@@ -346,7 +423,7 @@ class Course extends Api | @@ -346,7 +423,7 @@ class Course extends Api | ||
346 | } | 423 | } |
347 | 424 | ||
348 | $courseStore = new \app\admin\model\CourseStore(); | 425 | $courseStore = new \app\admin\model\CourseStore(); |
349 | - $courseStore = $courseStore->with(['course','store'])->where(['id'=>$course_store_id,'status'=>'confirmed'])->find(); | 426 | + $courseStore = $courseStore->with(['course','store'])->where(['id'=>$course_store_id,'status'=>'confirmed','is_end'=>false,'end'=>['>',date('Y-m-d H:i:s')]])->find(); |
350 | if(empty($courseStore)){ | 427 | if(empty($courseStore)){ |
351 | $this->error(__('Invalid parameters')); | 428 | $this->error(__('Invalid parameters')); |
352 | } | 429 | } |
@@ -358,7 +435,12 @@ class Course extends Api | @@ -358,7 +435,12 @@ class Course extends Api | ||
358 | $this->error('已经报名了'); | 435 | $this->error('已经报名了'); |
359 | } | 436 | } |
360 | 437 | ||
438 | + $user = new \app\admin\model\User; | ||
439 | + $user = $user->where(['id'=>$user_id])->field('password,salt',true)->find(); | ||
440 | + if(empty($user)){ | ||
361 | 441 | ||
442 | + } | ||
443 | + $user = $user->toArray(); | ||
362 | 444 | ||
363 | //查看支付情况 | 445 | //查看支付情况 |
364 | /*$order = new \app\admin\model\Order(); | 446 | /*$order = new \app\admin\model\Order(); |
@@ -406,11 +488,12 @@ class Course extends Api | @@ -406,11 +488,12 @@ class Course extends Api | ||
406 | $order->save(['remain'=>$remain-1],['id'=>$order_id]); | 488 | $order->save(['remain'=>$remain-1],['id'=>$order_id]); |
407 | 489 | ||
408 | //开课人数够了 | 490 | //开课人数够了 |
409 | - $sign_count = $sign->where(['course_store_id'=>$course_store_id])->count(); | ||
410 | - if($sign_count >= $courseStore['notify_count']){ | ||
411 | - $template = new Template(Config::get('weChat')); | ||
412 | $sign = new \app\admin\model\CourseSign(); | 491 | $sign = new \app\admin\model\CourseSign(); |
413 | - $sign_data = $sign->with('user')->where(['course_store_id'=>$course_store_id,'notify'=>false])->select(); | 492 | + $signCount = $sign->where(['course_store_id'=>$course_store_id])->count(); |
493 | + if($signCount >= $courseStore['notify_count']){ | ||
494 | + $template = new Newtmpl(Config::get('weChat')); | ||
495 | + $sign = new \app\admin\model\CourseSign(); | ||
496 | + $sign_data = $sign->with(['user','CourseStore'])->where(['course_store_id'=>$course_store_id,'notify'=>false])->select(); | ||
414 | $notice = new \app\admin\model\UserNotice(); | 497 | $notice = new \app\admin\model\UserNotice(); |
415 | foreach ($sign_data as $k){ | 498 | foreach ($sign_data as $k){ |
416 | 499 | ||
@@ -426,19 +509,24 @@ class Course extends Api | @@ -426,19 +509,24 @@ class Course extends Api | ||
426 | 509 | ||
427 | 510 | ||
428 | //小程序通知 | 511 | //小程序通知 |
429 | - /* $data = [ | 512 | + $data = [ |
430 | 'touser' => $k['user']['openid'], | 513 | 'touser' => $k['user']['openid'], |
431 | - 'template_id' => '', | ||
432 | - 'form_id'=>'', | ||
433 | - 'page'=>'pages/index/index', | 514 | + 'template_id' => Config::get('course_sign_tmp'), |
515 | + 'form_id'=>$k['id'], | ||
516 | + 'page'=>'pages/classReserve/classReserve', | ||
434 | 'data'=>[ | 517 | 'data'=>[ |
435 | - "keyword1"=>["value"=> "1", "color"=> "#173177"], | ||
436 | - "keyword2"=>["value"=> "2", "color"=> "#173177"], | ||
437 | - "keyword3"=>["value"=> "3", "color"=> "#173177"] | 518 | + "thing1" => ["value" => $courseStore['course']['name']], |
519 | + "date2" => ["value" => $k['CourseStore']['start']], | ||
520 | + "name3" => ["value" => $k['user']['nickname']], | ||
521 | + "thing4" => ["value" => "课程预约成功"], | ||
438 | ], | 522 | ], |
439 | ]; | 523 | ]; |
440 | 524 | ||
441 | - $template->send($data);*/ | 525 | + try { |
526 | + $template->send($data); | ||
527 | + } catch (InvalidResponseException $e) { | ||
528 | + } catch (LocalCacheException $e) { | ||
529 | + } | ||
442 | 530 | ||
443 | } | 531 | } |
444 | } | 532 | } |
@@ -146,7 +146,7 @@ class Order extends Api | @@ -146,7 +146,7 @@ class Order extends Api | ||
146 | $data['success_time'] = ''; | 146 | $data['success_time'] = ''; |
147 | 147 | ||
148 | $order = new \app\admin\model\Order(); | 148 | $order = new \app\admin\model\Order(); |
149 | - $order = $order->save($data); | 149 | + $order = $order->insertGetId($data); |
150 | 150 | ||
151 | $return['order'] = $order; | 151 | $return['order'] = $order; |
152 | $return['options'] = $options; | 152 | $return['options'] = $options; |
@@ -163,24 +163,26 @@ class Order extends Api | @@ -163,24 +163,26 @@ class Order extends Api | ||
163 | $wechat = \WeChat\Pay::instance($this->config); | 163 | $wechat = \WeChat\Pay::instance($this->config); |
164 | 164 | ||
165 | $data = $wechat->getNotify(); | 165 | $data = $wechat->getNotify(); |
166 | + | ||
166 | if ($data['return_code'] === 'SUCCESS' && $data['result_code'] === 'SUCCESS') { | 167 | if ($data['return_code'] === 'SUCCESS' && $data['result_code'] === 'SUCCESS') { |
167 | 168 | ||
168 | $order_no = $data['out_trade_no']; | 169 | $order_no = $data['out_trade_no']; |
169 | $order = new \app\admin\model\Order(); | 170 | $order = new \app\admin\model\Order(); |
170 | $order = $order->where(['order_id'=>$order_no])->find(); | 171 | $order = $order->where(['order_id'=>$order_no])->find(); |
171 | - if(empty($product)){ | 172 | + if(empty($order)){ |
172 | exit; | 173 | exit; |
173 | } | 174 | } |
174 | - if($order['total']*100 != $data['total_fee']){ | 175 | + $order = $order->toArray(); |
176 | + if((int)($order['total']*100) != $data['total_fee']){ | ||
175 | exit; | 177 | exit; |
176 | } | 178 | } |
177 | - $order = $order->toArray(); | 179 | + |
178 | 180 | ||
179 | $user = new \app\admin\model\User(); | 181 | $user = new \app\admin\model\User(); |
180 | $user->save(['status' => 'normal'], ['id' => $order['user_id']]); | 182 | $user->save(['status' => 'normal'], ['id' => $order['user_id']]); |
181 | 183 | ||
182 | - $order = new \app\admin\model\Order(); | ||
183 | - $user->save([ | 184 | + $order1 = new \app\admin\model\Order(); |
185 | + $order1->save([ | ||
184 | 'status' => 'success', | 186 | 'status' => 'success', |
185 | 'success_time' => date('Y-m-d H:i:s'), | 187 | 'success_time' => date('Y-m-d H:i:s'), |
186 | 'third_order_id' => $data['transaction_id'] | 188 | 'third_order_id' => $data['transaction_id'] |
@@ -132,6 +132,8 @@ class Store extends Api | @@ -132,6 +132,8 @@ class Store extends Api | ||
132 | $courseStore = new \app\admin\model\CourseStore(); | 132 | $courseStore = new \app\admin\model\CourseStore(); |
133 | $where['store_id'] = $id; | 133 | $where['store_id'] = $id; |
134 | $where['status'] = 'confirmed'; | 134 | $where['status'] = 'confirmed'; |
135 | + $where['is_end'] = false; | ||
136 | + $where['end'] = ['>',date('Y-m-d H:i:s')]; | ||
135 | $courseStore = $courseStore->with('course')->where($where)->order('date','desc')->select(); | 137 | $courseStore = $courseStore->with('course')->where($where)->order('date','desc')->select(); |
136 | $course = []; | 138 | $course = []; |
137 | foreach ($courseStore as $k){ | 139 | foreach ($courseStore as $k){ |
@@ -730,7 +730,7 @@ class User extends Api | @@ -730,7 +730,7 @@ class User extends Api | ||
730 | foreach ($notice as &$k){ | 730 | foreach ($notice as &$k){ |
731 | if($k['type'] == 'course_sign' || $k['type'] == 'course_start'){ | 731 | if($k['type'] == 'course_sign' || $k['type'] == 'course_start'){ |
732 | $course = new \app\admin\model\Course(); | 732 | $course = new \app\admin\model\Course(); |
733 | - $course= $course->where(['id'=>$k['content_id']])->find(); | 733 | + $course= $course->where(['id'=>$k['course_sign']['course_id']])->find(); |
734 | if(empty($course)){ | 734 | if(empty($course)){ |
735 | $course = []; | 735 | $course = []; |
736 | }else{ | 736 | }else{ |
@@ -738,6 +738,16 @@ class User extends Api | @@ -738,6 +738,16 @@ class User extends Api | ||
738 | } | 738 | } |
739 | 739 | ||
740 | $k['course'] = $course; | 740 | $k['course'] = $course; |
741 | + | ||
742 | + $store = new \app\admin\model\Store(); | ||
743 | + $store= $store->where(['id'=>$k['course_sign']['store_id']])->find(); | ||
744 | + if(empty($store)){ | ||
745 | + $store = []; | ||
746 | + }else{ | ||
747 | + $store = $store->toArray(); | ||
748 | + } | ||
749 | + | ||
750 | + $k['store'] = $store; | ||
741 | } | 751 | } |
742 | } | 752 | } |
743 | $this->success('ok',$notice); | 753 | $this->success('ok',$notice); |
@@ -20,6 +20,9 @@ return [ | @@ -20,6 +20,9 @@ return [ | ||
20 | 'mch_key' => 'MmXiXHO16b89tNx75t3T8rHTYMQBbn19', | 20 | 'mch_key' => 'MmXiXHO16b89tNx75t3T8rHTYMQBbn19', |
21 | //'notify_url' => '127.0.0.1/wake/public/api/order/notify', | 21 | //'notify_url' => '127.0.0.1/wake/public/api/order/notify', |
22 | 'notify_url' => 'http://wake.w.brotop.cn/api/order/notify', | 22 | 'notify_url' => 'http://wake.w.brotop.cn/api/order/notify', |
23 | + 'course_sign_tmp' => '0A7sPV2VrDo7_3Fo5q9z-Ddh-m85_GvF15ANspbo70Ey', | ||
24 | + 'course_start_tmp' => '0A7sPV2VrDo7_3Fo5q9z-Ddh-m85_GvF15ANspbo70Ey', | ||
25 | + 'order_over_tmp' => '586FN0OLJ1DPZgwPwh7Ke2P4wewhm7l67awB77qrOi8', | ||
23 | ], | 26 | ], |
24 | 27 | ||
25 | 28 |
@@ -25,7 +25,7 @@ | @@ -25,7 +25,7 @@ | ||
25 | */ | 25 | */ |
26 | 26 | ||
27 | use think\Config; | 27 | use think\Config; |
28 | -use WeMini\Template; | 28 | +use WeMini\Newtmpl; |
29 | use Workerman\Lib\Timer; | 29 | use Workerman\Lib\Timer; |
30 | 30 | ||
31 | 31 | ||
@@ -51,13 +51,16 @@ class Events | @@ -51,13 +51,16 @@ class Events | ||
51 | 'mch_key' => 'MmXiXHO16b89tNx75t3T8rHTYMQBbn19', | 51 | 'mch_key' => 'MmXiXHO16b89tNx75t3T8rHTYMQBbn19', |
52 | //'notify_url' => '127.0.0.1/wake/public/api/order/notify', | 52 | //'notify_url' => '127.0.0.1/wake/public/api/order/notify', |
53 | 'notify_url' => 'http://wake.w.brotop.cn/api/order/notify', | 53 | 'notify_url' => 'http://wake.w.brotop.cn/api/order/notify', |
54 | + 'course_sign_tmp' => '0A7sPV2VrDo7_3Fo5q9z-Ddh-m85_GvF15ANspbo70Ey', | ||
55 | + 'course_start_tmp' => '0A7sPV2VrDo7_3Fo5q9z-Ddh-m85_GvF15ANspbo70Ey', | ||
56 | + 'order_over_tmp' => '586FN0OLJ1DPZgwPwh7Ke2P4wewhm7l67awB77qrOi8', | ||
54 | ]; | 57 | ]; |
55 | 58 | ||
56 | //订单到期 | 59 | //订单到期 |
57 | $timer = 60*1; | 60 | $timer = 60*1; |
58 | Timer::add($timer, function ($config){ | 61 | Timer::add($timer, function ($config){ |
59 | error_log('order_over'); | 62 | error_log('order_over'); |
60 | - $template = new Template($config); | 63 | + $template = new Newtmpl($config); |
61 | $order = new \app\admin\model\Order(); | 64 | $order = new \app\admin\model\Order(); |
62 | $order = $order->where(['status'=>'success','end'=>['<',date('Y-m-d H:i:s')]])->with('user')->select(); | 65 | $order = $order->where(['status'=>'success','end'=>['<',date('Y-m-d H:i:s')]])->with('user')->select(); |
63 | $notice = new \app\admin\model\UserNotice(); | 66 | $notice = new \app\admin\model\UserNotice(); |
@@ -76,13 +79,13 @@ class Events | @@ -76,13 +79,13 @@ class Events | ||
76 | //小程序通知 | 79 | //小程序通知 |
77 | $data = [ | 80 | $data = [ |
78 | 'touser' => $k['user']['openid'], | 81 | 'touser' => $k['user']['openid'], |
79 | - 'template_id' => '', | ||
80 | - 'form_id'=>'', | ||
81 | - 'page'=>'pages/index/index', | 82 | + 'template_id' => $config['order_over_tmp'], |
83 | + 'form_id'=> $k['id'], | ||
84 | + 'page'=>'pages/classReserve/classReserve', | ||
82 | 'data'=>[ | 85 | 'data'=>[ |
83 | - "keyword1"=>["value"=> "1", "color"=> "#173177"], | ||
84 | - "keyword2"=>["value"=> "2", "color"=> "#173177"], | ||
85 | - "keyword3"=>["value"=> "3", "color"=> "#173177"] | 86 | + "thing1" => ["value" => "维克猩球"], |
87 | + "number2" => ["value" => "0"], | ||
88 | + "name3" => ["value" => $k['user']['nickname']], | ||
86 | ], | 89 | ], |
87 | ]; | 90 | ]; |
88 | $template->send($data); | 91 | $template->send($data); |
@@ -97,7 +100,7 @@ class Events | @@ -97,7 +100,7 @@ class Events | ||
97 | 100 | ||
98 | error_log('course_start'); | 101 | error_log('course_start'); |
99 | 102 | ||
100 | - $template = new Template($config); | 103 | + $template = new Newtmpl($config); |
101 | 104 | ||
102 | $setting = new \app\admin\model\CourseSetting(); | 105 | $setting = new \app\admin\model\CourseSetting(); |
103 | $setting = $setting->where(['setting_key'=>'course_start'])->find(); | 106 | $setting = $setting->where(['setting_key'=>'course_start'])->find(); |
@@ -108,13 +111,13 @@ class Events | @@ -108,13 +111,13 @@ class Events | ||
108 | } | 111 | } |
109 | 112 | ||
110 | $courseStore = new \app\admin\model\CourseStore(); | 113 | $courseStore = new \app\admin\model\CourseStore(); |
111 | - $courseStore = $courseStore->where(['notify'=>false,'status'=>'confirmed','date'=>date('Y-m-d'),'time_start' => ['<',date('H:i:s',time()-$time)] ])->select(); | 114 | + $courseStore = $courseStore->where(['notify'=>false,'status'=>'confirmed','start' => ['<',date('Y-m-d H:i:s',time()+$time)] ])->select(); |
112 | $notice = new \app\admin\model\UserNotice(); | 115 | $notice = new \app\admin\model\UserNotice(); |
113 | foreach ($courseStore as $k){ | 116 | foreach ($courseStore as $k){ |
114 | $courseStore = new \app\admin\model\CourseStore(); | 117 | $courseStore = new \app\admin\model\CourseStore(); |
115 | $courseStore->save(['notify'=>true],['id'=>$k['id']]); | 118 | $courseStore->save(['notify'=>true],['id'=>$k['id']]); |
116 | $sign = new \app\admin\model\CourseSign(); | 119 | $sign = new \app\admin\model\CourseSign(); |
117 | - $sign = $sign->with('user')->where(['course_store_id'=>$k['id']])->select(); | 120 | + $sign = $sign->with(['user','CourseStore'])->where(['course_store_id'=>$k['id']])->select(); |
118 | foreach ($sign as $v){ | 121 | foreach ($sign as $v){ |
119 | 122 | ||
120 | $insert = [ | 123 | $insert = [ |
@@ -128,13 +131,14 @@ class Events | @@ -128,13 +131,14 @@ class Events | ||
128 | //小程序通知 | 131 | //小程序通知 |
129 | $data = [ | 132 | $data = [ |
130 | 'touser' => $v['user']['openid'], | 133 | 'touser' => $v['user']['openid'], |
131 | - 'template_id' => '', | ||
132 | - 'form_id'=>'', | ||
133 | - 'page'=>'pages/index/index', | 134 | + 'template_id' => $config['course_start_tmp'], |
135 | + 'form_id'=> $v['id'], | ||
136 | + 'page'=>'pages/classReserve/classReserve', | ||
134 | 'data'=>[ | 137 | 'data'=>[ |
135 | - "keyword1"=>["value"=> "1", "color"=> "#173177"], | ||
136 | - "keyword2"=>["value"=> "2", "color"=> "#173177"], | ||
137 | - "keyword3"=>["value"=> "3", "color"=> "#173177"] | 138 | + "thing1" => ["value" => $courseStore['course']['name']], |
139 | + "date2" => ["value" => $v['CourseStore']['start']], | ||
140 | + "name3" => ["value" => $v['user']['nickname']], | ||
141 | + "thing4" => ["value" => "课程即将开始"], | ||
138 | ], | 142 | ], |
139 | ]; | 143 | ]; |
140 | 144 |
@@ -31,7 +31,7 @@ $worker->name = 'wake'; | @@ -31,7 +31,7 @@ $worker->name = 'wake'; | ||
31 | // bussinessWorker进程数量 | 31 | // bussinessWorker进程数量 |
32 | $worker->count = 1; | 32 | $worker->count = 1; |
33 | // 服务注册地址 | 33 | // 服务注册地址 |
34 | -$worker->registerAddress = '127.0.0.1:6978'; | 34 | +$worker->registerAddress = '127.0.0.1:16978'; |
35 | 35 | ||
36 | // 如果不是在根目录启动,则运行runAll方法 | 36 | // 如果不是在根目录启动,则运行runAll方法 |
37 | if(!defined('GLOBAL_START')) | 37 | if(!defined('GLOBAL_START')) |
@@ -23,7 +23,7 @@ require_once __DIR__ . '/../../vendor/workerman/workerman/Autoloader.php'; | @@ -23,7 +23,7 @@ require_once __DIR__ . '/../../vendor/workerman/workerman/Autoloader.php'; | ||
23 | Autoloader::setRootPath(__DIR__); | 23 | Autoloader::setRootPath(__DIR__); |
24 | 24 | ||
25 | // gateway 进程 | 25 | // gateway 进程 |
26 | -$gateway = new Gateway("Websocket://0.0.0.0:6868"); | 26 | +$gateway = new Gateway("Websocket://0.0.0.0:16868"); |
27 | // 设置名称,方便status时查看 | 27 | // 设置名称,方便status时查看 |
28 | $gateway->name = 'ChatGateway'; | 28 | $gateway->name = 'ChatGateway'; |
29 | // 设置进程数,gateway进程数建议与cpu核数相同 | 29 | // 设置进程数,gateway进程数建议与cpu核数相同 |
@@ -32,13 +32,13 @@ $gateway->count = 1; | @@ -32,13 +32,13 @@ $gateway->count = 1; | ||
32 | $gateway->lanIp = '127.0.0.1'; | 32 | $gateway->lanIp = '127.0.0.1'; |
33 | // 内部通讯起始端口,假如$gateway->count=4,起始端口为4000 | 33 | // 内部通讯起始端口,假如$gateway->count=4,起始端口为4000 |
34 | // 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口 | 34 | // 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口 |
35 | -$gateway->startPort = 4000; | 35 | +$gateway->startPort = 14000; |
36 | // 心跳间隔 | 36 | // 心跳间隔 |
37 | $gateway->pingInterval = 10; | 37 | $gateway->pingInterval = 10; |
38 | // 心跳数据 | 38 | // 心跳数据 |
39 | $gateway->pingData = '{"type":"ping"}'; | 39 | $gateway->pingData = '{"type":"ping"}'; |
40 | // 服务注册地址 | 40 | // 服务注册地址 |
41 | -$gateway->registerAddress = '127.0.0.1:6978'; | 41 | +$gateway->registerAddress = '127.0.0.1:16978'; |
42 | 42 | ||
43 | /* | 43 | /* |
44 | // 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调 | 44 | // 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调 |
@@ -20,7 +20,7 @@ require_once __DIR__ . '/../../vendor/workerman/workerman/Autoloader.php'; | @@ -20,7 +20,7 @@ require_once __DIR__ . '/../../vendor/workerman/workerman/Autoloader.php'; | ||
20 | //require_once __DIR__ . '/../../vendor/workerman/gateway-worker-for-win/src/Register.php'; | 20 | //require_once __DIR__ . '/../../vendor/workerman/gateway-worker-for-win/src/Register.php'; |
21 | 21 | ||
22 | // register 服务必须是text协议 | 22 | // register 服务必须是text协议 |
23 | -$register = new Register('text://0.0.0.0:6978'); | 23 | +$register = new Register('text://0.0.0.0:16978'); |
24 | 24 | ||
25 | // 如果不是在根目录启动,则运行runAll方法 | 25 | // 如果不是在根目录启动,则运行runAll方法 |
26 | if(!defined('GLOBAL_START')) | 26 | if(!defined('GLOBAL_START')) |
@@ -15,11 +15,11 @@ require_once __DIR__ . '/../../vendor/workerman/workerman/Autoloader.php'; | @@ -15,11 +15,11 @@ require_once __DIR__ . '/../../vendor/workerman/workerman/Autoloader.php'; | ||
15 | Autoloader::setRootPath(__DIR__); | 15 | Autoloader::setRootPath(__DIR__); |
16 | 16 | ||
17 | // #### 内部推送端口(假设当前服务器内网ip为192.168.100.100) #### | 17 | // #### 内部推送端口(假设当前服务器内网ip为192.168.100.100) #### |
18 | -$internal_gateway = new Gateway("Text://0.0.0.0:6878"); | 18 | +$internal_gateway = new Gateway("Text://0.0.0.0:16878"); |
19 | $internal_gateway->name='internalGateway'; | 19 | $internal_gateway->name='internalGateway'; |
20 | $internal_gateway->startPort = 6800; | 20 | $internal_gateway->startPort = 6800; |
21 | // 服务注册地址 | 21 | // 服务注册地址 |
22 | -$internal_gateway->registerAddress = '127.0.0.1:6978'; | 22 | +$internal_gateway->registerAddress = '127.0.0.1:16978'; |
23 | // #### 内部推送端口设置完毕 #### | 23 | // #### 内部推送端口设置完毕 #### |
24 | 24 | ||
25 | if(!defined('GLOBAL_START')) | 25 | if(!defined('GLOBAL_START')) |
此 diff 太大无法显示。
@@ -136,42 +136,6 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin | @@ -136,42 +136,6 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin | ||
136 | bindevent: function () { | 136 | bindevent: function () { |
137 | Form.api.bindevent($("form[role=form]")); | 137 | Form.api.bindevent($("form[role=form]")); |
138 | }, | 138 | }, |
139 | - events : { | ||
140 | - operate: { | ||
141 | - 'click .btn-publish': function (e, value, row, index) { | ||
142 | - e.stopPropagation(); | ||
143 | - e.preventDefault(); //事件冒泡阻止 | ||
144 | - var that = this; | ||
145 | - var table = $(that).closest('table'); | ||
146 | - var options = table.bootstrapTable('getOptions'); | ||
147 | - var load = Layer.prompt({title: '修改密码', shadeClose: true}, function (text, index) { | ||
148 | - var id = row[options.pk]; | ||
149 | - $.ajax({ | ||
150 | - type : "POST", | ||
151 | - url : "users/users/upPassword", | ||
152 | - data : { | ||
153 | - uid : id, | ||
154 | - newPwd: newPwd | ||
155 | - }, | ||
156 | - dataType: "json", | ||
157 | - success : function (data) { | ||
158 | - // console.log(data); | ||
159 | - if (data.code == 1) { | ||
160 | - Layer.msg('修改密码成功') | ||
161 | - Layer.closeAll() | ||
162 | - $('.btn-refresh').trigger('click') | ||
163 | - } else { | ||
164 | - Layer.msg('修改密码失败') | ||
165 | - Layer.closeAll() | ||
166 | - } | ||
167 | - | ||
168 | - } | ||
169 | - }) | ||
170 | - } | ||
171 | - ) | ||
172 | - } | ||
173 | - } | ||
174 | - }, | ||
175 | 139 | ||
176 | }, | 140 | }, |
177 | }; | 141 | }; |
-
请 注册 或 登录 后发表评论