BroadcastGoods.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  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\merchant\store\broadcast;
  12. use app\common\repositories\store\broadcast\BroadcastGoodsRepository;
  13. use app\validate\merchant\BroadcastGoodsValidate;
  14. use crmeb\basic\BaseController;
  15. use think\App;
  16. class BroadcastGoods extends BaseController
  17. {
  18. protected $repository;
  19. public function __construct(App $app, BroadcastGoodsRepository $repository)
  20. {
  21. parent::__construct($app);
  22. $this->repository = $repository;
  23. }
  24. /**
  25. * 获取列表数据
  26. * 本函数用于根据请求参数获取指定条件的列表数据,支持分页。
  27. * @return json 返回包含列表数据的JSON对象,成功时包含数据列表和其它相关信息,失败时包含错误信息。
  28. */
  29. public function lst()
  30. {
  31. // 解析并获取当前请求的页码和每页数据量
  32. [$page, $limit] = $this->getPage();
  33. // 从请求中获取查询参数,包括状态标签、关键词、商家有效性以及广播商品ID
  34. $where = $this->request->params(['status_tag', 'keyword', 'mer_valid','broadcast_goods_id']);
  35. // 调用repository中的getList方法获取数据,并返回成功响应的JSON对象
  36. return app('json')->success($this->repository->getList($this->request->merId(), $where, $page, $limit));
  37. }
  38. /**
  39. * 根据ID获取详情信息
  40. *
  41. * 本函数旨在通过提供的ID检索特定资源的详细信息。它首先验证所请求的资源是否存在,
  42. * 如果存在,则返回该资源的详细信息;如果不存在,则返回一个错误消息。
  43. *
  44. * @param int $id 要查询的资源ID
  45. * @return \Illuminate\Http\JsonResponse 返回一个JSON响应,包含资源的详细信息或错误消息
  46. */
  47. public function detail($id)
  48. {
  49. // 检查请求的资源是否存在
  50. if (!$this->repository->merExists($id, $this->request->merId()))
  51. {
  52. // 如果资源不存在,则返回一个数据不存在的错误信息
  53. return app('json')->fail('数据不存在');
  54. }
  55. // 如果资源存在,则获取该资源的详细信息,并附加产品信息后返回
  56. return app('json')->success($this->repository->get($id)->append(['product'])->toArray());
  57. }
  58. /**
  59. * 创建表单
  60. *
  61. * 本函数用于生成并返回表单数据。它通过调用repository的createForm方法来创建表单,
  62. * 然后将表单数据转换为合适的格式,最后以成功响应的形式返回。
  63. *
  64. * @return \Illuminate\Http\JsonResponse 表单数据的成功响应
  65. */
  66. public function createForm()
  67. {
  68. // 使用app助手函数获取JSON响应实例,并将表单数据转换为合适格式后返回
  69. return app('json')->success(formToData($this->repository->createForm()));
  70. }
  71. /**
  72. * 检查广播商品的参数
  73. *
  74. * 本函数用于在创建或更新广播商品时,验证和处理相关的参数。
  75. * 它首先从请求中提取指定的参数,然后使用验证器对这些参数进行验证。
  76. * 验证通过后,它会处理产品ID,将其转换为ID值,最后返回处理后的数据。
  77. *
  78. * @param BroadcastGoodsValidate $validate 验证器实例,用于验证参数的合法性
  79. * @return array 包含验证通过的参数的数据数组,其中product_id被转换为ID值
  80. */
  81. protected function checkParams(BroadcastGoodsValidate $validate)
  82. {
  83. // 从请求中提取'name', 'cover_img', 'product_id', 'price'参数
  84. $data = $this->request->params(['name', 'cover_img', 'product_id', 'price']);
  85. // 使用验证器检查提取的参数是否符合规定
  86. $validate->check($data);
  87. // 处理product_id,将其从数组形式转换为ID值
  88. $data['product_id'] = $data['product_id']['id'];
  89. // 返回处理后的参数数据
  90. return $data;
  91. }
  92. /**
  93. * 创建广播商品
  94. *
  95. * 本函数用于处理广播商品的创建逻辑。它首先通过验证数据的合法性,然后调用仓库接口进行商品创建。
  96. * 创建成功后,返回一个表示操作成功的JSON响应。
  97. *
  98. * @param BroadcastGoodsValidate $validate 数据验证对象,用于校验请求数据的合法性
  99. * @return \Illuminate\Http\JsonResponse 返回一个表示操作成功的JSON响应
  100. */
  101. public function create(BroadcastGoodsValidate $validate)
  102. {
  103. // 调用仓库接口,使用当前请求中的商家ID和校验后的参数创建广播商品
  104. $this->repository->create($this->request->merId(), $this->checkParams($validate));
  105. // 返回一个表示操作成功的JSON响应
  106. return app('json')->success('创建成功');
  107. }
  108. /**
  109. * 批量创建直播商品
  110. *
  111. * 本函数用于处理批量创建直播商品的请求。它首先从请求中获取商品列表,然后对每个商品进行验证,
  112. * 最后将商品信息批量创建到直播商品库中。
  113. *
  114. * @param BroadcastGoodsValidate $validate 直播商品验证器,用于验证商品信息的合法性。
  115. * @return json 返回操作结果的JSON对象,成功时包含成功消息,失败时包含错误消息。
  116. */
  117. public function batchCreate(BroadcastGoodsValidate $validate)
  118. {
  119. // 从请求中获取名为'goods'的参数,如果不存在则默认为空数组
  120. $goods = $this->request->param('goods', []);
  121. // 检查商品列表是否为空,如果为空则返回错误信息
  122. if (!count($goods)) return app('json')->fail('请选中商品');
  123. // 启用批量验证模式
  124. $validate->isBatch();
  125. // 遍历商品列表,对每个商品进行验证
  126. foreach ($goods as $item) {
  127. $validate->check((array)$item);
  128. }
  129. // 批量创建直播商品,使用当前请求的商家ID作为参数
  130. $this->repository->batchCreate($this->request->merId(), $goods);
  131. // 返回成功消息
  132. return app('json')->success('创建成功');
  133. }
  134. /**
  135. * 根据给定的ID更新表单数据。
  136. * 此方法首先验证指定的ID是否存在对应的实体,如果存在,则更新表单数据;如果不存在,则返回错误信息。
  137. * 使用此方法可以确保只有存在的实体才能被更新,从而避免了无效的更新操作。
  138. *
  139. * @param int $id 需要更新的表单数据的ID。
  140. * @return \Illuminate\Http\JsonResponse 更新成功时返回包含更新后数据的JSON响应,更新失败时返回错误信息的JSON响应。
  141. */
  142. public function updateForm($id)
  143. {
  144. // 检查指定ID的实体是否存在,如果不存在则返回错误信息。
  145. if (!$this->repository->merExists($id, $this->request->merId()))
  146. return app('json')->fail('数据不存在');
  147. // 更新表单数据,并将更新后的数据转换为JSON格式返回。
  148. return app('json')->success(formToData($this->repository->updateForm($id)));
  149. }
  150. /**
  151. * 更新广播商品信息
  152. *
  153. * 本函数用于处理指定广播商品的更新操作。它首先验证传入的数据是否有效,
  154. * 然后检查指定的商家是否存在,最后更新广播商品的信息。
  155. *
  156. * @param int $id 广播商品的ID,用于指定要更新的广播商品。
  157. * @param BroadcastGoodsValidate $validate 数据验证对象,用于验证传入的更新数据是否有效。
  158. * @return json 返回一个JSON格式的响应,包含操作的结果信息。
  159. */
  160. public function update($id, BroadcastGoodsValidate $validate)
  161. {
  162. // 检查商家是否存在,如果商家不存在,则返回错误信息。
  163. if (!$this->repository->merExists($id, $this->request->merId()))
  164. return app('json')->fail('数据不存在');
  165. // 使用验证后的参数更新广播商品信息。
  166. $this->repository->update($id, $this->checkParams($validate));
  167. // 更新成功后,返回成功的响应信息。
  168. return app('json')->success('编辑成功');
  169. }
  170. /**
  171. * 标记方法
  172. *
  173. * 本方法用于对特定ID的对象进行标记操作。它首先尝试从请求中获取标记参数,
  174. * 然后验证指定ID的对象是否存在,并且操作者是否有权限对其进行标记。
  175. * 如果对象存在且操作者有权限,那么将执行标记操作,并返回成功的响应。
  176. * 如果对象不存在,则返回一个表示失败的响应。
  177. *
  178. * @param int $id 需要被标记的对象的ID
  179. * @return json 标记操作的结果,成功或失败的响应
  180. */
  181. public function mark($id)
  182. {
  183. // 将请求中的mark参数转换为字符串类型
  184. $mark = (string)$this->request->param('mark');
  185. // 检查指定ID的对象是否存在,并且当前操作者是否有权限对其进行标记
  186. if (!$this->repository->merExists($id, $this->request->merId()))
  187. // 如果对象不存在或无权限,则返回一个表示失败的JSON响应
  188. return app('json')->fail('数据不存在');
  189. // 对指定ID的对象执行标记操作
  190. $this->repository->mark($id, $mark);
  191. // 标记操作成功,返回一个表示成功的JSON响应
  192. return app('json')->success('修改成功');
  193. }
  194. /**
  195. * 修改商户状态
  196. *
  197. * 本函数用于根据请求中的$id修改指定商户的状态。状态通过请求中的is_show参数决定,
  198. * 默认为0(不显示),如果is_show参数为1,则改为1(显示)。
  199. *
  200. * @param int $id 商户的ID
  201. * @return json 返回一个JSON格式的响应,成功时包含成功消息,失败时包含错误消息。
  202. */
  203. public function changeStatus($id)
  204. {
  205. // 根据请求中的is_show参数决定商户的显示状态,存在$ishow变量中
  206. $isShow = $this->request->param('is_show') == 1 ? 1 : 0;
  207. // 检查商户是否存在,如果不存在,则返回失败消息
  208. if (!$this->repository->merExists($id, $this->request->merId()))
  209. return app('json')->fail('数据不存在');
  210. // 更新商户的显示状态
  211. $this->repository->isShow($id, $isShow);
  212. // 返回成功消息
  213. return app('json')->success('修改成功');
  214. }
  215. /**
  216. * 删除指定ID的实体。
  217. *
  218. * 此方法首先验证请求的ID是否存在,如果不存在,则返回一个错误响应。
  219. * 如果ID存在,它将尝试删除该实体,并返回一个成功响应。
  220. * 这个方法体现了业务逻辑中对实体进行删除的操作,它封装了验证和删除的细节,
  221. * 并通过返回标准的JSON响应来与调用者进行交互。
  222. *
  223. * @param int $id 要删除的实体的ID。
  224. * @return \Illuminate\Http\JsonResponse 删除成功时返回成功的JSON响应,删除失败(ID不存在)时返回失败的JSON响应。
  225. */
  226. public function delete($id)
  227. {
  228. // 检查指定ID的实体是否存在,如果不存在则返回失败响应。
  229. if (!$this->repository->merExists($id, $this->request->merId()))
  230. return app('json')->fail('数据不存在');
  231. // 删除指定ID的实体。
  232. $this->repository->delete((int)$id);
  233. // 删除成功,返回成功响应。
  234. return app('json')->success('删除成功');
  235. }
  236. }