AskController.php 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Requests\Api\PostsRequests\AskRequest;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\DB;
  6. use App\Wen\Utils\Utils;
  7. use App\Models\WxOrder;
  8. use App\Models\User\WxUser;
  9. use App\Http\Controllers\Api\Traits\PayTrait;
  10. use App\Wen\Utils\Settings;
  11. use App\Wen\Utils\UserUtils;
  12. use App\Models\WxSlideshow;
  13. class AskController extends BaseController
  14. {
  15. use PayTrait;
  16. public function config(Request $request){
  17. $result = [
  18. 'askorder_default_question' => Settings::get('askorder_default_question', ''),
  19. 'askorder_default_hidden' => Settings::get('askorder_default_hidden', ''),
  20. 'askorder_default_public' => Settings::get('askorder_default_public', ''),
  21. 'askorder_default_rule' => Settings::get('askorder_default_rule', ''),
  22. ];
  23. return $this->success($result);
  24. }
  25. //发起一个咨询
  26. public function createNew(AskRequest $request){
  27. // 验证
  28. $request->validate('createnew');
  29. //提示绑定手机号
  30. $userinfo = DB::table('wx_user')->where('id',$request->uid)->first();
  31. if(empty($userinfo->phone)){
  32. return $this->fail(200016,[],'请先绑定手机号');
  33. }
  34. //
  35. $question = trim($request->question);
  36. if(mb_strlen($question) > 300){
  37. return $this->fail(200016,[],'咨询内容不能超过300字');
  38. }
  39. //
  40. $images = trim($request->images);
  41. $images = trim($images,',');
  42. if(count(explode(',',$images)) > 9){
  43. return $this->fail(200016,[],'咨询图片最大9张');
  44. }
  45. //验证答主
  46. if($request->uid == $request->blogger_user_id){
  47. return $this->fail(200016,[],'不能咨询自己');
  48. }
  49. $blogger = DB::table('blogger')->where('user_id',$request->blogger_user_id)->first();
  50. if(empty($blogger)){
  51. return $this->fail(200016,[],'此答主没有经过认证');
  52. }
  53. if($blogger->status != 1){
  54. return $this->fail(200016,[],'此答主没有经过认证');
  55. }
  56. //
  57. $data = [
  58. 'user_id' => $request->uid,
  59. 'blogger_user_id' => $request->blogger_user_id,
  60. 'question' => $question,
  61. 'images' => $images,
  62. 'createtime' => time(),
  63. 'ask_price' => $blogger->ask_price,
  64. 'sit_price' => $blogger->sit_price,
  65. 'ask_minute' => $blogger->ask_minute,
  66. 'is_hidden' => $request->is_hidden,
  67. 'is_public' => $request->is_public,
  68. 'blogger_rate' => Settings::get('askorder_blogger_balance_rate'),
  69. ];
  70. $data['blogger_price'] = bcdiv(bcmul($data['ask_price'],$data['blogger_rate'],2),100,2);
  71. //0元的直接已付
  72. $need_pay = 1;
  73. if($blogger->ask_price == 0){
  74. $data['status'] = 10;
  75. $data['paytime'] = time();
  76. $need_pay = 0;
  77. }
  78. $order_id = DB::table('ask_order')->insertGetId($data);
  79. //给答主发短信
  80. $blogger_userinfo = DB::table('wx_user')->where('id',$request->blogger_user_id)->first();
  81. if($blogger_userinfo && $blogger_userinfo->phone && $blogger_userinfo->country_code){
  82. $idd = $blogger_userinfo->country_code;
  83. $phone = $blogger_userinfo->phone;
  84. //
  85. $res = Utils::sendSMSnotice($idd,$phone);
  86. }
  87. return $this->success(['order_id'=>$order_id,'need_pay'=>$need_pay]);
  88. }
  89. //评价此次咨询
  90. public function evaluate(AskRequest $request){
  91. // 验证
  92. $request->validate('evaluate');
  93. //
  94. $eva_content = trim($request->eva_content);
  95. if(mb_strlen($eva_content) > 100){
  96. return $this->fail(200016,[],'咨询内容不能超过100字');
  97. }
  98. //
  99. $score = $request->eva_score;
  100. if($score < 0){
  101. $score = 0;
  102. }
  103. if($score > 5){
  104. $score = 5;
  105. }
  106. //
  107. $order_id = _empty_default_($request->order_id,0);
  108. $order = DB::table('ask_order')->where('id',$order_id)->where('user_id',$request->uid)->where('status','>',0)->first();
  109. if(empty($order)){
  110. return $this->fail(200016,[],'没有找到该咨询');
  111. }
  112. if($order->status != 20){
  113. return $this->fail(200016,[],'咨询还没有结束');
  114. }
  115. if($order->eva_time != 0){
  116. return $this->fail(200016,[],'已经评价过了');
  117. }
  118. //
  119. $update = [
  120. 'eva_score' => $request->eva_score,
  121. 'eva_content' => $request->eva_content,
  122. 'eva_time' => time(),
  123. ];
  124. DB::table('ask_order')->where('id',$order_id)->update($update);
  125. //给答主冗余平均分
  126. $eva_score = DB::table('ask_order')->where('blogger_user_id',$order->blogger_user_id)->where('status',20)->where('eva_time','!=',0)->avg('eva_score');
  127. if($eva_score < 0){
  128. $eva_score = 0;
  129. }
  130. if($eva_score > 5){
  131. $eva_score = 5;
  132. }
  133. $eva_score = bcadd($eva_score,0,1);
  134. DB::table('blogger')->where('user_id',$order->blogger_user_id)->update(['order_eva_score'=>$eva_score]);
  135. return $this->success();
  136. }
  137. //结束此次咨询,用户或答主都可操作
  138. public function finish(Request $request){
  139. //
  140. $order_id = _empty_default_($request->order_id,0);
  141. $uid = $request->uid;
  142. $order = DB::table('ask_order')->where('id',$order_id)->where('status','>',0)
  143. // ->where('user_id',$request->uid)
  144. ->where(function($query) use ($uid) {
  145. $query->orWhere('user_id', $uid)
  146. ->orWhere('blogger_user_id', $uid);
  147. })
  148. ->first();
  149. if(empty($order)){
  150. return $this->fail(200016,[],'没有找到该咨询');
  151. }
  152. if($order->status == 20){
  153. return $this->fail(200016,[],'咨询已经结束了');
  154. }
  155. //给答主钱
  156. UserUtils::update_user_financial($order->blogger_user_id, 103, $order->blogger_price, '咨询收益'.$order->blogger_price);
  157. //更新状态
  158. $update = [
  159. 'status' => 20,
  160. 'finish_time' => time(),
  161. ];
  162. DB::table('ask_order')->where('id',$order_id)->update($update);
  163. //更新答主的完成订单数
  164. $order_number = DB::table('ask_order')->where('blogger_user_id',$order->blogger_user_id)->where('status',20)->count();
  165. DB::table('blogger')->where('user_id',$order->blogger_user_id)->update(['order_number' => $order_number]);
  166. return $this->success();
  167. }
  168. //点赞
  169. public function good(Request $request){
  170. //
  171. $order_id = _empty_default_($request->order_id,0);
  172. $uid = $request->uid;
  173. $good = DB::table('ask_order_good')->where('order_id',$order_id)->where('user_id',$request->uid)->first();
  174. if(!empty($good)){
  175. return $this->fail(200016,[],'您已经赞过了');
  176. }
  177. DB::table('ask_order_good')->insertGetId([
  178. 'order_id' => $order_id,
  179. 'user_id' => $request->uid,
  180. 'createtime' => time(),
  181. ]);
  182. //冗余
  183. $good_number = DB::table('ask_order_good')->where('order_id',$order_id)->count();
  184. DB::table('ask_order')->where('id',$order_id)->update(['good_number'=>$good_number]);
  185. return $this->success();
  186. }
  187. //旁听
  188. public function sit(Request $request){
  189. $order_id = _empty_default_($request->order_id,0);
  190. $order = DB::table('ask_order')->where('id',$order_id)->first();
  191. if(empty($order)){
  192. return $this->fail(200016,[],'没有找到该咨询');
  193. }
  194. if($order->status != 20){
  195. return $this->fail(200016,[],'咨询还没有结束');
  196. }
  197. if($order->is_public != 1){
  198. return $this->fail(200016,[],'咨询没有公开');
  199. }
  200. if($order->user_id == $request->uid){
  201. return $this->fail(200016,[],'不需要旁听自己咨询的内容');
  202. }
  203. if($order->blogger_user_id == $request->uid){
  204. return $this->fail(200016,[],'不需要旁听自己回答的内容');
  205. }
  206. //是否需要支付
  207. $need_pay = 1;
  208. //检查旁听订单
  209. $sit_order_id = 0;
  210. $sit_order = DB::table('ask_sit_order')->where('order_id',$order_id)->where('sit_user_id',$request->uid)->first();
  211. if($sit_order){
  212. $sit_order_id = $sit_order->id;
  213. if($sit_order->status == 10){
  214. return $this->fail(200016,[],'已经旁听过了');
  215. }else{
  216. //去支付即可
  217. }
  218. }else{
  219. $data = [
  220. 'user_id' => $order->user_id,
  221. 'order_id' => $order_id,
  222. 'sit_user_id' => $request->uid,
  223. 'createtime' => time(),
  224. 'sit_price' => $order->sit_price,
  225. //咨询者收益
  226. 'user_rate' => Settings::get('sitorder_user_balance_rate'),
  227. ];
  228. $data['user_price'] = bcdiv(bcmul($data['sit_price'],$data['user_rate'],2),100,2);
  229. if($order->sit_price == 0){
  230. $need_pay = 0; //零元不需要支付
  231. $data['status'] = 10;
  232. $data['paytime'] = time();
  233. }
  234. $sit_order_id = DB::table('ask_sit_order')->insertGetId($data);
  235. }
  236. return $this->success(['sit_order_id'=>$sit_order_id,'need_pay'=>$need_pay]);
  237. }
  238. //付费咨询订单,余额支付+拉起
  239. public function payAskOrder(Request $request)
  240. {
  241. $order_id = _empty_default_($request->order_id,0);
  242. $uid = $request->uid;
  243. $order = DB::table('ask_order')->where('id',$order_id)->where('user_id',$request->uid)->first();
  244. if(empty($order)){
  245. return $this->fail(200016,[],'没有找到该咨询');
  246. }
  247. if($order->status != 0){
  248. return $this->fail(200016,[],'该咨询已经支付过了');
  249. }
  250. //使用余额支付
  251. if($request->pay_type == 'balance'){
  252. //检查支付密码
  253. $rs = $this->check_paycode($uid,$request->paycode);
  254. if($rs !== true){
  255. return $rs;
  256. }
  257. //检查余额
  258. $balance = UserUtils::user_balance($uid);
  259. if($balance <= $order->ask_price){
  260. return $this->fail(200012);
  261. }
  262. DB::beginTransaction();
  263. //余额支付
  264. $pay_res = UserUtils::update_user_financial($uid, 101, $order->ask_price, '您花费了¥'.$order->ask_price.'余额,付费咨询');
  265. if(!$pay_res){
  266. DB::rollBack();
  267. return $this->fail(200012);
  268. }
  269. //直接修改订单状态,支付完成
  270. $rs1 = DB::table('ask_order')->where('id',$order_id)->update(['status'=>10,'paytime'=>time()]);
  271. if(!$rs1){
  272. DB::rollBack();
  273. return $this->fail([],200,'支付失败');
  274. }
  275. DB::commit();
  276. return $this->success([],200,'余额支付成功');
  277. }
  278. //拉起三方支付
  279. $body = '付费咨询';
  280. $data['body'] = '付费咨询';
  281. $total_fee = $order->ask_price;
  282. $orderSn = 'A' . Utils::getSn('A');
  283. $parame = serialize($data);
  284. // 创建订单
  285. $this->createOrder($uid,101,$body,$total_fee,$total_fee,$orderSn,$parame,'ask_order',$order_id);
  286. $openid = WxUser::where('id', $uid)->value('weixin_openid');
  287. $appid = Settings::get('app_id');
  288. $mch_id = Settings::get('mch_id');
  289. $key = Settings::get('mch_secret');
  290. $out_trade_no = $orderSn;
  291. if(_empty_($openid)){
  292. return $this->fail(200043, [
  293. 'title' => '未绑定微信',
  294. 'content' => '还没有获取到您的小程序openId,无法拉起支付',
  295. 'confirmText' => '去绑定',
  296. 'target_type' => 6,
  297. 'target_id' => '/pagesA/mine/editmine/accountbind'
  298. ], '未绑定微信');
  299. }
  300. $total_fee = 0.01;//测试临时用价格
  301. return $this->payHandler($uid, $request->pay_type, $request->platform, $total_fee, $data['body'], $out_trade_no, 1);
  302. }
  303. //付费旁听订单,余额支付+拉起
  304. public function paySitOrder(Request $request)
  305. {
  306. $order_id = _empty_default_($request->order_id,0);
  307. $uid = $request->uid;
  308. $order = DB::table('ask_sit_order')->where('id',$order_id)->where('sit_user_id',$request->uid)->first();
  309. if(empty($order)){
  310. return $this->fail(200016,[],'没有找到该旁听');
  311. }
  312. if($order->status != 0){
  313. return $this->fail(200016,[],'该旁听已经支付过了');
  314. }
  315. //使用余额支付
  316. if($request->pay_type == 'balance'){
  317. //检查支付密码
  318. $rs = $this->check_paycode($uid,$request->paycode);
  319. if($rs != true){
  320. return $rs;
  321. }
  322. //检查余额
  323. $balance = UserUtils::user_balance($uid);
  324. if($balance <= $order->sit_price){
  325. return $this->fail(200012);
  326. }
  327. DB::beginTransaction();
  328. //余额支付
  329. $pay_res = UserUtils::update_user_financial($uid, 102, $order->sit_price, '您花费了¥'.$order->sit_price.'余额,付费旁听');
  330. if(!$pay_res){
  331. DB::rollBack();
  332. return $this->fail(200012);
  333. }
  334. //直接修改订单状态,支付完成
  335. $rs1 = DB::table('ask_sit_order')->where('id',$order_id)->update(['status'=>10,'paytime'=>time()]);
  336. if(!$rs1){
  337. DB::rollBack();
  338. return $this->fail([],200,'支付失败');
  339. }
  340. //冗余旁听订单数量
  341. $ask_order_id = $order->order_id;
  342. $sit_number = DB::table('ask_sit_order')->where('order_id',$ask_order_id)->where('status',10)->count();
  343. DB::table('ask_order')->where('id',$ask_order_id)->update(['sit_number'=>$sit_number]);
  344. DB::commit();
  345. return $this->success([],200,'余额支付成功');
  346. }
  347. //拉起三方支付
  348. $body = '付费旁听';
  349. $data['body'] = '付费旁听';
  350. $total_fee = $order->sit_price;
  351. $orderSn = 'S' . Utils::getSn('S');
  352. $parame = serialize($data);
  353. // 创建订单
  354. $this->createOrder($uid,102,$body,$total_fee,$total_fee,$orderSn,$parame,'ask_sit_order',$order_id);
  355. $openid = WxUser::where('id', $uid)->value('weixin_openid');
  356. $appid = Settings::get('app_id');
  357. $mch_id = Settings::get('mch_id');
  358. $key = Settings::get('mch_secret');
  359. $out_trade_no = $orderSn;
  360. if(_empty_($openid)){
  361. return $this->fail(200043, [
  362. 'title' => '未绑定微信',
  363. 'content' => '还没有获取到您的小程序openId,无法拉起支付',
  364. 'confirmText' => '去绑定',
  365. 'target_type' => 6,
  366. 'target_id' => '/pagesA/mine/editmine/accountbind'
  367. ], '未绑定微信');
  368. }
  369. $total_fee = 0.01;//测试临时用价格
  370. return $this->payHandler($uid, $request->pay_type, $request->platform, $total_fee, $data['body'], $out_trade_no, 1);
  371. }
  372. //检查支付密码
  373. private function check_paycode($uid, $paycode){
  374. //验证支付密码
  375. if(_empty_($paycode)){
  376. return $this->fail(200004, [], '请先输入支付密码');
  377. }
  378. if(is_array($paycode) && str_replace(',', '', implode(',', $paycode)) !== get_user_meta($uid, 'paycode', 's')){
  379. return $this->fail(200043, [
  380. 'title' => '支付密码错误',
  381. 'content' => '已忘记,前往修改?',
  382. 'confirmText' => '去修改',
  383. 'target_type' => 6,
  384. 'target_id' => '/pagesA/mine/paycode/forget'
  385. ], '支付密码错误');
  386. }
  387. if(is_string($paycode) && $paycode !== get_user_meta($uid, 'paycode', 's')){
  388. return $this->fail(200004, [], '支付密码不匹配');
  389. }
  390. return true;
  391. }
  392. /**
  393. * 创建支付订单
  394. * $order_type = 101 咨询订单
  395. * $order_type = 102 旁听订单
  396. */
  397. private function createOrder($user_id,$order_type,$order_information,$order_price,$order_pay_price,$order_number,$parame='',$table_name,$table_id)
  398. {
  399. $orderModel = new WxOrder();
  400. $orderModel->user_id = $user_id;
  401. $orderModel->order_type = $order_type;
  402. $orderModel->order_information = $order_information;
  403. $orderModel->order_price = $order_price;
  404. $orderModel->order_pay_price = $order_pay_price;
  405. $orderModel->order_number = $order_number;
  406. $orderModel->parame = $parame;
  407. $orderModel->table_name = $table_name;
  408. $orderModel->table_id = $table_id;
  409. $orderModel->save();
  410. return $orderModel;
  411. }
  412. //首页轮播
  413. public function banner(Request $request){
  414. $ids = Settings::get('app_ask_banner', '', true);
  415. //$ids = '30,32,33,34,35,36,37';
  416. $list = WxSlideshow::wherein('id', explode(',', $ids))->orderBy(DB::raw('FIND_IN_SET(id, "' . $ids . '")'))
  417. ->get(['id', 'poster', 'target_id', 'slideshow_type']);
  418. return $this->success($list);
  419. }
  420. //我购买的旁听列表ok
  421. public function sitList(Request $request){
  422. //分页
  423. $page = $request->page ?? 1;
  424. $limit = $request->limit ?? 10;
  425. $offset = ($page - 1) * $limit;
  426. //
  427. $order_ids = DB::table('ask_sit_order')->where('sit_user_id',$request->uid)->where('status',10)->orderBy('id','desc')->pluck('order_id');
  428. $order_ids = json_decode(json_encode($order_ids),true);
  429. if(empty($order_ids)){
  430. return $this->success();
  431. }
  432. //
  433. $list = DB::table('ask_order')
  434. ->leftJoin('wx_user as user','user.id','=','ask_order.user_id')
  435. ->leftJoin('wx_user as buser','buser.id','=','ask_order.blogger_user_id')
  436. ->leftJoin('blogger','blogger.user_id','=','ask_order.blogger_user_id')
  437. ->select('ask_order.*','user.user_avatar','user.user_name','buser.user_avatar as blogger_avatar','buser.user_name as blogger_name','blogger.info as blogger_info')
  438. ->offset($offset)->limit($limit)
  439. ->where('ask_order.status',20)
  440. ->where('ask_order.is_public',1)
  441. ->whereIN('ask_order.id',$order_ids)
  442. ->orderBy(DB::raw('FIND_IN_SET(ask_order.id, "' . implode(',', $order_ids) . '")'))
  443. ->get();
  444. $list = json_decode(json_encode($list),true);
  445. foreach($list as &$val){
  446. if($val['user_id'] == $request->uid){
  447. //登录者是咨询者
  448. }elseif($val['is_hidden'] == 0 && $val['blogger_user_id'] == $request->uid){
  449. //登录者是答主,并且非匿名
  450. }else{
  451. $val['user_avatar'] = Settings::get('askorder_hidden_user_avatar');//匿名头像
  452. $val['user_name'] = '匿名用户的提问';
  453. }
  454. unset($val['images']);
  455. unset($val['user_id']);
  456. }
  457. return $this->success($list);
  458. }
  459. //所有咨询列表
  460. public function askList(Request $request){
  461. //分页
  462. $page = $request->page ?? 1;
  463. $limit = $request->limit ?? 10;
  464. $offset = ($page - 1) * $limit;
  465. //
  466. $where = [];
  467. //答主
  468. $blogger_user_id = _empty_default_($request->blogger_user_id,0);
  469. if($blogger_user_id){
  470. $where[] = ['ask_order.blogger_user_id','=',$blogger_user_id];
  471. }
  472. //用户
  473. $user_id = _empty_default_($request->user_id,0);
  474. if($user_id){
  475. $where[] = ['ask_order.user_id','=',$user_id];
  476. }
  477. //搜索
  478. $keyword = _empty_default_($request->keyword,'');
  479. if($keyword){
  480. $where[] = ['ask_order.question','like','%'.$keyword.'%'];
  481. }
  482. //
  483. $list = DB::table('ask_order')
  484. ->leftJoin('wx_user as user','user.id','=','ask_order.user_id')
  485. ->leftJoin('wx_user as buser','buser.id','=','ask_order.blogger_user_id')
  486. ->leftJoin('blogger','blogger.user_id','=','ask_order.blogger_user_id')
  487. ->select('ask_order.*','user.user_avatar','user.user_name','buser.user_avatar as blogger_avatar','buser.user_name as blogger_name','blogger.info as blogger_info')
  488. ->offset($offset)->limit($limit)
  489. ->where($where);
  490. //如果登录了
  491. if(($request->uid && $request->uid > 0) && ($request->uid == $user_id || $request->uid == $blogger_user_id)){
  492. $list = $list->whereIn('ask_order.status',[10,15,20]);
  493. }else{
  494. $list = $list->where([
  495. ['ask_order.status','=',20],
  496. ['ask_order.is_public','=',1]
  497. ]);
  498. }
  499. $list = $list->orderBy('ask_order.status','asc')->orderBy('ask_order.id','desc')->get();
  500. $list = json_decode(json_encode($list),true);
  501. if(!empty($list)){
  502. //获取未读信息
  503. $count_data = [];
  504. if(($request->uid && $request->uid > 0) && ($request->uid == $user_id || $request->uid == $blogger_user_id)){
  505. $order_ids = array_column($list,'id');
  506. $count_data = DB::table('wx_chat')->Where('object_id', $request->uid)->where('is_read',0)->where('chat_state',0)->where('expand_type',9)->whereIN('expand_id',$order_ids)->groupBy('expand_id')->select(Db::raw('count(id) as unread_number,expand_id'))->pluck('unread_number','expand_id');
  507. $count_data = json_decode(json_encode($count_data),true);
  508. }
  509. foreach($list as &$val){
  510. if($val['user_id'] == $request->uid){
  511. //登录者是咨询者
  512. }elseif($val['is_hidden'] == 0 && $val['blogger_user_id'] == $request->uid){
  513. //登录者是答主,并且非匿名
  514. }else{
  515. $val['user_avatar'] = Settings::get('askorder_hidden_user_avatar');//匿名头像
  516. $val['user_name'] = '匿名用户的提问';
  517. }
  518. //未读数量
  519. $val['unread_number'] = isset($count_data[$val['id']]) ? $count_data[$val['id']] : 0;
  520. //答主看到的,如果未读为0,且没回复过,给算作1
  521. if($val['unread_number'] == 0 && $val['status'] == 10 && $val['blogger_user_id'] == $request->uid){
  522. $val['unread_number'] = 1;
  523. }
  524. unset($val['images']);
  525. unset($val['user_id']);
  526. }
  527. }
  528. return $this->success($list);
  529. }
  530. //咨询详情
  531. public function askInfo(Request $request){
  532. $order_id = _empty_default_($request->order_id,0);
  533. $info = DB::table('ask_order')
  534. ->leftJoin('wx_user as user','user.id','=','ask_order.user_id')
  535. ->leftJoin('wx_user as buser','buser.id','=','ask_order.blogger_user_id')
  536. ->leftJoin('blogger','blogger.user_id','=','ask_order.blogger_user_id')
  537. ->select('ask_order.*','user.user_avatar','user.user_name','buser.user_avatar as blogger_avatar','buser.user_name as blogger_name','blogger.info as blogger_info')
  538. ->where('ask_order.id',$order_id)
  539. ->first();
  540. $info = json_decode(json_encode($info),true);
  541. //匿名
  542. if($info['user_id'] == $request->uid){
  543. //登录者是咨询者
  544. }elseif($info['is_hidden'] == 0 && $info['blogger_user_id'] == $request->uid){
  545. //登录者是答主,并且非匿名
  546. }else{
  547. $info['user_avatar'] = Settings::get('askorder_hidden_user_avatar');//匿名头像
  548. $info['user_name'] = '匿名用户的提问';
  549. }
  550. //是否点赞
  551. $good = DB::table('ask_order_good')->where('order_id',$order_id)->where('user_id',$request->uid)->first();
  552. $info['is_good'] = !empty($good) ? 1 : 0;
  553. return $this->success($info);
  554. }
  555. //某答主的评价列表
  556. public function bloggerEvaList(Request $request){
  557. //分页
  558. $page = $request->page ?? 1;
  559. $limit = $request->limit ?? 10;
  560. $offset = ($page - 1) * $limit;
  561. $blogger_user_id = $request->user_id;
  562. //
  563. $list = DB::table('ask_order')
  564. ->leftJoin('wx_user','wx_user.id','=','ask_order.user_id')
  565. ->select('ask_order.id','ask_order.user_id','ask_order.blogger_user_id','ask_order.eva_time','ask_order.eva_score','ask_order.eva_content','ask_order.is_hidden','wx_user.user_avatar','wx_user.user_name')
  566. ->where('ask_order.blogger_user_id',$blogger_user_id)
  567. ->where('ask_order.eva_time','>',0)
  568. ->where('ask_order.status',20)
  569. ->orderBy('ask_order.eva_time','desc')
  570. ->offset($offset)->limit($limit)
  571. ->get();
  572. $list = json_decode(json_encode($list),true);
  573. if(empty($list)){
  574. return $this->success([]);
  575. }
  576. foreach($list as &$val){
  577. if($val['user_id'] == $request->uid){
  578. //自己提问的
  579. }elseif($val['is_hidden'] == 0 && $val['blogger_user_id'] == $request->uid){
  580. //登录者是答主,并且非匿名
  581. }else{
  582. $val['user_avatar'] = Settings::get('askorder_hidden_user_avatar');//匿名头像
  583. $val['user_name'] = '匿名用户';
  584. }
  585. }
  586. return $this->success($list);
  587. }
  588. }