You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
493 lines
18 KiB
493 lines
18 KiB
<?php
|
|
namespace app\index\controller;
|
|
use think\Controller;
|
|
use think\Loader;
|
|
use think\Db;
|
|
class Index extends Controller
|
|
{
|
|
|
|
public function index(){
|
|
//获取活动数据
|
|
$data=db('activity')->where('parentid',0)->order('id asc')->limit(4)->select();
|
|
foreach ($data as $k=>$v){
|
|
$data[$k]['son']=db('activity')->where('parentid',$v['id'])->order('id asc')->select();
|
|
}
|
|
$this->assign('one',$data[0]);
|
|
$this->assign('two',$data[1]);
|
|
$this->assign('three',$data[2]);
|
|
return $this->fetch();
|
|
|
|
}
|
|
//军训页面
|
|
public function training(){
|
|
$data=db('activity')->where('id',19)->find();
|
|
$data['son']=db('activity')->where('parentid',$data['id'])->order('sonid asc')->select();
|
|
$this->assign('data',$data);
|
|
return $this->fetch();
|
|
}
|
|
// 红色
|
|
public function red(){
|
|
$data=db('activity')->where('id',117)->find();
|
|
$data['son']=db('activity')->where('parentid',$data['id'])->order('sonid asc')->select();
|
|
$this->assign('data',$data);
|
|
return $this->fetch();
|
|
}
|
|
// 获取年数据
|
|
public function redYear(){
|
|
$year = input('year',date('Y'),'intval');
|
|
$data=db('activity')->where('parentid',117)->whereBetween('start_time',[$year.'-01-01',$year.'-12-31'])->order('start_time desc,sonid asc')->select();
|
|
//这边要改成按照付款人数来显示
|
|
foreach ($data as $k=>$v){
|
|
$data[$k]['buy_num']=db('order')->where(['aid'=>$v['id'],'status'=>2])->count();
|
|
}
|
|
$this->result($data,0,'','json');
|
|
}
|
|
|
|
// 获取年数据
|
|
public function trainingYear(){
|
|
$year = input('year',date('Y'),'intval');
|
|
$data=db('activity')->where('parentid',19)->whereBetween('start_time',[$year.'-01-01',$year.'-12-31'])->order('start_time desc,sonid asc')->select();
|
|
//这边要改成按照付款人数来显示
|
|
foreach ($data as $k=>$v){
|
|
$data[$k]['buy_num']=db('order')->where(['aid'=>$v['id'],'status'=>2])->count();
|
|
}
|
|
$this->result($data,0,'','json');
|
|
}
|
|
//社会实践教育
|
|
public function practice(){
|
|
$data=db('activity')->where('id',28)->find();
|
|
$data['son']=db('activity')->where('parentid',$data['id'])->order('sonid asc')->select();
|
|
//这边要改成按照付款人数来显示
|
|
foreach ($data['son'] as $k=>$v){
|
|
$data['son'][$k]['buy_num']=db('order')->where(['aid'=>$v['id'],'status'=>2])->count();
|
|
}
|
|
$this->assign('data',$data);
|
|
return $this->fetch();
|
|
}
|
|
//社会实践教育
|
|
public function practices(){
|
|
$data=db('activity')->where('id',28)->find();
|
|
$data['son']=db('activity')->where('parentid',$data['id'])->order('sonid asc')->select();
|
|
//这边要改成按照付款人数来显示
|
|
foreach ($data['son'] as $k=>$v){
|
|
$data['son'][$k]['buy_num']=db('order')->where(['aid'=>$v['id'],'status'=>2])->count();
|
|
}
|
|
$this->assign('data',$data);
|
|
return $this->fetch();
|
|
}
|
|
|
|
// 获取年数据
|
|
public function practiceYear(){
|
|
$year = input('year',date('Y'),'intval');
|
|
$data=db('activity')->where('parentid',28)->whereBetween('start_time',[$year.'-01-01',$year.'-12-31'])->order('start_time desc,sonid asc')->select();
|
|
//这边要改成按照付款人数来显示
|
|
foreach ($data as $k=>$v){
|
|
$data[$k]['buy_num']=db('order')->where(['aid'=>$v['id'],'status'=>2])->count();
|
|
}
|
|
$this->result($data,0,'','json');
|
|
}
|
|
|
|
//获取班级页面
|
|
public function getClass(){
|
|
$aid=(int) input('aid');
|
|
$data=db('class')->where('aid',$aid)->select();
|
|
return json($data);
|
|
}
|
|
|
|
public function paysuccess(){
|
|
$id=(int)input('oid');
|
|
//获得订单信息
|
|
$data=db('order')->where('id',$id)->find();
|
|
|
|
// 获取活动主题
|
|
$son=db('activity')->where('id',$data['aid'])->find();
|
|
$fu=db('activity')->where('id',$son['parentid'])->find();
|
|
$data['title']=$fu['title'];
|
|
$data['start_time']=$son['start_time'];
|
|
$data['end_time']=$son['end_time'];
|
|
$data['sex']=$data['sex']==1?'男':'女';
|
|
$this->assign('data',$data);
|
|
return $this->fetch();
|
|
}
|
|
|
|
public function insertOrder(){
|
|
$data['aid']=(int)input('id');
|
|
$data['grade']=input('grade',"");
|
|
$data['name']=input('name');
|
|
$data['school']=input('school',"");
|
|
$data['sex']=(int)input('sex');
|
|
$data['phone']=(int)input('phone');
|
|
$data['sfz']=input('sfz',"");
|
|
$type=input('type',0,'intval');
|
|
|
|
if(!$data['aid']){
|
|
$res['code']='FAIL';
|
|
$res['msg']='没有选择活动';
|
|
return json($res);
|
|
}
|
|
if(!$data['name']){
|
|
$res['code']='FAIL';
|
|
$res['msg']='没有填写姓名';
|
|
return json($res);
|
|
}
|
|
if(!$data['sex']){
|
|
$res['code']='FAIL';
|
|
$res['msg']='没有选择性别';
|
|
return json($res);
|
|
}
|
|
if ($type != 2) {
|
|
if(!$data['school']){
|
|
$res['code']='FAIL';
|
|
$res['msg']='没有填写学校';
|
|
return json($res);
|
|
}
|
|
|
|
if(!$data['grade']){
|
|
$res['code']='FAIL';
|
|
$res['msg']='没有填写年级';
|
|
return json($res);
|
|
}
|
|
|
|
}
|
|
if(!$data['phone']){
|
|
$res['code']='FAIL';
|
|
$res['msg']='没有填写手机号';
|
|
return json($res);
|
|
}
|
|
|
|
|
|
//验证手机号规则
|
|
if(!preg_match('/^1([0-9]{9})/',$data['phone'])){
|
|
$res['code']='FAIL';
|
|
$res['msg']='手机号格式有误';
|
|
return json($res);
|
|
}
|
|
|
|
//判断活动是否存在
|
|
Db::startTrans();
|
|
$activity_data=db('activity')->lock(true)->where(['id'=>$data['aid'],'parentid'=>['neq',0]])->find();
|
|
if(!$activity_data){
|
|
$res['code']='FAIL';
|
|
$res['msg']='活动不存在';
|
|
return json($res);
|
|
}
|
|
//判断人数有没有满
|
|
$fuActivity_data=db('activity')->where(['id'=>$activity_data['parentid']])->find();
|
|
if($fuActivity_data['max_num']<=$activity_data['buy_num']){
|
|
$res['code']='FAIL';
|
|
$res['msg']='活动人数已满,请报名其它活动';
|
|
return json($res);
|
|
}
|
|
if (time() > strtotime($activity_data['end_time'])) {
|
|
#$res['code']='FAIL';
|
|
#$res['msg']='报名已截止';
|
|
#return json($res);
|
|
}
|
|
|
|
if($fuActivity_data['id']==19 or $fuActivity_data['id']==28){
|
|
|
|
}else{
|
|
//如果不是军训的话 就要身份证
|
|
// if(!$data['sfz']){
|
|
// $res['code']='FAIL';
|
|
// $res['msg']='没有填写身份证';
|
|
// return json($res);
|
|
// }
|
|
}
|
|
|
|
//插入未支付的订单
|
|
$data['c_time']=date("Y-m-d H:i:s");
|
|
$data['status']=1;
|
|
$data['money']=$activity_data['price'];
|
|
$newId=db('order')->insertGetId($data);
|
|
db('activity')->where(['id'=>$data['aid']])->setInc('buy_num',1);
|
|
Db::commit();
|
|
|
|
$res['code']='SUCCESS';
|
|
$res['msg']='支付参数获取成功';
|
|
$res['id']=$newId;
|
|
return json($res);
|
|
|
|
}
|
|
|
|
public function dopay(){
|
|
//得到订单id
|
|
$id=(int)input('id');
|
|
//获得订单信息
|
|
$data=db('order')->where('id='.$id)->find();
|
|
$weixinpay=$data['money'];
|
|
|
|
define('SYSAPPID','wx1364ecc533a2e290');
|
|
define('SYSMCHID','1529570041');
|
|
define('SYSKEY','290339EDC572D5E665EC2BC48AABC37A');
|
|
define('SYSAPPSECRET','f98a5d97cec9d4e4698007e523cbccbe');
|
|
|
|
Loader::import('wechatpay.lib.WxPay#Api');
|
|
Loader::import('wechatpay.example.WxPay#JsApiPay');
|
|
Loader::import('wechatpay.example.log');
|
|
//初始化日志
|
|
//$logHandler= new \CLogFileHandler(dirname(dirname(__FILE__))."/logs/".date('Y-m-d').'.log');
|
|
//$log = \Log::Init($logHandler, 15);
|
|
//①、获取用户openid
|
|
$tools = new \JsApiPay();
|
|
$openId = $tools->GetOpenid();
|
|
if(!$openId){echo 'openid not'; return;}
|
|
|
|
//将openid插入数据,并返回uid
|
|
$temp=db('user')->where('openid',$openId)->find();
|
|
if($temp){
|
|
$uid=$temp['id'];
|
|
}else{
|
|
$uid=db('user')->insertGetId(['openid'=>$openId]);
|
|
}
|
|
//将uid插入数据库
|
|
db('order')->where('id='.$id)->setField('uid',$uid);
|
|
//②、统一下单
|
|
$input=NULL;
|
|
$input = new \WxPayUnifiedOrder();
|
|
$input->SetBody("绿色学校");
|
|
$input->SetAttach("绿色学校活动报名");
|
|
$input->SetOut_trade_no($data['id']);
|
|
$totalSum=$weixinpay*100;
|
|
$input->SetTotal_fee($totalSum);
|
|
$input->SetTime_start(date("YmdHis"));
|
|
$input->SetTime_expire(date("YmdHis", time() + 600));
|
|
$input->SetGoods_tag('绿色学校');
|
|
$input->SetNotify_url(HTTP.SITE_URL."/index.php/index/index/notify");
|
|
$input->SetTrade_type("JSAPI");
|
|
$input->SetOpenid($openId);
|
|
|
|
$order = \WxPayApi::unifiedOrder($input);
|
|
$jsApiParameters = $tools->GetJsApiParameters($order);
|
|
$this->assign('jsApiParameters',$jsApiParameters);
|
|
$this->assign('oid',$id);
|
|
return $this->fetch();
|
|
|
|
}
|
|
|
|
|
|
//返回处理数据
|
|
public function notify(){
|
|
|
|
define('SYSAPPID','wx1364ecc533a2e290');
|
|
define('SYSMCHID','1529570041');
|
|
define('SYSKEY','290339EDC572D5E665EC2BC48AABC37A');
|
|
define('SYSAPPSECRET','f98a5d97cec9d4e4698007e523cbccbe');
|
|
|
|
Loader::import('wechatpay.example.notify');
|
|
$notify = new \PayNotifyCallBack();
|
|
$res=$notify->Handle(false);
|
|
if($res){
|
|
db('order')->where('id', $res['out_trade_no'])->setField(['status'=>2,'p_time'=>date('Y-m-d H:i:s')]);
|
|
$temp= db('order')->where('id', $res['out_trade_no'])->find();
|
|
// db('activity')->where('id', $temp['aid'])->setInc('buy_num',1);
|
|
echo "<xml><return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg>
|
|
</xml>";
|
|
exit;
|
|
}
|
|
}
|
|
|
|
//再写一个现实订单页面
|
|
public function myorder(){
|
|
$pass=input('pass');
|
|
if($pass!='dyrgg'){
|
|
exit;
|
|
}
|
|
return $this->fetch();
|
|
}
|
|
|
|
// 夏令营页面
|
|
public function summerCamp(){
|
|
return $this->fetch();
|
|
}
|
|
|
|
// 夏令营支付页面
|
|
public function summerPay(){
|
|
return $this->fetch();
|
|
}
|
|
public function orderList(){
|
|
$type=input('type',0,'intval');
|
|
//获取活动数据
|
|
$data=db('activity')->where("type", $type)->where('parentid',0)->order('id asc')->select();
|
|
foreach ($data as $k=>$v){
|
|
$data[$k]['son']=db('activity')->where('parentid',$v['id'])->order('id asc')->select();
|
|
//获取每一期的数据
|
|
foreach ($data[$k]['son'] as $k1=>$v1){
|
|
$data[$k]['son'][$k1]['order']=db('order')->where(['aid'=>$v1['id']])->select();
|
|
}
|
|
}
|
|
|
|
return json($data);
|
|
}
|
|
|
|
public function meorder(){
|
|
define('SYSAPPID','wx1364ecc533a2e290');
|
|
define('SYSMCHID','1529570041');
|
|
define('SYSKEY','290339EDC572D5E665EC2BC48AABC37A');
|
|
define('SYSAPPSECRET','f98a5d97cec9d4e4698007e523cbccbe');
|
|
Loader::import('wechatpay.lib.WxPay#Api');
|
|
Loader::import('wechatpay.example.WxPay#JsApiPay');
|
|
Loader::import('wechatpay.example.log');
|
|
//①、获取用户openid
|
|
$tools = new \JsApiPay();
|
|
$openId = $tools->GetOpenid();
|
|
$this->assign('openid',$openId);
|
|
|
|
return $this->fetch();
|
|
}
|
|
public function meorderList(){
|
|
$openid=input('openid');
|
|
$temp=db('user')->where('openid',$openid)->find();
|
|
if($temp){
|
|
$uid=$temp['id'];
|
|
}else{
|
|
$uid=db('user')->insertGetId(['openid'=>$openid]);
|
|
}
|
|
|
|
//获取活动数据
|
|
$data=db('order')->where(['uid'=>$uid])->order('id asc')->select();
|
|
foreach ($data as $k=>$v){
|
|
//先获取子活动的信息
|
|
$data[$k]['sonAc']=db('activity')->where('id',$v['aid'])->order('id asc')->find();
|
|
//获取父活动的信息
|
|
$data[$k]['fuAc']=db('activity')->where('id',$data[$k]['sonAc']['parentid'])->order('id asc')->find();
|
|
}
|
|
return json($data);
|
|
}
|
|
|
|
//下面的导出暂时先不用
|
|
|
|
//导出表格
|
|
public function exportExcel(){
|
|
//处理数据
|
|
|
|
$map['year']=input('year');
|
|
$map['month']=input('month');;
|
|
$monthData= db('calendar')->where($map)->order('day asc')->select();
|
|
//获取所有的人
|
|
$manager_data=db('manager')->order('wl_active asc')->select();
|
|
$tableheader[]='日期/姓名';
|
|
foreach ($monthData as $k=>$v){
|
|
if($v['month']<10){
|
|
$v['month']='0'.$v['month'];
|
|
}
|
|
if($v['day']<10){
|
|
$v['day']='0'.$v['day'];
|
|
}
|
|
$tableheader[]=$v['month'].'-'.$v['day'];
|
|
|
|
foreach ($manager_data as $k1=>$v1){
|
|
$mapson['manager_id']=$v1['id'];
|
|
$mapson['time']=['like',$map['year'].'-'.$v['month'].'-'.$v['day'].'%'];
|
|
$temp=db('signin')->where($mapson)->find();
|
|
if($temp){
|
|
$in=substr($temp['time'] , 10 , 9);
|
|
$out=substr($temp['offtime'] , 10 , 9);
|
|
|
|
$zao=strtotime($temp['time'])<=strtotime($v['year'].'-'.$v['month'].'-'.$v['day'].' 08:30:00');
|
|
$wan=strtotime($temp['offtime'])>=strtotime($v['year'].'-'.$v['month'].'-'.$v['day'].' 18:00:00');
|
|
if($zao and $wan) {
|
|
$remark = '正常';
|
|
}else{
|
|
$remark = '异常';
|
|
}
|
|
|
|
|
|
$manager_data[$k1]['signin'][]="上:".$in ."\r\n下:".$out."\r\n".$remark;
|
|
}else{
|
|
$manager_data[$k1]['signin'][]="无记录";
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//dump($tableheader);
|
|
|
|
//exit;
|
|
$this->excelSigninExport($tableheader,$manager_data);
|
|
}
|
|
private function excelSigninExport($tableheader,$data = [],$title='')
|
|
|
|
{
|
|
|
|
$title='考勤表';
|
|
//文件名
|
|
$fileName = $title.".xls";
|
|
//加载第三方类库
|
|
Loader::import('PHPExcel.Classes.PHPExcel');
|
|
Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');
|
|
//实例化excel类
|
|
$excelObj = new \PHPExcel();
|
|
//构建列数--根据实际需要构建即可
|
|
$string="A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,AA,AB,AC,AD,AE,AF";
|
|
$letter = explode(',',$string);
|
|
//表头数组--需和列数一致
|
|
$tableheader = $tableheader;
|
|
//填充表头信息
|
|
for ($i = 0; $i < count($tableheader); $i++) {
|
|
$excelObj->getActiveSheet()->setCellValue("$letter[$i]1", "$tableheader[$i]");
|
|
$excelObj->getActiveSheet()->getColumnDimension($letter[$i])->setWidth(12);
|
|
}
|
|
//循环填充数据
|
|
foreach ($data as $k => $v) {
|
|
$num = $k + 1 + 1;
|
|
//设置每一列的内容
|
|
$excelObj->setActiveSheetIndex(0)->setCellValue('A' . $num, $v['realname']);
|
|
for ($i = 1; $i < count($tableheader); $i++) {
|
|
$excelObj->setActiveSheetIndex(0)->setCellValue($letter[$i] . $num, $v['signin'][$i-1]);
|
|
}
|
|
|
|
|
|
|
|
//设置行高
|
|
//$excelObj->getActiveSheet()->getRowDimension($k+4)->setRowHeight(30);
|
|
}
|
|
//以下是设置宽度
|
|
// $excelObj->getActiveSheet()->getColumnDimension('A')->setWidth(46);
|
|
// $excelObj->getActiveSheet()->getColumnDimension('B')->setWidth(20);
|
|
// $excelObj->getActiveSheet()->getColumnDimension('C')->setWidth(10);
|
|
// $excelObj->getActiveSheet()->getColumnDimension('D')->setWidth(20);
|
|
|
|
//设置表头行高
|
|
// $excelObj->getActiveSheet()->getRowDimension(1)->setRowHeight(28);
|
|
// $excelObj->getActiveSheet()->getRowDimension(2)->setRowHeight(28);
|
|
// $excelObj->getActiveSheet()->getRowDimension(3)->setRowHeight(28);
|
|
|
|
//设置居中
|
|
//$excelObj->getActiveSheet()->getStyle('A1:AE1'.($k+2))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
|
|
|
|
//所有垂直居中
|
|
//$excelObj->getActiveSheet()->getStyle('A1:AE1'.($k+2))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
|
|
|
|
//设置字体样式
|
|
// $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setName('黑体');
|
|
// $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setSize(20);
|
|
// $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setBold(true);
|
|
// $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setBold(true);
|
|
// $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setName('宋体');
|
|
// $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setSize(16);
|
|
// $excelObj->getActiveSheet()->getStyle('A1:D1'.($k+2))->getFont()->setSize(10);
|
|
|
|
//设置自动换行
|
|
$excelObj->getActiveSheet()->getStyle('A1:AF1'.($k+2))->getAlignment()->setWrapText(true);
|
|
|
|
// 重命名表
|
|
$fileName = iconv("utf-8", "gb2312", $fileName);
|
|
|
|
// 设置下载打开为第一个表
|
|
$excelObj->setActiveSheetIndex(0);
|
|
|
|
//设置header头信息
|
|
header('Content-Type: application/vnd.ms-excel;charset=UTF-8');
|
|
header("Content-Disposition: attachment;filename={$fileName}");
|
|
header('Cache-Control: max-age=0');
|
|
$writer = \PHPExcel_IOFactory::createWriter($excelObj, 'Excel5');
|
|
$writer->save('php://output');
|
|
exit();
|
|
|
|
}
|
|
|
|
}
|