where($conditions); $countQuery = clone $query; $items = $query->order('id desc')->page($page, $row)->select(); $count = $countQuery->count(); $admins = M('ucenter_member', 'sys_')->field(['id', 'username'])->select(); $admins = index_by_column('id', $admins); $records = []; foreach ($items as $item) { $records[] = [ 'id' => $item['id'], 'name' => $item['name'], 'main_name' => $item['main_name'], 'account' => $item['account'], 'status' => $item['status'], 'channel' => $item['channel'], 'wayNames' => implode('、', $paymentMerchantService->getWaysName($item['ways'])), 'status_text' => $paymentMerchantService->getStatusText($item['status']), 'channel_text' => $paymentMerchantService->getChannelText($item['channel']), 'admin_username' => $admins[$item['admin_id']]['username'], 'update_time' => date('Y-m-d H:i:s', $item['update_time']), ]; } $page = set_pagination($count, $row); if($page) { $this->assign('_page', $page); } $aliDefaultMerchant = $paymentMerchantService->getDefault(PaymentMerchantService::WAY_ALIPAY); $weixinDefaultMerchant = $paymentMerchantService->getDefault(PaymentMerchantService::WAY_WEIXIN); $expressDefaultMerchant = $paymentMerchantService->getDefault(PaymentMerchantService::WAY_EXPRESS); $this->assign('aliDefaultMerchant', $aliDefaultMerchant); $this->assign('weixinDefaultMerchant', $weixinDefaultMerchant); $this->assign('expressDefaultMerchant', $expressDefaultMerchant); $this->assign('records', $records); $this->assign('admins', $admins); $this->assign('ways', PaymentMerchantService::$ways); $this->assign('statusList', PaymentMerchantService::$statusList); $this->assign('channels', PaymentMerchantService::$channels); $this->display(); } public function add() { $this->meta_title = '添加商户'; $this->assign('channels', PaymentMerchantService::$channels); $this->display('form'); } public function changeStatus() { $id = I('id', 0); $status = I('status', 0); $merchant = M('payment_merchant', 'tab_')->where(['id' => $id])->find(); if (is_null($merchant)) { $this->ajaxReturn([ 'status' => 0, 'message' => '记录不存在', ]); } if (!in_array($status, [0, 1])) { $this->ajaxReturn([ 'status' => 0, 'message' => '状态值错误', ]); } $statusText = $status == 0 ? '禁用' : '启用'; M('payment_merchant', 'tab_')->where(['id' => $id])->save(['status' => $status]); $this->ajaxReturn([ 'status' => 1, 'message' => $statusText . '成功', ]); } public function edit() { $this->meta_title = '编辑商户'; $id = I('id', 0); $merchant = M('payment_merchant', 'tab_')->where(['id' => $id])->find(); if ($merchant == null) { $this->error('支付商户不存在'); } $paymentMerchantService = new PaymentMerchantService(); $config = $merchant['config'] ? json_decode($merchant['config'], true) : null; $ways = $paymentMerchantService->getWaysRow($merchant['ways']); $this->assign('channels', PaymentMerchantService::$channels); $this->assign('record', $merchant); $this->assign('config', $config); $this->assign('ways', $ways); $this->display('form'); } public function save() { $id = I('id', 0); $name = I('name', ''); $identifier = I('identifier', ''); $channel = I('channel', 0); $status = I('status', 0); $account = I('account', ''); $config = I('config', []); $ways = I('ways', []); $mainName = I('main_name', ''); if ($name == '') { $this->ajaxReturn([ 'status' => 0, 'message' => '请输入商户名称', ]); } if ($mainName == '') { $this->ajaxReturn([ 'status' => 0, 'message' => '请输入商户商户主体', ]); } if ($account == '') { $this->ajaxReturn([ 'status' => 0, 'message' => '请输入商户账号', ]); } $merchant = null; if ($id > 0) { $merchant = M('payment_merchant', 'tab_')->where(['id' => $id])->find(); if ($merchant == null) { $this->ajaxReturn([ 'status' => 0, 'message' => '支付商户不存在', ]); } } $paymentMerchantService = new PaymentMerchantService(); $waysValue = $paymentMerchantService->getWaysValue($ways); $userAuth = session('user_auth'); $data = []; $data['name'] = $name; $data['account'] = $account; $data['type'] = 1; $data['status'] = $status; $data['ways'] = $waysValue; $data['admin_id'] = $userAuth['uid']; $data['config'] = json_encode($config); $data['update_time'] = time(); $data['main_name'] = $mainName; if ($id == 0) { $data['create_time'] = time(); $data['channel'] = $channel; $data['identifier'] = $paymentMerchantService->getIdentifierByConfig($config, $channel); M('payment_merchant', 'tab_')->add($data); } else { $data['identifier'] = $paymentMerchantService->getIdentifierByConfig($config, $merchant['channel']); M('payment_merchant', 'tab_')->where(['id' => $id])->save($data); } $this->ajaxReturn([ 'status' => 1, 'message' => '保存成功' ]); } public function delete() { $id = I('id', 0); M('payment_merchant', 'tab_')->where(['id' => $id])->delete(); addOperationLog([ 'op_type' => 2, 'key' => $id, 'op_name' => '删除商户渠道', 'url' => U('Market/delete', ['id' => $id]), 'menu' => '推广员-推广员管理-市场换绑-删除商户渠道' ]); $this->ajaxReturn([ 'status' => 1, 'message' => '删除成功' ]); } public function editDefault() { $paymentMerchantService = new PaymentMerchantService(); $aliMerchants = $paymentMerchantService->getMerchantsByWay(PaymentMerchantService::WAY_ALIPAY); $weixinMerchants = $paymentMerchantService->getMerchantsByWay(PaymentMerchantService::WAY_WEIXIN); $expressMerchants = $paymentMerchantService->getMerchantsByWay(PaymentMerchantService::WAY_EXPRESS); $aliDefaultMerchant = $paymentMerchantService->getDefault(PaymentMerchantService::WAY_ALIPAY); $weixinDefaultMerchant = $paymentMerchantService->getDefault(PaymentMerchantService::WAY_WEIXIN); $expressDefaultMerchant = $paymentMerchantService->getDefault(PaymentMerchantService::WAY_EXPRESS); $this->assign('aliDefaultMerchant', $aliDefaultMerchant); $this->assign('weixinDefaultMerchant', $weixinDefaultMerchant); $this->assign('expressDefaultMerchant', $expressDefaultMerchant); $this->assign('aliMerchants', $aliMerchants); $this->assign('weixinMerchants', $weixinMerchants); $this->assign('expressMerchants', $expressMerchants); $this->display('defaultForm'); } public function saveDefault() { $setting = I('setting', []); $paymentMerchantService = new PaymentMerchantService(); $model = new Model(); $model->startTrans(); try { foreach ($setting as $key => $value) { if ($key == 'alipay') { $paymentMerchantService->setDefault(PaymentMerchantService::WAY_ALIPAY, $value); } elseif ($key == 'weixin') { $paymentMerchantService->setDefault(PaymentMerchantService::WAY_WEIXIN, $value); } elseif ($key == 'express') { $paymentMerchantService->setDefault(PaymentMerchantService::WAY_EXPRESS, $value); } } $model->commit(); $this->ajaxReturn([ 'status' => 1, 'message' => '设置成功' ]); } catch (\Exception $e) { $model->rollback(); $this->ajaxReturn([ 'status' => 0, 'message' => '设置失败,请联系管理员' ]); } } private function getEffectiveTimeRange($startedAt, $endedAt) { $start = 0; $end = PaymentRuleService::FOREVER_TIME; if ($startedAt != '') { $start = strtotime($startedAt . ' 00:00:00'); } if ($endedAt != '') { $end = strtotime($startedAt . ' 23:59:59'); } return [$start, $end]; } public function rules() { $page = I('p', 1); $row = I('row', 10); $companyBelong = I('company_belong', -1); $companyId = I('company_id', 0); $gameTypeId = I('game_type_id', 0); $gameId = I('game_id', 0); $startedAt = I('started_at', ''); $endedAt = I('ended_at', ''); $alipayId = I('alipay_merchant_id', 0); $weixinId = I('weixin_merchant_id', 0); $expressId = I('express_merchant_id', 0); $conditions = []; if ($companyBelong != -1) { $conditions['company_belong'] = $companyBelong; } if ($companyId != 0) { $conditions['company_id'] = $companyId; } if ($gameTypeId != 0) { $conditions['game_type_id'] = $gameTypeId; } if ($gameId != 0) { $conditions['game_id'] = $gameId; } if ($alipayId != 0) { $conditions['alipay_merchant_id'] = $alipayId; } if ($weixinId != 0) { $conditions['weixin_merchant_id'] = $weixinId; } if ($expressId != 0) { $conditions['express_merchant_id'] = $expressId; } [$start, $end] = $this->getEffectiveTimeRange($startedAt, $endedAt); // var_dump($start, $end);die(); $timeCondition = ' ((start_time >= ' . $start . ' AND start_time <= ' . $end . ') OR (start_time <= ' . $start . ' AND end_time >= ' . $end . ') OR (end_time >= ' . $start . ' AND end_time <= ' . $end . '))'; if (isset($conditions['_string'])) { $conditions['_string'] .= $timeCondition; } else { $conditions['_string'] = $timeCondition; } $paymentRuleService = new PaymentRuleService(); $gameService = new GameService(); $paymentMerchantService = new PaymentMerchantService(); $companyService = new PromoteCompanyService(); $query = M('payment_rule', 'tab_')->where($conditions); $countQuery = clone $query; $items = $query->order('id desc')->page($page, $row)->select(); $count = $countQuery->count(); $gameTypes = $gameService->getGameTypes(null, 'id,type_name'); $games = $gameService->getBaseGames(null, 'id,name'); $companies = $companyService->getCompanies(null, 'id,company_name'); $companyTypes = PromoteCompanyService::$belongs; $merchantIds = array_merge( array_column($items, 'alipay_merchant_id'), array_column($items, 'weixin_merchant_id'), array_column($items, 'express_merchant_id') ); $merchants = $paymentMerchantService->getMerchantsByIds($merchantIds, 'id,channel,name,account'); $records = []; foreach ($items as $item) { $records[] = [ 'id' => $item['id'], 'company_type_name' => $companyTypes[$item['company_belong']] ?? '--', 'company_name' => isset($companies[$item['company_id']]) ? $companies[$item['company_id']]['company_name'] : '--', 'game_name' => isset($games[$item['game_id']]) ? $games[$item['game_id']]['name'] : '--', 'game_type_name' => isset($gameTypes[$item['game_type_id']]) ? $gameTypes[$item['game_type_id']]['type_name'] : '--', 'alipay_merchant_name' => isset($merchants[$item['alipay_merchant_id']]) ? $merchants[$item['alipay_merchant_id']]['name'] : '系统默认商户', 'alipay_merchant_account' => isset($merchants[$item['alipay_merchant_id']]) ? $merchants[$item['alipay_merchant_id']]['account'] : '系统默认商户', 'weixin_merchant_name' => isset($merchants[$item['weixin_merchant_id']]) ? $merchants[$item['weixin_merchant_id']]['name'] : '系统默认商户', 'weixin_merchant_account' => isset($merchants[$item['weixin_merchant_id']]) ? $merchants[$item['weixin_merchant_id']]['account'] : '系统默认商户', 'express_merchant_name' => isset($merchants[$item['express_merchant_id']]) ? $merchants[$item['express_merchant_id']]['name'] : '系统默认商户', 'express_merchant_account' => isset($merchants[$item['express_merchant_id']]) ? $merchants[$item['express_merchant_id']]['account'] : '系统默认商户', 'effective_time_display' => $paymentRuleService->getEffectiveTimeDisplay($item) ]; } $page = set_pagination($count, $row); if($page) { $this->assign('_page', $page); } $aliMerchants = $paymentMerchantService->getMerchantsByWay(PaymentMerchantService::WAY_ALIPAY); $weixinMerchants = $paymentMerchantService->getMerchantsByWay(PaymentMerchantService::WAY_WEIXIN); $expressMerchants = $paymentMerchantService->getMerchantsByWay(PaymentMerchantService::WAY_EXPRESS); $this->assign('aliMerchants', $aliMerchants); $this->assign('weixinMerchants', $weixinMerchants); $this->assign('expressMerchants', $expressMerchants); $this->assign('records', $records); $this->assign('games', $games); $this->assign('gameTypes', $gameTypes); $this->assign('companyTypes', $companyTypes); $this->assign('companies', $companies); $this->display(); } public function addRule() { $gameService = new GameService(); $gameTypes = $gameService->getGameTypes(null, 'id,type_name'); $games = $gameService->getBaseGames(null, 'id,name'); $companyBelongs = PromoteCompanyService::$belongs; $companyService = new PromoteCompanyService(); $paymentMerchantService = new PaymentMerchantService(); $aliMerchants = $paymentMerchantService->getMerchantsByWay(PaymentMerchantService::WAY_ALIPAY); $weixinMerchants = $paymentMerchantService->getMerchantsByWay(PaymentMerchantService::WAY_WEIXIN); $expressMerchants = $paymentMerchantService->getMerchantsByWay(PaymentMerchantService::WAY_EXPRESS); $companies = $companyService->getCompanies(null, 'id,company_name'); $this->assign('aliMerchants', $aliMerchants); $this->assign('weixinMerchants', $weixinMerchants); $this->assign('expressMerchants', $expressMerchants); $this->assign('games', $games); $this->assign('gameTypes', $gameTypes); $this->assign('companyBelongs', $companyBelongs); $this->assign('companies', $companies); $this->display('ruleAddForm'); } public function saveRule() { $records = I('records', []); if (count($records) == 0) { $this->ajaxReturn([ 'status' => 0, 'message' => '未提交换绑数据' ]); } $status = true; $message = ''; if (!$status) { $this->ajaxReturn([ 'status' => 0, 'message' => $message ]); } $paymentRuleService = new PaymentRuleService(); foreach ($records as $record) { $startTime = $record['start_time'] == '' ? 0 : strtotime($record['start_time'] . ' 00:00:00'); $endTime = $record['end_time'] == '' ? PaymentRuleService::FOREVER_TIME : strtotime($record['end_time'] . ' 23:59:59'); $repeatRules = $paymentRuleService->getTimeRepeatRules($record); if (count($repeatRules)) { $paymentRuleService->resetTimeRules($repeatRules, $startTime, $endTime); } $item = [ 'company_belong' => $record['company_id'] > 0 ? -1 : $record['company_belong'], 'company_id' => $record['company_id'], 'game_type_id' => $record['game_id'] > 0 ? 0 :$record['game_type_id'], 'game_id' => $record['game_id'], 'alipay_merchant_id' => $record['alipay_merchant_id'], 'weixin_merchant_id' => $record['weixin_merchant_id'], 'express_merchant_id' => $record['express_merchant_id'], 'start_time' => $startTime, 'end_time' => $endTime, 'create_time' => time(), 'update_time' => time() ]; $id = M('payment_rule', 'tab_')->add($item); } $this->ajaxReturn([ 'status' => 1, 'message' => '添加成功' ]); } public function editRule() { $id = I('id', 0); $rule = M('payment_rule', 'tab_')->where(['id' => $id])->find(); if ($rule === null) { $this->error('记录不存在'); } $gameService = new GameService(); $gameTypes = $gameService->getGameTypes(null, 'id,type_name'); $games = $gameService->getBaseGames(null, 'id,name'); $companyBelongs = PromoteCompanyService::$belongs; $companyService = new PromoteCompanyService(); $paymentMerchantService = new PaymentMerchantService(); $aliMerchants = $paymentMerchantService->getMerchantsByWay(PaymentMerchantService::WAY_ALIPAY); $weixinMerchants = $paymentMerchantService->getMerchantsByWay(PaymentMerchantService::WAY_WEIXIN); $expressMerchants = $paymentMerchantService->getMerchantsByWay(PaymentMerchantService::WAY_EXPRESS); $companies = $companyService->getCompanies(null, 'id,company_name'); $rule ['start_time'] = $rule ['start_time'] == 0 ? '' : date('Y-m-d', $rule ['start_time']); $rule ['end_time'] = $rule ['end_time'] == PaymentRuleService::FOREVER_TIME ? '' : date('Y-m-d', $rule ['end_time']); $this->assign('aliMerchants', $aliMerchants); $this->assign('weixinMerchants', $weixinMerchants); $this->assign('expressMerchants', $expressMerchants); $this->assign('record', $rule); $this->assign('games', $games); $this->assign('gameTypes', $gameTypes); $this->assign('companyBelongs', $companyBelongs); $this->assign('companies', $companies); $this->display('ruleEditForm'); } public function modifyRule() { $params = I('post.'); $id = $params['id'] ?? 0; if ($id == 0) { $this->ajaxReturn([ 'status' => 0, 'message' => '提交数据异常' ]); } $rule = M('payment_rule', 'tab_')->where(['id' => $id])->find(); if ($rule === null) { $this->ajaxReturn([ 'status' => 0, 'message' => '记录不存在' ]); } $startTime = $params['start_time'] == '' ? 0 : strtotime($params['start_time'] . ' 00:00:00'); $endTime = $params['end_time'] == '' ? PaymentRuleService::FOREVER_TIME : strtotime($params['end_time'] . ' 23:59:59'); if (date('Ymd', $rule['start_time']) <= date('Ymd') && $startTime != $rule['start_time']) { $this->ajaxReturn([ 'status' => 0, 'message' => '原开始生效时间在今日之前,不可修改' ]); } if (date('Ymd', $startTime) <= date('Ymd') && $startTime != $rule['start_time']) { $this->ajaxReturn([ 'status' => 0, 'message' => '开始生效时间在今日之前,不可修改' ]); } if (date('Ymd', $rule['end_time']) <= date('Ymd') && $endTime != $rule['end_time']) { $this->ajaxReturn([ 'status' => 0, 'message' => '原最后生效时间在今日之前,不可修改' ]); } if (date('Ymd', $endTime) <= date('Ymd') && $endTime != $rule['end_time']) { $this->ajaxReturn([ 'status' => 0, 'message' => '最后生效时间在今日之前,不可修改' ]); } $item = [ 'alipay_merchant_id' => $params['alipay_merchant_id'], 'weixin_merchant_id' => $params['weixin_merchant_id'], 'express_merchant_id' => $params['express_merchant_id'], 'start_time' => $startTime, 'end_time' => $endTime, 'update_time' => time() ]; M('payment_rule', 'tab_')->where(['id' => $id])->save($item); $this->ajaxReturn([ 'status' => 1, 'message' => '修改成功' ]); } public function deleteRule() { $id = I('id', 0); M('payment_rule', 'tab_')->where(['id' => $id])->delete(); addOperationLog([ 'op_type' => 2, 'key' => $id, 'op_name' => '删除支付商户配置', 'url' => U('PaymentMerchant/deleteRule', ['id' => $id]), 'menu' => '推广员-推广员管理-市场换绑-删除支付商户配置' ]); $this->ajaxReturn([ 'status' => 1, 'message' => '删除成功' ]); } public function getCompaniesByBelong() { $belong = I('company_belong', ''); if ($belong === '') { $belong = null; } $promoteCompanyService = new PromoteCompanyService(); $companies = $promoteCompanyService->getCompaniesByBelong($belong, 'id,company_name'); $this->ajaxReturn([ 'status' => 1, 'message' => '获取成功', 'data' => [ 'companies' => $companies ] ]); } public function getGamesByType() { $gameTypeId = I('game_type_id', 0); $gameService = new GameService(); $games = $gameService->getBaseGamesByType($gameTypeId, 'id,name'); $this->ajaxReturn([ 'status' => 1, 'message' => '获取成功', 'data' => [ 'games' => $games ] ]); } public function checkRules() { $records = I('records', []); if (count($records) == 0) { $this->ajaxReturn([ 'status' => 0, 'message' => '未提交换绑数据' ]); } $isRepat = false; $paymentRuleService = new PaymentRuleService(); foreach ($records as $record) { $rules = $paymentRuleService->getTimeRepeatRules($record); if (count($rules)) { $isRepat = true; break; } } $this->ajaxReturn([ 'status' => 1, 'message' => '成功', 'data' => [ 'is_repeat' => $isRepat ] ]); } }