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); } }