Store.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. <?php
  2. namespace app\controller\admin;
  3. use app\extra\basic\Base;
  4. use app\extra\dyMini\Qrcode;
  5. use app\middleware\AuthMiddleware;
  6. use app\model\saas\SaasStore;
  7. use app\model\saas\SaasStoreCategory;
  8. use app\model\saas\SaasStoreExpress;
  9. use app\service\saas\GoodsService;
  10. use app\service\saas\StoreService;
  11. use DI\Attribute\Inject;
  12. use LinFly\Annotation\Attributes\Route\Controller;
  13. use LinFly\Annotation\Attributes\Route\GetMapping;
  14. use LinFly\Annotation\Attributes\Route\Middleware;
  15. use LinFly\Annotation\Attributes\Route\PostMapping;
  16. use support\Container;
  17. use support\Request;
  18. use support\Response;
  19. use Webman\RedisQueue\Redis;
  20. /**
  21. * POI门店
  22. */
  23. #[Controller("/api/store"),Middleware(AuthMiddleware::class)]
  24. class Store extends Base
  25. {
  26. #[Inject]
  27. protected StoreService $service;
  28. #[Inject]
  29. protected GoodsService $goodsService;
  30. #[Inject]
  31. protected SaasStore $model;
  32. /**
  33. * 数据列表
  34. * @param Request $request
  35. * @return Response
  36. */
  37. #[GetMapping('list')]
  38. public function getStoreData(Request $request): Response
  39. {
  40. try {
  41. $param = $request->all();
  42. $data = $this->service->setModel()->getList($param,null,true,['type'],['type' => function($query,$resp){
  43. if (empty($resp['product_type'])) return [];
  44. $productType = json_decode($resp['product_type'],true);
  45. $typeData = [];
  46. foreach ($this->goodsService->productType() as $key => $value) {
  47. if (in_array($value['key'],$productType)) {
  48. $typeData[] = $value['name'];
  49. }
  50. }
  51. return $typeData;
  52. }]);
  53. return successTrans(100010,pageFormat($data),200);
  54. } catch (\Throwable $th) {
  55. return error($th->getMessage());
  56. }
  57. }
  58. /**
  59. * 同步POI门店
  60. * @param Request $request
  61. * @return Response
  62. */
  63. #[GetMapping('sync')]
  64. public function syncStore(Request $request): Response
  65. {
  66. try {
  67. Redis::send("sync-store",[
  68. "appid" => sConf("wechat.appid"),
  69. "secret" => sConf("wechat.secret"),
  70. "account" => sConf("wechat.shop_id"),
  71. ]);
  72. return success("发起成功");
  73. } catch (\Throwable $throwable) {
  74. return error($throwable->getMessage());
  75. }
  76. }
  77. /**
  78. * 编辑代理信息
  79. * @param Request $request
  80. * @return Response
  81. */
  82. #[PostMapping("edit")]
  83. public function setListData(Request $request): Response
  84. {
  85. try {
  86. $param = $request->post();
  87. $factory = $this->model->where("id",$param['id'])->findOrEmpty();
  88. if ($factory->isEmpty()) return errorTrans("error.data");
  89. $state = $this->model->setAutoData($param);
  90. if (!$state) return errorTrans("error.data");
  91. return successTrans("success.data");
  92. } catch (\Throwable $throwable) {
  93. return error($throwable->getMessage());
  94. }
  95. }
  96. /**
  97. * 批量操作
  98. * @param Request $request
  99. * @return Response
  100. */
  101. #[PostMapping("batch")]
  102. public function setGoodsBatch(Request $request): Response
  103. {
  104. try {
  105. $param = $this->_valid([
  106. "id.require" => "参数错误",
  107. "value.require" => "参数错误",
  108. "field.require" => "参数错误",
  109. "type.require" => "参数错误"
  110. ],"post");
  111. if (!is_array($param)) return error($param);
  112. if ($param['type'] == "batch") {
  113. $state = $this->model->where("id","in",$param['id'])->save([$param['field'] => $param['value']]);
  114. } else {
  115. $state = $this->model->where("id",$param['id'])->save([$param['field'] => $param['value']]);
  116. }
  117. if (!$state) return errorTrans("error.data");
  118. return successTrans("success.data");
  119. } catch (\Throwable $throwable) {
  120. return error($throwable->getMessage());
  121. }
  122. }
  123. #[GetMapping("cate")]
  124. public function getCategory(): Response
  125. {
  126. try {
  127. $data = $this->goodsService->productType();
  128. return successTrans("success",compact('data'));
  129. } catch (\Throwable $throwable) {
  130. return error($throwable->getMessage());
  131. }
  132. }
  133. /**
  134. * 新增店铺品类授权
  135. * @param Request $request
  136. * @return Response
  137. */
  138. #[PostMapping("cate")]
  139. public function addCategory(Request $request): Response
  140. {
  141. try {
  142. $param = $this->_valid([
  143. "poi_id.require" => trans("empty.require"),
  144. "category.require" => trans("empty.require"),
  145. "product_type.require" => trans("empty.require"),
  146. ],$request->method());
  147. if (!is_array($param)) return error($param);
  148. $storeMode = (new SaasStoreCategory);
  149. $inData = [];
  150. foreach ($param['category'] as $key => $value) {
  151. if (!isset($value[2])) return error("请选择正确的品类");
  152. $lastId = $value[2];
  153. $storeCategory = $storeMode->where("category_id",$lastId)->where("poi_id",$param['poi_id'])->with(['cate'])->findOrEmpty();
  154. if (!$storeCategory->isEmpty()) return error("【{$storeCategory['cate']['name']}】已存在,请勿重复添加");
  155. $inData[$key] = [
  156. "category_id" => $value[2],
  157. "poi_id" => $param['poi_id'],
  158. "product_type" => json_encode($param["product_type"]),
  159. ];
  160. }
  161. $state = $storeMode->insertAll($inData);
  162. if (!$state) return errorTrans("error.data");
  163. return successTrans("success.data");
  164. } catch (\Throwable $throwable) {
  165. return error($throwable->getMessage());
  166. }
  167. }
  168. /**
  169. * 删除店铺品类授权
  170. * @param Request $request
  171. * @return Response
  172. */
  173. #[PostMapping("cate/del")]
  174. public function delCategory(Request $request): Response
  175. {
  176. try {
  177. $param = $this->_valid([
  178. "poi_id.require" => trans("empty.require"),
  179. "id.require" => trans("empty.require")
  180. ],$request->method());
  181. if (!is_array($param)) return error($param);
  182. $data = (new SaasStoreCategory)->where(['poi_id' => $param['poi_id'],'category_id' => $param['id']])->findOrEmpty();
  183. if ($data->isEmpty()) return errorTrans("error.data");
  184. $state = $data->delete();
  185. if (!$state) return errorTrans("error.data");
  186. return successTrans("success.data");
  187. } catch (\Throwable $throwable) {
  188. return error($throwable->getMessage());
  189. }
  190. }
  191. /**
  192. * 获取门店二维码
  193. * @param Request $request
  194. * @return Response
  195. */
  196. #[GetMapping("qrcode")]
  197. public function getQrcode(Request $request): Response
  198. {
  199. try {
  200. $param = $this->_valid([
  201. "id.require" => trans("empty.require")
  202. ],$request->method());
  203. if (!is_array($param)) return error($param);
  204. $data = $this->model->where("id",$param['id'])->findOrEmpty();
  205. if ($data->isEmpty()) return errorTrans("error.data");
  206. $qrcode = (new Qrcode)->config($this->getDyConfig())->token()->getQrcodeV2("pages/index/index?store={$data['poi_id']}","douyin");
  207. if (!isset($qrcode['img'])) return error("生成二维码失败");
  208. return successTrans("success.data",compact('qrcode'));
  209. } catch (\Throwable $throwable) {
  210. return error($throwable->getMessage());
  211. }
  212. }
  213. /**
  214. * 检测权限是否开通
  215. * @param Request $request
  216. * @return Response
  217. */
  218. #[GetMapping("express")]
  219. public function getExpressData(Request $request): Response
  220. {
  221. try {
  222. $param = $this->_valid([
  223. "poi.require" => trans("empty.require")
  224. ],$request->method());
  225. if (!is_array($param)) return error($param);
  226. $data = $this->model->where("poi_id",$param['poi'])->findOrEmpty();
  227. if ($data->isEmpty()) return errorTrans("error.data");
  228. $express = (new SaasStoreExpress)->where("poi_id",$param['poi'])->findOrEmpty();
  229. $return = $express->toArray();
  230. if ($express->isEmpty()) {
  231. $return = null;
  232. }
  233. return successTrans("success.data",compact('return'));
  234. } catch (\Throwable $throwable) {
  235. return error($throwable->getMessage());
  236. }
  237. }
  238. #[PostMapping("express/save")]
  239. public function setExpressData(Request $request): Response
  240. {
  241. try {
  242. $param = $this->_valid([
  243. "id.default" => 0,
  244. "status.require" => trans("empty.require"),
  245. "poi_id.require" => trans("empty.require"),
  246. "type.default" => "sfexpress",
  247. "rule.default" => [],
  248. ],$request->method());
  249. if (!is_array($param)) return error($param);
  250. $data = $this->model->where("poi_id",$param['poi_id'])->findOrEmpty();
  251. if ($data->isEmpty()) return errorTrans("error.data");
  252. $express = (new SaasStoreExpress)->where("poi_id",$param['poi_id'])->findOrEmpty();
  253. $param['rule'] = json_encode($param['rule']);
  254. $state = $express->setAutoData($param);
  255. if (!$state) return errorTrans("error.data");
  256. return successTrans("success.data");
  257. } catch (\Throwable $throwable) {
  258. return error($throwable->getMessage());
  259. }
  260. }
  261. }