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.

247 lines
8.7 KiB
PHP

<?php
namespace Base\Service;
use Base\Model\PromoteModel;
use Base\Model\UserPlayInfoModel;
use Base\Model\UserPlayModel;
use Base\Model\UserModel;
use Think\Model;
class PresidentDepositService
{
const PAY_TYPE_CASH = 1;
const PAY_TYPE_DIVIDE = 2;
const PAY_TYPE_NONE = 3;
public static $payWays = [
1 => '银行转账',
2 => '支付宝转账',
3 => '微信转账',
4 => '分成款扣除',
];
public static $payTypes = [
self::PAY_TYPE_CASH => '线下转账',
self::PAY_TYPE_DIVIDE => '分成款扣除',
self::PAY_TYPE_NONE => '无需押金',
];
public static $statusList = [
0 => '财务待确认',
1 => '已收到',
2 => '已退款',
];
public function checkBeforeSave($params, $record = null)
{
if ($params['pay_type'] == 0) {
throw new \Exception('请选择押金付款方式');
} elseif ($params['pay_type'] == 3) {
return;
}
if ($params['pay_type'] != 2 && $params['pay_way'] == 0) {
throw new \Exception('请选择押金支付方式');
}
if ($record && $params['amount'] === '') {
throw new \Exception('请输入押金金额');
}
if ($params['amount'] !== '') {
if (!is_numeric($params['amount'])) {
throw new \Exception('请输入正确押金金额');
}
if ($params['amount'] <= 0) {
throw new \Exception('押金金额必须大于0');
}
if ($params['amount'] > 100000000) {
throw new \Exception('押金金额过高');
}
}
}
public function save($params, $company = null)
{
if (empty($params)) {
throw new \Exception('参数不能为空');
}
$companyId = $params['company_id'] ?? 0;
$payWay = $params['pay_way'] ?? 0;
$payType = $params['pay_type'] ?? 0;
$payAccount = $params['pay_account'] ?? '';
$amount = $params['amount'] ?? '';
$payer = $params['payer'] ?? '';
$payAcceptTime = $params['pay_accept_time'] ?? '';
$refundTime = $params['refund_time'] ?? '';
$payAcceptTime = $payAcceptTime ? strtotime($payAcceptTime) : 0;
$refundTime = $refundTime ? strtotime($refundTime) : 0;
if (is_null($company)) {
$company = M('promote_company', 'tab_')->where(['id' => $companyId, 'company_belong' => ['in', [1, 2]]])->find();
if (is_null($company)) {
throw new \Exception('推广公司不存在');
}
}
$record = M('president_deposit', 'tab_')->where(['company_id' => $company['id']])->find();
$this->checkBeforeSave($params, $record);
if ($params['pay_type'] == 3) {
return $this->handleNoDeposit($company, $record);
}
if ($record) {
$this->update($params, $company, $record);
addOperationLog(['op_type'=>1,'key'=>$company['company_name'].'/'.$params['amount'],'op_name'=>'编辑会长押金','url'=>U('PresidentDeposit/edit',['id'=>$company['id']]),'menu'=>'推广员-结算单管理-会长押金管理-编辑会长押金']);
} else {
$this->add($params, $company);
addOperationLog(['op_type'=>0,'key'=>$company['company_name'].'/'.$params['amount'],'op_name'=>'新增会长押金','url'=>U('PresidentDeposit/edit',['id'=>$company['id']]),'menu'=>'推广员-结算单管理-奖罚记录管理-新增会长押金']);
}
}
private function add($params, $company)
{
$data = [];
$data['pay_way'] = $params['pay_type'] == 2 ? 4 : $params['pay_way'];
$data['pay_type'] = $params['pay_type'];
$data['company_id'] = $company['id'];
$data['pay_account'] = $params['pay_account'];
$data['amount'] = floatval($params['amount']);
$data['payer'] = $params['payer'];
$data['create_time'] = time();
$data['update_time'] = time();
M('president_deposit', 'tab_')->add($data);
}
private function update($params, $company, $record)
{
$payType = $params['pay_type'] ?? 0;
$payAcceptTime = $params['pay_accept_time'] == '' ? 0 : strtotime($params['pay_accept_time']);
$refundTime = $params['refund_time'] == '' ? 0 : strtotime($params['pay_accept_time']);
$data = [];
$status = null;
if ($payType != $record['pay_type']) {
$status = 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'] = $params['pay_type'] == 2 ? 4 : $params['pay_way'];
$data['pay_type'] = $params['pay_type'];
$data['pay_account'] = $params['pay_account'];
$data['amount'] = floatval($params['amount']);
$data['payer'] = $params['payer'];
$data['status'] = $status ?? $record['status'];
$data['update_time'] = time();
M('president_deposit', 'tab_')->where(['id' => $record['id']])->save($data);
}
public function handleNoDeposit($company, $record = null)
{
$data = [];
$data['pay_way'] = 0;
$data['pay_type'] = self::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) {
$data['company_id'] = $company['id'];
M('president_deposit', 'tab_')->add($data);
} else {
M('president_deposit', 'tab_')->where(['company_id' => $company['id']])->save($data);
}
addOperationLog(['op_type'=>1,'key'=>$company['company_name'],'op_name'=>'编辑无需押金','url'=>U('PresidentDeposit/records'),'menu'=>'推广员-结算单管理-会长押金管理-无需押金']);
}
public function batchRefund(array $companyIds)
{
if (isMarketAdmin()) {
throw new \Exception('无法操作记录');
}
$companyIds = I('ids', []);
if (count($companyIds) == 0) {
throw new \Exception('无选中项');
}
$checkStatus = true;
$records = M('president_deposit', 'tab_')->where(['company_id' => ['in', $companyIds]])->select();
foreach ($records as $record) {
if ($record['status'] != 1) {
$checkStatus = false;
break;
}
}
if (!$checkStatus) {
throw new \Exception('含有非已到账状态记录,不可批量操作');
}
M('president_deposit', 'tab_')->where(['company_id' => ['in', $companyIds]])->save([
'status' => 2,
'refund_time' => time(),
'update_time' => time(),
'pay_accept_time' => 0
]);
$companies = M('promote_company', 'tab_')->field(['company_name', 'id'])->where(['id' => ['in', $companyIds]])->select();
$companies = index_by_column('id', $companies);
foreach ($records as $record) {
$company = $companies[$record['company_id']] ?? null;
if ($record['amount']) {
addOperationLog(['op_type'=>1,'key'=>$company['company_name'].'/'.$record['amount'],'op_name'=>'编辑押金已退款','url'=>U('PresidentDeposit/records'),'menu'=>'推广员-结算单管理-会长押金管理-押金已退款']);
}
}
}
public function batchPayConfirm(array $companyIds, $acceptTime)
{
if (isMarketAdmin()) {
throw new \Exception('无法操作记录');
}
if (count($companyIds) == 0) {
throw new \Exception('无选中项');
}
$checkStatus = true;
$records = M('president_deposit', 'tab_')->where(['company_id' => ['in', $companyIds]])->select();
foreach ($records as $record) {
if ($record['status'] != 0) {
$checkStatus = false;
break;
}
}
if (!$checkStatus) {
throw new \Exception('含有非待确认状态记录,不可批量操作');
}
M('president_deposit', 'tab_')->where(['company_id' => ['in', $companyIds]])->save([
'status' => 1,
'pay_confirm_time' => time(),
'update_time' => time(),
'pay_accept_time' => strtotime($acceptTime)
]);
$companies = M('promote_company', 'tab_')->field(['company_name', 'id'])->where(['id' => ['in', $companyIds]])->select();
$companies = index_by_column('id', $companies);
foreach ($records as $record) {
$company = $companies[$record['company_id']] ?? null;
if ($record['amount']) {
addOperationLog(['op_type'=>1,'key'=>$company['company_name'].'/'.$record['amount'],'op_name'=>'编辑确认押金到账','url'=>U('PresidentDeposit/records'),'menu'=>'推广员-结算单管理-会长押金管理-确认押金到账']);
}
}
}
}