UpgradeController.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Modes\Order;
  4. use App\Modes\ProxyArea;
  5. use App\Modes\Proxy;
  6. use App\Modes\Upgrade;
  7. use App\Modes\User;
  8. use App\Modes\Area;
  9. use App\Modes\Config;
  10. use App\Modes\UserMsg;
  11. use App\Service\PayDispatchService;
  12. use Doctrine\DBAL\Driver\PDOException;
  13. use Illuminate\Http\Request;
  14. use App\Http\Controllers\Controller;
  15. use Mockery\Exception;
  16. use phpDocumentor\Reflection\DocBlock\Tags\Uses;
  17. class UpgradeController extends Controller
  18. {
  19. /**
  20. * 升级记录
  21. * @author lyh
  22. * @date 2019/3/25
  23. * @description
  24. */
  25. public function index()
  26. {
  27. return showJsonSucc('获取待审核升级申请', Upgrade::whereStatus(2)->orderByDesc('status')->whereUid(\Auth::id())->get());
  28. }
  29. /**
  30. * 获取升级费用
  31. * @author lyh
  32. * @date 2019/3/25
  33. * @param Request $request
  34. * @description
  35. */
  36. public function cost(Request $request)
  37. {
  38. $level = $request->post('level', 0);
  39. if ($level < \Auth::user()->level) {
  40. return showJsonErr('请申请大于当前的等级');
  41. }
  42. if (\Auth::user()->level == 0) {
  43. return showJsonErr('请完善用户信息');
  44. }
  45. // 获取代理费
  46. $money = Upgrade::getCost($level, \Auth::user());
  47. return showJsonSucc(1001, $money);
  48. }
  49. /**
  50. * 交费升级
  51. * @author lyh
  52. * @date 2019/3/25
  53. * @description
  54. */
  55. public function add(Request $request)
  56. {
  57. $validator = \Validator::make($param = $request->post(), [
  58. 'level' => 'required|integer|between:2,7', //申请等级
  59. 'money' => 'required|numeric', // 费用
  60. 'pay_type' => 'required|between:1,5',
  61. // 'province' => 'required_if:level,6,7|numeric|exists:area,id', // 代理省份
  62. // 'city' => 'required_if:level,6,7|numeric|exists:area,id', // 代理地级市
  63. // 'district' => 'required_if:level,6,7|numeric|exists:area,id', //代理区
  64. ]);
  65. if ($validator->fails()) {
  66. return showJson(102, $validator->errors()->first());
  67. }
  68. if ($param['level'] < \Auth::user()->level) {
  69. return showJsonErr('请申请大于当前的等级');
  70. }
  71. if (\Auth::user()->level == 0 || empty(\Auth::user()->province)|| empty(\Auth::user()->city) || empty(\Auth::user()->district)) {
  72. return showJsonErr('请完善用户信息');
  73. }
  74. if (Upgrade::whereUid(\Auth::id())->whereStatus(2)->exists()) {
  75. return showJsonErr('您的升级申请正在审核中,请耐心等候');
  76. }
  77. // 获取代理费
  78. //$money = Upgrade::getCost($param['level'], \Auth::user());
  79. $user=User::whereId(\Auth::id())->first()->toArray();
  80. $uplevelarr=[];
  81. for($i=$user['level']+1;$i<8;$i++)
  82. $uplevelarr[]=$i;
  83. if(!empty($uplevelarr)){
  84. $money=$this->getUpgradeMoney($user,$param['level'],$uplevelarr);
  85. }else{
  86. return showJsonErr('您的等级已经是最高级了!');
  87. }
  88. if ($money != $param['money'] && $param['money']>0) {
  89. return showJsonErr('代理费用有误,请重新申请', [
  90. 'money' => $money
  91. ]);
  92. }
  93. \DB::beginTransaction();
  94. try {
  95. $orderId = 0;
  96. $payData = [];
  97. $status = 1;
  98. // $param['money']=0.01;
  99. if ($money > 0) {
  100. // 生成支付订单、并返回参数
  101. $orderId = Order::insertData([
  102. 'uid' => \Auth::id(),
  103. 'type' => 1,
  104. 'order_no' => $param['order_no'] = $orderNo = Order::makeOrderNo(),
  105. 'pay_no' => $pay_no = $orderNo,
  106. 'price' => $param['money'],
  107. 'is_pay' => 0,
  108. 'pay_type' => $param['pay_type'],
  109. 'status' => 2,
  110. ]);
  111. if (empty($orderId)) {
  112. \DB::rollBack();
  113. return showJsonErr('生成订单失败');
  114. }
  115. $pay = PayDispatchService::dispatch($param['pay_type']);
  116. // 获取支付信息
  117. // $payData = $pay->getPayInfo($orderNo, $param['money'], \Auth::user()->mobile . '升级支付');
  118. if($param['pay_type']==2){//支付宝支付
  119. $payData = $pay->getAppPayInfo($orderNo, $param['money'], \Auth::user()->mobile . '升级支付');//测试
  120. }elseif($param['pay_type']==3){
  121. $payData = $pay->getPayInfo($orderNo, $param['money'], \Auth::user()->mobile . '升级支付');//测试
  122. }elseif ($param['pay_type'] == 21) {
  123. $pay = PayDispatchService::dispatch(2);
  124. $payData = $pay->getPayInfo($orderNo, $param['money'], \Auth::user()->mobile . '升级支付');//测试
  125. }elseif ($param['pay_type'] == 31) {//微信支付h5
  126. $pay = PayDispatchService::dispatch(3);
  127. $getPayInfoh5Data = $pay->getPayInfoh5($orderNo, $param['money'], \Auth::user()->mobile . '升级支付');//测试
  128. $payData['url'] = env('APP_URL').'/re.php?re='.urlencode($getPayInfoh5Data->getTargetUrl());
  129. }
  130. } else {
  131. $status = 2;
  132. }
  133. $upGradeData = [
  134. 'uid' => \Auth::id(),
  135. 'order_id' => $orderId,
  136. 'user_level' => \Auth::user()->level,
  137. 'apply_level' => $param['level'],
  138. 'money' => $param['money'],
  139. 'remark' => sprintf("用户[ID:%s]申请从等级[%s]升级到等级[%s],通过[%s]支付[%s]", \Auth::id(), \Auth::user()->level, $param['level'], Order::getPayType($param['pay_type']), $param['money']),
  140. 'upgrade_way' => 1,
  141. 'status' => $status
  142. ];
  143. $upGradeData['province'] = \Auth::user()->province;
  144. $upGradeData['city'] = \Auth::user()->city;
  145. $upGradeData['district'] = \Auth::user()->district;
  146. // if (!empty(($param['province']))) {
  147. // $upGradeData['province'] = \Auth::user()->province;
  148. // }
  149. // if (!empty(($param['city']))) {
  150. // $upGradeData['city'] = $param['city'];
  151. // }
  152. // if (!empty(($param['district']))) {
  153. // $upGradeData['district'] = $param['district'];
  154. // }
  155. $upgradeRes = Upgrade::insertGetId($upGradeData);
  156. if (empty($upgradeRes)) {
  157. \DB::rollBack();
  158. return showJsonErr('生成升级记录失败');
  159. }
  160. \DB::commit();
  161. return showJsonSucc('获取成功', [
  162. 'payData' => $payData
  163. ]);
  164. } catch (Exception $exception) {
  165. \DB::rollBack();
  166. return showJsonErr($exception->getMessage());
  167. }
  168. }
  169. /*
  170. * 支付成功的回调
  171. * author wsl
  172. * date 20190627
  173. * ordersn 订单号
  174. * */
  175. public function upCheck(Request $request){
  176. $param = $request->post();
  177. $arr['user_area']='';
  178. $userarea=Area::orWhere('id','=',\Auth::user()->city)
  179. ->orWhere('id','=',\Auth::user()->district)
  180. ->orderBy('pid','asc')
  181. ->get()->toArray();
  182. foreach($userarea as $val)$arr['user_area'].=$val['name'].' ';
  183. if(empty($param['ordersn']) && !empty($param['type']) && $param['type']==4 ){
  184. //免费申请区域代理的订单
  185. $arr['price']=0;
  186. $arr['apply_area']='';
  187. //申请区域代理
  188. $proxyarea=ProxyArea::whereUid(\Auth::id())->whereOrderId(0)->whereProvince($param['province'])->whereCity($param['city']);
  189. if(!empty($param['district'])){
  190. $proxyarea->whereDistrict($param['district']);
  191. }
  192. $proxyareaar=$proxyarea->orderBy('created_at','desc')->first()->toArray();
  193. $applyarea=Area::orWhere('id','=',$proxyareaar['city'])
  194. ->orWhere('id','=',$proxyareaar['district'])
  195. ->orderBy('pid','asc')
  196. ->get()->toArray();
  197. foreach($applyarea as $val)$arr['apply_area'].=$val['name'].' ';
  198. return showJsonSucc('获取数据成功',$arr);
  199. }
  200. if (empty($param['ordersn'])) {
  201. return showJsonErr('订单号不能为空');
  202. }
  203. $order=Order::from('order as o')->join('user as u','o.uid','u.id')
  204. ->select('o.id as orderid','o.order_no','o.uid','o.type','o.price','u.province','u.city','u.district')
  205. ->where('o.order_no','=',$param['ordersn'])
  206. ->first()->toArray();
  207. $arr['price']=$order['price'];
  208. if($order['type']==1){
  209. //申请升级
  210. $upgrade=Upgrade::whereOrderId($order['orderid'])->first()->toArray();
  211. $arr['apply_level']=$upgrade['apply_level'];
  212. }elseif($order['type']==4){
  213. $arr['apply_area']='';
  214. //申请区域代理
  215. $proxyarea=ProxyArea::whereOrderId($order['orderid'])->first()->toArray();
  216. $applyarea=Area::orWhere('id','=',$proxyarea['city'])
  217. ->orWhere('id','=',$proxyarea['district'])
  218. ->orderBy('pid','asc')
  219. ->get()->toArray();
  220. foreach($applyarea as $val)$arr['apply_area'].=$val['name'].' ';
  221. }
  222. return showJsonSucc('获取数据成功',$arr);
  223. }
  224. /*
  225. * 获取升级记录
  226. * wsl 20190910
  227. * */
  228. public function getUpgradeLogs(Request $request){
  229. $list=Upgrade::whereUid(\Auth::id())->whereIn('status',[2,3,5])->get();
  230. return showJsonSucc('数据获取成功',$list);
  231. }
  232. /*
  233. * 获取当前用户等级+1的配置信息
  234. * wsl 20190627
  235. *
  236. * */
  237. public function getNextLevelInfo(){
  238. $user=User::whereId(\Auth::id())->first()->toArray();
  239. $setting=Proxy::getSettingByAreaAndLevel($user['level']+1,$user['province'],$user['city'],$user['district']);
  240. $data['upgrade_money']=$setting['upgrade_money'];
  241. $data['upgrade_level']=$setting['user_level'];
  242. return showJsonSucc('获取数据成功',$data);
  243. }
  244. /*
  245. * 等级变换时所交的金钱
  246. * wsl 20190627
  247. * */
  248. public function changeLevel(Request $request){
  249. $data=[];
  250. $param=$request->all();
  251. if(empty($param['upgrade_level'])){
  252. return showJsonErr('upgrade_level必传,1-8的数字!');
  253. }
  254. $upgrade_level=$param['upgrade_level'];
  255. $user=User::whereId(\Auth::id())->first()->toArray();
  256. if($upgrade_level<=$user['level']){
  257. return showJsonErr('您已经是当前等级了');
  258. }
  259. if($user['level']==7){
  260. return showJsonErr('您已经是最高等级了哦');
  261. }
  262. //获取自己等级之上的配置信息
  263. $payedMoney = Upgrade::whereUid(\Auth::id())->whereStatus(3)->sum('money');
  264. $uplevelarr=[];
  265. for($i=$user['level']+1;$i<8;$i++)
  266. $uplevelarr[]=$i;
  267. if(!empty($uplevelarr)){
  268. $data['upgrade_money'] = $this->getUpgradeMoney($user,$upgrade_level,$uplevelarr);
  269. $data['upgrade_money'] = round( max(bcsub($data['upgrade_money'] , $payedMoney,2),0),2) ;
  270. }
  271. $levelMapper = ['A','A','B','C','D','E','F','G','G'];
  272. $text = sprintf(
  273. '您已经是%s级代理,已经缴纳过%s元,现在只需支付%s元即可成为%s级代理',
  274. $levelMapper[$user['level']],
  275. $payedMoney,
  276. $data['upgrade_money'],
  277. $levelMapper[$param['upgrade_level']]
  278. );
  279. $data['upgrade_level']=$param['upgrade_level'];
  280. $data['protocol'] = $text;
  281. return showJsonSucc('获取数据成功',$data);
  282. }
  283. /*
  284. * 获取升级费用
  285. * add by wsl
  286. * 20190630
  287. * $user array
  288. * $upgrede_level 要升级的等级
  289. * $uplevelarr 当前用户所有上一级的数组
  290. * */
  291. function getUpgradeMoney($user,$upgrade_level,$uplevelarr){
  292. $upgrade_money=0;
  293. $levelsSetting=[];
  294. $newlevetset=[];
  295. //所属地区价格
  296. $areasetting=Proxy::select('user_level','upgrade_money')
  297. ->where('uid','=',0)
  298. ->where('province','=',$user['province'])
  299. ->where('city','=',$user['city'])
  300. ->where('status','=',1)
  301. ->where('district','=',$user['district'])->whereIn('user_level',$uplevelarr)
  302. ->get()->toArray();
  303. //全局升级价格
  304. $globalsetting=Proxy::select('user_level','upgrade_money')
  305. ->where('uid','=',0)
  306. ->where('province','=',0)
  307. ->where('city','=',0)
  308. ->where('district','=',0)->whereIn('user_level',$uplevelarr)
  309. ->get()->toArray();
  310. if(!empty($areasetting)){
  311. foreach($areasetting as $k=>$item){
  312. foreach($item as $kk=>$vv){
  313. if(empty($vv)||$vv==0||$vv==null||$vv=='0.0'||$vv=='0.00'||$vv=='0.000'){
  314. $levelsSetting[$k][$kk]=$globalsetting[$k][$kk];
  315. }else{
  316. $levelsSetting[$k][$kk]=$vv;
  317. }
  318. }
  319. }
  320. }else{
  321. $levelsSetting=$globalsetting;
  322. }
  323. foreach($levelsSetting as $key=>$value){
  324. $newlevetset[$value['user_level']]=$value['upgrade_money'];
  325. }
  326. for($j=$user['level']+1;$j<=$upgrade_level;$j++)$upgrade_money+=$newlevetset[$j];
  327. return round($upgrade_money,2);
  328. }
  329. function getList(){
  330. $user = User::whereId(\Auth::id())->first()->toArray();
  331. $level = $user['level'];
  332. if($level<7){
  333. $op = '>';
  334. }else{
  335. $op = '=';
  336. $level = 7;
  337. }
  338. //所属地区价格
  339. $list = $areasetting = Proxy::where('uid','=',0)
  340. ->where('province','=',$user['province'])
  341. ->where('city','=',$user['city'])
  342. ->where('status','=',1)
  343. ->where('district','=',$user['district'])
  344. ->where('user_level',$op,$level)
  345. ->get()->toArray();
  346. if(empty($areasetting)){
  347. //全局升级价格
  348. $globalsetting = Proxy::where('uid','=',0)
  349. ->where('province','=',0)
  350. ->where('city','=',0)
  351. ->where('district','=',0)
  352. ->where('user_level',$op,$level)
  353. ->get()->toArray();
  354. $list = $globalsetting;
  355. }
  356. return showJson(101,'',['req_list'=>$list]);
  357. }
  358. /*
  359. * 获取协议
  360. * wsl
  361. * 20190628
  362. * */
  363. function getrule($level)
  364. {
  365. $setting=Proxy::getSettingByAreaAndLevel($level,\Auth::user()->province,\Auth::user()->city,\Auth::user()->district);
  366. $result =empty($setting)?'':$setting['protocol'];
  367. return $result;
  368. }
  369. /**
  370. * 业务达到要求升级
  371. * @author lyh
  372. * @date 2019/3/25
  373. * @param Request $request
  374. * @description
  375. */
  376. public function addByCondition(Request $request)
  377. {
  378. $validator = \Validator::make($param = $request->all(), [
  379. 'level' => 'required|integer|between:2,7', //申请等级
  380. // 'province' => 'required_if:level,6,7|numeric|exists:area,id', // 代理省份
  381. // 'city' => 'required_if:level,6,7|numeric|exists:area,id', // 代理地级市
  382. // 'district' => 'required_if:level,6,7|numeric|exists:area,id', //代理区
  383. ]);
  384. if ($validator->fails()) {
  385. return showJson(102, $validator->errors()->first());
  386. }
  387. if ($param['level'] < \Auth::user()->level) {
  388. return showJsonErr('请申请大于当前的等级');
  389. }
  390. if (\Auth::user()->level == 0) {
  391. return showJsonErr('请完善用户信息');
  392. }
  393. // 判断业务是否达标
  394. /*if (($upgrade_way = Upgrade::requierdLevel($param['level'], \Auth::id())) == false) {
  395. return showJsonErr('业务未达到要求,请选择其他等级');
  396. }*/
  397. $upgrade_way=1;
  398. if (Upgrade::whereUid(\Auth::id())->whereStatus(2)->exists()) {
  399. return showJsonErr('您的升级申请正在审核中,请耐心等候');
  400. }
  401. \DB::beginTransaction();
  402. try {
  403. $upGradeData = [
  404. 'uid' => \Auth::id(),
  405. 'user_level' => \Auth::user()->level,
  406. 'apply_level' => $param['level'],
  407. 'money' => 0,
  408. 'remark' => sprintf("用户[ID:%s]业务达标,申请从等级[%s]升级到等级[%s]", \Auth::id(), \Auth::user()->level, $param['level']),
  409. 'status' => 2,
  410. 'upgrade_way' => $upgrade_way
  411. ];
  412. $upGradeData['province'] = \Auth::user()->province;
  413. $upGradeData['city'] = \Auth::user()->city;
  414. $upGradeData['district'] = \Auth::user()->district;
  415. // if (!empty(($param['province']))) {
  416. // $upGradeData['province'] = $param['province'];
  417. // }
  418. // if (!empty(($param['city']))) {
  419. // $upGradeData['city'] = $param['city'];
  420. // }
  421. // if (!empty(($param['district']))) {
  422. // $upGradeData['district'] = $param['district'];
  423. // }
  424. $upgradeRes = Upgrade::insertGetId($upGradeData);
  425. if (empty($upgradeRes)) {
  426. \DB::rollBack();
  427. return showJsonErr('生成升级记录失败');
  428. }
  429. \DB::commit();
  430. return showJsonSucc('申请升级成功', isset($payData) ? $payData : []);
  431. } catch (Exception $exception) {
  432. \DB::rollBack();
  433. return showJsonErr($exception->getMessage());
  434. }
  435. }
  436. }