diff --git a/application/admin/lang/zh-cn/wdsxh/activity/activity.php b/application/admin/lang/zh-cn/wdsxh/activity/activity.php
index 1098675..2e6d2ed 100644
--- a/application/admin/lang/zh-cn/wdsxh/activity/activity.php
+++ b/application/admin/lang/zh-cn/wdsxh/activity/activity.php
@@ -1,6 +1,6 @@
'自助签到(范围1000米)',
'Verification_method 2' => '管理员核销',
'Applet_activity_qrcode_path' => '活动小程序码',
+ 'Checked_in_qrcode' => '签到二维码',
'Points_status' => '设置是否获得积分',
'Points_status 1' => '是',
'Points_status 2' => '否',
diff --git a/application/admin/lang/zh-cn/wdsxh/activity/activity_apply.php b/application/admin/lang/zh-cn/wdsxh/activity/activity_apply.php
index 9c27a2e..6aac613 100644
--- a/application/admin/lang/zh-cn/wdsxh/activity/activity_apply.php
+++ b/application/admin/lang/zh-cn/wdsxh/activity/activity_apply.php
@@ -1,6 +1,6 @@
'退款中',
'State 4' => '已退款',
'State 5' => '已驳回',
+ 'check_in_status' => '签到状态',
+ 'checked_in' => '已签到',
+ 'unchecked_in' => '未签到',
'Is_sign_in' => '核销状态',
'Is_sign_in 1' => '已核销',
'Is_sign_in 2' => '未核销',
diff --git a/application/admin/model/wdsxh/activity/Activity.php b/application/admin/model/wdsxh/activity/Activity.php
index a9931a0..225be5f 100644
--- a/application/admin/model/wdsxh/activity/Activity.php
+++ b/application/admin/model/wdsxh/activity/Activity.php
@@ -1,6 +1,6 @@
app_code->getUnlimit($ids, [
'page' => $path,
'check_path' => false,
+ 'env_version' => 'trial', // 正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版
]);
if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
@@ -202,6 +204,48 @@ class Activity extends Model
return $value;
}
+ public function getCheckedInQrcodeAttr($value, $data)
+ {
+ $row = $data;
+ $row['createtime'] = self::where('id',$row['id'])->value('createtime');
+ $save_path = '/uploads/wdsxh/check_in_qrcode/'.$row['id'].'/'.$row['createtime'].'.png';
+ if (is_file(ROOT_PATH."public".$save_path)) {
+ $value = $save_path;
+ } else {
+ if(isset($row['id'])) {
+ $configObj = (new \app\admin\model\wdsxh\Config())->where('id',1)->find();
+ if (!empty($configObj['applet_appid']) && !empty($configObj['applet_secret'])) {
+ $path = 'pagesActivity/index/details';
+ $config = [
+ 'app_id' => $configObj['applet_appid'],
+ 'secret' => $configObj['applet_secret'],
+ 'response_type' => 'array',
+ 'log' => [
+ 'level' => 'debug',
+ ],
+ ];
+
+ $app = Factory::miniProgram($config);
+ $scene = http_build_query(['id' => $row['id'], 'op' => 'checked_in']);
+ $response = $app->app_code->getUnlimit($scene, [
+ 'page' => $path,
+ 'check_path' => false,
+ 'env_version' => 'trial', // 正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版
+ ]);
+
+ if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
+ $response->saveAs('uploads/wdsxh/check_in_qrcode/'.$row['id'], $row['createtime'].'.png');
+ $value = $save_path;
+ }
+ }
+ }
+ }
+ if (!empty($value)) {
+ $value = request()->domain().$value;
+ }
+ return $value;
+ }
+
public function getPointsStatusList()
{
return ['2' => __('Points_status 2'), '1' => __('Points_status 1')];
@@ -216,6 +260,4 @@ class Activity extends Model
{
return ['1' => __('启用单独证书'), '2' => __('使用统一证书')];
}
-
-
}
diff --git a/application/admin/view/wdsxh/activity/activity_apply/index.html b/application/admin/view/wdsxh/activity/activity_apply/index.html
index 34fb651..2142942 100644
--- a/application/admin/view/wdsxh/activity/activity_apply/index.html
+++ b/application/admin/view/wdsxh/activity/activity_apply/index.html
@@ -9,11 +9,6 @@
{:__('Add')}
-
-
-
-
-
request->isGet()) {
$this->error('请求类型错误');
}
- $id = $this->request->get('id');
- $data = $this->model
+ $id = $this->request->get('id');
+ $activity = $this->model
->where('id',$id)
- ->field('id,images,start_time,end_time,name,fees,state activity_state,
- contacts,mobile,
- organizing_method,url,address,longitude,latitude,content,
- is_verifying,refund,
- apply_time,
- activity_auth,
- points_status,points,
- apply_field_state,
- apply_limit_number,
- non_member_registration_status')
+ ->field([
+ 'id', 'images', 'start_time', 'end_time', 'name', 'fees',
+ 'state' => 'activity_state', 'contacts', 'mobile',
+ 'organizing_method', 'url', 'address', 'longitude',
+ 'latitude', 'content', 'is_verifying', 'refund',
+ 'apply_time', 'activity_auth', 'points_status', 'points',
+ 'apply_field_state', 'apply_limit_number', 'non_member_registration_status'
+ ])
->find();
- if (!$data) {
+ if (!$activity) {
$this->error('活动不存在');
}
+
+ $data = $activity->toArray();
+ // 如果活动未结束,则根据当前时间校验活动状态并更新状态
+ if ($data['activity_state'] < 3) {
+ $now = time();
+ // 当前时间小于报名截止时间,状态流转处于:报名中
+ if ($now < $data['apply_time']) $data['actitity_state_trans'] = 1;
+ // 当前时间大于等于报名截止时间小于开始时间,状态流转处于:未开始
+ if ($now >= $data['apply_time'] && $now < $data['start_time']) $data['actitity_state_trans'] = 2;
+ // 当前时间大于等于开始时间小于等于结束时间,状态流转处于:进行中
+ if ($now >= $data['start_time'] && $now <= $data['end_time']) {
+ $data['actitity_state_trans'] = 3;
+ // 如果活动未结束,则根据当前时间校验活动状态并更新状态
+ $activity->state = $data['activity_state'] = 2;
+ $activity->save();
+ }
+ // 当前时间大于结束时间,状态流转处于:已结束
+ if ($now > $data['end_time']) {
+ $data['actitity_state_trans'] = 4;
+ // 如果活动已结束,则根据当前时间更新状态
+ $activity->state = $data['activity_state'] = 3;
+ $activity->save();
+ }
+ } else {
+ // 活动结束,状态流转就一直处理:已结束
+ $data['actitity_state_trans'] = 4;
+ }
+
if ($this->auth->isLogin()) {
$wechat_id = (new UserWechat())->where('user_id',$this->auth->id)->value('id');
$activityApplyObj = (new \app\api\model\wdsxh\activity\ActivityApply())
@@ -123,6 +149,7 @@ class Activity extends Api
$data['apply_id'] = '';
$data['reject'] = '';
} else {
+ $data['check_in_status'] = $activityApplyObj['check_in_status'];
$data['pay_state'] = $activityApplyObj['state'];
$data['apply_id'] = $activityApplyObj['id'];
$activityRefundObj = (new Refund())
@@ -490,7 +517,3 @@ class Activity extends Api
$this->success('请求成功',['show_status'=>$is_status]);
}
}
-
-
-
-
\ No newline at end of file
diff --git a/application/api/controller/wdsxh/activity/ActivityApply.php b/application/api/controller/wdsxh/activity/ActivityApply.php
index 041277a..a811bbd 100644
--- a/application/api/controller/wdsxh/activity/ActivityApply.php
+++ b/application/api/controller/wdsxh/activity/ActivityApply.php
@@ -1,6 +1,6 @@
request->get('id');
$apply_id = $this->request->get('apply_id');
- $data = (new \app\api\model\wdsxh\activity\Activity())
+ $activity = (new \app\api\model\wdsxh\activity\Activity())
->where('id',$id)
- ->field('id,images,start_time,end_time,name,fees,state activity_state,
- contacts,mobile,
- organizing_method,url,address,longitude,latitude,content,
- refund,
- apply_time,
- activity_auth,is_verifying,verification_method,points_status,points')
+ ->field(['id', 'images', 'start_time', 'end_time', 'name', 'fees',
+ 'state' => 'activity_state', 'contacts', 'mobile', 'organizing_method',
+ 'url', 'address', 'longitude', 'latitude', 'content', 'refund',
+ 'apply_time', 'activity_auth', 'is_verifying', 'verification_method',
+ 'points_status', 'points'
+ ])
->find();
- if (!$data) {
+ if (!$activity) {
$this->error('活动不存在');
}
+
+ $data = $activity->toArray();
+ // 如果活动未结束,则根据当前时间校验活动状态并更新状态
+ if ($data['activity_state'] < 3) {
+ $now = time();
+ // 当前时间小于报名截止时间,状态流转处于:报名中
+ if ($now < $data['apply_time']) $data['actitity_state_trans'] = 1;
+ // 当前时间大于等于报名截止时间小于开始时间,状态流转处于:未开始
+ if ($now >= $data['apply_time'] && $now < $data['start_time']) $data['actitity_state_trans'] = 2;
+ // 当前时间大于等于开始时间小于等于结束时间,状态流转处于:进行中
+ if ($now >= $data['start_time'] && $now <= $data['end_time']) {
+ $data['actitity_state_trans'] = 3;
+ // 如果活动未结束,则根据当前时间校验活动状态并更新状态
+ $activity->state = $data['activity_state'] = 2;
+ $activity->save();
+ }
+ // 当前时间大于结束时间,状态流转处于:已结束
+ if ($now > $data['end_time']) {
+ $data['actitity_state_trans'] = 4;
+ // 如果活动已结束,则根据当前时间更新状态
+ $activity->state = $data['activity_state'] = 3;
+ $activity->save();
+ }
+ } else {
+ // 活动结束,状态流转就一直处理:已结束
+ $data['actitity_state_trans'] = 4;
+ }
if ($data['points_status'] == 2) {
unset($data['points']);
}
@@ -470,6 +497,7 @@ class ActivityApply extends Api
if (!$activityApplyObj) {
$this->error('报名信息不存在');
}
+ $data['check_in_status'] = $activityApplyObj['check_in_status'];
$data['pay_state'] = $activityApplyObj['state'];
$data['apply_id'] = $apply_id;
$activityRefundObj = (new Refund())
@@ -516,6 +544,55 @@ class ActivityApply extends Api
}
+ /**
+ * Desc 签到(单纯签到功能不涉核销)
+ *
+ * @param type $param
+ * @return type
+ * Created by jsasg
+ */
+ public function checked_in()
+ {
+ if(!$this->request->isGet()) {
+ $this->error('请求类型错误');
+ }
+
+ if (!$this->auth->isLogin()) {
+ $this->error('请先登录');
+ }
+
+ // 活动id
+ $id = $this->request->get('id');
+ $activity = (new \app\api\model\wdsxh\activity\Activity())->where('id',$id)->find();
+ if (empty($activity)) {
+ $this->error('活动不存在');
+ }
+ if (3 == $activity['state'] || time() > $activity['end_time']) {
+ $this->error('活动已结束');
+ }
+
+
+ $wechat_id = (new UserWechat())->where('user_id',$this->auth->id)->value('id');
+ $activity_apply = $this->model->where('activity_id',$id)->where('wechat_id',$wechat_id)->find();
+ // 如果用户未报名,不能签到
+ if(empty($activity_apply)) {
+ $this->error('您还未报名该活动');
+ }
+ // 如果已签到,不能再次签到
+ if ('checked_in' == $activity_apply['check_in_status']) {
+ $this->error('您已签到');
+ }
+
+ // 设置已签到
+ $activity_apply->check_in_status = 'checked_in';
+ $activity_apply->checked_in_at = time();
+ if ($activity_apply->save()) {
+ $this->success('签到成功');
+ }
+
+ $this->error('签到失败');
+ }
+
private function handle_custom_data($data)
{
$custom_field = array('name','mobile');
@@ -530,7 +607,3 @@ class ActivityApply extends Api
return $result;
}
}
-
-
-
-
\ No newline at end of file
diff --git a/application/api/model/wdsxh/activity/Activity.php b/application/api/model/wdsxh/activity/Activity.php
index 87363c8..390d499 100644
--- a/application/api/model/wdsxh/activity/Activity.php
+++ b/application/api/model/wdsxh/activity/Activity.php
@@ -1,6 +1,6 @@