UserExtract.php 11 KB

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