PackagesHelper.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. <?php
  2. /*
  3. * @Description: 号卡套餐
  4. * @Version: *
  5. * @Autor: lexuan
  6. * @Date: 2024-11-25 16:38:13
  7. * @LastEditors: lexuan
  8. * @LastEditTime: 2024-11-25 16:38:13
  9. */
  10. namespace App\DataApiNew\Helper;
  11. use App\DataApiNew\Models\Packages;
  12. use App\Models\Pages;
  13. use App\Models\SpoutExport;
  14. use App\Models\SpoutImport;
  15. use App\DataApiNew\Models\AdminUsersMemberLevel;
  16. use App\DataApiNew\Models\PackageMemberLevelRoyalty;
  17. use Illuminate\Http\Request;
  18. use Illuminate\Support\Facades\DB;
  19. use Vinkla\Hashids\Facades\Hashids;
  20. class PackagesHelper
  21. {
  22. // 查询条件
  23. public function whens($query, $request)
  24. {
  25. return $query
  26. ->when($request->filled('id'), fn ($q) => $q->where('id', $request->id))
  27. ->when($request->filled('name'), fn ($q) => $q->where('name', 'like', "%$request->name%"))
  28. ->when($request->has('rebate_type'), fn ($q) => $q->where('rebate_type', $request->rebate_type))
  29. ->when($request->has('is_upload'), fn ($q) => $q->where('is_upload', $request->is_upload))
  30. ->when($request->filled('operator_id'), fn ($q) => $q->where('operator_id', $request->operator_id));
  31. }
  32. // 查询列表
  33. public function select(Request $request,$selectFields = [])
  34. {
  35. if(empty($selectFields)){
  36. $selectFields = Packages::$selectFields;
  37. }
  38. $page = new Pages($request, Packages::query());
  39. $page->withRelations(['suppliers','package_member_level_royalty']);
  40. $page->before(function ($query) use ($request, $selectFields) {
  41. $query->select($selectFields);
  42. return $this->whens($query, $request)
  43. ->orderBy('is_upload', 'desc')
  44. ->orderby("weight", "desc")
  45. ->orderBy(DB::raw('CAST(yj AS UNSIGNED)'), 'desc')
  46. ->orderBy('created_at', 'desc');
  47. });
  48. $result = $page->paginate();
  49. return $result;
  50. }
  51. // 导出
  52. public function export(Request $request)
  53. {
  54. $query = Packages::select(Packages::$selectFields);
  55. $query = $this->whens($query, $request);
  56. $query->orderBy('created_at', 'desc');
  57. $header = [
  58. '名称' => 'name',
  59. '简介' => 'mini_text',
  60. '主图' => 'image',
  61. '详情' => 'details',
  62. '运营商' => 'operator_id',
  63. '佣金政策' => 'yjzc',
  64. '套餐类型' => 'type_id',
  65. '月租' => 'monthly_rent',
  66. '权重' => 'weight',
  67. '上游套餐编码' => 'upstream_code',
  68. '生产方式' => 'production_type_id',
  69. '是否上架' => 'is_upload',
  70. '是否需要身份证号' => 'need_idcard',
  71. '是否需要上传身份证照片' => 'is_upload_idcard',
  72. '状态' => 'status',
  73. '外部产品编码' => 'out_package_id',
  74. '归属地' => 'belonging_place',
  75. '流量额度' => 'data_quota',
  76. '通话时长' => 'call_duration',
  77. '是否可选号' => 'is_choose_number',
  78. '首充金额' => 'first_recharge_amount',
  79. '直接提交局方,0表示不提,1表示提' => 'direct_send_status',
  80. '线上或本地号库切换,默认为0:无号库,1:本地号库,2:线上号库' => 'uporlocal',
  81. '颜色' => 'color',
  82. '最小年龄' => 'min_age',
  83. '最大年龄' => 'max_age',
  84. '亲情号' => 'family_number',
  85. '靓号' => 'beautiful_number',
  86. '可否自选归属地' => 'ownership_change',
  87. '优惠有效期,单位月' => 'discount_month',
  88. '套餐月租' => 'month_rent',
  89. '通用流量' => 'general_traffic',
  90. '定向流量' => 'directional_traffic',
  91. '长期资费/短期资费' => 'long_short_tariff',
  92. '附带权益' => 'interest',
  93. '原月租' => 'original_month_rent',
  94. '封面图' => 'cover_img',
  95. '注意事项' => 'attention',
  96. '只发货地区' => 'noly_delivery_area',
  97. '亮点' => 'bright',
  98. '返佣类型 1:次月返 2:秒返' => 'rebate_type',
  99. '知识库' => 'knowledge_base',
  100. '是否选号' => 'select_status',
  101. '是否校验' => 'is_valid',
  102. '前置校验编码' => 'valid_req_code',
  103. '套餐标签' => 'tag_ids',
  104. '小店套餐标签' => 'shop_tag_ids',
  105. '定向流量' => 'data_orientation',
  106. '通用流量' => 'data_usual',
  107. '是否允许直播 0:不允许 1:允许' => 'is_live',
  108. '删除时间' => 'deleted_at',
  109. '运营商标识图' => 'ident_image',
  110. '下架时间' => 'delist_time',
  111. '产品类型 0号卡 1宽带' => 'product_type',
  112. '网速' => 'internet_speed',
  113. '供货商id' => 'supplier_id',
  114. '结佣条件' => 'commission_terms',
  115. ];
  116. $getEnValue = $this->getEnValue();
  117. $excel = new SpoutExport($header);
  118. $excel->setData($query->get());
  119. $result = $excel->setEnum($getEnValue)->spoutToExcel('excel_out');
  120. return $result ? success($result['url']) : error();
  121. }
  122. // 导入
  123. public function import(Request $request)
  124. {
  125. $header = [
  126. '名称' => 'name',
  127. '简介' => 'mini_text',
  128. '主图' => 'image',
  129. '详情' => 'details',
  130. '运营商' => 'operator_id',
  131. '佣金政策' => 'yjzc',
  132. '套餐类型' => 'type_id',
  133. '月租' => 'monthly_rent',
  134. '权重' => 'weight',
  135. '上游套餐编码' => 'upstream_code',
  136. '生产方式' => 'production_type_id',
  137. '是否上架' => 'is_upload',
  138. '是否需要身份证号' => 'need_idcard',
  139. '是否需要上传身份证照片' => 'is_upload_idcard',
  140. '状态' => 'status',
  141. '外部产品编码' => 'out_package_id',
  142. '归属地' => 'belonging_place',
  143. '流量额度' => 'data_quota',
  144. '通话时长' => 'call_duration',
  145. '是否可选号' => 'is_choose_number',
  146. '首充金额' => 'first_recharge_amount',
  147. '直接提交局方,0表示不提,1表示提' => 'direct_send_status',
  148. '线上或本地号库切换,默认为0:无号库,1:本地号库,2:线上号库' => 'uporlocal',
  149. '颜色' => 'color',
  150. '最小年龄' => 'min_age',
  151. '最大年龄' => 'max_age',
  152. '亲情号' => 'family_number',
  153. '靓号' => 'beautiful_number',
  154. '可否自选归属地' => 'ownership_change',
  155. '优惠有效期,单位月' => 'discount_month',
  156. '套餐月租' => 'month_rent',
  157. '通用流量' => 'general_traffic',
  158. '定向流量' => 'directional_traffic',
  159. '长期资费/短期资费' => 'long_short_tariff',
  160. '附带权益' => 'interest',
  161. '原月租' => 'original_month_rent',
  162. '封面图' => 'cover_img',
  163. '注意事项' => 'attention',
  164. '只发货地区' => 'noly_delivery_area',
  165. '亮点' => 'bright',
  166. '返佣类型 1:次月返 2:秒返' => 'rebate_type',
  167. '知识库' => 'knowledge_base',
  168. '是否选号' => 'select_status',
  169. '是否校验' => 'is_valid',
  170. '前置校验编码' => 'valid_req_code',
  171. '套餐标签' => 'tag_ids',
  172. '小店套餐标签' => 'shop_tag_ids',
  173. '定向流量' => 'data_orientation',
  174. '通用流量' => 'data_usual',
  175. '是否允许直播 0:不允许 1:允许' => 'is_live',
  176. '删除时间' => 'deleted_at',
  177. '运营商标识图' => 'ident_image',
  178. '下架时间' => 'delist_time',
  179. '产品类型 0号卡 1宽带' => 'product_type',
  180. '网速' => 'internet_speed',
  181. '供货商id' => 'supplier_id',
  182. '结佣条件' => 'commission_terms',
  183. ];
  184. $getEnValue = $this->getEnValue();
  185. $SpoutImport = new SpoutImport($header);
  186. $dataList = $SpoutImport->setRequest($request)->getExcelData();
  187. return $dataList;
  188. }
  189. // 获取枚举值
  190. public function getEnValue()
  191. {
  192. $data = [
  193. 'open_status' => [
  194. 0 => "待开卡",
  195. 1 => "开卡中",
  196. ]
  197. ];
  198. return $data;
  199. }
  200. // 查询一条
  201. public function find(Request $request)
  202. {
  203. $request->validate([
  204. 'id' => 'required|integer',
  205. ]);
  206. $result = Packages::where(['id' => $request->id])->select(Packages::$selectFields)->first();
  207. return success($result);
  208. }
  209. // 添加
  210. public function insert(Request $request)
  211. {
  212. $request->validate([
  213. 'name' => 'required',
  214. 'cover_img' => 'required',
  215. 'out_package_id' => 'required',
  216. 'yj' => 'required',
  217. ]);
  218. sys_log($request, '添加套餐', '号卡套餐');
  219. $result = Packages::create($request->all());
  220. if ($result) {
  221. // 生成套餐秘钥
  222. Packages::where('id',$result->id)->update(['package_key'=>Hashids::encode($result->id)]);
  223. // 重置套餐提成
  224. $package_member_level_royalty = json_decode($request->input('package_member_level_royalty','{}'), true);
  225. PackageMemberLevelRoyalty::resetRoyalty($result->id, $package_member_level_royalty);
  226. return success();
  227. } else {
  228. return error();
  229. }
  230. }
  231. // 修改
  232. public function update(Request $request)
  233. {
  234. $request->validate([
  235. 'id' => 'required|integer',
  236. ]);
  237. sys_log($request, '修改套餐', '号卡套餐');
  238. $result = Packages::where(['id' => $request->id])->update($request->except(['package_member_level_royalty']));
  239. if ($result) {
  240. // 重置套餐提成
  241. $package_member_level_royalty = json_decode($request->input('package_member_level_royalty','{}'), true);
  242. PackageMemberLevelRoyalty::resetRoyalty($request->id, $package_member_level_royalty);
  243. return success();
  244. } else {
  245. return error();
  246. }
  247. }
  248. // 删除
  249. public function delete(Request $request)
  250. {
  251. $request->validate([
  252. 'ids' => 'required',
  253. ]);
  254. sys_log($request, '删除套餐', '号卡套餐');
  255. $id_str = $request->ids;
  256. $arr = explode(",", $id_str);
  257. // 查询是否存在子数据
  258. // $count = Shop::whereIn('tm_id',$arr)->count();
  259. // if($count > 0){
  260. // return ['code'=>0,'msg'=>"存在子数据,禁止删除"];
  261. // }
  262. $result = Packages::whereIn('id', $arr)->delete();
  263. if ($result) {
  264. PackageMemberLevelRoyalty::whereIn('package_id', $arr)->delete();
  265. return success();
  266. } else {
  267. return error();
  268. }
  269. }
  270. }