StoreReply.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\controller\api\store\product;
  12. use app\common\repositories\store\order\StoreOrderProductRepository;
  13. use app\validate\api\ProductReplyValidate;
  14. use think\App;
  15. use crmeb\basic\BaseController;
  16. use app\common\repositories\store\product\ProductReplyRepository as repository;
  17. class StoreReply extends BaseController
  18. {
  19. /**
  20. * @var repository
  21. */
  22. protected $repository;
  23. protected $userInfo;
  24. /**
  25. * StoreProduct constructor.
  26. * @param App $app
  27. * @param repository $repository
  28. */
  29. public function __construct(App $app, repository $repository)
  30. {
  31. parent::__construct($app);
  32. $this->repository = $repository;
  33. $this->userInfo = $this->request->isLogin() ? $this->request->userInfo() : null;
  34. }
  35. /**
  36. * 根据请求参数获取特定类型的产品列表
  37. *
  38. * 本函数旨在根据前端请求中的参数,以及指定的产品ID,查询并返回特定类型的产品列表。
  39. * 具体实现包括获取请求中的分页信息、筛选条件,然后调用仓库层的方法获取数据,并以JSON格式返回。
  40. *
  41. * @param int $id 产品ID,用于限定查询的产品范围
  42. * @return json 返回查询结果的JSON对象,包含产品列表信息
  43. */
  44. public function lst($id)
  45. {
  46. // 获取请求中的分页信息
  47. [$page, $limit] = $this->getPage();
  48. // 构建查询条件,包括产品类型和产品ID
  49. $where['type'] = $this->request->param('type');
  50. $where['product_id'] = $id;
  51. // 调用仓库层的getApiList方法获取数据,并返回成功响应的JSON对象
  52. return app('json')->success($this->repository->getApiList($where, $page, $limit));
  53. }
  54. /**
  55. * 根据订单产品ID获取订单产品详情
  56. *
  57. * 本函数旨在通过提供的订单产品ID,检索特定用户的订单产品详情。
  58. * 它首先验证订单是否存在且未被评价,然后返回订单产品的详细信息。
  59. * 如果订单不存在或已评价,则返回相应的错误信息。
  60. *
  61. * @param int $id 订单产品ID
  62. * @param StoreOrderProductRepository $orderProductRepository 订单产品仓库对象,用于订单产品的数据操作
  63. * @return mixed 返回订单产品的详细信息数组,如果订单不存在或已评价,则返回错误信息
  64. */
  65. public function product($id, StoreOrderProductRepository $orderProductRepository)
  66. {
  67. // 根据订单产品ID和用户ID获取订单产品信息
  68. $orderProduct = $orderProductRepository->userOrderProduct((int)$id, $this->request->uid());
  69. // 验证订单产品是否存在及其关联的订单信息
  70. if (!$orderProduct || !$orderProduct->orderInfo) {
  71. // 如果订单产品不存在或没有关联的订单信息,则返回“订单不存在”的错误信息
  72. return app('json')->fail('订单不存在');
  73. }
  74. // 检查订单产品是否已评价
  75. if ($orderProduct->is_reply) {
  76. // 如果订单产品已评价,则返回“该商品已评价”的错误信息
  77. return app('json')->fail('该商品已评价');
  78. }
  79. // 如果订单产品存在且未被评价,则返回订单产品的详细信息
  80. return app('json')->success($orderProduct->toArray());
  81. }
  82. /**
  83. * 回复商品评价
  84. *
  85. * 本函数用于处理用户对商品的评价回复。它从请求中获取评价相关数据,
  86. * 验证数据的合法性,然后将用户评价信息保存到数据库。
  87. *
  88. * @param int $id 订单产品ID,用于关联评价和具体的产品。
  89. * @param ProductReplyValidate $validate 评价验证器,用于数据验证。
  90. * @return json 返回一个表示操作成功或失败的JSON响应。
  91. */
  92. public function reply($id, ProductReplyValidate $validate)
  93. {
  94. // 从请求中获取评价相关参数
  95. $data = $this->request->params(['comment', 'product_score', 'service_score', 'postage_score', ['pics', []]]);
  96. // 使用验证器检查获取的数据是否合法
  97. $validate->check($data);
  98. // 获取当前请求的用户信息
  99. $user = $this->request->userInfo();
  100. // 将用户ID、订单产品ID、用户昵称和头像添加到评价数据中
  101. $data['uid'] = $this->request->uid();
  102. $data['order_product_id'] = (int)$id;
  103. $data['nickname'] = $user['nickname'];
  104. $data['avatar'] = $user['avatar'];
  105. // 将评价数据提交到仓库进行保存
  106. $this->repository->reply($data);
  107. // 返回一个表示操作成功的JSON响应
  108. return app('json')->success('评价成功');
  109. }
  110. }