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.

632 lines
27 KiB
PHP

<?php
namespace Admin\Controller;
use User\Api\UserApi as UserApi;
use Base\Service\PresidentDepositService;
/**
* 会长押金管理
*/
class PresidentDepositController extends ThinkController
{
public function records()
{
$page = I('p', 1);
$row = I('row', 10);
$companyType = I('company_type');
$payType = I('pay_type');
$status = I('status');
$promoteId = I('promote_id');
$query = M('promote', 'tab_')->where(['level' => 1])->where(['company_belong' => ['in', [1, 2]]]);
$idStrWhere = [];
if ($promoteId !== '') {
$idStrWhere[] = 'id = ' . $promoteId;
}
if ($companyType !== '') {
$query->where(['company_belong' => $companyType]);
}
$promoteIds = [];
if ($status !== '') {
if ($status == '-1') { // 市场待审核
$tempPromoteIds = M('president_deposit', 'tab_')->getField('promote_id', true);
if (count($tempPromoteIds) > 0) {
$idStrWhere[] = 'id not in (' . implode(',', $tempPromoteIds) . ')';
}
} else {
$tempPromoteIds = M('president_deposit', 'tab_')->where(['status' => $status])->getField('promote_id', true);
if (count($tempPromoteIds) > 0) {
$idStrWhere[] = 'id in (' . implode(',', $tempPromoteIds) . ')';
} else {
$idStrWhere[] = '1<>1';
}
}
}
if (!empty(I('pay_confirm_time_start')) && empty(I('pay_confirm_time_end'))) {
$startTime = strtotime(I('pay_confirm_time_start'));
$endTime = strtotime(I('pay_confirm_time_end')) + 86400;
$tempPromoteIds = M('president_deposit', 'tab_')->where("pay_confirm_time >= {$startTime}")->getField('promote_id', true);
if (count($tempPromoteIds) > 0) {
$idStrWhere[] = 'id in (' . implode(',', $tempPromoteIds) . ')';
} else {
$idStrWhere[] = '1<>1';
}
} else if (empty(I('pay_confirm_time_start')) && !empty(I('pay_confirm_time_end'))) {
$startTime = strtotime(I('pay_confirm_time_start'));
$endTime = strtotime(I('pay_confirm_time_end')) + 86400;
$tempPromoteIds = M('president_deposit', 'tab_')->where("pay_confirm_time <= {$endTime}")->getField('promote_id', true);
if (count($tempPromoteIds) > 0) {
$idStrWhere[] = 'id in (' . implode(',', $tempPromoteIds) . ')';
} else {
$idStrWhere[] = '1<>1';
}
} else if (!empty(I('pay_confirm_time_start')) && !empty(I('pay_confirm_time_end'))) {
$startTime = strtotime(I('pay_confirm_time_start'));
$endTime = strtotime(I('pay_confirm_time_end')) + 86400;
$tempPromoteIds = M('president_deposit', 'tab_')->where("pay_confirm_time >= {$startTime} and pay_confirm_time <= {$endTime}")->getField('promote_id', true);
if (count($tempPromoteIds) > 0) {
$idStrWhere[] = 'id in (' . implode(',', $tempPromoteIds) . ')';
} else {
$idStrWhere[] = '1<>1';
}
}
if (!empty(I('refund_time_start')) && empty(I('refund_time_end'))) {
$startTime = strtotime(I('refund_time_start'));
$endTime = strtotime(I('refund_time_end')) + 86400;
$tempPromoteIds = M('president_deposit', 'tab_')->where("refund_time >= {$startTime}")->getField('promote_id', true);
if (count($tempPromoteIds) > 0) {
$idStrWhere[] = 'id in (' . implode(',', $tempPromoteIds) . ')';
} else {
$idStrWhere[] = '1<>1';
}
} else if (empty(I('refund_time_start')) && !empty(I('refund_time_end'))) {
$startTime = strtotime(I('refund_time_start'));
$endTime = strtotime(I('refund_time_end'))+ 86400;
$tempPromoteIds = M('president_deposit', 'tab_')->where("refund_time <= {$endTime}")->getField('promote_id', true);
if (count($tempPromoteIds) > 0) {
$idStrWhere[] = 'id in (' . implode(',', $tempPromoteIds) . ')';
} else {
$idStrWhere[] = '1<>1';
}
} else if (!empty(I('refund_time_start')) && !empty(I('refund_time_end'))) {
$startTime = strtotime(I('refund_time_start'));
$endTime = strtotime(I('refund_time_end'))+ 86400;
$tempPromoteIds = M('president_deposit', 'tab_')->where("refund_time >= {$startTime} and refund_time <= {$endTime}")->getField('promote_id', true);
if (count($tempPromoteIds) > 0) {
$idStrWhere[] = 'id in (' . implode(',', $tempPromoteIds) . ')';
} else {
$idStrWhere[] = '1<>1';
}
}
if (!empty(I('pay_accept_time_start')) && empty(I('pay_accept_time_end'))) {
$startTime = strtotime(I('pay_accept_time_start'));
$endTime = strtotime(I('pay_accept_time_end'))+ 86400;
$tempPromoteIds = M('president_deposit', 'tab_')->where("pay_accept_time >= {$startTime}")->getField('promote_id', true);
if (count($tempPromoteIds) > 0) {
$idStrWhere[] = 'id in (' . implode(',', $tempPromoteIds) . ')';
} else {
$idStrWhere[] = '1<>1';
}
} else if (empty(I('pay_accept_time_start')) && !empty(I('pay_accept_time_end'))) {
$startTime = strtotime(I('pay_accept_time_start'));
$endTime = strtotime(I('pay_accept_time_end'))+ 86400;
$tempPromoteIds = M('president_deposit', 'tab_')->where("pay_accept_time <= {$endTime}")->getField('promote_id', true);
if (count($tempPromoteIds) > 0) {
$idStrWhere[] = 'id in (' . implode(',', $tempPromoteIds) . ')';
} else {
$idStrWhere[] = '1<>1';
}
} else if (!empty(I('pay_accept_time_start')) && !empty(I('pay_accept_time_end'))) {
$startTime = strtotime(I('pay_accept_time_start'));
$endTime = strtotime(I('pay_accept_time_end'))+ 86400;
$tempPromoteIds = M('president_deposit', 'tab_')->where("pay_accept_time >= {$startTime} and pay_accept_time <= {$endTime}")->getField('promote_id', true);
if (count($tempPromoteIds) > 0) {
$idStrWhere[] = 'id in (' . implode(',', $tempPromoteIds) . ')';
} else {
$idStrWhere[] = '1<>1';
}
}
if ($payType !== '') {
$tempPromoteIds = M('president_deposit', 'tab_')->where(['pay_type' => $payType])->getField('promote_id', true);
if (count($tempPromoteIds) > 0) {
$idStrWhere[] = 'id in (' . implode(',', $tempPromoteIds) . ')';
} else {
$idStrWhere[] = '1<>1';
}
}
if (!empty(I('admin_id', 0))) {
$query->where(['admin_id' => I('admin_id', 0)]);
}
if (count($idStrWhere) > 0) {
$query->where(['_string' => implode(' and ', array_unique($idStrWhere))]);
}
$promotes = [];
$count = 0;
$totalQuery = clone $query;
if (I('export', 0) == 1 || $row == 'all') {
$promotes = $query->select();
$count = count($promotes);
} else {
$countQuery = clone $query;
$promotes = $query->page($page, $row)->select();
$count = $countQuery->count();
}
// 汇总金额
if (count($promotes) > 0 || (isset($count) && $count > 0)) {
$total = M('president_deposit', 'tab_')->where(['promote_id'=>['in', $totalQuery->getField('id', true)]])->field('sum(amount) as totalAmount, sum(if(status = 1, amount, 0)) as confirmedAmount, sum(if(status = 2, amount, 0)) as refundedAmount')->find();
$total = [
'totalamount' => $total['totalamount'] ?? 0, 'confirmedamount' => $total['confirmedamount'] ?? 0, 'refundedamount' => $total['refundedamount'] ?? 0
];
} else {
$total = [
'totalamount' => 0, 'confirmedamount' => 0, 'refundedamount' => 0
];
}
$relationQuery = M('promote_company', 'tab_')->field(['id', 'company_name']);
$promotes = $this->mergeOneReletions('company', $promotes, $relationQuery, 'company_id', 'id');
$relationQuery = M('president_deposit', 'tab_');
$promotes = $this->mergeOneReletions('presidentDeposit', $promotes, $relationQuery, 'id', 'promote_id');
$relationQuery = M('promote_belong', 'tab_')->field(['verify_time', 'promote_id']);
$promotes = $this->mergeOneReletions('promoteBelong', $promotes, $relationQuery, 'id', 'promote_id');
/*echo '<pre>';
var_dump($promotes);
echo '</pre>';
die();*/
$companyTypes = [
1 => '外团',
2 => '外团-分发联盟',
];
$payWays = PresidentDepositService::$payWays;
$payTypes = PresidentDepositService::$payTypes;
$statusList = PresidentDepositService::$statusList;
$records = [];
if (count($promotes) > 0) {
foreach ($promotes as $promote) {
$record = [
'id' => $promote['id'],
'company_name' => $promote['company'] ? $promote['company']['company_name'] : '',
'account' => $promote['account'],
'company_belong_text' => $companyTypes[$promote['company_belong']],
];
if ($promote['presidentDeposit']) {
$presidentDeposit = $promote['presidentDeposit'];
$promoteBelong = $promote['promoteBelong'];
if ($presidentDeposit['pay_type'] == PresidentDepositService::PAY_TYPE_NONE) {
$record['payer'] = '--';
$record['pay_account'] = '--';
$record['amount'] = '无';
} else {
$record['payer'] = $presidentDeposit['payer'];
$record['pay_account'] = $presidentDeposit['pay_account'];
$record['amount'] = $presidentDeposit['amount'];
}
$record['pay_type_text'] = $payTypes[$presidentDeposit['pay_type']];
$record['pay_way_text'] = $payWays[$presidentDeposit['pay_way']] ?? '--';
$record['create_time'] = $presidentDeposit['create_time'] == 0 ? '--' : date('Y-m-d H:i:s', $presidentDeposit['create_time']);
$record['verify_time'] = $promoteBelong && $promoteBelong['verify_time'] != 0 ? date('Y-m-d H:i:s', $promoteBelong['verify_time']) : '--';
$record['pay_confirm_time'] = $presidentDeposit['pay_confirm_time'] == 0 ? '--' : date('Y-m-d H:i:s', $presidentDeposit['pay_confirm_time']);
$record['refund_time'] = $presidentDeposit['refund_time'] == 0 ? '--' : date('Y-m-d H:i:s', $presidentDeposit['refund_time']);
$record['pay_accept_time'] = $presidentDeposit['pay_accept_time'] == 0 ? '--' : date('Y-m-d H:i:s', $presidentDeposit['pay_accept_time']);
$record['status_text'] = $statusList[$presidentDeposit['status']];
$record['has_record'] = true;
$record['status'] = $presidentDeposit['status'];
$record['pay_type'] = $presidentDeposit['pay_type'];
} else {
$record['payer'] = '--';
$record['pay_account'] = '--';
$record['amount'] = '--';
$record['pay_type_text'] = '--';
$record['pay_way_text'] = '--';
$record['create_time'] = '--';
$record['verify_time'] = '--';
$record['pay_confirm_time'] = '--';
$record['refund_time'] = '--';
$record['pay_accept_time'] = '--';
$record['status_text'] = '市场待确认';
$record['has_record'] = false;
$record['status'] = 0;
$record['pay_type'] = 0;
}
$records[] = $record;
}
if (I('export', 0) == 1) {
$field = [
'company_name' => '所属推广公司',
'account' => '会长账号',
'company_belong_text' => '工会类型',
'payer' => '退押金账户名',
'pay_way_text' => '付款方式',
'pay_account' => '退押金账号',
'pay_type_text' => '押金类型',
'create_time' => '审批时间',
'amount' => '押金金额',
'verify_time' => '会长申请时间',
'status_text' => '押金状态',
'pay_confirm_time' => '押金确认时间',
'refund_time' => '押金退款时间',
'pay_accept_time' => '押金收到时间',
];
addOperationLog(['op_type'=>3,'key'=>getNowDate(),'op_name'=>'导出会长押金记录','url'=>U('PresidentDeposit/records'),'menu'=>'推广员-结算管理-奖罚记录管理-导出会长押金记录']);
data2csv($records, '会长押金记录', $field);
exit;
}
}
$this->checkListOrCountAuthRestMap($map,[]);
$total['unconfirmedamount'] = $total['totalamount'] - $total['confirmedamount'] - $total['refundedamount'];
$page = set_pagination($count, $row == 'all' ? 99999999 : $row);
//dd($row == 'all' ? 99999999 : $row);
if($page) {
$this->assign('_page', $page);
}
$this->assign('total', $total);
$this->assign('payWays', $payWays);
$this->assign('payTypes', $payTypes);
$this->assign('companyTypes', $companyTypes);
$this->assign('statusList', $statusList);
$this->assign('records', $records);
$this->display();
}
private function mergeOneReletions($name, $records, $relationQuery, $selfColumn, $relationColumn = 'id')
{
$values = array_column($records, $selfColumn);
if (count($values) == 0) {
return [];
}
$rows = $relationQuery->where([$relationColumn => ['in', $values]])->select();
foreach ($records as &$record) {
$record[$name] = null;
}
foreach ($records as &$record) {
foreach ($rows as $row) {
if ($record[$selfColumn] == $row[$relationColumn]) {
$record[$name] = $row;
}
}
}
return $records;
}
public function edit()
{
$this->meta_title = '编辑会长押金';
$id = I('id', 0);
$promote = M('promote', 'tab_')->field(['account', 'id'])->where(['id' => $id])->find();
$record = M('president_deposit', 'tab_')->where(['promote_id' => $id])->find();
$this->assign('payWays', PresidentDepositService::$payWays);
$this->assign('payTypes', PresidentDepositService::$payTypes);
$this->assign('promote', $promote);
$this->assign('record', $record);
$this->display('form');
}
public function show()
{
$this->meta_title = '查看会长押金';
$id = I('id', 0);
$promote = M('promote', 'tab_')->field(['account', 'id'])->where(['id' => $id])->find();
$record = M('president_deposit', 'tab_')->where(['promote_id' => $id])->find();
$this->assign('payWays', PresidentDepositService::$payWays);
$this->assign('payTypes', PresidentDepositService::$payTypes);
$this->assign('promote', $promote);
$this->assign('record', $record);
$this->display('show');
}
public function save()
{
$payWay = I('pay_way', 0);
$payType = I('pay_type', 0);
$promoteId = I('id', 0);
$payAccount = I('pay_account', '');
$amount = I('amount', '');
$payer = I('payer', '');
$payAcceptTime = I('pay_accept_time', 0) ? strtotime(I('pay_accept_time')): 0;
$refundTime = I('refund_time', 0) ? strtotime(I('refund_time')): 0;
$record = M('president_deposit', 'tab_')->where(['promote_id' => $promoteId])->find();
$promoteData = M('promote', 'tab_')->field('account')->where(['id' => $promoteId])->find();
// 市场部门无法操作押金退款和收到时间
if ((($record['pay_accept_time'] != $payAcceptTime) || ($record['refund_time'] != $refundTime)) && isMarketAdmin()) {
return $this->error('无法操作记录');
}
if ($payType == 0) {
return $this->error('请选择押金付款方式');
}
if ($payType == 3) {
$this->handleNoDeposit($promoteId);
return $this->success('保存成功', U('records'));
}
if ($payType != 2 && $payWay == 0) {
return $this->error('请选择付款方式');
}
if (!$record) {
if ($amount !== '') {
if (!is_numeric($amount)) {
return $this->error('请输入正确金额');
}
if ($amount <= 0) {
return $this->error('金额必须大于0');
}
if ($amount > 100000000) {
return $this->error('金额过高');
}
}
$data = [];
// 填写押金到账时间后自动变为押金已确认到账状态,并且状态在待确认时候
if ($record['pay_accept_time'] != $payAcceptTime && $record['status'] == 0) {
$data = ['status' => 1,
'pay_confirm_time' => time()];
}
$data['pay_way'] = $payType == 2 ? 4 : $payWay;
$data['pay_type'] = $payType;
$data['promote_id'] = $promoteId;
$data['pay_account'] = $payAccount;
$data['amount'] = floatval($amount);
$data['payer'] = $payer;
$data['create_time'] = time();
$data['update_time'] = time();
$data['pay_accept_time'] = $payAcceptTime;
$data['refund_time'] = $refundTime;
M('president_deposit', 'tab_')->add($data);
addOperationLog(['op_type'=>0,'key'=>$promoteData['account'].'/'.$amount,'op_name'=>'新增会长押金','url'=>U('PresidentDeposit/edit',['id'=>$promoteId]),'menu'=>'推广员-结算单管理-奖罚记录管理-新增会长押金']);
return $this->success('保存成功', U('records'));
}
/* if ($record['status'] != 0) {
return $this->error('该状态下不可编辑/修改');
} */
if ($amount === '') {
return $this->error('请输入金额');
}
if (!is_numeric($amount)) {
return $this->error('请输入正确金额');
}
if ($amount <= 0) {
return $this->error('金额必须大于0');
}
if ($amount > 100000000) {
return $this->error('金额过高');
}
/* if ($payer == '') {
return $this->error('请输入付款人');
}
if ($payAccount == '') {
return $this->error('请输入付款账号');
} */
$data = [];
// 切换类型
if ($payType != $record['pay_type']) {
$payStatus = 0;
$data['refund_time'] = $data['pay_accept_time'] = $data['pay_confirm_time'] = 0;
} else {
$data['pay_accept_time'] = $payAcceptTime;
$data['refund_time'] = $refundTime;
}
$data['pay_way'] = $payType == 2 ? 4 : $payWay;
$data['pay_type'] = $payType;
$data['pay_account'] = $payAccount;
$data['amount'] = floatval($amount);
$data['status'] = $payStatus ?? $record['status'];
$data['payer'] = $payer;
$data['update_time'] = time();
M('president_deposit', 'tab_')->where(['promote_id' => $promoteId])->save($data);
addOperationLog(['op_type'=>1,'key'=>$promoteData['account'].'/'.$amount,'op_name'=>'编辑会长押金','url'=>U('PresidentDeposit/edit',['id'=>$promoteId]),'menu'=>'推广员-结算单管理-会长押金管理-编辑会长押金']);
return $this->success('保存成功', U('records'));
}
public function delete()
{
if (isMarketAdmin()) {
$this->ajaxReturn([
'status' => 0,
'message' => '无法操作记录'
]);
}
$promoteId = I('id', 0);
M('president_deposit', 'tab_')->where(['promote_id' => $promoteId])->delete();
addOperationLog(['op_type'=>2,'key'=>$promoteId,'op_name'=>'删除会长押金记录','url'=>U('PresidentDeposit/records',['id'=>$promoteId]),'menu'=>'推广员-结算单管理-奖罚记录管理-删除会长押金记录']);
$this->ajaxReturn([
'status' => 1,
'message' => '删除成功'
]);
}
/**
* 处理无需押金
*/
public function handleNoDeposit($promoteId)
{
$record = M('president_deposit', 'tab_')->where(['promote_id' => $promoteId])->find();
$data = [];
$data['pay_way'] = 0;
$data['pay_type'] = PresidentDepositService::PAY_TYPE_NONE;
$data['pay_account'] = '';
$data['amount'] = 0;
$data['payer'] = '';
$data['status'] = 1;
$data['pay_confirm_time'] = time();
$data['create_time'] = time();
$data['update_time'] = time();
$data['status'] = 1;
$data['pay_accept_time'] = $data['refund_time'] = 0;
if (!$record) {
M('president_deposit', 'tab_')->add($data);
} else {
$data['promote_id'] = $promoteId;
M('president_deposit', 'tab_')->where(['promote_id' => $promoteId])->save($data);
}
$promoteData = M('promote', 'tab_')->field('account')->where(['id' => $promoteId])->find();
addOperationLog(['op_type'=>1,'key'=>$promoteData['account'],'op_name'=>'编辑无需押金','url'=>U('PresidentDeposit/records'),'menu'=>'推广员-结算单管理-会长押金管理-无需押金']);
}
public function noDeposit()
{
$promoteId = I('id', 0);
$this->handleNoDeposit($promoteId);
$this->ajaxReturn([
'status' => 1,
'message' => '操作成功'
]);
}
public function refund()
{
if (isMarketAdmin()) {
return $this->error('无法操作记录');
}
$promoteIds = I('ids', []);
if (count($promoteIds) == 0) {
$this->ajaxReturn([
'status' => 0,
'message' => '无选中项'
]);
}
$checkStatus = true;
$records = M('president_deposit', 'tab_')->field(['id', 'status'])->where(['promote_id' => ['in', $promoteIds]])->select();
foreach ($records as $record) {
if ($record['status'] != 1) {
$checkStatus = false;
break;
}
}
if (!$checkStatus) {
$this->ajaxReturn([
'status' => 0,
'message' => '含有非已到账状态记录,不可批量操作'
]);
}
$promoteData = M('promote','tab_')
->field('account,amount')
->join('left join tab_president_deposit on tab_president_deposit.promote_id=tab_promote.id')
->where(['tab_promote.id'=>['in', $promoteIds]])
->select();
// dump($promoteData);die();
foreach ($promoteData as $key => $value) {
if ($value['amount']) {
addOperationLog(['op_type'=>1,'key'=>$value['account'].'/'.$value['amount'],'op_name'=>'编辑押金已退款','url'=>U('PresidentDeposit/records'),'menu'=>'推广员-结算单管理-会长押金管理-押金已退款']);
}
}
M('president_deposit', 'tab_')->where(['promote_id' => ['in', $promoteIds]])->save([
'status' => 2,
'refund_time' => time(),
'update_time' => time(),
'pay_accept_time' => 0
]);
$this->ajaxReturn([
'status' => 1,
'message' => '操作成功'
]);
}
public function payConfirm()
{
if (isMarketAdmin()) {
$this->ajaxReturn([
'status' => 0,
'message' => '无权限操作记录'
]);
}
$promoteIds = I('ids', []);
if (count($promoteIds) == 0) {
$this->ajaxReturn([
'status' => 0,
'message' => '无选中项'
]);
}
$checkStatus = true;
$records = M('president_deposit', 'tab_')->where(['promote_id' => ['in', $promoteIds]])->select();
foreach ($records as $record) {
if ($record['status'] != 0) {
$checkStatus = false;
break;
}
// 如果不是无需押金,并且没有填写收到押金时间
// if ($record['pay_type'] != PresidentDepositService::PAY_TYPE_NONE && empty($record['pay_accept_time'])) {
// $this->ajaxReturn([
// 'status' => 0,
// 'message' => '含有待确认收到押金时间记录,不可批量操作'
// ]);
// }
}
if (!$checkStatus) {
$this->ajaxReturn([
'status' => 0,
'message' => '含有非待确认状态记录,不可批量操作'
]);
}
$promoteData = M('promote','tab_')
->field('account,amount')
->join('left join tab_president_deposit on tab_president_deposit.promote_id=tab_promote.id')
->where(['tab_promote.id'=>['in', $promoteIds]])
->select();
// dump($promoteData);die();
foreach ($promoteData as $key => $value) {
if ($value['amount']) {
addOperationLog(['op_type'=>1,'key'=>$value['account'].'/'.$value['amount'],'op_name'=>'编辑确认押金到账','url'=>U('PresidentDeposit/records'),'menu'=>'推广员-结算单管理-会长押金管理-确认押金到账']);
}
}
M('president_deposit', 'tab_')->where(['promote_id' => ['in', $promoteIds]])->save([
'status' => 1,
'pay_confirm_time' => time(),
'update_time' => time(),
'pay_accept_time' => strtotime(I('accept_time'))
]);
$this->ajaxReturn([
'status' => 1,
'message' => '操作成功'
]);
}
}