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 '
'; var_dump($promotes); echo ''; 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', $presidentDeposit['pay_confirm_time']); $record['refund_time'] = $presidentDeposit['refund_time'] == 0 ? '--' : date('Y-m-d', $presidentDeposit['refund_time']); $record['pay_accept_time'] = $presidentDeposit['pay_accept_time'] == 0 ? '--' : date('Y-m-d', $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; $data['promote_id'] = $promoteId; if (!$record) { M('president_deposit', 'tab_')->add($data); } else { 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' => '操作成功' ]); } }