UserExtract.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  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\enum\CommonEnum;
  12. use app\common\enum\user\UserWithdrawalLimitRecordEnum;
  13. use app\common\repositories\user\UserRepository;
  14. use app\common\repositories\user\UserWithdrawalLimitRecordRepository;
  15. use crmeb\basic\BaseController;
  16. use crmeb\services\SpreadsheetExcelService;
  17. use think\App;
  18. use app\validate\api\UserExtractValidate as validate;
  19. use app\common\repositories\user\UserExtractRepository as repository;
  20. use think\facade\Db;
  21. class UserExtract extends BaseController
  22. {
  23. /**
  24. * @var repository
  25. */
  26. public $repository;
  27. /**
  28. * UserExtract constructor.
  29. * @param App $app
  30. * @param repository $repository
  31. */
  32. public function __construct(App $app,repository $repository)
  33. {
  34. parent::__construct($app);
  35. $this->repository = $repository;
  36. }
  37. /**
  38. * TODO
  39. * @return mixed
  40. * @author Qinii
  41. * @day 2020-06-16
  42. */
  43. public function lst()
  44. {
  45. [$page, $limit] = $this->getPage();
  46. $where = $this->request->params(['status', 'keyword', 'date', 'extract_type', 'mer_id', 'mer_name', ['identity', '']]);
  47. // 导出
  48. $is_excel = request()->param('is_excel', 0);
  49. if ($where['mer_id'] == '') {
  50. unset($where['mer_id']);
  51. } else if ($where['mer_id'] == 0) {
  52. $where['mer_id'] = '';
  53. }
  54. $res = $this->repository->serach($where, $page, $limit);
  55. foreach ($res['list'] as $k => $v) {
  56. $res['list'][$k]['certification'] = Db::name('user_certification')->where('uid', $v['uid'])->find();
  57. $res['list'][$k]['list'] = $this->repository->get_user_extract_item($v['extract_id']);
  58. $res['list'][$k]['bank_info_data'] = [];
  59. if ($v['bank_info']) {
  60. $res['list'][$k]['bank_info_data'] = json_decode($v['bank_info'], true);
  61. }
  62. }
  63. if ($is_excel == 1) {
  64. $data = $res['list'];
  65. $arr = [];
  66. foreach ($data as $item) {
  67. $arr[] = [
  68. // ID
  69. $item['extract_id'],
  70. // 申请时间
  71. $item['create_time'],
  72. // 手机号
  73. $item['phone'],
  74. // 用户信息
  75. $item['real_name'],
  76. // 提现金额
  77. $item['extract_price'],
  78. // 综合服务费
  79. $item['service_money'],
  80. // 实际到账金额
  81. $item['extract_price'] - $item['service_money'],
  82. // 提现方式
  83. $item['extract_type'] == 1 ? '微信' : ($item['extract_type'] == 2 ? '支付宝' : '银行卡'),
  84. // 所属银行
  85. $item['bank_address'],
  86. // 账号
  87. $item['bank_code'],
  88. ];
  89. }
  90. return app('json')->success($this->getStatisticsExcel([
  91. 'ID',
  92. '申请时间',
  93. '手机号',
  94. '用户信息',
  95. '提现金额',
  96. '综合服务费',
  97. '实际到账金额',
  98. '提现方式',
  99. '所属银行',
  100. '账号'
  101. ], $arr, '提现明细'));
  102. }
  103. return app('json')->success($res);
  104. }
  105. public function excel()
  106. {
  107. $where = $this->request->params(['status','keyword','date','extract_type','mer_id','mer_name',['identity', '']]);
  108. if($where['mer_id']==''){
  109. unset($where['mer_id']);
  110. }else if($where['mer_id']==0){
  111. $where['mer_id']='';
  112. }
  113. $identity_desc = "用户提现";
  114. if ($where['identity'] == 'mer') {
  115. $identity_desc = "商户提现";
  116. }
  117. $res = $this->repository->serach($where,1, 10000000);
  118. $list = $res['list'];
  119. foreach ($list as $k => $v) {
  120. $temp = array(
  121. $v['extract_id'],
  122. $v['create_time'],
  123. $v['phone'],
  124. $v['real_name'],
  125. $v['extract_price'],
  126. $v['service_money'],
  127. $v['extract_price'] - $v['service_money'],
  128. );
  129. if ($v['extract_type'] == 1) {
  130. $temp[] = '微信';
  131. }
  132. if ($v['extract_type'] == 2) {
  133. $temp[] = '支付宝';
  134. }
  135. if ($v['extract_type'] == 3) {
  136. $temp[] = '银行卡';
  137. }
  138. $temp[] = $v['bank_address'] ?? '';
  139. $temp[] = $v['bank_code'] ?? '';
  140. if ($v['status'] == -1) {
  141. $temp[] = '未通过';
  142. }
  143. if ($v['status'] == 0) {
  144. $temp[] = '审核中';
  145. }
  146. if ($v['status'] == 1) {
  147. $temp[] = '已提现';
  148. }
  149. $temp[] = $v['status_time'] ?? '';
  150. $arr[] = $temp;
  151. }
  152. $header = [
  153. 'ID', '申请时间', '手机号', '商户信息', '提现金额', '综合服务费', '实际到账', '提现方式', '所属银行', '账号', '审核状态', '处理时间'
  154. ];
  155. $filename = $identity_desc . date('YmdHis') . '_' . rand(10000, 99999);
  156. $title = $identity_desc;
  157. $name = $identity_desc;
  158. $info = '生成时间:' . date('Y-m-d H:i:s', time());
  159. $suffix = 'xlsx';
  160. $path = 'extract';
  161. unset($_instance);
  162. $_instance = SpreadsheetExcelService::instance_xin();
  163. $_path = $_instance
  164. ->createOrActive()
  165. ->setExcelHeader($header)
  166. ->setExcelTile($title, $name, $info)
  167. ->setExcelContent($arr)
  168. ->excelSave($filename, $suffix, $path);
  169. $data = [
  170. 'name' => $filename . '.' . $suffix,
  171. 'status' => 1,
  172. 'path' => '/' . $_path
  173. ];
  174. return app('json')->success('ok', $data);
  175. }
  176. /**
  177. * TODO
  178. * @param $id
  179. * @return mixed
  180. * @author Qinii
  181. * @day 2020-06-16
  182. */
  183. public function switchStatus($id)
  184. {
  185. $data = $this->request->params(['status', 'fail_msg', 'mark']);
  186. if ($data['status'] == '-1' && empty($data['fail_msg']))
  187. return app('json')->fail('请填写拒绝原因');
  188. if (!$this->repository->getWhereCount($id))
  189. return app('json')->fail('数据不存在或状态错误');
  190. $data['admin_id'] = $this->request->adminId();
  191. $data['status_time'] = date('Y-m-d H:i:s', time());
  192. $extract_data = Db::name('user_extract')->where('extract_id', $id)->find();
  193. if ($data['status'] != '-1') {
  194. // /** @var UserRepository $userRepository */
  195. // $userRepository = app()->make(UserRepository::class);
  196. // $userEntity = $userRepository->getUserEntityByUid($extract_data['uid']);
  197. // if ($userEntity->getWithdrawalLimit() < $extract_data['extract_price']) {
  198. // return app('json')->fail('提现额度不足');
  199. // } else {
  200. // try {
  201. // /** @var UserWithdrawalLimitRecordRepository $userWithdrawalLimitRecordRepository */
  202. // $userWithdrawalLimitRecordRepository = app()->make(UserWithdrawalLimitRecordRepository::class);
  203. // // 添加扣减记录
  204. // $userWithdrawalLimitRecordEntity = $userWithdrawalLimitRecordRepository->addUserWithdrawalLimitRecord(
  205. // (int)$userEntity->getUid(),
  206. // UserWithdrawalLimitRecordEnum::PM['EXPEND']['code'],
  207. // (float)$extract_data['extract_price'],
  208. // -1,
  209. // '',
  210. // '提现扣减提现额度'
  211. // );
  212. // // 结算扣减记录
  213. // $userWithdrawalLimitRecordRepository->executeByIdList([$userWithdrawalLimitRecordEntity->getId()]);
  214. // } catch (\Throwable $exception) {
  215. // return app('json')->fail($exception->getMessage());
  216. // }
  217. // }
  218. if ($extract_data['extract_type'] == 1) {
  219. $res = $this->repository->WechatTransfers($id);
  220. if ($res['code'] == 201) {
  221. return app('json')->success('微信处理中,请稍后');
  222. }
  223. } elseif ($extract_data['extract_type'] == 2) {
  224. $res = $this->repository->AliTransfers($id);
  225. }
  226. // if($res['code']!=200 && $extract_data['types']==1){
  227. // Db::name('user_rich')->where('uid',$extract_data['uid'])->inc('red', $extract_data['extract_price'])->update();
  228. // Db::name('user_rich_log')->insert([
  229. // 'uid' => $extract_data['uid'],
  230. // 'red' => $extract_data['extract_price'],
  231. // 'pm' => 1,
  232. // 'time' => time(),
  233. // 'order_id' => 0,
  234. // 'mark' => '提现失败返还红积分'
  235. // ]);
  236. // return app('json')->fail(isset($res['msg'])?$res['msg']:'提现失败',$res);
  237. // }
  238. } else {
  239. if ($extract_data['withdrawal_type'] == 2) {
  240. Db::name('entropy_barter_bill')->where('order_no', $extract_data['order_sn'])->where('pm', 2)->update(['status' => 3, 'remarks' => '审核已拒绝']);
  241. $eb_bill = Db::name('entropy_barter_bill')->where('order_no', $extract_data['order_sn'])->where('pm', 2)->find();
  242. Db::name('entropy_barter_user_' . $extract_data['mer_id'])->where('eb_id', $eb_bill['to_id'])->inc('wallet', $extract_data['extract_price'])->update();
  243. }
  244. }
  245. $this->repository->switchStatus($id, $data);
  246. Db::name('user_extract')->where('extract_id', $id)->update($data);
  247. return app('json')->success('审核成功');
  248. }
  249. public function new_lst()
  250. {
  251. [$page,$limit] = $this->getPage();
  252. $where = $this->request->params(['status','keyword','date','extract_type','uid']);
  253. $res = $this->repository->new_search($where,$page,$limit);
  254. foreach ($res['list'] as $k=>$v){
  255. $res['list'][$k]['certification']= Db::name('user_certification')->where('uid', $v['uid'])->find();;
  256. $res['list'][$k]['bank_info_data']=[];
  257. $pay_info='';
  258. if($v['bank_info']!=''){
  259. $res['list'][$k]['bank_info_data']=json_decode($v['bank_info'],true);
  260. $pay_info=$res['list'][$k]['certification']['user_name'].' ';
  261. $pay_info.=$res['list'][$k]['certification']['user_card']." ";
  262. $pay_info.=$res['list'][$k]['bank_info_data']['bank_name'].' ';
  263. $pay_info.=$res['list'][$k]['bank_info_data']['bank_open_name'].' ';
  264. $pay_info.=$res['list'][$k]['bank_code'];
  265. }
  266. $res['list'][$k]['status_name']='';
  267. if($v['status']=='0') $res['list'][$k]['status_name']='审核中';
  268. if($v['status']=='1') $res['list'][$k]['status_name']='已打款';
  269. if($v['status']=='-1') $res['list'][$k]['status_name']='已拒绝';
  270. if($v['extract_type']=='3') $res['list'][$k]['extract_type_name']='银行卡';
  271. if($v['status']=='0') $res['list'][$k]['status_time']='';
  272. $res['list'][$k]['extract_price']=set_price_rtrim($v['extract_price']);
  273. $res['list'][$k]['service_money']=set_price_rtrim( $v['service_money']);
  274. $res['list'][$k]['money']=set_price_rtrim($v['extract_price'] - $v['service_money']);
  275. $res['list'][$k]['pay_info']=$pay_info;
  276. if($v['extract_type']=='4'){
  277. $res['list'][$k]['status_name']='已完成';
  278. $res['list'][$k]['pay_info']='人工减少-'.$v['mark'];
  279. }
  280. if(!$v['fail_msg'] || $v['fail_msg']==''){
  281. $res['list'][$k]['fail_msg']='--';
  282. }
  283. if(!$v['status_time'] || $v['status_time']==''){
  284. $res['list'][$k]['status_time']='--';
  285. }
  286. // $res['list'][$k]['list']=$this->repository->get_user_extract_item($v['extract_id']);
  287. }
  288. //查询用户可提现金额
  289. $merid = $this->request->merId();
  290. $merchant= Db::name('merchant')->where('mer_id', $merid)->find();
  291. $user = Db::name('user')->where('uid', $merchant['uid'])->find();
  292. $res['brokerage_price'] = $user['brokerage_price'];
  293. return app('json')->success($res);
  294. }
  295. public function getStatisticsExcel($header,$arr,$title)
  296. {
  297. $filename = $title.'_'.date('YmdHis').'_'.rand(10000,99999);
  298. $name = $filename;
  299. $info = '生成时间:' . date('Y-m-d H:i:s',time());
  300. $suffix='xlsx';
  301. $path='extract';
  302. unset($_instance);
  303. $_instance = SpreadsheetExcelService::instance_xin();
  304. $_path =$_instance
  305. ->createOrActive()
  306. ->setExcelHeader($header)
  307. ->setExcelTile($title, $name, $info)
  308. ->setExcelContent($arr)
  309. ->excelSave($filename, $suffix, $path);
  310. $domain = request()->domain();
  311. $data= [
  312. 'name' => $filename.'.'.$suffix,
  313. 'status' => 1,
  314. 'path' => $domain.'/'.$_path
  315. ];
  316. return $data;
  317. }
  318. }