| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- <?php
- namespace addons\Store\api\modules\v1\controllers;
- use common\enums\ClerkEnum;
- use Yii;
- use api\controllers\OnAuthController;
- use common\enums\StatusEnum;
- use common\models\user\User;
- use addons\Store\common\models\Store;
- use addons\Store\addons\Verification\common\models\StoreVerificationCoupons;
- use addons\Store\addons\Verification\common\models\StoreVerificationCouponsUser;
- use addons\Store\addons\Verification\common\models\StoreVerificationSetting;
- use addons\Store\addons\Verification\common\models\StoreVerificationCouponsClerkLog;
- use common\models\common\Region;
- use common\helpers\LockHelper;
- /**
- * 默认控制器
- *
- * Class DefaultController
- * @package addons\Starfish\api\controllers
- */
- class VerificationController extends OnAuthController
- {
- public $modelClass = '';
- /**
- * 不用进行登录验证的方法
- *
- * 例如: ['index', 'update', 'create', 'view', 'delete']
- * 默认全部需要验证
- *
- * @var array
- */
- protected $authOptional = [];
- public function actionList(){
- $params = \Yii::$app->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());
- }
- }
- }
|