request->get(); if (empty($params['type'])) $params['type'] = 0; //0门店赠送 1他人转赠 if (empty($params['status'])) $params['status'] = 1; //1未核销 2已核销 3已过期 $where = []; $where[] = ['mall_id' => $this->mall_id]; $where[] = ['=', 'status', StatusEnum::ENABLED]; $where[] = ['=','is_transfer',$params['type']]; $where[] = ['=','user_id',$this->user_id]; $state = $params['status']; //用户拥有的券 $user_coupon_ids = StoreVerificationCouponsUser::find()->where(['user_id'=>$this->user_id])->select('coupon_id')->column(); $user_coupon_ids = array_unique($user_coupon_ids); $query = StoreVerificationCoupons::find()->where(['mall_id'=>$this->mall_id,'status'=>StatusEnum::ENABLED,'id'=>$user_coupon_ids]); if($state == 1){ $where[] = 'num > used_num'; }elseif ($state == 2) { $where[] = 'num = used_num'; }elseif($state == 3){ $query->andWhere(['<','end_at',time()]); } $coupon_ids = $query->select('id')->column(); $where[] = ['in', 'coupon_id', $coupon_ids]; $select = 'id,coupon_id,num,used_num,store_id,from_user_id,created_at'; $order = 'id desc'; $params['where'] = $where; $params['select'] = $select; $params['order'] = $order; //var_dump($params); $list = StoreVerificationCouponsUser::listPage($params, false, true); if (!empty($list['list'])) { $coupon_ids = array_column($list['list'],'coupon_id'); $coupon_list = StoreVerificationCoupons::find() ->where(['id'=>$coupon_ids]) ->indexBy('id') ->asArray() ->all(); $store_ids = array_column($list['list'],'store_id'); $store_list = Store::find() ->where(['id'=>$store_ids]) ->indexBy('id') ->asArray() ->all(); $region_ids = []; $province_ids = array_unique(array_column($store_list, 'province_id')); $city_ids = array_unique(array_column($store_list, 'city_id')); $district_ids = array_unique(array_column($store_list, 'district_id')); $region_ids = array_merge($province_ids, $city_ids, $district_ids); $regions = Region::find() ->select('id,name') ->where(['id' => $region_ids]) ->asArray() ->indexBy('id') ->all(); if($params['type'] == 1){ $user_ids = array_column($list['list'],'from_user_id'); $user_list = User::find() ->where(['id'=>$user_ids]) ->indexBy('id') ->asArray() ->all(); } foreach ($list['list'] as &$item) { $item['name'] = ''; $item['start_at'] = ''; $item['end_at'] = ''; $item['coupon_status'] = 0; if(!empty($coupon_list[$item['coupon_id']])){ if($coupon_list[$item['coupon_id']]['end_at'] < time()){ $item['coupon_status'] = 1; } $item['name'] = $coupon_list[$item['coupon_id']]['name']; $item['start_at'] = date('Y-m-d H:i:s',$coupon_list[$item['coupon_id']]['start_at']); $item['end_at'] = date('Y-m-d H:i:s',$coupon_list[$item['coupon_id']]['end_at']); } $item['store_name'] = ''; $item['logo_img'] = ''; $item['longitude'] = 0; $item['latitude'] = 0; $item['store_address'] = ''; if(!empty($store_list[$item['store_id']])){ $item['store_name'] = $store_list[$item['store_id']]['store_name']; $item['logo_img'] = $store_list[$item['store_id']]['logo_img']; $item['longitude'] = $store_list[$item['store_id']]['longitude']; $item['latitude'] = $store_list[$item['store_id']]['latitude']; $province = $regions[$store_list[$item['store_id']]['province_id']] ?? []; $city = $regions[$store_list[$item['store_id']]['city_id']] ?? []; $district = $regions[$store_list[$item['store_id']]['district_id']] ?? []; $item['store_address'] = ($province['name'] ?? '') . ($city['name'] ?? '') . ($district['name'] ?? '') . $store_list[$item['store_id']]['address']; } $item['from_user_info'] = []; if($params['type'] == 1){ if(!empty($user_list[$item['from_user_id']])){ $item['from_user_info']['user_id'] = $user_list[$item['from_user_id']]['id']; $item['from_user_info']['nickname'] = $user_list[$item['from_user_id']]['nickname']; $item['from_user_info']['avatar_url'] = $user_list[$item['from_user_id']]['avatar_url']; $item['from_user_info']['created_at'] = date('Y-m-d H:i:s',$item['created_at']); } } } } return $this->success('请求成功', $list); } /** * 赠送 */ public function actionTransfer(){ if (Yii::$app->request->isPost) { $form = Yii::$app->request->post(); $rules = [ [['num','user_id','coupon_user_id'], 'required'], [['num','user_id','coupon_user_id'], 'integer'], ]; $res = Yii::$app->services->validate->validate($form, $rules); if ($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage()); $key = sprintf('TransferVerification:%s', $this->user_id); $t = \Yii::$app->db->beginTransaction(); try { if (LockHelper::fLock($key)) throw new \Exception('请勿频繁请求'); $coupon_user = StoreVerificationCouponsUser::findOne($form['coupon_user_id']); if(empty($coupon_user)) throw new \Exception('数据不存在'); $coupon = StoreVerificationCoupons::findOne(['id'=>$coupon_user['coupon_id'],'status'=>StatusEnum::ENABLED]); if(empty($coupon)) throw new \Exception('核销券不存在或已删除'); // 获取配置 $config = StoreVerificationSetting::search($coupon_user['store_id']); if (empty($config['is_enable_transfer'])) throw new \Exception('核销券赠送功能尚未开启'); $num = $coupon_user['num'] - $coupon_user['used_num']; if($form['num'] > $num) throw new \Exception('可赠送数量不足'); // 检测转送用户是否是本人 if ($form['user_id'] == $this->user_id) throw new \Exception('赠送的用户不能是本人哦'); // 检查用户是否存在 $receive_user = User::getUser([['id' => $form['user_id']]], 'id'); if (empty($receive_user)) throw new \Exception('赠送的用户不存在'); $coupon_user->used_num += $form['num']; if(!$coupon_user->save()) throw new \Exception($coupon_user->getErrorMessage()); $params = [ 'mall_id' => $this->mall_id, 'store_id' => $coupon_user['store_id'], 'user_id' => $form['user_id'], 'coupon_id' => $coupon_user['coupon_id'], 'num' => $form['num'], 'is_transfer' => 1, 'from_user_id' => $this->user_id, 'from_coupon_user_id' => $coupon_user['id'], ]; $params['clerk_code'] = StoreVerificationCouponsUser::createCode($this->mall_id); $res = StoreVerificationCouponsUser::setData($params); if ($res === false) return $this->error(StoreVerificationCouponsUser::getStaticError()); $t->commit(); LockHelper::unFLock($key); $this->success('转送成功'); }catch(\Exception $e){ $t->rollBack(); LockHelper::unFLock($key); return $this->error('赠送失败:' . $e->getMessage()); } } } /** * 券详情 */ public function actionDetail(){ try { $params = \Yii::$app->request->get(); $res = Yii::$app->services->validate->validate($params, [ [['id',], 'required'], [['id'], 'integer'], ]); if ($res === false) throw new \Exception(Yii::$app->services->validate->getErrorMessage()); $coupon_user = StoreVerificationCouponsUser::findOne($params['id']); if(empty($coupon_user)) throw new \Exception('核销券不存在'); $coupon = StoreVerificationCoupons::findOne(['id'=>$coupon_user['coupon_id'],'status'=>StatusEnum::ENABLED]); if(empty($coupon)) throw new \Exception('核销券不存在或已删除'); $store = Store::findOne($coupon_user['store_id']); $store_address = ''; if($store){ $region_ids = [$store['province_id'],$store['city_id'],$store['district_id']]; $regions = Region::find() ->select('id,name') ->where(['id' => $region_ids]) ->asArray() ->indexBy('id') ->all(); $province = $regions[$coupon_user['store_id']]['province_id'] ?? []; $city = $regions[$coupon_user['store_id']] ?? []; $district = $regions[$coupon_user['store_id']]['district_id'] ?? []; $store_address = ($province['name'] ?? '') . ($city['name'] ?? '') . ($district['name'] ?? '') . $store['address']; } $returnData = []; $returnData['detail'] = [ 'name' => $coupon['name'], 'num' => $coupon_user['num'], 'used_num' => $coupon_user['used_num'], 'logo_img' => $store['logo_img'] ?? '', 'store_name' => $store['store_name'] ?? '', 'store_address' => $store_address, 'longitude' => $store['longitude'] ?? 0, 'latitude' => $store['latitude'] ?? 0, 'start_at' => date('Y-m-d H:i:s',$coupon['start_at']), 'end_at' => date('Y-m-d H:i:s',$coupon['end_at']), ]; $returnData['give_user_info'] = []; $give_coupon_user_list = StoreVerificationCouponsUser::find() ->where(['from_coupon_user_id'=>$coupon_user->id]) ->asArray() ->all(); if(!empty($give_coupon_user_list)){ $user_ids = array_column($give_coupon_user_list,'user_id'); $user_list = User::find() ->where(['id'=>$user_ids]) ->indexBy('id') ->asArray() ->all(); $give_user_info = []; foreach($give_coupon_user_list as $give_coupon_user){ $give_user_info['num'] = $give_coupon_user['num']; $give_user_info['used_num'] = $give_coupon_user['used_num']; $give_user_info['user_id'] = $give_coupon_user['user_id']; $give_user_info['nickname'] = $user_list[$give_coupon_user['user_id']]['nickname'] ?? ''; $give_user_info['avatar_url'] = $user_list[$give_coupon_user['user_id']]['avatar_url'] ?? ''; $give_user_info['created_at'] = date('Y-m-d H:i:s',$give_coupon_user['created_at']); $give_user_info['log'] = []; $logs = StoreVerificationCouponsClerkLog::find() ->where(['from_coupon_user_id'=>$give_coupon_user['id']]) ->select('created_at') ->column(); if(!empty($logs)){ foreach($logs as $log){ $give_user_info['log'][] = date('Y-m-d H:i:s',$log) . '进行核销一次'; } } $returnData['give_user_info'][] = $give_user_info; } } return $this->success('请求成功', $returnData); } catch (\Exception $e) { return $this->error($e->getMessage()); } } /** * 券海报 */ public function actionPosterInfo(){ try { $params = \Yii::$app->request->get(); $res = Yii::$app->services->validate->validate($params, [ [['id',], 'required'], [['id'], 'integer'], ]); if ($res === false) throw new \Exception(Yii::$app->services->validate->getErrorMessage()); $coupon_user = StoreVerificationCouponsUser::findOne($params['id']); if(empty($coupon_user)) throw new \Exception('核销券不存在'); $coupon = StoreVerificationCoupons::findOne(['id'=>$coupon_user['coupon_id'],'status'=>StatusEnum::ENABLED]); if(empty($coupon)) throw new \Exception('核销券不存在或已删除'); if($coupon['start_at'] > time()) throw new \Exception('核销券未到使用时间'); if($coupon['end_at'] < time()) throw new \Exception('核销券已过期'); $returnData = [ 'style_pic_url' => $coupon['style_pic_url'], // 'clerk_code' => 'HXQ_'.$coupon_user['id'], 'clerk_code' => $coupon_user['clerk_code'], ]; return $this->success('请求成功', $returnData); } catch (\Exception $e) { return $this->error($e->getMessage()); } } /** * 券核销详情 */ public function actionClerkDetail(){ try { $params = \Yii::$app->request->get(); $res = Yii::$app->services->validate->validate($params, [ [['id',], 'required'], [['id'], 'integer'], ]); if ($res === false) throw new \Exception(Yii::$app->services->validate->getErrorMessage()); $coupon_user = StoreVerificationCouponsUser::findOne($params['id']); if(empty($coupon_user)) throw new \Exception('核销券不存在'); $coupon = StoreVerificationCoupons::findOne(['id'=>$coupon_user['coupon_id'],'status'=>StatusEnum::ENABLED]); if(empty($coupon)) throw new \Exception('核销券不存在或已删除'); $store = Store::findOne($coupon_user['store_id']); $returnData = []; $returnData['detail'] = [ 'name' => $coupon['name'], 'num' => $coupon_user['num'], 'used_num' => $coupon_user['used_num'], 'logo_img' => $store['logo_img'], 'store_name' => $store['store_name'], 'start_at' => date('Y-m-d H:i:s',$coupon['start_at']), 'end_at' => date('Y-m-d H:i:s',$coupon['end_at']), ]; return $this->success('请求成功', $returnData); } catch (\Exception $e) { return $this->error($e->getMessage()); } } }