Modules_Api_Controllers_OriginaController.proxy.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585
  1. <?php
  2. namespace Modules\Api\Controllers;
  3. use App\Constants\AdConstrant;
  4. use App\Constants\CommentConstant;
  5. use App\Constants\CommonConstant;
  6. use App\Repositories\Criterias\OrderLimitCriteria;
  7. use App\Repositories\Criterias\OriginalGoodsAssessListCriteria;
  8. use App\Repositories\Criterias\OriginalGoodsListsCriteria;
  9. use App\Repositories\Criterias\OriginalOrderCriteria;
  10. use App\Repositories\GoodsAssessRepository;
  11. use App\Repositories\MessageRepository;
  12. use App\Repositories\OriginalClassRepository;
  13. use App\Repositories\OriginalLikeLogRepository;
  14. use App\Repositories\OriginalOrderRepository;
  15. use App\Repositories\OriginalRepository;
  16. use App\Repositories\ShopsRepository;
  17. use App\Repositories\UserRepository;
  18. use App\Repositories\UserShippingAddressRepository;
  19. use App\Repositories\Utils\M3u8CacheRepository;
  20. use Hyperf\Validation\Contract\ValidatorFactoryInterface;
  21. use Modules\Api\Responses\OriginalGoodsAssessListResponse;
  22. use Modules\Api\Responses\OriginalGoodsListsResponse;
  23. use Modules\Api\Responses\OriginalUserOrderListsResponse;
  24. use Modules\Api\Services\VideoService;
  25. class OriginaController extends BaseController
  26. {
  27. use \Hyperf\Di\Aop\ProxyTrait;
  28. use \Hyperf\Di\Aop\PropertyHandlerTrait;
  29. function __construct()
  30. {
  31. if (method_exists(parent::class, '__construct')) {
  32. parent::__construct(...func_get_args());
  33. }
  34. $this->__handlePropertyHandler(__CLASS__);
  35. }
  36. /**
  37. * 商品列表
  38. *
  39. * @return mixed|OriginalGoodsListsResponse
  40. */
  41. public function goodsLists()
  42. {
  43. $userCode = $this->getUserId();
  44. $inputData = $this->getJsonData();
  45. $rules = ['page' => 'required|integer', 'page_size' => 'required|integer', 'class_uid' => 'nullable|string', 'name' => 'nullable|string', 'shops_uid' => 'nullable|string', 'is_reco' => 'nullable|in:1'];
  46. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  47. if ($validator->fails()) {
  48. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  49. return json_fail($validator->errors()->first());
  50. }
  51. if (isset($inputData['is_reco']) && $inputData['is_reco'] == 1) {
  52. $orders = [['steer_level', 'DESC']];
  53. } else {
  54. $orders = [['sort', 'DESC']];
  55. }
  56. $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE;
  57. if ($pageSize > 100) {
  58. $pageSize = CommentConstant::PAGE_SIZE;
  59. }
  60. $page = format_page($inputData['page']);
  61. $pageSize = intval($pageSize);
  62. if ($pageSize <= 0) {
  63. $pageSize = CommonConstant::PAGE_SIZE;
  64. }
  65. $inputData['status'] = 2;
  66. $field = ['cover', 'coins', 'original_cions', 'member_coins', 'title', 'number_orders', 'shops_uid', 'uid', 'stock'];
  67. $originalRepository = make(OriginalRepository::class);
  68. $res = $originalRepository->pushCriteria(new OriginalGoodsListsCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page);
  69. $adList = make(VideoService::class)->getAdList(AdConstrant::SMELL_HOME);
  70. $ad = [];
  71. if (!empty($adList[0])) {
  72. foreach ($adList as $k => $adVal) {
  73. $link = M3u8CacheRepository::getLinkUrl($adVal['link'], ['user_code' => $userCode]);
  74. $ad[$k]['cover'] = M3u8CacheRepository::getImageUrl($adVal['cover']);
  75. $ad[$k]['link'] = $link;
  76. $ad[$k]['scheme'] = $adVal['scheme'];
  77. }
  78. }
  79. return new OriginalGoodsListsResponse($res, $ad);
  80. }
  81. /**
  82. * 商品详情接口
  83. *
  84. * @return mixed
  85. */
  86. public function goodsInfo()
  87. {
  88. $inputData = $this->getJsonData();
  89. $rules = ['uid' => 'required|string'];
  90. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  91. if ($validator->fails()) {
  92. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  93. return json_fail($validator->errors()->first());
  94. }
  95. $originalRepo = make(OriginalRepository::class);
  96. $info = $originalRepo->findWhereBy(['uid' => $inputData['uid'], 'status' => 2]);
  97. if (empty($info)) {
  98. return json_fail('该商品不存在');
  99. }
  100. $res = [];
  101. if (!empty($info->photo_address)) {
  102. $photoAddress = json_decode($info->photo_address, true);
  103. foreach ($photoAddress as $photoVal) {
  104. $res['photo_address'][] = M3u8CacheRepository::getImageUrl($photoVal);
  105. }
  106. }
  107. $res['category_name'] = $info->originalCategory->name;
  108. // 分类名字
  109. $res['title'] = $info->title;
  110. // 商品名字
  111. $res['coins'] = $info->coins;
  112. // 售价
  113. $res['content'] = $info->introduce;
  114. // 商品介绍
  115. $res['likes'] = $info->likes;
  116. // 点赞数
  117. $res['number_orders'] = $info->number_orders + 1;
  118. // 想要
  119. $res['browse'] = $info->browse;
  120. // 浏览数
  121. $res['cover'] = M3u8CacheRepository::getImageUrl($info->cover);
  122. // 商品封面
  123. $res['cover_tow'] = $info->cover;
  124. // 商品封面
  125. $res['member_coins'] = $info->member_coins;
  126. $res['stock'] = $info->stock;
  127. // 库存
  128. $res['uid'] = $info->uid;
  129. $res['video_address'] = M3u8CacheRepository::getVideoInnerUrl($info->video_address, $this->getUserId(), $info->uid, 'goods');
  130. $res['is_goods'] = make(OriginalLikeLogRepository::class)->judgeIsLike($this->getUserId(), $inputData['uid']);
  131. //是否点赞
  132. // 店铺信息
  133. $res['shop']['cover'] = M3u8CacheRepository::getImageUrl($info->shops->cover);
  134. $res['shop']['name'] = $info->shops->title;
  135. $res['shop']['province'] = $info->shops->province;
  136. $res['shop']['city'] = $info->shops->city;
  137. $res['shop']['region'] = $info->shops->region;
  138. $res['shop']['credit_value'] = $info->shops->credit_value;
  139. $res['shop']['uid'] = $info->shops->uid;
  140. $res['shop']['video_address'] = M3u8CacheRepository::getVideoInnerUrl($info->shops->video_address, $this->getUserId(), $info->shops->uid, 'shop');
  141. $res['shop']['settled_date'] = diffDate((string) $info->shops->created_at, date('Y-m-d H:i:s'));
  142. // 想要加1
  143. $originalRepo->numberOrdersAdd($inputData['uid']);
  144. return json_success($res);
  145. }
  146. public function goodsAssessList()
  147. {
  148. $inputData = $this->getJsonData();
  149. $rules = ['page' => 'required|integer', 'page_size' => 'required|integer', 'uid' => 'required|string'];
  150. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  151. if ($validator->fails()) {
  152. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  153. return json_fail($validator->errors()->first());
  154. }
  155. $orders = [['created_at', 'DESC']];
  156. $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE;
  157. if ($pageSize > 100) {
  158. $pageSize = CommentConstant::PAGE_SIZE;
  159. }
  160. $page = format_page($inputData['page']);
  161. $pageSize = intval($pageSize);
  162. if ($pageSize <= 0) {
  163. $pageSize = CommonConstant::PAGE_SIZE;
  164. }
  165. $goodsAssessRepo = make(GoodsAssessRepository::class);
  166. $field = ['comment', 'buy_uid', 'comment_fraction'];
  167. $res = $goodsAssessRepo->pushCriteria(new OriginalGoodsAssessListCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page);
  168. return new OriginalGoodsAssessListResponse($res);
  169. }
  170. /**
  171. * 分类列表
  172. *
  173. * @return mixed
  174. */
  175. public function category()
  176. {
  177. $res = make(OriginalClassRepository::class)->list(['status' => 1, 'type' => 1], ['uid', 'name'], ['sort', 'desc']);
  178. return json_success($res);
  179. }
  180. /**
  181. * 点赞
  182. *
  183. * @return mixed
  184. */
  185. public function goodsLike()
  186. {
  187. $inputData = $this->getJsonData();
  188. $rules = ['goods_uid' => 'required|string'];
  189. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  190. if ($validator->fails()) {
  191. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  192. return json_fail($validator->errors()->first());
  193. }
  194. $count = make(OriginalLikeLogRepository::class)->judgeIsLike($this->getUserId(), $inputData['goods_uid']);
  195. if ($count) {
  196. return json_fail('请勿重复点赞');
  197. }
  198. $goodsInfo = make(OriginalRepository::class)->findBy('uid', $inputData['goods_uid'], ['id']);
  199. if (!$goodsInfo) {
  200. return json_fail('商品点赞异常');
  201. }
  202. $userInfo = make(UserRepository::class)->getUserInfoData($this->getUserId());
  203. if (!$userInfo) {
  204. return json_fail('用户账号异常');
  205. }
  206. $res = make(OriginalLikeLogRepository::class)->create(['user_uid' => $this->getUserId(), 'goods_uid' => $inputData['goods_uid']]);
  207. if ($res) {
  208. make(OriginalRepository::class)->addLike($inputData['goods_uid']);
  209. return json_success([], '点赞成功');
  210. } else {
  211. return json_fail('点赞失败');
  212. }
  213. }
  214. /**
  215. * 添加收货地址
  216. *
  217. * @return mixed
  218. */
  219. public function addShippingAddress()
  220. {
  221. $inputData = $this->getJsonData();
  222. $rules = ['name' => 'required|string|between:2,16', 'phone' => 'required|integer|regex:/^1[3456789]\\d{9}$/', 'province' => 'required|integer', 'city' => 'required|integer', 'region' => 'nullable|integer', 'address' => 'required|string|between:4,36', 'default_address' => 'required|in:1,2'];
  223. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  224. if ($validator->fails()) {
  225. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  226. return json_fail($validator->errors()->first());
  227. }
  228. $addressRepo = make(UserShippingAddressRepository::class);
  229. $addressCount = $addressRepo->getAddressCount($this->getUserId());
  230. if ($addressCount > 5) {
  231. return json_fail('最多只可添加6个收货地址,请删除后再添加新的收货地址');
  232. }
  233. if ($inputData['default_address'] == 1) {
  234. make(UserShippingAddressRepository::class)->update(['is_default' => 2], $this->getUserId(), 'user_uid');
  235. }
  236. $insterData = ['user_uid' => $this->getUserId(), 'name' => $inputData['name'], 'phone' => $inputData['phone'], 'address' => $inputData['address'], 'is_default' => $inputData['default_address'], 'province' => $inputData['province'], 'city' => $inputData['city'], 'region' => $inputData['region']];
  237. $res = make(UserShippingAddressRepository::class)->create($insterData);
  238. if ($res) {
  239. return json_success([], '添加成功');
  240. } else {
  241. return json_fail('添加收货地址失败');
  242. }
  243. }
  244. /**
  245. * 收货地址列表
  246. *
  247. * @return mixed
  248. */
  249. public function addressLists()
  250. {
  251. $res = make(UserShippingAddressRepository::class)->findAllBy('user_uid', $this->getUserId(), ['name', 'phone', 'address', 'is_default', 'province', 'city', 'region', 'uid']);
  252. return json_success($res);
  253. }
  254. /**
  255. * 收货地址详情
  256. *
  257. * @return mixed
  258. */
  259. public function addressInfo()
  260. {
  261. $inputData = $this->getJsonData();
  262. $rules = ['uid' => 'required|string'];
  263. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  264. if ($validator->fails()) {
  265. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  266. return json_fail($validator->errors()->first());
  267. }
  268. $info = make(UserShippingAddressRepository::class)->findWhereBy(['user_uid' => $this->getUserId(), 'uid' => $inputData['uid']], ['name', 'phone', 'address', 'is_default', 'province', 'city', 'region']);
  269. if (empty($info)) {
  270. return json_fail('收货地址不存在');
  271. }
  272. return json_success($info);
  273. }
  274. /**
  275. * 修改收货地址
  276. *
  277. * @return mixed
  278. */
  279. public function upAddress()
  280. {
  281. $inputData = $this->getJsonData();
  282. $rules = ['uid' => 'required|string', 'name' => 'nullable|string|between:2,16', 'phone' => 'nullable|integer|regex:/^1[34578]\\d{9}$/', 'province' => 'nullable|integer', 'city' => 'nullable|integer', 'region' => 'nullable|integer', 'address' => 'nullable|string|between:4,36', 'default_address' => 'nullable|in:1,2'];
  283. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  284. if ($validator->fails()) {
  285. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  286. return json_fail($validator->errors()->first());
  287. }
  288. $addressRepo = make(UserShippingAddressRepository::class);
  289. $info = $addressRepo->findWhereBy(['uid' => $inputData['uid'], 'user_uid' => $this->getUserId()]);
  290. if (empty($info)) {
  291. return json_fail('修改异常,请联系客服');
  292. }
  293. $res = $addressRepo->updateAddress($inputData, $this->getUserId());
  294. if ($res) {
  295. return json_success([], '修改成功');
  296. } else {
  297. return json_fail('修改失败');
  298. }
  299. }
  300. /**
  301. * 删除收货地址
  302. *
  303. * @return mixed
  304. */
  305. public function delAddress()
  306. {
  307. $inputData = $this->getJsonData();
  308. $rules = ['uid' => 'required|string'];
  309. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  310. if ($validator->fails()) {
  311. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  312. return json_fail($validator->errors()->first());
  313. }
  314. $addressRepo = make(UserShippingAddressRepository::class);
  315. $info = $addressRepo->findWhereBy(['uid' => $inputData['uid'], 'user_uid' => $this->getUserId()], ['id']);
  316. if (empty($info)) {
  317. return json_fail('异常操作,收货地址不存在');
  318. }
  319. $res = make(UserShippingAddressRepository::class)->delete($info->id);
  320. if ($res) {
  321. return json_success([], '删除成功');
  322. } else {
  323. return json_fail('删除失败');
  324. }
  325. }
  326. /**
  327. * 购买商品详情接口
  328. *
  329. * @return mixed
  330. */
  331. public function goodsBuyInfo()
  332. {
  333. $inputData = $this->getJsonData();
  334. $rules = ['uid' => 'required|string'];
  335. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  336. if ($validator->fails()) {
  337. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  338. return json_fail($validator->errors()->first());
  339. }
  340. $goodsInfo = make(OriginalRepository::class)->findWhereBy(['uid' => $inputData['uid'], 'status' => 2], ['title', 'shops_uid', 'cover', 'coins', 'original_cions', 'member_coins']);
  341. if (empty($goodsInfo)) {
  342. return json_fail('商品已下架,请重新选择新商品');
  343. }
  344. // 获取默认收货地址
  345. $res['address'] = make(UserShippingAddressRepository::class)->getUserAddress($this->getUserId());
  346. $res['title'] = $goodsInfo->title;
  347. $res['coins'] = $goodsInfo->coins;
  348. $res['original_cions'] = $goodsInfo->original_cions;
  349. $res['member_coins'] = $goodsInfo->member_coins;
  350. $res['shop_name'] = $goodsInfo->shops->title;
  351. $res['cover'] = M3u8CacheRepository::getImageUrl($goodsInfo->title);
  352. return json_success($res);
  353. }
  354. /**
  355. * 购买商品
  356. *
  357. * @return mixed
  358. */
  359. public function goodsBuy()
  360. {
  361. $inputData = $this->getJsonData();
  362. $rules = ['uid' => 'required|string', 'address_uid' => 'required|string', 'number' => 'required|integer', 'price' => 'required|integer', 'message' => 'nullable|string|between:2,16'];
  363. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  364. if ($validator->fails()) {
  365. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  366. return json_fail($validator->errors()->first());
  367. }
  368. $orderRepo = make(OriginalOrderRepository::class);
  369. // 生成订单
  370. $orderSn = $orderRepo->createOrder($inputData, $this->getUserId());
  371. if ($orderSn === false) {
  372. return json_fail('购买失败,请联系客服', 30002);
  373. }
  374. $userInfo = make(UserRepository::class)->getUserInfoFromCache($this->getUserId());
  375. if ($userInfo['coins'] < $inputData['price']) {
  376. return json_fail('金币不足,请充值后再购买', 30001);
  377. }
  378. // 购买付钱
  379. $res = $orderRepo->buyGoods($orderSn, $this->getUserId());
  380. if ($res) {
  381. return json_success([], '购买成功');
  382. } else {
  383. return json_fail('付款失败', 30003);
  384. }
  385. }
  386. /**
  387. * 确认购买订单
  388. *
  389. * @return mixed
  390. */
  391. public function verifyBuy()
  392. {
  393. $inputData = $this->getJsonData();
  394. $rules = ['order_sn' => 'required|string'];
  395. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  396. if ($validator->fails()) {
  397. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  398. return json_fail($validator->errors()->first());
  399. }
  400. $res = make(OriginalOrderRepository::class)->buyGoods($inputData['order_sn'], $this->getUserId());
  401. if ($res) {
  402. return json_success([], '购买成功');
  403. } else {
  404. return json_fail('购买失败', 30004);
  405. }
  406. }
  407. /**
  408. * 用户订单列表
  409. *
  410. * @return mixed|OriginalUserOrderListsResponse
  411. */
  412. public function userOrderLists()
  413. {
  414. $inputData = $this->getJsonData();
  415. $rules = ['page' => 'required|integer', 'page_size' => 'required|integer', 'order_status' => 'nullable|integer'];
  416. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  417. if ($validator->fails()) {
  418. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  419. return json_fail($validator->errors()->first());
  420. }
  421. $orders = [['created_at', 'DESC']];
  422. $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE;
  423. if ($pageSize > 100) {
  424. $pageSize = CommentConstant::PAGE_SIZE;
  425. }
  426. $page = format_page($inputData['page']);
  427. $pageSize = intval($pageSize);
  428. if ($pageSize <= 0) {
  429. $pageSize = CommonConstant::PAGE_SIZE;
  430. }
  431. $inputData['buy_uid'] = $this->getUserId();
  432. $field = ['goods_cover', 'goods_name', 'clinch_amount', 'sell_uid', 'order_status', 'pay_status', 'redund_status', 'order_sn', 'goods_amount'];
  433. $res = make(OriginalOrderRepository::class)->pushCriteria(new OriginalOrderCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page);
  434. return new OriginalUserOrderListsResponse($res);
  435. }
  436. /**
  437. * 用户订单详情
  438. *
  439. * @return mixed
  440. */
  441. public function userOrderInfo()
  442. {
  443. $inputData = $this->getJsonData();
  444. $rules = ['order_sn' => 'required|string'];
  445. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  446. if ($validator->fails()) {
  447. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  448. return json_fail($validator->errors()->first());
  449. }
  450. $info = make(OriginalOrderRepository::class)->findWhereBy(['order_sn' => $inputData['order_sn'], 'buy_uid' => $this->getUserId()]);
  451. if (empty($info)) {
  452. return json_fail('订单异常');
  453. }
  454. $res = ['name' => $info->goods_name, 'order_sn' => $info->order_sn, 'cover' => M3u8CacheRepository::getImageUrl($info->goods_cover), 'order_status' => $info->order_status, 'clinch_amount' => $info->clinch_amount, 'goods_amount' => $info->goods_amount, 'address' => json_decode($info->address, true), 'order_info' => ['order_sn' => $info->order_sn, 'pay_time' => $info->pay_time, 'message' => $info->message], 'logistics_info' => ['courier_firm' => $info->courier_firm ?: '', 'courier_number' => $info->courier_number ?: '', 'logistics_info' => $info->logistics_info ?: ''], 'pay_time' => $info->pay_time, 'receipt_time' => $info->receipt_time, 'refund_apply_time' => $info->refund_apply_time, 'refund_end_time' => $info->refund_end_time, 'assess_time' => $info->assess_time];
  455. $res['assess_info'] = null;
  456. if ($info->order_status == 4) {
  457. $assessInfo = make(GoodsAssessRepository::class)->findWhereBy(['order_sn' => $info->order_sn, 'buy_uid' => $this->getUserId()]);
  458. if (!empty($assessInfo)) {
  459. $res['assess_info'] = ['fraction' => $assessInfo->comment_fraction ?: '', 'comment' => $assessInfo->comment ?: ''];
  460. }
  461. }
  462. return json_success($res);
  463. }
  464. /**
  465. * 用户订单删除
  466. *
  467. * @return mixed
  468. * @throws \Exception
  469. */
  470. public function userOrderDelete()
  471. {
  472. $inputData = $this->getJsonData();
  473. $rules = ['order_sn' => 'required|string'];
  474. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  475. if ($validator->fails()) {
  476. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  477. return json_fail($validator->errors()->first());
  478. }
  479. $info = make(OriginalOrderRepository::class)->findWhereBy(['order_sn' => $inputData['order_sn'], 'buy_uid' => $this->getUserId(), 'order_status' => 1]);
  480. if (empty($info)) {
  481. return json_fail('该订单不可被删除');
  482. }
  483. $res = $info->delete();
  484. if ($res) {
  485. return json_success([], '订单删除成功');
  486. } else {
  487. return json_fail('操作失败');
  488. }
  489. }
  490. /**
  491. * 确认收货
  492. *
  493. * @return mixed
  494. */
  495. public function confirmReceipt()
  496. {
  497. $inputData = $this->getJsonData();
  498. $rules = ['order_sn' => 'required|string', 'fraction' => 'required|integer|in:1,2,3', 'comment' => 'nullable|string|max:255', 'img_json' => 'nullable|string'];
  499. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  500. if ($validator->fails()) {
  501. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  502. return json_fail($validator->errors()->first());
  503. }
  504. $info = make(OriginalOrderRepository::class)->findWhereBy(['order_sn' => $inputData['order_sn'], 'buy_uid' => $this->getUserId()]);
  505. if (empty($info)) {
  506. return json_fail('确认收货异常,请联系管理员');
  507. }
  508. $data = ['goods_uid' => $info->goods_uid, 'buy_uid' => $this->getUserId(), 'goods_name' => $info->goods_name, 'order_sn' => $info->order_sn, 'evaluation_map' => $inputData['img_json'], 'comment' => $inputData['comment'], 'comment_fraction' => $inputData['fraction'], 'reward_coins' => 5];
  509. $res = make(OriginalOrderRepository::class)->confirmReceipt($data, 5);
  510. if ($res) {
  511. return json_success([], '操作成功');
  512. } else {
  513. return json_fail('操作失败');
  514. }
  515. }
  516. /**
  517. * 申请退款
  518. *
  519. * @return mixed
  520. */
  521. public function applyRefund()
  522. {
  523. $inputData = $this->getJsonData();
  524. $rules = ['order_sn' => 'required|string', 'content' => 'required|max:255'];
  525. $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules);
  526. if ($validator->fails()) {
  527. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  528. return json_fail($validator->errors()->first());
  529. }
  530. $where = ['redund_status' => 1, 'order_sn' => $inputData['order_sn'], 'buy_uid' => $this->getUserId()];
  531. $orderInfo = make(OriginalOrderRepository::class)->findWhereBy($where);
  532. if (empty($orderInfo)) {
  533. return json_fail('当前订单不可被退款');
  534. }
  535. $orderInfo->redund_status = 2;
  536. $orderInfo->order_status = 5;
  537. $orderInfo->apply_reason = $inputData['content'];
  538. $orderInfo->refund_apply_time = date('Y-m-d H:i:s');
  539. if ($orderInfo->save()) {
  540. return json_success([], '申请成功,在三个工作日内将会处理您的订单');
  541. } else {
  542. return json_fail('申请失败!');
  543. }
  544. }
  545. /**
  546. * 店铺详情
  547. *
  548. * @param ValidatorFactoryInterface $validatorFactory
  549. * @return mixed
  550. * @throws \Exception
  551. */
  552. public function shopsInfo(ValidatorFactoryInterface $validatorFactory)
  553. {
  554. $inputData = $this->getJsonData();
  555. $rules = ['shops_uid' => 'required|string'];
  556. $validator = $validatorFactory->make($inputData, $rules);
  557. if ($validator->fails()) {
  558. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  559. return json_fail($validator->errors()->first());
  560. }
  561. $shopInfo = make(ShopsRepository::class)->findBy('uid', $inputData['shops_uid'], ['cover', 'title', 'credit_value', 'video_address', 'created_at']);
  562. if (empty($shopInfo)) {
  563. return json_fail('该店铺不存在');
  564. }
  565. $res = ['cover' => M3u8CacheRepository::getImageUrl($shopInfo->cover), 'name' => $shopInfo->title, 'credit_value' => $shopInfo->credit_value, 'video_address' => M3u8CacheRepository::getVideoInnerUrl($shopInfo->video_address, $this->getUserId(), $inputData['shops_uid'], 'shop'), 'created_at' => diffDate((string) $shopInfo->created_at, date('Y-m-d H:i:s'))];
  566. return json_success($res);
  567. }
  568. public function msgCount()
  569. {
  570. $msgInfo = make(MessageRepository::class)->firstSys($this->getUserId(), 'shops');
  571. $msgInfo['shops_info'] = null;
  572. if ($msgInfo['count_unread'] > 0 && isset($msgInfo['first_msg']['from_uid'])) {
  573. $shopsInfo = make(ShopsRepository::class)->findBy('uid', $msgInfo['first_msg']['from_uid'], ['title', 'cover', 'uid']);
  574. if ($shopsInfo) {
  575. $msgInfo['shops_info']['title'] = $shopsInfo->title;
  576. $msgInfo['shops_info']['cover'] = M3u8CacheRepository::getImageUrl($shopsInfo->cover);
  577. $msgInfo['shops_info']['uid'] = $shopsInfo['uid'];
  578. }
  579. }
  580. unset($msgInfo['first_msg']);
  581. return json_success($msgInfo);
  582. }
  583. }