UserExtract.php 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. <?php
  2. /**
  3. * @package merchant
  4. *
  5. * @author Qinii
  6. * @day 2020-06-16
  7. *
  8. *
  9. */
  10. namespace app\controller\admin\user;
  11. use app\common\repositories\user\UserRepository;
  12. use crmeb\basic\BaseController;
  13. use crmeb\services\SpreadsheetExcelService;
  14. use think\App;
  15. use app\validate\api\UserExtractValidate as validate;
  16. use app\common\repositories\user\UserExtractRepository as repository;
  17. use think\facade\Db;
  18. class UserExtract extends BaseController
  19. {
  20. /**
  21. * @var repository
  22. */
  23. public $repository;
  24. /**
  25. * UserExtract constructor.
  26. * @param App $app
  27. * @param repository $repository
  28. */
  29. public function __construct(App $app,repository $repository)
  30. {
  31. parent::__construct($app);
  32. $this->repository = $repository;
  33. }
  34. /**
  35. * TODO
  36. * @return mixed
  37. * @author Qinii
  38. * @day 2020-06-16
  39. */
  40. public function lst()
  41. {
  42. [$page,$limit] = $this->getPage();
  43. $where = $this->request->params(['status','keyword','date','extract_type','mer_id','mer_name',['identity', '']]);
  44. if($where['mer_id']==''){
  45. unset($where['mer_id']);
  46. }else if($where['mer_id']==0){
  47. $where['mer_id']='';
  48. }
  49. $res = $this->repository->serach($where,$page,$limit);
  50. foreach ($res['list'] as $k=>$v){
  51. $res['list'][$k]['certification']= Db::name('user_certification')->where('uid', $v['uid'])->find();
  52. $res['list'][$k]['list']=$this->repository->get_user_extract_item($v['extract_id']);
  53. $res['list'][$k]['bank_info_data']=[];
  54. if($v['bank_info']){
  55. $res['list'][$k]['bank_info_data']=json_decode($v['bank_info'],true);
  56. }
  57. }
  58. return app('json')->success($res);
  59. }
  60. public function excel()
  61. {
  62. $where = $this->request->params(['status','keyword','date','extract_type','mer_id','mer_name',['identity', '']]);
  63. if($where['mer_id']==''){
  64. unset($where['mer_id']);
  65. }else if($where['mer_id']==0){
  66. $where['mer_id']='';
  67. }
  68. $identity_desc = "用户提现";
  69. if ($where['identity'] == 'mer') {
  70. $identity_desc = "商户提现";
  71. }
  72. $res = $this->repository->serach($where,1, 10000000);
  73. $list = $res['list'];
  74. foreach ($list as $k => $v) {
  75. $temp = array(
  76. $v['extract_id'],
  77. $v['create_time'],
  78. $v['phone'],
  79. $v['real_name'],
  80. $v['extract_price'],
  81. $v['service_money'],
  82. $v['extract_price'] - $v['service_money'],
  83. );
  84. if ($v['extract_type'] == 1) {
  85. $temp[] = '微信';
  86. }
  87. if ($v['extract_type'] == 2) {
  88. $temp[] = '支付宝';
  89. }
  90. if ($v['extract_type'] == 3) {
  91. $temp[] = '银行卡';
  92. }
  93. $temp[] = $v['bank_address'] ?? '';
  94. $temp[] = $v['bank_code'] ?? '';
  95. if ($v['status'] == -1) {
  96. $temp[] = '未通过';
  97. }
  98. if ($v['status'] == 0) {
  99. $temp[] = '审核中';
  100. }
  101. if ($v['status'] == 1) {
  102. $temp[] = '已提现';
  103. }
  104. $temp[] = $v['status_time'] ?? '';
  105. $arr[] = $temp;
  106. }
  107. $header = [
  108. 'ID', '申请时间', '手机号', '商户信息', '提现金额', '综合服务费', '实际到账', '提现方式', '所属银行', '账号', '审核状态', '处理时间'
  109. ];
  110. $filename = $identity_desc . date('YmdHis') . '_' . rand(10000, 99999);
  111. $title = $identity_desc;
  112. $name = $identity_desc;
  113. $info = '生成时间:' . date('Y-m-d H:i:s', time());
  114. $suffix = 'xlsx';
  115. $path = 'extract';
  116. unset($_instance);
  117. $_instance = SpreadsheetExcelService::instance_xin();
  118. $_path = $_instance
  119. ->createOrActive()
  120. ->setExcelHeader($header)
  121. ->setExcelTile($title, $name, $info)
  122. ->setExcelContent($arr)
  123. ->excelSave($filename, $suffix, $path);
  124. $data = [
  125. 'name' => $filename . '.' . $suffix,
  126. 'status' => 1,
  127. 'path' => '/' . $_path
  128. ];
  129. return app('json')->success('ok', $data);
  130. }
  131. /**
  132. * TODO
  133. * @param $id
  134. * @return mixed
  135. * @author Qinii
  136. * @day 2020-06-16
  137. */
  138. public function switchStatus($id)
  139. {
  140. $data = $this->request->params(['status','fail_msg','mark']);
  141. if($data['status'] == '-1' && empty($data['fail_msg']))
  142. return app('json')->fail('请填写拒绝原因');
  143. if(!$this->repository->getWhereCount($id))
  144. return app('json')->fail('数据不存在或状态错误');
  145. $data['admin_id'] = $this->request->adminId();
  146. $data['status_time'] = date('Y-m-d H:i:s',time());
  147. $extract_data=Db::name('user_extract')->where('extract_id',$id)->find();
  148. if($data['status']!='-1'){
  149. /** @var UserRepository $userRepository */
  150. $userRepository = app()->make(UserRepository::class);
  151. $userEntity = $userRepository->getUserEntityByUid($extract_data['uid']);
  152. if ($userEntity->getWithdrawalLimit() < $extract_data['extract_price']) {
  153. return app('json')->fail('提现额度不足');
  154. } else {
  155. $withdrawalLimit = bcsub($userEntity->getWithdrawalLimit(), $extract_data['extract_price'], 2);
  156. $userRepository->update($userEntity->getUid(), ['withdrawal_limit' => $withdrawalLimit]);
  157. }
  158. if($extract_data['extract_type']==1){
  159. $res=$this->repository->WechatTransfers($id);
  160. if($res['code']==201){
  161. return app('json')->success('微信处理中,请稍后');
  162. }
  163. }elseif ($extract_data['extract_type']==2){
  164. $res=$this->repository->AliTransfers($id);
  165. }
  166. // if($res['code']!=200 && $extract_data['types']==1){
  167. // Db::name('user_rich')->where('uid',$extract_data['uid'])->inc('red', $extract_data['extract_price'])->update();
  168. // Db::name('user_rich_log')->insert([
  169. // 'uid' => $extract_data['uid'],
  170. // 'red' => $extract_data['extract_price'],
  171. // 'pm' => 1,
  172. // 'time' => time(),
  173. // 'order_id' => 0,
  174. // 'mark' => '提现失败返还红积分'
  175. // ]);
  176. // return app('json')->fail(isset($res['msg'])?$res['msg']:'提现失败',$res);
  177. // }
  178. }else{
  179. if($extract_data['withdrawal_type']==2) {
  180. Db::name('entropy_barter_bill')->where('order_no', $extract_data['order_sn'])->where('pm', 2)->update(['status' => 3, 'remarks' => '审核已拒绝']);
  181. $eb_bill = Db::name('entropy_barter_bill')->where('order_no', $extract_data['order_sn'])->where('pm', 2)->find();
  182. Db::name('entropy_barter_user_' . $extract_data['mer_id'])->where('eb_id', $eb_bill['to_id'])->inc('wallet', $extract_data['extract_price'])->update();
  183. }
  184. }
  185. $this->repository->switchStatus($id,$data);
  186. Db::name('user_extract')->where('extract_id',$id)->update($data);
  187. return app('json')->success('审核成功');
  188. }
  189. public function new_lst()
  190. {
  191. [$page,$limit] = $this->getPage();
  192. $where = $this->request->params(['status','keyword','date','extract_type','uid']);
  193. $res = $this->repository->new_search($where,$page,$limit);
  194. foreach ($res['list'] as $k=>$v){
  195. $res['list'][$k]['certification']= Db::name('user_certification')->where('uid', $v['uid'])->find();;
  196. $res['list'][$k]['bank_info_data']=[];
  197. $pay_info='';
  198. if($v['bank_info']!=''){
  199. $res['list'][$k]['bank_info_data']=json_decode($v['bank_info'],true);
  200. $pay_info=$res['list'][$k]['certification']['user_name'].' ';
  201. $pay_info.=$res['list'][$k]['certification']['user_card']." ";
  202. $pay_info.=$res['list'][$k]['bank_info_data']['bank_name'].' ';
  203. $pay_info.=$res['list'][$k]['bank_info_data']['bank_open_name'].' ';
  204. $pay_info.=$res['list'][$k]['bank_code'];
  205. }
  206. $res['list'][$k]['status_name']='';
  207. if($v['status']=='0') $res['list'][$k]['status_name']='审核中';
  208. if($v['status']=='1') $res['list'][$k]['status_name']='已打款';
  209. if($v['status']=='-1') $res['list'][$k]['status_name']='已拒绝';
  210. if($v['extract_type']=='3') $res['list'][$k]['extract_type_name']='银行卡';
  211. if($v['status']=='0') $res['list'][$k]['status_time']='';
  212. $res['list'][$k]['extract_price']=set_price_rtrim($v['extract_price']);
  213. $res['list'][$k]['service_money']=set_price_rtrim( $v['service_money']);
  214. $res['list'][$k]['money']=set_price_rtrim($v['extract_price'] - $v['service_money']);
  215. $res['list'][$k]['pay_info']=$pay_info;
  216. if($v['extract_type']=='4'){
  217. $res['list'][$k]['status_name']='已完成';
  218. $res['list'][$k]['pay_info']='人工减少-'.$v['mark'];
  219. }
  220. if(!$v['fail_msg'] || $v['fail_msg']==''){
  221. $res['list'][$k]['fail_msg']='--';
  222. }
  223. if(!$v['status_time'] || $v['status_time']==''){
  224. $res['list'][$k]['status_time']='--';
  225. }
  226. // $res['list'][$k]['list']=$this->repository->get_user_extract_item($v['extract_id']);
  227. }
  228. //查询用户可提现金额
  229. $merid = $this->request->merId();
  230. $merchant= Db::name('merchant')->where('mer_id', $merid)->find();
  231. $user = Db::name('user')->where('uid', $merchant['uid'])->find();
  232. $res['brokerage_price'] = $user['brokerage_price'];
  233. return app('json')->success($res);
  234. }
  235. }