Withdraw.php 46 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069
  1. <?php
  2. namespace app\admin\controller;
  3. use app\common\controller\Backend;
  4. use app\common\library\Redis;
  5. use app\main\helper\StringHelper;
  6. use app\main\service\AdminService;
  7. use app\main\service\OrderService;
  8. use think\Controller;
  9. use think\Log;
  10. use think\Request;
  11. use app\main\constants\AdminConstants;
  12. /**
  13. * 订单结算
  14. */
  15. class Withdraw extends Backend
  16. {
  17. protected $model = null;
  18. protected $searchFields = 'admin.nickname';
  19. //Multi方法可批量修改的字段
  20. protected $multiFields = 'state';
  21. protected $noNeedRight = ['mywithdrawexport'];
  22. public function _initialize()
  23. {
  24. parent::_initialize();
  25. $this->model = model('Withdraw')->setConnect();
  26. $this->view->assign("stateList", $this->model->getStateList());
  27. }
  28. /**
  29. * 导出
  30. */
  31. public function export(){
  32. ini_set('memory_limit', '256M'); //内存限制
  33. if($this->group == 3){
  34. $columns = [ '代理商', '提现时间', '划账日期','提现金额','打款方式','开户人','银行','卡号','身份证号','状态'];
  35. } elseif (in_array($this->group, [
  36. AdminConstants::ADMIN_SUPER_MANAGER_ID,
  37. AdminConstants::ADMIN_GROUP_ID_ADMIN,
  38. AdminConstants::ADMIN_GROUP_ID_SETTLEMENT
  39. ])) {
  40. $columns = [ '渠道商id','渠道商', '提现时间', '划账日期','提现金额','打款方式','开户人','银行','卡号','身份证号','商务负责人','分成比例','付款方名称','结算单时间区间','状态'];
  41. }
  42. header('Content-Description: File Transfer');
  43. header('Content-Type: application/vnd.ms-excel');
  44. header('Content-Disposition: attachment; filename="打款管理数据导出-'.date('YmdHis', time()).'.csv"');
  45. header('Expires: 0');
  46. header('Cache-Control: must-revalidate');
  47. header('Pragma: public');
  48. $fp = fopen('php://output', 'a');//打开output流
  49. mb_convert_variables('GBK', 'UTF-8', $columns);
  50. fputcsv($fp, $columns);//将数据格式化为CSV格式并写入到output流中
  51. $payer = model('Payer')->getPayerList();
  52. list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  53. $sort = 'withdraw.id';
  54. if (in_array($this->group, [
  55. AdminConstants::ADMIN_SUPER_MANAGER_ID,
  56. AdminConstants::ADMIN_GROUP_ID_ADMIN,
  57. AdminConstants::ADMIN_GROUP_ID_SETTLEMENT
  58. ])){ //管理员的
  59. //获取管理员下面的渠道商
  60. $channels = model('Admin')
  61. ->join('auth_group_access a','a.uid= admin.id')
  62. ->join('admin_extend d','admin.id = d.admin_id')
  63. ->where('a.group_id','eq',3)
  64. ->field('admin.id,admin.nickname,d.pay_method')
  65. ->select();
  66. $cNames = [];
  67. foreach ($channels as $channel) {
  68. $cNames[$channel->id] = ['nickname'=>$channel->nickname,'dkfs'=>$channel->pay_method];
  69. }
  70. //查询所有管理员
  71. $glyInfo = model('admin')->join('auth_group_access aa','aa.uid = admin.id')
  72. ->where('aa.group_id < 3')
  73. ->column('admin.id,admin.nickname');
  74. $total = $this->model
  75. ->join("admin_extend","admin_extend.admin_id = withdraw.admin_id")
  76. ->join('auth_group_access g','g.uid= withdraw.admin_id')
  77. ->join('admin','withdraw.admin_id = admin.id')
  78. ->join('payer','payer.id = admin_extend.payerid','left')
  79. ->field('withdraw.*,g.group_id,admin.nickname,admin_extend.card_holder,admin_extend.card_num,admin_extend.card_bank,admin_extend.idcard_no,admin_extend.benefit,admin_extend.create_by,admin_extend.payerid as payerid')
  80. ->where('g.group_id','eq',3)
  81. ->where($where)
  82. ->count();
  83. $limit = 3000;
  84. $pages = ceil($total / $limit);
  85. for($i = 1; $i <= $pages; $i++) {
  86. $offset = ($i - 1) * $limit;
  87. $list = $this->model
  88. ->join("admin_extend", "admin_extend.admin_id = withdraw.admin_id")
  89. ->join('auth_group_access g', 'g.uid= withdraw.admin_id')
  90. ->join('admin', 'withdraw.admin_id = admin.id')
  91. ->join('payer', 'payer.id = admin_extend.payerid', 'left')
  92. ->field('withdraw.*,g.group_id,admin.nickname,admin_extend.card_holder,admin_extend.card_num,admin_extend.card_bank,admin_extend.idcard_no,admin_extend.benefit,admin_extend.create_by,admin_extend.payerid as payerid,payer.name')
  93. ->where('g.group_id', 'eq', 3)
  94. ->where($where)
  95. ->order('withdraw.state asc,withdraw.id desc')
  96. ->limit($offset, $limit)
  97. ->select();
  98. foreach ($list as $key => $val) {
  99. $list[$key]['admin.nickname'] = empty($cNames[$val->admin_id]['nickname']) ? '' : $cNames[$val->admin_id]['nickname'];
  100. $list[$key]['dkfs'] = empty($cNames[$val->admin_id]['dkfs']) ? '' : $cNames[$val->admin_id]['dkfs'];
  101. $list[$key]['withdraw.createtime'] = $val['createtime'];
  102. if (key_exists($list[$key]['create_by'], $glyInfo)) {
  103. $list[$key]['create_by'] = $glyInfo[$list[$key]['create_by']];
  104. } else {
  105. $list[$key]['create_by'] = '-';
  106. }
  107. if (key_exists($list[$key]['payerid'], $payer)) {
  108. $list[$key]['payerid'] = $payer[$list[$key]['payerid']];
  109. } else {
  110. $list[$key]['payerid'] = '-';
  111. }
  112. $section = '';
  113. if (empty($list[$key]['stime'])) {
  114. $section .= '入驻平台 - ';
  115. } else {
  116. $section .= $list[$key]['stime'] . ' - ';
  117. }
  118. $section .= $list[$key]['etime'];
  119. $list[$key]['section'] = $section;
  120. $dkfs = '支付宝';
  121. if(!empty($val['dkfs'])){
  122. if($val['dkfs'] == 1){
  123. $dkfs = '银行卡对公';
  124. }elseif($val['dkfs'] == 2){
  125. $dkfs = '银行卡对私';
  126. }elseif($val['dkfs'] == 3){
  127. $dkfs = '微信';
  128. }
  129. }
  130. $state = '未知';
  131. if($val['state'] == 1){
  132. $state = '提现中';
  133. }elseif ($val['state'] == 2){
  134. $state = '打款中';
  135. }elseif ($val['state'] == 3){
  136. $state = '已打款';
  137. }
  138. //获取每列数据,转换处理成需要导出的数据
  139. $rowData = [
  140. $val['admin_id'],
  141. rm_space($list[$key]['admin.nickname']),
  142. date('Y-m-d H:i:s',$val['createtime']),
  143. empty($val['finishtime'])?'无':date('Y-m-d H:i:s',$val['finishtime']),
  144. $val['money'],
  145. $dkfs,
  146. rm_space($val['card_holder']),
  147. "\t".rm_space($val['card_bank'])."\t",
  148. empty($val['card_num'])?'-':"\t".get_number($val['card_num'])."\t",
  149. empty($val['idcard_no'])?'-':"\t".get_number($val['idcard_no'], true)."\t",
  150. rm_space($val['create_by']),
  151. $val['benefit'],
  152. rm_space($val['name']),
  153. $section,
  154. $state
  155. ];
  156. //需要格式转换,否则会乱码
  157. mb_convert_variables('GBK', 'UTF-8', $rowData);
  158. fputcsv($fp, $rowData);
  159. }
  160. //必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。
  161. ob_flush();
  162. flush();
  163. }
  164. }elseif($this->group == 3){ //渠道商
  165. //获取渠道商下面的代理商列表
  166. $channels = model('Admin')
  167. ->join('auth_group_access a','a.uid= admin.id')
  168. ->join('admin_extend d','admin.id = d.admin_id')
  169. ->where('a.group_id','eq',4)
  170. ->where('d.create_by','eq',$this->auth->id)
  171. ->field('admin.id,admin.nickname,d.pay_method')
  172. ->select();
  173. $cNames = [];
  174. foreach ($channels as $channel) {
  175. $cNames[$channel->id] = ['nickname'=>$channel->nickname,'dkfs'=>$channel->pay_method];
  176. }
  177. $daili_id = implode(',',array_keys($cNames));
  178. $total = $this->model
  179. ->join('auth_group_access g','g.uid= withdraw.admin_id')
  180. ->join('admin','withdraw.admin_id = admin.id')
  181. ->where('withdraw.admin_id','in',$daili_id)
  182. ->where($where)
  183. ->order($sort, $order)
  184. ->count();
  185. $limit = 3000;
  186. $pages = ceil($total / $limit);
  187. for($i = 1; $i <= $pages; $i++) {
  188. $offset = ($i - 1) * $limit;
  189. $list = $this->model
  190. ->join("admin_extend ex", "ex.admin_id = withdraw.admin_id", "left")
  191. ->join('auth_group_access g', 'g.uid= withdraw.admin_id')
  192. ->join('admin', 'withdraw.admin_id = admin.id')
  193. ->field('withdraw.*,g.group_id,admin.nickname,ex.card_holder,ex.card_num,ex.card_bank,ex.idcard_no')
  194. ->where('withdraw.admin_id', 'in', $daili_id)
  195. ->where($where)
  196. ->order('withdraw.state asc,withdraw.id desc')
  197. ->limit($offset, $limit)
  198. ->select();
  199. foreach ($list as $key => $val) {
  200. $list[$key]['admin.nickname'] = empty($cNames[$val->admin_id]['nickname']) ? '' : $cNames[$val->admin_id]['nickname'];
  201. $list[$key]['dkfs'] = empty($cNames[$val->admin_id]['dkfs']) ? '' : $cNames[$val->admin_id]['dkfs'];
  202. $list[$key]['withdraw.createtime'] = $val['createtime'];
  203. $dkfs = '支付宝';
  204. if(!empty($val['dkfs'])){
  205. if($val['dkfs'] == 1){
  206. $dkfs = '银行卡对公';
  207. }elseif($val['dkfs'] == 2){
  208. $dkfs = '银行卡对私';
  209. }elseif($val['dkfs'] == 3){
  210. $dkfs = '微信';
  211. }
  212. }
  213. $state = '未知';
  214. if($val['state'] == 1){
  215. $state = '提现中';
  216. }elseif ($val['state'] == 2){
  217. $state = '打款中';
  218. }elseif ($val['state'] == 3){
  219. $state = '已打款';
  220. }
  221. //获取每列数据,转换处理成需要导出的数据
  222. $rowData = [
  223. $list[$key]['admin.nickname'],
  224. date('Y-m-d H:i:s',$val['createtime']),
  225. empty($val['finishtime'])?'无':date('Y-m-d H:i:s',$val['finishtime']),
  226. $val['money'],
  227. $dkfs,
  228. rm_space($val['card_holder']),
  229. "\t".rm_space($val['card_bank'])."\t",
  230. empty($val['card_num'])?'-':"\t".get_number($val['card_num'])."\t",
  231. empty($val['idcard_no'])?'-':"\t".get_number($val['idcard_no'], true)."\t",
  232. $state
  233. ];
  234. //需要格式转换,否则会乱码
  235. mb_convert_variables('GBK', 'UTF-8', $rowData);
  236. fputcsv($fp, $rowData);
  237. }
  238. //必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。
  239. ob_flush();
  240. flush();
  241. }
  242. }
  243. fclose($fp);
  244. exit();
  245. }
  246. /**
  247. * 打款管理列表
  248. */
  249. public function index()
  250. {
  251. $this->assign('group',$this->group);
  252. $this->assignconfig('group',$this->group);
  253. //设置过滤方法
  254. $this->request->filter(['strip_tags']);
  255. $where = [];
  256. //千万不能删除这段,这段有用
  257. if ($this->request->isAjax()){
  258. list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  259. }
  260. $payer = model('Payer')->getPayerList();
  261. $payerStr = '';
  262. if(count($payer)){
  263. $payerStr .= '{';
  264. foreach ($payer as $k=>$v){
  265. $payerStr.= '"'.$k.'":'.'"'.$v.'",';
  266. }
  267. $payerStr = substr($payerStr,0,-1);
  268. $payerStr .= '}';
  269. }
  270. $this->assignconfig('payer',json_encode($payer));
  271. if (in_array($this->group, [
  272. AdminConstants::ADMIN_SUPER_MANAGER_ID,
  273. AdminConstants::ADMIN_GROUP_ID_ADMIN,
  274. AdminConstants::ADMIN_GROUP_ID_SETTLEMENT
  275. ])) {
  276. /*
  277. * 统计,sum三个字段
  278. */
  279. //提现中
  280. $state1 = $this->model
  281. ->join("admin_extend","admin_extend.admin_id = withdraw.admin_id")
  282. ->join('auth_group_access g','g.uid= withdraw.admin_id')
  283. ->join('admin','withdraw.admin_id = admin.id')
  284. ->join('payer','payer.id = admin_extend.payerid','left')
  285. ->field('withdraw.*,g.group_id,admin.nickname,admin_extend.card_holder,admin_extend.card_num,admin_extend.card_bank,admin_extend.idcard_no,admin_extend.benefit,admin_extend.create_by,admin_extend.payerid as payerid')
  286. ->where('g.group_id','eq',3)
  287. ->where($where)
  288. ->where('withdraw.state',1)
  289. ->sum('withdraw.money');
  290. //打款中
  291. $state2 = $this->model
  292. ->join("admin_extend","admin_extend.admin_id = withdraw.admin_id")
  293. ->join('auth_group_access g','g.uid= withdraw.admin_id')
  294. ->join('admin','withdraw.admin_id = admin.id')
  295. ->join('payer','payer.id = admin_extend.payerid','left')
  296. ->field('withdraw.*,g.group_id,admin.nickname,admin_extend.card_holder,admin_extend.card_num,admin_extend.card_bank,admin_extend.idcard_no,admin_extend.benefit,admin_extend.create_by,admin_extend.payerid as payerid')
  297. ->where('g.group_id','eq',3)
  298. ->where($where)
  299. ->where('withdraw.state',2)
  300. ->sum('withdraw.money');
  301. //已打款
  302. $state3 = $this->model
  303. ->join("admin_extend","admin_extend.admin_id = withdraw.admin_id")
  304. ->join('auth_group_access g','g.uid= withdraw.admin_id')
  305. ->join('admin','withdraw.admin_id = admin.id')
  306. ->join('payer','payer.id = admin_extend.payerid','left')
  307. ->field('withdraw.*,g.group_id,admin.nickname,admin_extend.card_holder,admin_extend.card_num,admin_extend.card_bank,admin_extend.idcard_no,admin_extend.benefit,admin_extend.create_by,admin_extend.payerid as payerid')
  308. ->where('g.group_id','eq',3)
  309. ->where($where)
  310. ->where('withdraw.state',3)
  311. ->sum('withdraw.money');
  312. $this->assignconfig('state1',$state1);
  313. $this->assignconfig('state2',$state2);
  314. $this->assignconfig('state3',$state3);
  315. }elseif($this->group==3){
  316. $channels = model('Admin')
  317. ->join('auth_group_access a','a.uid= admin.id')
  318. ->join('admin_extend d','admin.id = d.admin_id')
  319. ->where('a.group_id','eq',4)
  320. ->where('d.create_by','eq',$this->auth->id)
  321. ->field('admin.id,admin.nickname,d.pay_method')
  322. ->select();
  323. $cNames = [];
  324. foreach ($channels as $channel) {
  325. $cNames[$channel->id] = ['nickname'=>$channel->nickname,'dkfs'=>$channel->pay_method];
  326. }
  327. $daili_id = implode(',',array_keys($cNames));
  328. /*
  329. * 统计,sum三个字段
  330. */
  331. //提现中
  332. $state1 = $this->model
  333. ->join('auth_group_access g','g.uid= withdraw.admin_id')
  334. ->join('admin','withdraw.admin_id = admin.id')
  335. ->where('withdraw.admin_id','in',$daili_id)
  336. ->where($where)
  337. ->where('withdraw.state',1)
  338. ->sum('money');
  339. //打款中
  340. $state2 = $this->model
  341. ->join('auth_group_access g','g.uid= withdraw.admin_id')
  342. ->join('admin','withdraw.admin_id = admin.id')
  343. ->where('withdraw.admin_id','in',$daili_id)
  344. ->where($where)
  345. ->where('withdraw.state',2)
  346. ->sum('money');
  347. //已打款
  348. $state3 = $this->model
  349. ->join('auth_group_access g','g.uid= withdraw.admin_id')
  350. ->join('admin','withdraw.admin_id = admin.id')
  351. ->where('withdraw.admin_id','in',$daili_id)
  352. ->where($where)
  353. ->where('withdraw.state',3)
  354. ->sum('money');
  355. $this->assignconfig('state1',$state1);
  356. $this->assignconfig('state2',$state2);
  357. $this->assignconfig('state3',$state3);
  358. }else{
  359. $this->assignconfig('state1',0);
  360. $this->assignconfig('state2',0);
  361. $this->assignconfig('state3',0);
  362. }
  363. if ($this->request->isAjax())
  364. {
  365. //如果发送的来源是Selectpage,则转发到Selectpage
  366. if ($this->request->request('pkey_name'))
  367. {
  368. return $this->selectpage();
  369. }
  370. list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  371. $sort = 'withdraw.id';
  372. Log::write($where,'congtest');
  373. if (in_array($this->group, [
  374. AdminConstants::ADMIN_SUPER_MANAGER_ID,
  375. AdminConstants::ADMIN_GROUP_ID_ADMIN,
  376. AdminConstants::ADMIN_GROUP_ID_SETTLEMENT
  377. ])){ //管理员的
  378. //获取管理员下面的渠道商
  379. $channels = model('Admin')
  380. ->join('auth_group_access a','a.uid= admin.id')
  381. ->join('admin_extend d','admin.id = d.admin_id')
  382. ->where('a.group_id','eq',3)
  383. ->field('admin.id,admin.nickname,d.pay_method')
  384. ->select();
  385. $cNames = [];
  386. foreach ($channels as $channel) {
  387. $cNames[$channel->id] = ['nickname'=>$channel->nickname,'dkfs'=>$channel->pay_method];
  388. }
  389. //查询所有管理员
  390. $glyInfo = model('admin')->join('auth_group_access aa','aa.uid = admin.id')
  391. ->where('aa.group_id < 3')
  392. ->column('admin.id,admin.nickname');
  393. $total = $this->model
  394. ->join("admin_extend","admin_extend.admin_id = withdraw.admin_id")
  395. ->join('auth_group_access g','g.uid= withdraw.admin_id')
  396. ->join('admin','withdraw.admin_id = admin.id')
  397. ->join('payer','payer.id = admin_extend.payerid','left')
  398. ->field('withdraw.*,g.group_id,admin.nickname,admin_extend.card_holder,admin_extend.card_num,admin_extend.card_bank,admin_extend.idcard_no,admin_extend.benefit,admin_extend.create_by,admin_extend.payerid as payerid')
  399. ->where('g.group_id','eq',3)
  400. ->where($where)
  401. ->count();
  402. $list = $this->model
  403. ->join("admin_extend","admin_extend.admin_id = withdraw.admin_id")
  404. ->join('auth_group_access g','g.uid= withdraw.admin_id')
  405. ->join('admin','withdraw.admin_id = admin.id')
  406. ->join('payer','payer.id = admin_extend.payerid','left')
  407. ->field('withdraw.*,g.group_id,admin.nickname,admin_extend.card_holder,admin_extend.card_num,admin_extend.card_bank,admin_extend.idcard_no,admin_extend.benefit,admin_extend.create_by,admin_extend.payerid as payerid,payer.name')
  408. ->where('g.group_id','eq',3)
  409. ->where($where)
  410. ->order('withdraw.state asc,withdraw.id desc')
  411. ->limit($offset, $limit)
  412. ->select();
  413. // echo $this->model->getLastSql();die;
  414. foreach($list as $key=>$val){
  415. $list[$key]['admin.nickname'] = empty($cNames[$val->admin_id]['nickname'])?'':$cNames[$val->admin_id]['nickname'];
  416. $list[$key]['dkfs'] = empty($cNames[$val->admin_id]['dkfs'])?'':$cNames[$val->admin_id]['dkfs'];
  417. $list[$key]['withdraw.createtime'] = $val['createtime'];
  418. if(key_exists($list[$key]['create_by'],$glyInfo)){
  419. $list[$key]['create_by'] = $glyInfo[$list[$key]['create_by']];
  420. }else{
  421. $list[$key]['create_by'] = '-';
  422. }
  423. if(key_exists($list[$key]['payerid'],$payer)){
  424. $list[$key]['payerid'] = $payer[$list[$key]['payerid']];
  425. }else{
  426. $list[$key]['payerid'] = '-';
  427. }
  428. $section = '';
  429. if(empty($list[$key]['stime'])){
  430. $section .= '入驻平台 - ';
  431. }else{
  432. $section .= $list[$key]['stime'].' - ';
  433. }
  434. $section .= $list[$key]['etime'];
  435. $list[$key]['section'] = $section;
  436. }
  437. $result = array("total" => $total, "rows" => $list,"others"=>array('state1'=>$state1,'state2'=>$state2,'state3'=>$state3));
  438. }elseif($this->group == 3){ //渠道商
  439. //获取渠道商下面的代理商列表
  440. $channels = model('Admin')
  441. ->join('auth_group_access a','a.uid= admin.id')
  442. ->join('admin_extend d','admin.id = d.admin_id')
  443. ->where('a.group_id','eq',4)
  444. ->where('d.create_by','eq',$this->auth->id)
  445. ->field('admin.id,admin.nickname,d.pay_method')
  446. ->select();
  447. $cNames = [];
  448. foreach ($channels as $channel) {
  449. $cNames[$channel->id] = ['nickname'=>$channel->nickname,'dkfs'=>$channel->pay_method];
  450. }
  451. $daili_id = implode(',',array_keys($cNames));
  452. $total = $this->model
  453. ->join('auth_group_access g','g.uid= withdraw.admin_id')
  454. ->join('admin','withdraw.admin_id = admin.id')
  455. ->where('withdraw.admin_id','in',$daili_id)
  456. ->where($where)
  457. ->order($sort, $order)
  458. ->count();
  459. $list = $this->model
  460. ->join("admin_extend ex","ex.admin_id = withdraw.admin_id","left")
  461. ->join('auth_group_access g','g.uid= withdraw.admin_id')
  462. ->join('admin','withdraw.admin_id = admin.id')
  463. ->field('withdraw.*,g.group_id,admin.nickname,ex.card_holder,ex.card_num,ex.card_bank,ex.idcard_no')
  464. ->where('withdraw.admin_id','in',$daili_id)
  465. ->where($where)
  466. ->order('withdraw.state asc,withdraw.id desc')
  467. ->limit($offset, $limit)
  468. ->select();
  469. foreach($list as $key=>$val){
  470. $list[$key]['admin.nickname'] = empty($cNames[$val->admin_id]['nickname'])?'':$cNames[$val->admin_id]['nickname'];
  471. $list[$key]['dkfs'] = empty($cNames[$val->admin_id]['dkfs'])?'':$cNames[$val->admin_id]['dkfs'];
  472. $list[$key]['withdraw.createtime'] = $val['createtime'];
  473. }
  474. $result = array("total" => $total, "rows" => $list,"others"=>array('state1'=>$state1,'state2'=>$state2,'state3'=>$state3));
  475. }else{ //无权查看数据的用户组
  476. $result = array("total" => 0, "rows" => []);
  477. }
  478. return json($result);
  479. }
  480. return $this->view->fetch();
  481. }
  482. /*
  483. * 我的结算单
  484. */
  485. public function mywithdraw(){
  486. if ($this->request->isAjax()) {
  487. //如果发送的来源是Selectpage,则转发到Selectpage
  488. if ($this->request->request('pkey_name')) {
  489. return $this->selectpage();
  490. }
  491. list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  492. $total = $this->model
  493. ->where('withdraw.admin_id','eq',$this->auth->id)
  494. ->where($where)
  495. ->order($sort, $order)
  496. ->count();
  497. $list = $this->model
  498. ->where('withdraw.admin_id','eq',$this->auth->id)
  499. ->where($where)
  500. ->order('withdraw.state asc,withdraw.id desc')
  501. ->limit($offset, $limit)
  502. ->select();
  503. $result = array("total" => $total, "rows" => $list);
  504. return json($result);
  505. }
  506. $admin_money = model('admin_money')->where('admin_id','eq',$this->auth->id)->find();
  507. $this->assign('admin_money',$admin_money);
  508. $agreementyiArr = [];
  509. $totalSplitMoney = 0;
  510. if($this->group==3){
  511. //渠道充值不含当天
  512. $today_collect = model('orders_collect')->sumCollect($this->auth->id,1,3);
  513. $totalSplitMoney = $today_collect['split_money'] ?? 0;
  514. $this->assign('recharge_all',$today_collect['recharge_money']??0);
  515. $this->assign('no_cash_money',($today_collect['recharge_money_benefit']??0)-$admin_money['cash_money']-$admin_money['count_cash_money']-$totalSplitMoney);
  516. $this->assign('count_money',($today_collect['recharge_money_benefit']??0)-$totalSplitMoney);
  517. $adminExtendModel = AdminService::instance()->getAdminExtendModel();
  518. $adminExtendInfo = $adminExtendModel->getInfo($this->auth->id);
  519. if ($adminExtendInfo['pay_method'] == 2) { // 对私打款
  520. /** @var \app\admin\model\Agreementyi $agreementyiModel */
  521. $agreementyiModel = model('agreementyi');
  522. if ($agYiId = $agreementyiModel->checkAgreement($this->auth->id, $adminExtendInfo['card_holder'], $adminExtendInfo['card_num'], $adminExtendInfo['card_bank'], $adminExtendInfo['benefit'])) {
  523. $this->assign('agYiId', $agYiId);
  524. }
  525. $agreementyiArr = $agreementyiModel->where('admin_id', $this->auth->id)->select();
  526. }
  527. }
  528. if($this->group==4){
  529. //代理充值不含当天
  530. $today_collect = model('orders_collect')->sumCollect($this->auth->id,1,1);
  531. $this->assign('recharge_all',$today_collect['recharge_money']??0);//总充值不含当天
  532. $this->assign('no_cash_money',($today_collect['recharge_money_benefit']??0)-$admin_money['cash_money']-$admin_money['count_cash_money']);
  533. $this->assign('count_money',$today_collect['recharge_money_benefit']??0);
  534. }
  535. //echo ($today_collect['recharge_money_benefit']??0).'----'.$admin_money['cash_money'].'----'.$admin_money['count_cash_money'];
  536. $this->assign('agreementyiArr', $agreementyiArr);
  537. $this->assign('split_money',$totalSplitMoney);
  538. return $this->view->fetch();
  539. }
  540. /*
  541. * 我的结算单历史记录
  542. */
  543. public function myhistorydraw($admin_id='')
  544. {
  545. if ($this->request->isAjax()) {
  546. //如果发送的来源是Selectpage,则转发到Selectpage
  547. if ($this->request->request('pkey_name')) {
  548. return $this->selectpage();
  549. }
  550. list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  551. $admin_id = $this->request->get('admin_id');
  552. $total = $this->model
  553. ->where('withdraw.admin_id', 'eq', $admin_id)
  554. ->where($where)
  555. ->order($sort, $order)
  556. ->count();
  557. $list = $this->model
  558. ->where('withdraw.admin_id', 'eq', $admin_id)
  559. ->where($where)
  560. ->order('withdraw.state asc,withdraw.id desc')
  561. ->limit($offset, $limit)
  562. ->select();
  563. $result = array("total" => $total, "rows" => $list);
  564. return json($result);
  565. }
  566. $admin_group = model('AuthGroupAccess')->getGroupId($admin_id);
  567. $admin_money = model('admin_money')->where('admin_id', 'eq', $admin_id)->find();
  568. $this->assign('admin_id', $admin_id);
  569. $this->assign('admin_money', $admin_money);
  570. $totalSplitMoney = 0;
  571. if ($admin_group == 3) {
  572. //渠道充值不含当天
  573. $today_collect = model('orders_collect')->sumCollect($admin_id, 1, 3);
  574. $totalSplitMoney = $today_collect['split_money'] ?? 0;
  575. $this->assign('recharge_all', $today_collect['recharge_money'] ?? 0);
  576. $this->assign('no_cash_money', ($today_collect['recharge_money_benefit'] ?? 0) - $admin_money['cash_money'] - $admin_money['count_cash_money']-$totalSplitMoney);
  577. $this->assign('count_money', ($today_collect['recharge_money_benefit'] ?? 0) -$totalSplitMoney);
  578. }
  579. if ($admin_group == 4) {
  580. //代理充值不含当天
  581. $today_collect = model('orders_collect')->sumCollect($admin_id, 1, 1);
  582. $this->assign('recharge_all', $today_collect['recharge_money'] ?? 0);//总充值不含当天
  583. $this->assign('no_cash_money', ($today_collect['recharge_money_benefit'] ?? 0) - $admin_money['cash_money'] - $admin_money['count_cash_money']);
  584. $this->assign('count_money', $today_collect['recharge_money_benefit'] ?? 0);
  585. }
  586. $this->assign('split_money',$totalSplitMoney);
  587. return $this->view->fetch();
  588. }
  589. public function add()
  590. {
  591. $theme = config('site.theme');
  592. if ($theme && !in_array($theme, ['xg', 'sf'])) {
  593. /**
  594. * 渠道商 && 对私打款 检验是否需要签协议
  595. */
  596. if ($this->group == 3) {
  597. // $adminConfigModel = AdminService::instance()->getAdminConfigModel();
  598. // $adminInfo = $adminConfigModel->getAdminInfoAll($this->auth->id);
  599. $adminExtendModel = AdminService::instance()->getAdminExtendModel();
  600. $adminExtendInfo = $adminExtendModel->getInfo($this->auth->id);
  601. if ($adminExtendInfo['pay_method'] == 2) { // 对私打款
  602. /** @var \app\admin\model\Agreementyi $agreementyiModel */
  603. $agreementyiModel = model('agreementyi');
  604. if (!$agYiId = $agreementyiModel->checkAgreement($this->auth->id,
  605. $adminExtendInfo['card_holder'], $adminExtendInfo['benefit'] )) {
  606. // $this->redirect('agreementyi/add');
  607. $this->error('检测到协议未签或收款人已变更,请先签署协议!', 'agreementyi/add');
  608. }
  609. }
  610. }
  611. }
  612. $t = time();
  613. $start_time = strtotime(date('Y-m-d 23:30:00'));
  614. $end_time = strtotime(date('Y-m-d 01:30:00'));
  615. if($t>=$start_time || $t<=$end_time){
  616. $this->error('每天00:00-01:30与23:30-24:00,不支持提现');
  617. }
  618. $admin_money = model('AdminMoney')->where('admin_id='.$this->auth->id)->find();
  619. $isIdCard = 0;
  620. $no_cash_money = 0;
  621. if($this->group==3){
  622. //渠道充值不含当天
  623. $today_collect = model('orders_collect')->sumCollect($this->auth->id,1,3);
  624. $totalSplitMoney = $today_collect['split_money'] ?? 0;
  625. //未提现金额
  626. $no_cash_money = ($today_collect['recharge_money_benefit']??0)-$admin_money['cash_money']-$admin_money['count_cash_money']-$totalSplitMoney;
  627. }
  628. if($this->group==4){
  629. //代理充值不含当天
  630. $today_collect = model('orders_collect')->sumCollect($this->auth->id,1,1);
  631. $no_cash_money = ($today_collect['recharge_money_benefit']??0)-$admin_money['cash_money']-$admin_money['count_cash_money'];
  632. $extends=model('AdminExtend')->where(['admin_id'=>$this->auth->id])->find();
  633. $cb = $extends->create_by;
  634. $fAdmin = model('AdminExtend')->where(['admin_id'=>$cb])->find();
  635. $isIdCard = empty($fAdmin->is_idcard)?0:$fAdmin->is_idcard;
  636. if(!empty($extends->idcard_no)){
  637. $isIdCard = 0;
  638. }
  639. }
  640. $no_cash_money = StringHelper::moneyFormat($no_cash_money);
  641. if ($this->request->isPost()) {
  642. $timedate = date('Ymd',time());
  643. $withdrawKey = 'WD:'.$this->auth->id.':'.$timedate;
  644. $redis = Redis::instance();
  645. if(empty($this->request->post('idcard_no'))){
  646. $row = $this->request->post('row/a');
  647. $withdrawType = $this->request->post('type');
  648. if ($row) {
  649. if (!$redis->setex($withdrawKey,600,'1')) {
  650. $this->error('提现过于频繁,请十分钟以后再试');
  651. }
  652. $money = $row['money'];
  653. //按月提现
  654. if ($withdrawType == 2) {
  655. $month = OrderService::instance()->getWithdrawMonth($this->auth->id)->data;
  656. $money = $no_cash_money = (string) $month['cmoney'];
  657. $save['etime'] = $month['etime'];
  658. $save['stime'] = $month['stime'];
  659. } else {
  660. $no_cash_money = (string) $no_cash_money;
  661. $save['etime'] = date('Ymd',strtotime('-1 day'));
  662. $stime = model('withdraw')->setConnect()->where('admin_id',$this->auth->id)->field('etime')->order('id desc')->find();
  663. if(empty($stime['etime'])){
  664. $save['stime'] = null;
  665. }else{
  666. $save['stime'] = date('Ymd',strtotime($stime['etime'])+3600*24);
  667. }
  668. }
  669. //未提现余额 严格校验
  670. if($no_cash_money != $money){
  671. $redis->del($withdrawKey);
  672. $this->error('ERROR:提现金额与计算后的提现金额不一致');
  673. }
  674. $minMoney = 10;
  675. if ($money < $minMoney) {
  676. $redis->del($withdrawKey);
  677. $this->error("最低提现金额{$minMoney}元");
  678. }
  679. /* if($admin_money['no_cash_money'] < $money){
  680. $redis->del($withdrawKey);
  681. $this->error('超出最大可提现金额'.$admin_money['no_cash_money']);
  682. }*/
  683. //$this->error($save['stime']);
  684. $save['admin_id'] = $this->auth->id;
  685. $save['money'] = $money;//含手续费
  686. $save['state'] = 1;
  687. if(model('withdraw')->save($save)){
  688. model('AdminMoney')->where('admin_id',$this->auth->id)->setInc('cash_money',$money);
  689. $this->success();
  690. }
  691. $redis->del($withdrawKey);
  692. $this->error('提交申请失败');
  693. }
  694. }else{ //输入身份证号
  695. $idCardNo = trim($this->request->post('idcard_no'));
  696. $flag = validateIDCard($idCardNo);
  697. if($flag){
  698. model('AdminExtend')->update(['idcard_no'=>$idCardNo],['admin_id'=>$this->auth->id]);
  699. $this->success();
  700. }else{
  701. $this->error('身份证号码不合法');
  702. }
  703. }
  704. $this->error('错误');
  705. }
  706. $monthData = OrderService::instance()->getWithdrawMonth($this->auth->id)->data;
  707. $this->assign('month', $monthData);
  708. $this->assign('isIdcard',$isIdCard);
  709. $this->assign('group',$this->group);
  710. $this->assignconfig('group',$this->group);
  711. $this->view->assign('no_cash_money',$no_cash_money?$no_cash_money:0);
  712. $this->assignconfig('no_cash_money',$no_cash_money?$no_cash_money:0);
  713. return $this->view->fetch();
  714. }
  715. public function edit($ids = NULL)
  716. {
  717. $row = $this->model->get($ids);
  718. if (!$row){
  719. $this->error(__('No Results were found'));
  720. }
  721. $adminIds = $this->getDataLimitAdminIds();
  722. if (is_array($adminIds))
  723. {
  724. if (!in_array($row[$this->dataLimitField], $adminIds))
  725. {
  726. $this->error(__('You have no permission'));
  727. }
  728. }
  729. if ($this->request->isPost())
  730. {
  731. $params = $this->request->post("row/a");
  732. if ($params)
  733. {
  734. try
  735. {
  736. //是否采用模型验证
  737. if ($this->modelValidate)
  738. {
  739. $name = basename(str_replace('\\', '/', get_class($this->model)));
  740. $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.edit' : true) : $this->modelValidate;
  741. $row->validate($validate);
  742. }
  743. if($row['state'] ==3){
  744. $this->error('已打款 请勿重复处理');
  745. }
  746. if(empty($params['state'])){
  747. $this->error('请选择一种打款状态');
  748. }
  749. $result = $row->allowField(true)->save($params,['id'=>$params['id']]);
  750. if ($result !== false)
  751. {
  752. $withdraw = $this->model->get($params['id']);
  753. if($params['state'] == 3){
  754. //提现中的减少
  755. $admin_update1 = model('AdminMoney')->where('admin_id',$withdraw['admin_id'])->setDec('cash_money',$withdraw['money']);
  756. //已打款的增加
  757. $admin_update2 = model('AdminMoney')->where('admin_id',$withdraw['admin_id'])->setInc('count_cash_money',$withdraw['money']);
  758. //更新完成时间
  759. $time = time();
  760. $updateTime = model('Withdraw')->where('id',$params['id'])->update(['finishtime'=>$time]);
  761. }
  762. $this->success();
  763. }
  764. else
  765. {
  766. $this->error($row->getError());
  767. }
  768. }
  769. catch (\think\exception\PDOException $e)
  770. {
  771. $this->error($e->getMessage());
  772. }
  773. }
  774. $this->error(__('Parameter %s can not be empty', ''));
  775. }
  776. $admin= model("Admin")->where('id',$row['admin_id'])->find();
  777. if ($admin) {
  778. $row['admin_nickname'] = $admin['nickname'];
  779. }else{
  780. $row['admin_nickname'] = '';
  781. }
  782. $ae = model('AdminExtend')->where('admin_id',$row['admin_id'])->find();
  783. $this->view->assign('ae',$ae);
  784. $this->view->assign("row", $row);
  785. $dingdan = [];
  786. $payInfo = [];
  787. $auth = model('AuthGroupAccess')->where('uid',$row['admin_id'])->find();
  788. if($auth->group_id==3){
  789. $payInfo = model('AdminExtend')
  790. ->join('payer','payer.id = admin_extend.payerid','left')
  791. ->join('admin','admin.id = admin_extend.create_by')
  792. ->where('admin_extend.admin_id='.$row['admin_id'])
  793. ->field('admin.nickname,admin_extend.benefit,payer.name')
  794. ->find();
  795. if(empty($payInfo['name'])){
  796. $payInfo['name'] = '暂无';
  797. }
  798. }
  799. if($row['stime'] && $row['etime']){
  800. if($auth->group_id==3){
  801. //渠道
  802. $dingdan = model('orders_collect')
  803. ->where('admin_id',$row['admin_id'])
  804. ->where('createdate','egt',$row['stime'])
  805. ->where('createdate','elt',$row['etime'])
  806. ->where('type','eq',1)
  807. ->where('flag','eq',3)
  808. ->field('id,createdate,recharge_money,recharge_money_benefit,admin_id as aid')
  809. ->select();
  810. }
  811. if($auth->group_id==4){
  812. //代理收入
  813. $dingdan = model('orders_collect')
  814. ->where('admin_id',$row['admin_id'])
  815. ->where('createdate','egt',$row['stime'])
  816. ->where('createdate','elt',$row['etime'])
  817. ->where('type','eq',1)
  818. ->where('flag','eq',1)
  819. ->field('id,createdate,recharge_money,recharge_money_benefit,admin_id as aid')
  820. ->select();
  821. }
  822. //Log::write($this->model->getlastsql(),'11111111');
  823. }
  824. $this->view->assign('payinfo',$payInfo);
  825. $this->view->assign('dingdan',$dingdan);
  826. return $this->view->fetch();
  827. }
  828. /**
  829. * 批量更新s
  830. */
  831. public function multi($ids = "")
  832. {
  833. $ids = $ids ? $ids : $this->request->param("ids");
  834. if ($ids)
  835. {
  836. if ($this->request->has('params'))
  837. {
  838. parse_str($this->request->post("params"), $values);
  839. $values = array_intersect_key($values, array_flip(is_array($this->multiFields) ? $this->multiFields : explode(',', $this->multiFields)));
  840. if ($values)
  841. {
  842. if($values['state']!=2 && $values['state']!=3){
  843. $this->error("非法操作");
  844. }
  845. $adminIds = $this->getDataLimitAdminIds();
  846. if (is_array($adminIds))
  847. {
  848. $this->model->where($this->dataLimitField, 'in', $adminIds);
  849. }
  850. $idsarr = explode(",",$ids);
  851. $successids = "";
  852. $cantids = "";
  853. $failedids = "";
  854. foreach ($idsarr as $v){
  855. $withdraw = $this->model->get($v);
  856. if($values['state'] == 2 && $withdraw['state'] == 3){
  857. $cantids .= "{$v},";
  858. }else{
  859. $res = $this->model->where("id",$v)->update($values);
  860. if($res){
  861. if($values['state'] == 3){
  862. //提现中的减少
  863. $admin_update1 = model('AdminMoney')->where('admin_id',$withdraw['admin_id'])->setDec('cash_money',$withdraw['money']);
  864. //已打款的增加
  865. $admin_update2 = model('AdminMoney')->where('admin_id',$withdraw['admin_id'])->setInc('count_cash_money',$withdraw['money']);
  866. //更新完成时间
  867. $time = time();
  868. $updateTime = model('Withdraw')->where('id',$v)->update(['finishtime'=>$time]);
  869. }
  870. $successids .= "{$v},";
  871. }else{
  872. $failedids .= "{$v},";
  873. }
  874. }
  875. }
  876. $successids = rtrim($successids,",");
  877. $cantids = rtrim($cantids,",");
  878. $failedids = rtrim($failedids,",");
  879. $msg = "";
  880. if(empty($cantids) && empty($failedids)){
  881. $this->success();
  882. }
  883. if($successids)
  884. $msg .= "ID:{$successids}操作成功!<br>";
  885. if($cantids)
  886. $msg .= "ID:{$cantids}已打款,不能修改!<br>";
  887. if($failedids)
  888. $msg .= "ID:{$failedids}未更新行!";
  889. $this->success($msg);
  890. }
  891. else
  892. {
  893. $this->error(__('You have no permission'));
  894. }
  895. }
  896. }
  897. $this->error(__('Parameter %s can not be empty', 'ids'));
  898. }
  899. public function mywithdrawExport()
  900. {
  901. ini_set('memory_limit', '512M'); //内存限制
  902. list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  903. $total = $this->model
  904. ->where('withdraw.admin_id','eq',$this->auth->id)
  905. ->where($where)
  906. ->order($sort, $order)
  907. ->count();
  908. $list = $this->model
  909. ->where('withdraw.admin_id','eq',$this->auth->id)
  910. ->where($where)
  911. ->order('withdraw.state asc,withdraw.id desc')
  912. ->limit($offset, $limit)
  913. ->select();
  914. $title=array('提现时间','提现周期','划账日期','提现金额','状态');
  915. $content = '';
  916. $content = implode($title,',');
  917. $content .= PHP_EOL;
  918. foreach($list as $k =>$v){
  919. $content .= date('Y-m-d H:i:s',$v['createtime']).','.$v['stime'].'-'.$v['etime'].','.$v['finishtime_text'].','.$v['money'].','.$v['state_text'].PHP_EOL;
  920. }
  921. mb_convert_variables('GBK', 'UTF-8', $content);
  922. $fileName = "提现记录导出-".date('YmdHis', time()).".csv";
  923. header('Expires: 0');
  924. header('Content-Encoding: utf-8');
  925. header("Content-type:text/csv; charset=utf-8");
  926. Header("Accept-Length: " . strlen($content));
  927. header("Content-Disposition:attachment;filename=" . $fileName);
  928. header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
  929. header('Pragma:public');
  930. echo $content;exit;
  931. }
  932. }