| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- <?php
- namespace addons\Clerk\api\modules\v1\controllers;
- use addons\Clerk\common\models\ClerkLog;
- use addons\Clerk\common\models\ClerkUser;
- use addons\ElectronCoupon\common\models\ElectronCoupon;
- use addons\ElectronCoupon\common\models\ElectronCouponCode;
- use addons\ElectronCoupon\common\models\ElectronCouponUserCoupon;
- use addons\SecondaryCard\common\service\SecondaryCardOrderService;
- use addons\Store\common\models\Store;
- use common\enums\AddonsEnum;
- use common\enums\ClerkEnum;
- use common\enums\StatusEnum;
- use common\models\mall\MallAddons;
- use common\models\user\User;
- use api\controllers\OnAuthController;
- use common\models\order\Order;
- /**
- * 默认控制器
- *
- * Class DefaultController
- * @package addons\Clerk\api\modules\v1\controllers
- */
- class DefaultController extends OnAuthController
- {
- public $modelClass = '';
- /**
- * 不用进行登录验证的方法
- *
- * 例如: ['index', 'update', 'create', 'view', 'delete']
- * 默认全部需要验证
- *
- * @var array
- */
- protected $authOptional = ['index'];
- //主页
- public function actionIndex()
- {
- $config = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_CLERK, 'basic');
- if(empty($config['is_enable'])) return $this->error('请先开启核销');
- $clerk_user = ClerkUser::getOne([['mall_id'=>$this->mall_id],['user_id'=>$this->user_id],['status'=>StatusEnum::ENABLED]],true,[],[],'id,user_id');
- if(empty($clerk_user)) return $this->error('您不是核销员');
- $user = User::findOne(['id'=>$this->user_id]);
- $clerk_user['nickname'] = $user['nickname'];
- $clerk_user['avatar_url'] = $user['avatar_url'];
- return $this->success('操作成功',$clerk_user);
- }
- //核销记录
- public function actionClerkLog(){
- $config = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_CLERK, 'basic');
- if(empty($config['is_enable'])) return $this->error('请先开启核销');
- $where[] = ['mall_id' => $this->mall_id];
- $where[] = ['user_id' => $this->user_id];
- $where[] = ['status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]];
- $params = \Yii::$app->request->get();
- if (!empty($params['start'])) $where[] = ['>=', 'created_at', strtotime($params['start'].' 00:00:00')];
- if (!empty($params['end'])) $where[] = ['<=', 'created_at', strtotime($params['end'].' 23:59:59')];
- $params['where'] = $where;
- $params['order'] = 'id DESC';
- $params['select'] = 'id,mall_id,store_id,clerk_id,user_id,mobile,pic,commission,money,title,created_at,verify_type,source_table,source_table_id';
- $pageData = ClerkLog::listPage($params, false);
- if (!empty($pageData['list'])) {
- $user_ids = array_column($pageData['list'], 'user_id');
- $store_ids = array_column($pageData['list'], 'store_id');
- $user_list = User ::lists(['where' => [['id' => $user_ids]], 'select' => 'id,nickname,mobile,username,avatar_url', 'index' => 'id']);
- if (MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_STORE)) {
- $store_list = Store::lists(['where' => [['id' => $store_ids]], 'select' => 'id,store_name', 'index' => 'id']);
- }
- $source_table_ids = [];
- if (MallAddons::isInstall($this->mall_id, 'ElectronCoupon')) {
- foreach ($pageData['list'] as $item) {
- if($item['source_table']=='{{%addons_electron_coupon_code}}'){
- $source_table_ids[] = $item['source_table_id'];
- }
- }
- $electron_coupon_code_list = ElectronCouponCode::lists([
- 'where' => [
- ['mall_id' => $this->mall_id],
- ['id' => $source_table_ids]
- ],
- 'select' => 'id,amount',
- 'index' => 'id'
- ]);
- }
- $verify_orders = [];
- $orders = [];
- if(MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_VERIFY_VOUCHER)){
- $verify_order_ids = [];
- foreach($pageData['list'] as $v){
- if($v['verify_type'] == ClerkLog::VERIFY_MAIN_ORDER)
- $verify_order_ids[] = $v['source_table_id'];
- }
- /** @var \addons\VerifyVoucher\common\models\VerifyVoucherOrder $order_class */
- $order_class = \addons\VerifyVoucher\common\models\VerifyVoucherOrder::class;
- $verify_orders = $order_class::lists([
- 'where' => [
- ['mall_id' => $this->mall_id],
- ['order_id' => $verify_order_ids]
- ],
- 'select' => 'order_id, order_no',
- 'index' => 'order_id'
- ]);
- $orders = Order::lists([
- 'where' => [
- ['mall_id' => $this->mall_id],
- ['id' => $verify_order_ids],
- ],
- 'with' => [
- 'detail' => function ($q){
- return $q->select('id,order_id,goods_name,pic_url,num,goods_price');
- }
- ],
- 'select' => 'id',
- 'index' => 'id'
- ]);
- }
- foreach ($pageData['list'] as &$item) {
- $item['nickname'] = $item['mobile'] = $item['username'] = $item['store_name'] = $item['avatar_url']= '';
- if (isset($user_list[$item['user_id']])) {
- $user = $user_list[$item['user_id']];
- $item['nickname'] = $user['nickname'];
- $item['mobile'] = $user['mobile'];
- $item['username'] = $user['username'];
- $item['avatar_url'] = $user['avatar_url'];
- }
- if (isset($store_list[$item['store_id']])) {
- $item['store_name'] = $store_list[$item['store_id']]['store_name'];
- }
- $item['orderinfo'] = isset($orders[$item['source_table_id']]) ? $orders[$item['source_table_id']]['detail']: [];
- $item['order_no'] = isset($verify_orders[$item['source_table_id']]) ? $verify_orders[$item['source_table_id']]['order_no'] : '';
- $item['scan_type'] = $item['verify_type'] == ClerkLog::VERIFY_MAIN_ORDER ? '核销码核销' : '电子券核销';
- $item['created_at'] = date('Y-m-d H:i:s', $item['created_at']);
- $item['clerk_nums'] = 1;
- if(isset($electron_coupon_code_list) && $item['source_table']=='{{%addons_electron_coupon_code}}' && isset($electron_coupon_code_list[$item['source_table_id']])){
- $item['clerk_nums'] = $electron_coupon_code_list[$item['source_table_id']]['amount'];
- }
- }
- }
- return $this->success('操作成功', $pageData);
- }
- //核销
- public function actionClerk(){
- $config = \Yii::$app->services->setting->addons->get($this->mall_id, AddonsEnum::ADDONS_NAME_CLERK, 'basic');
- if(empty($config['is_enable'])) return $this->error('请先开启核销');
- $clerk = ClerkUser::getOne([['mall_id'=>$this->mall_id],['user_id'=>$this->user_id],['status'=>StatusEnum::ENABLED]],true,[],[],'id,user_id,store_id,mall_id');
- if(empty($clerk)) return $this->error('您不是核销员');
- if(\Yii::$app->request->isGet){
- try {
- $params =\Yii::$app->request->get();
- $res = \Yii::$app->services->validate->validate($params, [
- [['code'], 'required'],
- [['scan_type'], 'string']
- ]);
- if($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
- $code = $params['code'];
- $code_pre = $code[0].$code[1];
- switch ($code_pre){
- case ClerkEnum::SECONDARY_CARD_CLERK_CODE_PRE:
- return self::getSecondaryCardClerkData($params);
- default:
- switch($params['scan_type']){
- case 'order':
- if(MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_VERIFY_VOUCHER) == false) return $this->error('缺少插件模板,暂不支持该功能');
- /** @var \addons\VerifyVoucher\common\models\VerifyVoucherOrder $order_class */
- $order_class = \addons\VerifyVoucher\common\models\VerifyVoucherOrder::class;
- $data = $order_class::getCodeInfo($this->mall_id, $params['code']);
- if($data === false) return $this->error($order_class::getStaticError());
- break;
- default:
- $e_coupon_code = ElectronCouponCode::findOne(['code'=>$params['code']]);
- if(empty($e_coupon_code)) return $this->error('该核销码不存在');
- $e_coupon_user_coupon = ElectronCouponUserCoupon::findOne(['id'=>$e_coupon_code['user_e_coupon_id']]);
- $e_coupon = ElectronCoupon::findOne(['id'=>$e_coupon_user_coupon['e_coupon_id']]);
- $data['pic'] = $e_coupon['pic'];
- $data['name'] = $e_coupon['name'];
- $data['money'] = $e_coupon['price'];
- $data['clerk_nums'] = $e_coupon_code['amount'];
- break;
- }
- }
- return $this->success('ok', $data);
- }catch (\Exception $e){
- return $this->error($e->getMessage());
- }
- }else{
- $params =\Yii::$app->request->post();
- $res = \Yii::$app->services->validate->validate($params, [
- [['code'], 'required'],
- [['scan_type'], 'string'],
- [['clerk_nums'], 'safe']
- ]);
- if($res === false) return $this->error(\Yii::$app->services->validate->getErrorMessage());
- $params['store_id'] = $clerk['store_id'];
- $params['clerk_id'] = $clerk['id'];
- $params['mobile'] = $this->user['mobile']??'';
- $params['clerk_admin_id'] = $this->user_id;
- $params['clerk_user_id'] = $this->user_id ?: 0;
- $params['mall_id'] = $this->mall_id;
- $params['user_id'] = $this->user_id;
- $code = $params['code'];
- $code_pre = $code[0].$code[1];
- switch ($code_pre) {
- case ClerkEnum::SECONDARY_CARD_CLERK_CODE_PRE:
- $res = self::secondaryCardClerk($params);
- if(is_string($res)) return $this->error($res);
- return $this->success('核销成功');
- default:
- switch($params['scan_type']){
- case 'order':
- if(MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_VERIFY_VOUCHER) == false) return $this->error('缺少插件模板,暂不支持该功能');
- /** @var \addons\VerifyVoucher\common\models\VerifyVoucherOrder $order_class */
- $order_class = \addons\VerifyVoucher\common\models\VerifyVoucherOrder::class;
- $result = $order_class::verifyOrder($params);
- if($result == false) return $this->error($order_class::getStaticError());
- break;
- default:
- $result = ElectronCouponCode::doClerkCode($params);
- if($result == false) return $this->error(ElectronCouponCode::getStaticError());
- break;
- }
- }
- return $this->success('核销成功', $result);
- }
- }
- protected function getSecondaryCardClerkData($params){
- if(!MallAddons::isInstall($params['mall_id'],'SecondaryCard')) {
- throw new \Exception('未安装次卡插件');
- }
- return SecondaryCardOrderService::getSecondaryCardClerkData($params);
- }
- protected function secondaryCardClerk($params){
- if(!MallAddons::isInstall($params['mall_id'],'SecondaryCard')) {
- throw new \Exception('未安装次卡插件');
- }
- return SecondaryCardOrderService::secondaryCardClerk($params);
- }
- }
|