Supplierwithdraw.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. <?php
  2. namespace app\mall\admin;
  3. use app\admin\controller\Admin;
  4. use think\Db;
  5. use think\Request;
  6. use think\Validate;
  7. use app\common\builder\ZBuilder;
  8. class Supplierwithdraw extends Admin
  9. {
  10. public function index($status='0'){
  11. $list_tab = [
  12. '0' => ['title' => '提现列表', 'url' => url('index', ['status' => '0'])],
  13. '1' => ['title' => '提现费率设置', 'url' => url('index', ['status' => '1'])],
  14. ];
  15. switch ($status) {
  16. case '0':
  17. $order = $this->getOrder();
  18. if($order===''){
  19. $order='id desc';
  20. }
  21. $map = $this->getMap();
  22. $data_list = Db::name('supplier_capital_extracts')->where($map)->order($order)->paginate();
  23. $page = $data_list->render();
  24. $suppliers=db('suppliers')->field('id,name')->select();
  25. $select_suppliers=[];
  26. foreach ($suppliers as $key => $value) {
  27. $select_suppliers[$value['id']]=$value['name'];
  28. }
  29. return ZBuilder::make('table')
  30. ->setPageTitle('') // 设置页面标题
  31. ->setPageTips('供应商提现审核通过时即扣除相应手续费') // 设置页面提示信息
  32. ->setTabNav($list_tab, $status)//分组
  33. ->hideCheckbox() //隐藏第一列多选框
  34. ->setTableName('supplier_capital_extracts') // 指定数据表名
  35. ->addOrder('id,created_at') // 添加排序
  36. ->addTopSelect('supplier_id', '全部供应商', $select_suppliers) //添加顶部下拉筛选
  37. ->addTopSelect('status', '全部状态', ['0'=>'待审核','1'=>'通过','2'=>'驳回']) //添加顶部下拉筛选
  38. ->setSearch(['id' => 'ID','bank_account'=>'银行账号'], '', '', '搜索') // 设置搜索参数
  39. ->addTimeFilter('created_at') // 添加时间段筛选
  40. ->addColumns([
  41. ['id', 'ID'],
  42. ['supplier_id', '供应商','callback',function($value){
  43. return db('suppliers')->where('id',$value)->value('name');
  44. }],
  45. ['amount', '提现金额','callback',function($value){
  46. return $value.'元';
  47. }],
  48. ['balance', '账户余额','callback',function($value,$data){
  49. $balance=db('supplier_capitals')->where('supplier_id',$data['supplier_id'])->value('money_available');
  50. return $balance.'元';
  51. },'__data__'],
  52. ['info', '提现银行账户信息','callback',function($value,$data){
  53. return "<div style='line-height:18px;max-weight:50%;'>银行名称:{$data['bank_name']}<br>开户行名称:{$data['bank_found']}<br>持卡人姓名:{$data['bank_user']}<br>银行卡账号:{$data['bank_account']}</div>";
  54. },'__data__'],
  55. ['created_at', '申请时间','datetime', '未知','Y-m-d H:i'],
  56. ['progress', '审核状态','status','',['0'=>'待审核','1'=>'通过','2'=>'驳回:danger']],
  57. ['run', '操作','callback',function($value,$data){
  58. if($data['progress']=='0'){
  59. $json=json_encode(['area'=>['800px','450px'],'title'=>'开始审核']);
  60. return '<div class="btn-group"><a title="点击审核" icon="fa fa-smile-o" class="btn btn-xs btn-default ajax-get pop" href="'.url('audit',['id'=>$data['id'],'',false]).'?_pop=1" data-layer=\''.$json.'\' _tag="custom">点击审核</a></div>';
  61. }elseif($data['progress']=='2'){
  62. $json=json_encode(['area'=>['800px','450px'],'title'=>'驳回理由']);
  63. return '<div class="btn-group"><a title="点击查看驳回理由" icon="fa fa-smile-o" class="btn btn-xs btn-default ajax-get pop" href="'.url('look',['id'=>$data['id'],'',false]).'?_pop=1" data-layer=\''.$json.'\' _tag="custom">点击查看驳回理由</a></div>';
  64. }else{
  65. return '';
  66. }
  67. },'__data__'],
  68. ]) //添加多列数据
  69. ->setRowList($data_list) // 设置表格数据
  70. ->setPages($page) // 设置分页数据
  71. ->fetch();
  72. break;
  73. case '1':
  74. //判断是否为post请求
  75. if (Request::instance()->isPost()) {
  76. //获取请求的post数据
  77. $data=input('post.');
  78. //数据输入验证
  79. $supplier_withdraw_rate=Db::name("config")->where('name','supplier_withdraw_rate')->find();
  80. $validate = new Validate([
  81. 'supplier_withdraw_rate|'.$supplier_withdraw_rate['title']=> [
  82. 'require',
  83. 'egt'=>'0',
  84. 'lt'=>'100',
  85. 'regex'=>'/^((\d|[1-9]\d)(\.\d)?)$/',
  86. ],
  87. ]);
  88. if (!$validate->check($data)) {
  89. return $this->error($validate->getError());
  90. }
  91. //数据处理
  92. $update=array();
  93. $update['value']=$data['supplier_withdraw_rate'];
  94. $update['updated_at']=time();
  95. //数据更新
  96. $rt=Db::name("config")->where('name',$supplier_withdraw_rate['name'])->update($update);
  97. //跳转
  98. if($rt!==false){
  99. return $this->success('提现费率设置成功',url('index',['status'=>'1']));
  100. } else {
  101. return $this->error('提现费率设置失败');
  102. }
  103. }
  104. // 查处数据
  105. $supplier_withdraw_rate=Db::name("config")->where('name','supplier_withdraw_rate')->find();
  106. if(!$supplier_withdraw_rate){
  107. return $this->error('请求错误');
  108. }
  109. // 使用ZBuilder快速创建表单
  110. return ZBuilder::make('form')
  111. ->setPageTitle('') // 设置页面标题
  112. ->setPageTips('供应商提现审核通过时即扣除相应手续费') // 设置页面提示信息
  113. ->setTabNav($list_tab, $status)//分组
  114. ->hideBtn([ 'back'])//隐藏按钮
  115. ->setBtnTitle('submit', '确定') //修改默认按钮标题
  116. ->addBtn('<button type="reset" class="btn btn-default">重置</button>') //添加额外按钮
  117. ->addText('supplier_withdraw_rate',$supplier_withdraw_rate['title'],$supplier_withdraw_rate['tips'],$supplier_withdraw_rate['value'], ['','%'])
  118. //->isAjax(false) //默认为ajax的post提交
  119. ->fetch();
  120. break;
  121. default:
  122. break;
  123. }
  124. }
  125. public function look($id=''){
  126. $supplier_capital_extract=Db::name("supplier_capital_extracts")->where('progress','2')->where('id',$id)->find();
  127. if(!$supplier_capital_extract){
  128. return $this->error('请求错误');
  129. }
  130. // 使用ZBuilder快速创建表单
  131. return '<div style="padding:20px 2%">'.$supplier_capital_extract['result'].'</div>';
  132. }
  133. public function audit($id=''){
  134. //判断是否为post请求
  135. if (Request::instance()->isPost()) {
  136. $now=time();
  137. //获取请求的post数据
  138. $data=input('post.');
  139. // 查处数据
  140. $supplier_capital_extract=Db::name("supplier_capital_extracts")->where('progress','0')->where('id',$data['id'])->find();
  141. if(!$supplier_capital_extract){
  142. return $this->error('请求错误');
  143. }
  144. //数据输入验证
  145. $validate = new Validate([
  146. 'progress|审核'=> 'require|in:1,2',
  147. ]);
  148. if (!$validate->check($data)) {
  149. return $this->error($validate->getError());
  150. }
  151. $update=array();
  152. if($data['progress']=='2'){
  153. $validate = new Validate([
  154. 'result|驳回理由'=> 'require|length:1,20',
  155. ]);
  156. if (!$validate->check($data)) {
  157. return $this->error($validate->getError());
  158. }
  159. $update['result']=$data['result'];
  160. }
  161. //数据处理
  162. $update['id']=$data['id'];
  163. $update['progress']=$data['progress'];
  164. $update['admin_user_id']=UID;
  165. $update['updated_at']=$now;
  166. //数据更新
  167. $rt=Db::name("supplier_capital_extracts")->update($update);
  168. //跳转
  169. if($rt!==false){
  170. $supplier_capital_extract=Db::name("supplier_capital_extracts")->where('id',$data['id'])->find();
  171. if($data['progress']=='1'){
  172. //扣除手续费
  173. $rate=db('config')->where('name','supplier_withdraw_rate')->value('value');
  174. $sx_m=round($rate*$supplier_capital_extract['amount']/100);//手续费
  175. $sj_m=$supplier_capital_extract['amount']-$sx_m;//实际提现费用
  176. db('supplier_capitals')->where('supplier_id',$supplier_capital_extract['supplier_id'])->setInc('money_obtained',$sj_m);
  177. db('supplier_capitals')->where('supplier_id',$supplier_capital_extract['supplier_id'])->setInc('money_rate',$sx_m);
  178. db('supplier_capitals')->where('supplier_id',$supplier_capital_extract['supplier_id'])->update(['updated_at'=>$now]);
  179. db('supplier_capital_extracts')->where('id',$supplier_capital_extract['id'])->update(['money_rate'=>$sx_m]);
  180. //手续费计入平台流水
  181. $insert=[
  182. 'sn'=>get_platform_water_sn(),
  183. 'amount'=>$sx_m,
  184. 'channel'=>'线下',
  185. 'source'=>'供应商提现手续费',
  186. 'relate_order'=>'提现记录ID:'.$supplier_capital_extract['id'],
  187. 'created_at'=>$now,
  188. 'updated_at'=>$now
  189. ];
  190. db('platform_waters')->insertGetId($insert);
  191. //发短信
  192. $supplier=db('suppliers')->find($supplier_capital_extract['supplier_id']);
  193. //$content="尊敬的供应商({$supplier['name']}),你的提现{$supplier_capital_extract['amount']}元申请已通过,其中手续费比例为{$rate}%,已扣除手续费{$sx_m}元,实际提现{$sj_m}元,已转账至你的提现银行卡{$supplier_capital_extract['bank_account']},敬请查收。";//短信内容
  194. //正式发短信
  195. if($supplier['mobile']!=''){
  196. import('aliyun_sms.SmsDemo');
  197. $response = \SmsDemo::sendSms(
  198. "五金商城", // 短信签名
  199. "SMS_125026898", // 短信模板编号
  200. $supplier['mobile'], // 短信接收者
  201. Array( // 短信模板中字段的值
  202. "amount"=>$supplier_capital_extract['amount'],
  203. "poundage"=>$sx_m,
  204. ),
  205. "001" // 流水号,选填
  206. );
  207. }
  208. }else{
  209. //返还金额
  210. db('supplier_capitals')->where('supplier_id',$supplier_capital_extract['supplier_id'])->setInc('money_available',$supplier_capital_extract['amount']);
  211. db('supplier_capitals')->where('supplier_id',$supplier_capital_extract['supplier_id'])->update(['updated_at'=>$now]);
  212. //发短信
  213. $supplier=db('suppliers')->find($supplier_capital_extract['supplier_id']);
  214. //$content="尊敬的供应商({$supplier['name']}),你的提现%s元申请已被驳回,驳回理由:{$data['result']}。";
  215. //$content=trim($content,'。');//短信内容
  216. //正式发短信
  217. if($supplier['mobile']!=''){
  218. import('aliyun_sms.SmsDemo');
  219. $response = \SmsDemo::sendSms(
  220. "五金商城", // 短信签名
  221. "SMS_125021871", // 短信模板编号
  222. $supplier['mobile'], // 短信接收者
  223. Array( // 短信模板中字段的值
  224. "amount"=>$supplier_capital_extract['amount'],
  225. "auditmsg"=>trim(trim($data['result'],'。'),'.'),
  226. ),
  227. "001" // 流水号,选填
  228. );
  229. }
  230. }
  231. return $this->success('审核成功',null,['_parent_reload' => 1]);
  232. } else {
  233. return $this->error('审核失败');
  234. }
  235. }
  236. // 接收id
  237. if ($id>0) {
  238. // 查处数据
  239. $supplier_capital_extract=Db::name("supplier_capital_extracts")->where('progress','0')->where('id',$id)->find();
  240. if(!$supplier_capital_extract){
  241. return $this->error('请求错误');
  242. }
  243. // 使用ZBuilder快速创建表单
  244. return ZBuilder::make('form')
  245. ->setPageTitle('') // 设置页面标题
  246. ->setPageTips('') // 设置页面提示信息
  247. ->hideBtn([ 'back'])//隐藏按钮
  248. ->setBtnTitle('submit', '确定') //修改默认按钮标题
  249. ->addBtn('<button type="reset" class="btn btn-default">重置</button>') //添加额外按钮
  250. ->addRadio('progress', '审核', '必选', ['1' => '通过','2' => '驳回'])
  251. ->addText('result', '驳回理由','必填,限制在20字以内')
  252. ->addHidden('id',$supplier_capital_extract['id'])
  253. ->setTrigger('progress', '2', 'result',false)
  254. //->isAjax(false) //默认为ajax的post提交
  255. ->fetch();
  256. }
  257. }
  258. }