You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

525 lines
19 KiB
PHTML

5 years ago
<?php
namespace Admin\Controller;
use User\Api\UserApi as UserApi;
use Base\Service\PaymentMerchantService;
use Base\Service\PaymentRuleService;
use Base\Service\PromoteCompanyService;
use Base\Service\GameService;
use Think\Model;
/**
* 支付/付款商户
*/
class PaymentMerchantController extends ThinkController
{
public function list()
{
$page = I('p', 1);
$row = I('row', 10);
$name = I('name', '');
$mainName = I('main_name', '');
$adminId = I('admin_id', 0);
$channel = I('channel', 0);
$way = I('way', 0);
$status = I('status', -1);
$startedAt = I('started_at', '1970-01-01');
$endedAt = I('ended_at', '9999-01-01');
$conditions = [];
if ($name != '') {
$conditions['name'] = ['like', '%' . $name . '%'];
}
if ($mainName != '') {
$conditions['main_name'] = ['like', '%' . $mainName . '%'];
}
if ($adminId != 0) {
$conditions['admin_id'] = $adminId;
}
if ($channel != 0) {
$conditions['channel'] = $channel;
}
if ($way != 0) {
$conditions['_string'] = 'ways & ' . $way . '=' . $way;
}
if ($status != -1) {
$conditions['status'] = $status;
}
$conditions['update_time'] = ['between', [strtotime($startedAt . ' 00:00:00'), strtotime($endedAt . ' 23:59:59')]];
$paymentMerchantService = new PaymentMerchantService();
$query = M('payment_merchant', 'tab_')->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['identifier'] = $identifier;
$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;
M('payment_merchant', 'tab_')->add($data);
} else {
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' => '设置失败,请联系管理员'
]);
}
}
public function rules()
{
$page = I('p', 1);
$row = I('row', 10);
$companyBelong = I('compnay_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;
}
if ($startedAt != '') {
$conditions['update_time'] = ['egt', strtotime($startedAt . ' 00:00:00')];
}
if ($endedAt != '') {
$conditions['update_time'] = ['elt', strtotime($endedAt . ' 23:59:59')];
}
$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)
];
}
// var_dump($records);die();
$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
]);
}
foreach ($records as $record) {
$startTime = $record['start_time'] == '' ? 0 : strtotime($record['start_time'] . ' 00:00:00');
$endTime = $record['end_time'] == '' ? 0 : strtotime($record['end_time'] . ' 23:59:59');
$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 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()
{
}
}