AgentPackageHelper.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722
  1. <?php
  2. /*
  3. * @Description: 用户套餐表
  4. * @Version: *
  5. * @Autor: lexuan
  6. * @Date: 2024-11-26 09:24:11
  7. * @LastEditors: lexuan
  8. * @LastEditTime: 2024-11-26 09:24:11
  9. */
  10. namespace App\DataApiNew\Helper;
  11. use App\DataApiNew\Models\AgentPackage;
  12. use App\Models\Pages;
  13. use App\Models\SpoutExport;
  14. use App\Models\SpoutImport;
  15. use App\DataApiNew\Models\AdminUsers;
  16. use App\DataApiNew\Models\Packages;
  17. use App\DataApiNew\Models\SystemSetting;
  18. use Illuminate\Http\Request;
  19. use Illuminate\Support\Facades\DB;
  20. use Vinkla\Hashids\Facades\Hashids;
  21. class AgentPackageHelper
  22. {
  23. private $is_shop = 0; // 是否是小店查询
  24. private $is_shopping = 0; // 是否是小程序直播购物车
  25. public $is_platform_api = 0; // 是否是平台api
  26. // 查询条件
  27. public function whens($query, $request)
  28. {
  29. return $query
  30. ->when($request->filled('id'), fn ($q) => $q->where('id', $request->id));
  31. }
  32. // 查询列表
  33. public function select(Request $request)
  34. {
  35. $page = new Pages($request, AgentPackage::query());
  36. $page->before(function ($query) use ($request) {
  37. $query->select(AgentPackage::$selectFields);
  38. return $this->whens($query, $request);
  39. });
  40. $result = $page->paginate();
  41. return $result;
  42. }
  43. // 导出
  44. public function export(Request $request)
  45. {
  46. $query = AgentPackage::select(AgentPackage::$selectFields);
  47. $query = $this->whens($query, $request);
  48. $query->orderBy('created_at', 'desc');
  49. $header = [
  50. '合伙人id' => 'agent_id',
  51. '套餐id' => 'package_id',
  52. '套餐佣金' => 'DEFAULT',
  53. '上架状态 0:下架 1:上架' => 'is_upload',
  54. '状态' => 'status',
  55. '创建时间' => 'created_at',
  56. '修改时间' => 'updated_at',
  57. '可见用户' => 'visible_to_users',
  58. '不可见用户' => 'invisible_to_users',
  59. '分成类型 1:比例 2:金额' => 'yj_type',
  60. '分成比例' => 'yj_p',
  61. '分销员id' => 'fxuser_id',
  62. '权重' => 'weight',
  63. '用户id' => 'user_id',
  64. ];
  65. $getEnValue = $this->getEnValue();
  66. $excel = new SpoutExport($header);
  67. $excel->setData($query->get());
  68. $result = $excel->setEnum($getEnValue)->spoutToExcel('excel_out');
  69. return $result ? success($result['url']) : error();
  70. }
  71. // 导入
  72. public function import(Request $request)
  73. {
  74. $header = [
  75. '合伙人id' => 'agent_id',
  76. '套餐id' => 'package_id',
  77. '套餐佣金' => 'DEFAULT',
  78. '上架状态 0:下架 1:上架' => 'is_upload',
  79. '状态' => 'status',
  80. '创建时间' => 'created_at',
  81. '修改时间' => 'updated_at',
  82. '可见用户' => 'visible_to_users',
  83. '不可见用户' => 'invisible_to_users',
  84. '分成类型 1:比例 2:金额' => 'yj_type',
  85. '分成比例' => 'yj_p',
  86. '分销员id' => 'fxuser_id',
  87. '权重' => 'weight',
  88. '用户id' => 'user_id',
  89. ];
  90. $getEnValue = $this->getEnValue();
  91. $SpoutImport = new SpoutImport($header);
  92. $dataList = $SpoutImport->setRequest($request)->getExcelData();
  93. return $dataList;
  94. }
  95. // 获取枚举值
  96. public function getEnValue()
  97. {
  98. $data = [
  99. 'operator_id' => SystemSetting::$operator,
  100. 'is_upload' => Packages::$isUpload,
  101. 'rebate_type' => Packages::$rebateType,
  102. 'is_live' => Packages::$isLive,
  103. 'select_status' => Packages::$selectStatus,
  104. ];
  105. return $data;
  106. }
  107. // 查询一条
  108. public function find(Request $request)
  109. {
  110. $request->validate([
  111. 'id' => 'required|integer',
  112. ]);
  113. $result = AgentPackage::where(['id' => $request->id])->select(AgentPackage::$selectFields)->first();
  114. return success($result);
  115. }
  116. // 添加
  117. public function insert(Request $request)
  118. {
  119. $request->validate([
  120. 'name' => 'required',
  121. ]);
  122. $result = AgentPackage::create($request->all());
  123. if ($result) {
  124. return success();
  125. } else {
  126. return error();
  127. }
  128. }
  129. // 修改
  130. public function update(Request $request)
  131. {
  132. $request->validate([
  133. 'id' => 'required|integer',
  134. ]);
  135. $result = AgentPackage::where(['id' => $request->id])->update($request->all());
  136. if ($result) {
  137. return success();
  138. } else {
  139. return error();
  140. }
  141. }
  142. // 删除
  143. public function delete(Request $request)
  144. {
  145. $request->validate([
  146. 'ids' => 'required',
  147. ]);
  148. $id_str = $request->ids;
  149. $arr = explode(",", $id_str);
  150. // 查询是否存在子数据
  151. // $count = Shop::whereIn('tm_id',$arr)->count();
  152. // if($count > 0){
  153. // return ['code'=>0,'msg'=>"存在子数据,禁止删除"];
  154. // }
  155. $result = AgentPackage::whereIn('id', $arr)->delete();
  156. if ($result) {
  157. return success();
  158. } else {
  159. return error();
  160. }
  161. }
  162. /**
  163. * 产品中心
  164. *
  165. * @param Request $request
  166. * @param array $selectFields 展示的字段
  167. * @param array $hiddenFields 隐藏的字段
  168. */
  169. public function productCenter(Request $request, $selectFields = [], $hiddenFields = [])
  170. {
  171. // 获取用户id
  172. if ($request->filled('user_id')) {
  173. $user_id = Hashids::decode($request->user_id);
  174. if (empty($user_id)) {
  175. return error("无效信息");
  176. }
  177. $user_id = $user_id[0];
  178. } else {
  179. $user_id = auth()->id();
  180. }
  181. // 获取字段
  182. if (empty($selectFields)) {
  183. $selectFields = Packages::$selectFields;
  184. }
  185. if (AdminUsers::isAdmin($user_id) && ($this->is_shopping == 0 && $this->is_shop == 0)) {
  186. // admin 查看原始套餐
  187. return (new PackagesHelper())->select($request, $selectFields);
  188. } else {
  189. $page = new Pages($request, Packages::query());
  190. // 字段添加前缀
  191. foreach ($selectFields as &$value) {
  192. $value = 'packages.' . $value;
  193. }
  194. $page->before(function ($query) use ($request, $selectFields, $user_id) {
  195. // admin 上架的产品
  196. $query->select($selectFields)->where('packages.is_upload', 1)
  197. // 关联查询上下架状态
  198. ->leftJoin('agent_package', function ($join) use ($user_id) {
  199. $join->on('packages.id', '=', 'agent_package.package_id')
  200. ->where('agent_package.user_id', '=', $user_id);
  201. })
  202. // 查询条件
  203. ->when($request->filled('id'), fn ($q) => $q->where('packages.id', $request->id))
  204. ->when($request->has('is_live'), fn ($q) => $q->where('packages.is_live', $request->is_live))
  205. ->when($request->has('rebate_type'), fn ($q) => $q->where('packages.rebate_type', $request->rebate_type))
  206. ->when($request->has('is_shopping') && $request->is_shopping == 0, fn ($q) => $q->where(function ($query) {
  207. $query->where('agent_package.is_shopping', 0)->orWhereNull('agent_package.is_shopping');
  208. }))
  209. ->when($request->has('is_shopping') && $request->is_shopping == 1, fn ($q) => $q->where('agent_package.is_shopping', 1))
  210. ->when($request->has('is_upload') && $request->is_upload == 0, fn ($q) => $q->where('agent_package.is_upload', 0))
  211. ->when($request->has('is_upload') && $request->is_upload == 1, fn ($q) => $q->where(function ($query) {
  212. $query->where('agent_package.is_upload', null)->orWhere('agent_package.is_upload', 1);
  213. }))
  214. ->when($request->filled('name'), fn ($q) => $q->where('packages.name', 'like', "%$request->name%"))
  215. ->when($request->filled('operator_id'), fn ($q) => $q->where('packages.operator_id', $request->operator_id))
  216. // 判断是否是下架产品,并动态设置 is_upload
  217. ->addSelect([
  218. DB::raw('CASE
  219. WHEN agent_package.is_upload = 0 THEN 0
  220. ELSE packages.is_upload
  221. END AS is_upload')
  222. ])
  223. ->orderByRaw("IFNULL(agent_package.is_upload, 1) DESC")
  224. ->orderByRaw('CASE WHEN agent_package.weight IS NULL OR agent_package.weight = 0 THEN packages.weight ELSE agent_package.weight END DESC')
  225. ->orderBy(DB::raw('CAST(packages.yj AS UNSIGNED)'), 'desc')
  226. ->orderBy('packages.created_at', 'desc');;
  227. return $query;
  228. });
  229. if ($this->is_shop == 1) {
  230. // 小店
  231. $hiddenFields = ['yj','id'];
  232. $page->after(function ($data) use ($hiddenFields) {
  233. $data->each(function ($item) {
  234. $item->package_key = Hashids::encode($item->id);
  235. });
  236. // 隐藏字段
  237. $data->makeHidden($hiddenFields);
  238. });
  239. } elseif ($this->is_shopping == 1) {
  240. // 购物车
  241. $hiddenFields = ['yj'];
  242. $page->after(function ($data) use ($hiddenFields) {
  243. // 隐藏字段
  244. $data->makeHidden($hiddenFields);
  245. });
  246. } elseif ($this->is_platform_api == 1) {
  247. // 平台api
  248. $page->after(function ($data) use ($user_id, $hiddenFields) {
  249. $data = $this->setYjShow($user_id, $data);
  250. // 隐藏字段
  251. $data->makeHidden($hiddenFields);
  252. // 替换字段名称
  253. $data->each(function ($item) {
  254. if (!empty($item->id)) {
  255. $item->package_key = Hashids::encode($item->id);
  256. }
  257. if (!empty($item->yj)) {
  258. $item->commission = $item->yj;
  259. unset($item->yj);
  260. }
  261. if (!empty($item->yjzc)) {
  262. $item->commission_rate = $item->yjzc;
  263. unset($item->yjzc);
  264. }
  265. });
  266. });
  267. } else {
  268. // 产品中心
  269. $page->after(function ($data) use ($user_id, $hiddenFields) {
  270. $data = $this->setYjShow($user_id, $data);
  271. // 隐藏字段
  272. $data->makeHidden($hiddenFields);
  273. });
  274. }
  275. $packageList = $page->paginate();
  276. return $packageList;
  277. }
  278. }
  279. // 产品中心导出
  280. public function productCenterExport(Request $request)
  281. {
  282. sys_log($request, '产品中心导出', '号卡产品中心');
  283. $request->merge(['page_not' => 1]);
  284. $selectFields = [
  285. 'id',
  286. 'name', // 名称
  287. 'mini_text', // 简介
  288. 'operator_id', // 运营商
  289. 'yj',
  290. 'yjzc', // 佣金政策
  291. 'weight', // 权重
  292. 'is_upload', // 是否上架
  293. 'created_at',
  294. 'out_package_id', // 外部产品编码
  295. 'belonging_place', // 归属地
  296. 'data_quota', // 流量额度
  297. 'call_duration', // 通话时长
  298. 'first_recharge_amount', // 首充金额
  299. 'attention', // 注意事项
  300. 'rebate_type', // 返佣类型 1:次月返 2:秒返
  301. 'select_status', // 是否选号
  302. 'is_live', // 是否允许直播 0:不允许 1:允许
  303. 'commission_terms', // 结佣条件
  304. ];
  305. $dataList = $this->productCenter($request, $selectFields);
  306. $header = [
  307. '名称' => 'name',
  308. '简介' => 'mini_text',
  309. '佣金' => 'yj',
  310. '运营商' => 'operator_id',
  311. '佣金政策' => 'yjzc',
  312. '是否上架' => 'is_upload',
  313. '外部产品编码' => 'out_package_id',
  314. '归属地' => 'belonging_place',
  315. '流量额度' => 'data_quota',
  316. '通话时长' => 'call_duration',
  317. '首充金额' => 'first_recharge_amount',
  318. '注意事项' => 'attention',
  319. '返佣类型' => 'rebate_type',
  320. '是否选号' => 'select_status',
  321. '是否允许直播' => 'is_live',
  322. '创建时间' => 'created_at',
  323. '结佣条件' => 'commission_terms',
  324. ];
  325. $getEnValue = $this->getEnValue();
  326. $dataList = json_decode($dataList->getContent(),true);
  327. $excel = new SpoutExport($header);
  328. $excel->setData($dataList['data']);
  329. $result = $excel->setEnum($getEnValue)->setProcessStyle(30)->spoutToExcel('产品中心导出数据');
  330. return $result;
  331. }
  332. // 获取产品详情
  333. public function productDetail(Request $request)
  334. {
  335. $request->validate([
  336. 'id' => 'required|integer',
  337. ]);
  338. $user_id = auth()->id();
  339. if (AdminUsers::isAdmin($user_id)) {
  340. $package = Packages::with(['package_member_level_royalty'])->select(Packages::$selectFields)->where('id', $request->id)->first();
  341. return success($package);
  342. }
  343. $package = Packages::select(Packages::$selectFields)->where('id', $request->id)->first();
  344. if (empty($package)) {
  345. return error('产品不存在');
  346. }
  347. $package = $this->setYjShow($user_id, $package, false);
  348. return success($package);
  349. }
  350. // 产品上下架
  351. public function packageUpload(Request $request)
  352. {
  353. $request->validate([
  354. 'ids' => 'required|string',
  355. 'is_upload' => 'required|integer|in:0,1',
  356. ]);
  357. sys_log($request, '产品上下架', '号卡产品中心');
  358. $ids = explode(',', $request->ids);
  359. $user_id = auth()->id();
  360. if (AdminUsers::isAdmin($user_id)) {
  361. Packages::whereIn('id', $ids)->update(['is_upload' => $request->is_upload]);
  362. } else {
  363. foreach ($ids as $id) {
  364. $agentPackage = AgentPackage::where('user_id', $user_id)->where('package_id', $id)->first();
  365. if ($agentPackage) {
  366. $agentPackage->update(['is_upload' => $request->is_upload]);
  367. } else {
  368. AgentPackage::create(['user_id' => $user_id, 'package_id' => $id, 'is_upload' => $request->is_upload]);
  369. }
  370. }
  371. }
  372. return success();
  373. }
  374. /**
  375. * 佣金展示计算
  376. *
  377. * @param $user_id 用户id
  378. * @param $packageList 产品列表
  379. * @param $is_list 是否是列表
  380. */
  381. public function setYjShow($user_id, $packageList, $is_list = true)
  382. {
  383. // 获取父用户的佣金信息
  384. $parentList = AdminUsers::getParents($user_id);
  385. $parentYjType = AdminUsers::with(['agent_package'])
  386. ->select(['id', 'yj_type', 'yj_a', 'yj_p'])
  387. ->whereIn('id', $parentList)
  388. ->orderBy('agent_level', 'ASC')
  389. ->get()
  390. ->keyBy('id'); // 重置索引为用户id
  391. if ($is_list) {
  392. // 遍历产品列表
  393. foreach ($packageList as &$package) {
  394. $package = $this->computation($parentYjType, $package);
  395. }
  396. return $packageList;
  397. } else {
  398. return $this->computation($parentYjType, $packageList);
  399. }
  400. }
  401. // 计算佣金
  402. private function computation($parentYjType, $package)
  403. {
  404. $yj = (string)$package->yj; // 原始佣金
  405. $package_id = $package->id;
  406. // 遍历所有上级用户
  407. foreach ($parentYjType as $user) {
  408. $yj_type = $user->yj_type; // 佣金类型
  409. $yj_p = (string)$user->yj_p; // 百分比
  410. $yj_a = (string)$user->yj_a; // 固定金额
  411. $agent_package = $user->agent_package->keyBy('package_id'); // 提前获取代理包裹数据并按package_id索引
  412. // 根据代理包裹设置佣金类型
  413. if (isset($agent_package[$package_id]) && $agent_package[$package_id]['yj_type'] != 0) {
  414. $package_info = $agent_package[$package_id];
  415. $yj_type = $package_info['yj_type']; // 佣金类型
  416. $yj_p = (string)$package_info['yj_p']; // 百分比
  417. $yj_a = (string)$package_info['yj_a']; // 固定金额
  418. }
  419. // 根据佣金类型进行计算
  420. if ($yj_type == 1) { // 百分比计算
  421. $yj_p = bcdiv($yj_p, 100, 2); // 百分比转化为小数
  422. $yj = bcsub($yj, bcmul($yj, $yj_p, 2), 2); // 计算佣金
  423. } elseif ($yj_type == 2) { // 固定金额计算
  424. $yj = bcsub($yj, $yj_a, 2); // 计算佣金
  425. }
  426. // 如果佣金小于0,则设置为0
  427. if (bccomp($yj, '0', 2) < 0) {
  428. $yj = '0'; // 设置为 0
  429. break;
  430. }
  431. }
  432. // 更新包裹佣金
  433. $package->yj = $yj;
  434. return $package;
  435. }
  436. // 获取用户小店套餐
  437. public function getShopPackage(Request $request)
  438. {
  439. $request->validate([
  440. 'user_key' => 'required', // 用户id加密
  441. ]);
  442. $user_id = $request->user_key;
  443. $request->merge([
  444. 'is_upload' => 1,
  445. 'user_id' => $user_id,
  446. ]);
  447. $this->is_shop = 1; // 小店不计算展示佣金
  448. return $this->productCenter($request, Packages::$selectFieldsByShop);
  449. }
  450. // 设置权重
  451. public function setWeight(Request $request)
  452. {
  453. $request->validate([
  454. 'package_id' => 'required|integer',
  455. 'weight' => 'required|integer',
  456. ]);
  457. sys_log($request, '设置权重', '号卡产品中心');
  458. $user_id = auth()->id();
  459. if (AdminUsers::isAdmin($user_id)) {
  460. $result = Packages::where('id', $request->package_id)->update(['weight' => $request->weight]);
  461. } else {
  462. $agent_package = AgentPackage::where('user_id', $user_id)->where('package_id', $request->package_id)->first();
  463. if ($agent_package) {
  464. $result = $agent_package->update(['weight' => $request->weight]);
  465. } else {
  466. $result = AgentPackage::create(['user_id' => $user_id, 'package_id' => $request->package_id, 'weight' => $request->weight, 'is_upload' => 1]);
  467. }
  468. }
  469. if ($result) {
  470. return success();
  471. } else {
  472. return error();
  473. }
  474. }
  475. // 设置是否允许直播(admin)
  476. public function setLive(Request $request)
  477. {
  478. $request->validate([
  479. 'package_id' => 'required|integer',
  480. 'is_live' => 'required|in:0,1', // 是否允许直播
  481. ]);
  482. sys_log($request, '设置是否允许直播', '号卡产品中心');
  483. $user_id = auth()->id();
  484. if (AdminUsers::isAdmin($user_id)) {
  485. $result = Packages::where('id', $request->package_id)->update(['is_live' => $request->is_live]);
  486. } else {
  487. return error();
  488. }
  489. if ($result) {
  490. return success();
  491. } else {
  492. return error();
  493. }
  494. }
  495. // 获取套餐信息
  496. public function getPackageInfo(Request $request)
  497. {
  498. $request->validate([
  499. 'package_key' => 'required', // 套餐id加密
  500. 'user_key' => 'required', // 用户id加密
  501. ]);
  502. $package_id = Hashids::decode($request->package_key);
  503. if (empty($package_id)) {
  504. return error("无效操作");
  505. }
  506. $user_id = Hashids::decode($request->user_key);
  507. if (empty($user_id)) {
  508. return error("无效操作");
  509. }
  510. $package_id = $package_id[0];
  511. $user_id = $user_id[0];
  512. $package = Packages::select([
  513. 'id',
  514. 'name',
  515. 'mini_text',
  516. 'image',
  517. 'details',
  518. 'is_upload',
  519. ])
  520. ->where('id', $package_id)->first();
  521. if (!$package || $package->is_upload == 0) {
  522. return error("套餐已下架");
  523. }
  524. $agent_package = AgentPackage::select([
  525. 'id',
  526. 'is_upload',
  527. ])
  528. ->where('user_id', $user_id)->where('package_id', $package_id)->first();
  529. if ($agent_package && $agent_package->is_upload == 0) {
  530. return error("套餐已下架");
  531. }
  532. return ['code' => 1, 'msg' => "success", 'data' => $package];
  533. }
  534. // 批量设置单品抽成
  535. public function setUserProductYj(Request $request)
  536. {
  537. $request->validate([
  538. 'user_ids' => 'required|string', // 用户id
  539. 'package_id' => 'required|integer', // 套餐id
  540. 'yj_type' => 'required|integer|in:1,2', // 佣金类型
  541. 'yj_p' => 'integer', // 百分比
  542. 'yj_a' => 'numeric', // 金额
  543. ]);
  544. sys_log($request, '批量设置单品抽成', '号卡产品中心');
  545. $package = Packages::where('id', $request->package_id)->exists();
  546. if (!$package) {
  547. return error("套餐不存在");
  548. }
  549. $user_ids = explode(',', $request->user_ids);
  550. foreach ($user_ids as $user_id) {
  551. $agent_package = AgentPackage::where('user_id', $user_id)->where('package_id', $request->package_id)->first();
  552. if ($agent_package) {
  553. $updateData = [
  554. 'yj_type' => $request->yj_type,
  555. 'yj_p' => $request->input('yj_p', $agent_package->yj_p),
  556. 'yj_a' => $request->input('yj_a', $agent_package->yj_a),
  557. ];
  558. $agent_package->update($updateData);
  559. } else {
  560. AgentPackage::create([
  561. 'user_id' => $user_id,
  562. 'package_id' => $request->package_id,
  563. 'yj_type' => $request->yj_type,
  564. 'yj_p' => $request->yj_p ?? 0,
  565. 'yj_a' => $request->yj_a ?? 0,
  566. 'is_upload' => 1
  567. ]);
  568. }
  569. }
  570. return success();
  571. }
  572. // 设置小程序直播购物车
  573. public function setShopping(Request $request)
  574. {
  575. $request->validate([
  576. 'package_id' => 'required|integer',
  577. 'is_shopping' => 'required|in:0,1', // 是否允许直播
  578. ]);
  579. sys_log($request, '设置小程序直播购物车', '号卡产品中心');
  580. $package = Packages::select([
  581. 'id',
  582. 'is_live',
  583. 'is_upload',
  584. ])->where('id', $request->package_id)->first();
  585. if (!$package || $package->is_upload == 0) {
  586. return error("套餐已下架");
  587. }
  588. if ($package->is_live == 0) {
  589. return error("该套餐未开启直播");
  590. }
  591. $user_id = $request->user()->id;
  592. $agent_package = AgentPackage::where('package_id', $request->package_id)->first();
  593. if ($agent_package->is_upload == 0) {
  594. return error("该套餐已下架");
  595. }
  596. if ($agent_package) {
  597. $agent_package->update(['is_shopping' => $request->is_shopping]);
  598. } else {
  599. AgentPackage::create([
  600. 'user_id' => $user_id,
  601. 'package_id' => $request->package_id,
  602. 'is_shopping' => $request->is_shopping,
  603. 'is_upload' => 1
  604. ]);
  605. }
  606. return success();
  607. }
  608. // 获取小程序直播购物车产品
  609. public function getShopping(Request $request)
  610. {
  611. $this->is_shopping = 1;
  612. $params = [
  613. 'is_upload' => 1,
  614. 'is_live' => 1,
  615. ];
  616. if ($request->has('is_shopping')) {
  617. $params['is_shopping'] = $request->input('is_shopping');
  618. }
  619. if ($request->has('id')) {
  620. $params['id'] = $request->input('id');
  621. }
  622. $result = $this->productCenter(new Request($params), Packages::$selectFieldsByShop);
  623. return $result;
  624. }
  625. }