Memberrecharge.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\memberrecharge\shop\controller;
  11. use addon\memberrecharge\model\MemberRechargeCard as MemberRechargeCardModel;
  12. use addon\memberrecharge\model\Memberrecharge as MemberRechargeModel;
  13. use addon\memberrecharge\model\MemberrechargeOrder as MemberRechargeOrderModel;
  14. use app\shop\controller\BaseShop;
  15. /**
  16. * 会员充值
  17. */
  18. class Memberrecharge extends BaseShop
  19. {
  20. public function __construct()
  21. {
  22. parent::__construct();
  23. $this->replace = [
  24. 'MEMBERRECHARGE_CSS' => __ROOT__ . '/addon/memberrecharge/shop/view/public/css',
  25. 'MEMBERRECHARGE_JS' => __ROOT__ . '/addon/memberrecharge/shop/view/public/js',
  26. 'MEMBERRECHARGE_IMG' => __ROOT__ . '/addon/memberrecharge/shop/view/public/img',
  27. ];
  28. }
  29. //套餐字段
  30. protected $field = 'recharge_id,recharge_name,cover_img,face_value,buy_price,point,growth,coupon_id,sale_num,create_time,status';
  31. //开卡字段
  32. protected $card_field = 'card_id,recharge_id,card_account,cover_img,face_value,point,growth,coupon_id,buy_price,member_img,nickname,order_id,order_no,from_type,use_status,create_time,use_time';
  33. //订单字段
  34. protected $order_field = 'order_id,recharge_name,recharge_id,order_no,out_trade_no,member_id,cover_img,face_value,buy_price,point,growth,coupon_id,price,pay_type,pay_type_name,status,create_time,pay_time,member_img,nickname,order_from_name,order_from';
  35. //优惠券字段
  36. protected $coupon_field = 'coupon_type_id,coupon_name,money,count,lead_count,max_fetch,at_least,end_time,image,validity_type,fixed_term';
  37. /**
  38. * 充值会员套餐列表
  39. * @return array|mixed
  40. */
  41. public function lists()
  42. {
  43. $model = new MemberRechargeModel();
  44. //获取续签信息
  45. if (request()->isAjax()) {
  46. $status = input('status', '');//套餐状态
  47. $condition = [];
  48. if ($status) {
  49. $condition[] = [ 'status', '=', $status ];
  50. }
  51. $condition[] = [ 'site_id', '=', $this->site_id ];
  52. $page = input('page', 1);
  53. $page_size = input('page_size', PAGE_LIST_ROWS);
  54. $list = $model->getMemberRechargePageList($condition, $page, $page_size, 'recharge_id desc', $this->field);
  55. return $list;
  56. } else {
  57. $config = $model->getConfig($this->site_id);
  58. $config = $config[ 'data' ];
  59. $this->assign("config", $config);
  60. return $this->fetch('memberrecharge/lists');
  61. }
  62. }
  63. /**
  64. * 添加充值套餐
  65. * @return array|mixed
  66. */
  67. public function add()
  68. {
  69. if (request()->isAjax()) {
  70. $data = [
  71. 'site_id' => $this->site_id,
  72. 'recharge_name' => input('recharge_name', ''),//套餐名称
  73. 'cover_img' => input('cover_img', ''),//封面
  74. 'face_value' => input('face_value', ''),//面值
  75. 'buy_price' => input('buy_price', ''),//价格
  76. 'point' => input('point', ''),//赠送积分
  77. 'growth' => input('growth', ''),//赠送成长值
  78. 'coupon_id' => input('coupon_id', '')//优惠券id
  79. ];
  80. $model = new MemberRechargeModel();
  81. return $model->addMemberRecharge($data);
  82. } else {
  83. return $this->fetch('memberrecharge/add');
  84. }
  85. }
  86. /**
  87. * 编辑充值套餐
  88. * @return array|mixed
  89. */
  90. public function edit()
  91. {
  92. $rechargeModel = new MemberRechargeModel();
  93. $recharge_id = input('recharge_id', '');
  94. if (request()->isAjax()) {
  95. $data = [
  96. 'recharge_name' => input('recharge_name', ''),//套餐名称
  97. 'cover_img' => input('cover_img', ''),//封面
  98. 'face_value' => input('face_value', ''),//面值
  99. 'buy_price' => input('buy_price', ''),//价格
  100. 'point' => input('point', ''),//赠送积分
  101. 'growth' => input('growth', ''),//赠送成长值
  102. 'coupon_id' => input('coupon_id', '')//优惠券id
  103. ];
  104. return $rechargeModel->editMemberRecharge(
  105. [
  106. [ 'recharge_id', '=', $recharge_id ],
  107. [ 'site_id', '=', $this->site_id ]
  108. ], $data);
  109. } else {
  110. //获取套餐详情
  111. $recharge = $rechargeModel->getMemberRechargeInfo(
  112. [
  113. [ 'recharge_id', '=', $recharge_id ],
  114. [ 'site_id', '=', $this->site_id ]
  115. ],
  116. $this->field
  117. );
  118. if (empty($recharge[ 'data' ])) $this->error('未获取到套餐数据', addon_url('memberrecharge://shop/memberrecharge/lists'));
  119. $this->assign('recharge', $recharge);
  120. return $this->fetch('memberrecharge/edit');
  121. }
  122. }
  123. /**
  124. * 充值套餐详情
  125. * @return mixed
  126. */
  127. public function detail()
  128. {
  129. $recharge_model = new MemberRechargeModel();
  130. $recharge_id = input('recharge_id', '');
  131. //获取套餐详情
  132. $info = $recharge_model->getMemberRechargeInfo(
  133. [
  134. [ 'recharge_id', '=', $recharge_id ],
  135. [ 'site_id', '=', $this->site_id ]
  136. ],
  137. $this->field
  138. )[ 'data' ] ?? [];
  139. if (empty($info)) $this->error('未获取到套餐数据', addon_url('memberrecharge://shop/memberrecharge/lists'));
  140. $this->assign('info', $info);
  141. return $this->fetch('memberrecharge/detail');
  142. }
  143. /**
  144. * 停用充值套餐
  145. * @return array
  146. */
  147. public function invalid()
  148. {
  149. $model = new MemberRechargeModel();
  150. $recharge_id = input('recharge_id', '');
  151. $data = [ 'status' => 2 ];
  152. $condition = [ [ 'recharge_id', '=', $recharge_id ] ];
  153. $res = $model->editMemberRecharge($condition, $data);
  154. return $res;
  155. }
  156. /**
  157. * 开启充值套餐
  158. * @return array
  159. */
  160. public function open()
  161. {
  162. $model = new MemberRechargeModel();
  163. $recharge_id = input('recharge_id', '');
  164. $data = [ 'status' => 1 ];
  165. $condition = [ [ 'recharge_id', '=', $recharge_id ] ];
  166. $res = $model->editMemberRecharge($condition, $data);
  167. return $res;
  168. }
  169. /**
  170. * 删除充值套餐
  171. * @return mixed
  172. */
  173. public function delete()
  174. {
  175. $model = new MemberRechargeModel();
  176. $recharge_id = input('recharge_id', '');
  177. return $model->deleteMemberRecharge([ [ 'recharge_id', '=', $recharge_id ] ]);
  178. }
  179. /**
  180. * 开卡列表
  181. * @return array|mixed
  182. */
  183. public function cardLists()
  184. {
  185. $recharge_id = input('recharge_id', '');
  186. $page_size = input('page_size', PAGE_LIST_ROWS);
  187. $model = new MemberRechargeCardModel();
  188. $condition[] = [ 'site_id', '=', $this->site_id ];
  189. $condition[] = [ 'recharge_id', '=', $recharge_id ];
  190. //获取续签信息
  191. if (request()->isAjax()) {
  192. $status = input('use_status', '');//使用状态
  193. if ($status) {
  194. $condition[] = [ 'use_status', '=', $status ];
  195. }
  196. $page = input('page', 1);
  197. $list = $model->getMemberRechargeCardPageList($condition, $page, $page_size, 'card_id desc', $this->card_field);
  198. return $list;
  199. } else {
  200. $page_size = input('page_size', PAGE_LIST_ROWS);
  201. $list = $model->getMemberRechargeCardPageList($condition, 1, $page_size, 'card_id desc', $this->card_field);
  202. $this->assign('list', $list);
  203. $this->assign('recharge_id', $recharge_id);
  204. return $this->fetch('memberrecharge/card_lists');
  205. }
  206. }
  207. /**
  208. * 开卡详情
  209. * @return mixed
  210. */
  211. public function cardDetail()
  212. {
  213. $model = new MemberRechargeCardModel();
  214. $card_id = input('card_id', '');
  215. //获取详情
  216. $info = $model->getMemberRechargeCardInfo(
  217. [ [ 'card_id', '=', $card_id ] ],
  218. $this->card_field
  219. )[ 'data' ] ?? [];
  220. $this->assign('info', $info);
  221. return $this->fetch('memberrecharge/card_detail');
  222. }
  223. /**
  224. * 订单列表
  225. * @return array|mixed
  226. */
  227. public function orderLists()
  228. {
  229. $condition[] = [ 'site_id', '=', $this->site_id ];
  230. $recharge_id = input('recharge_id', 0);
  231. if ($recharge_id > 0) {
  232. $condition[] = [ 'recharge_id', '=', $recharge_id ];
  233. }
  234. $model = new MemberRechargeOrderModel();
  235. //获取续签信息
  236. if (request()->isAjax()) {
  237. $page = input('page', 1);
  238. $page_size = input('page_size', PAGE_LIST_ROWS);
  239. $nickname = input('nickname', '');
  240. $start_time = input('start_time', '');
  241. $end_time = input('end_time', '');
  242. $order_no = input('order_no', '');
  243. $store_id = input('store_id', '');
  244. $condition[] = [ 'status', '=', 2 ];
  245. if ($nickname) {
  246. $condition[] = [ 'nickname', 'like', '%' . $nickname . '%' ];
  247. }
  248. if ($order_no) {
  249. $condition[] = [ 'order_no', '=', $order_no ];
  250. }
  251. if($store_id){
  252. // $store_id = model('store')->getValue([ [ 'store_name', '=',$store_name] ], 'store_id');
  253. //// $member_id_arr = model('member')->getList([ 'store_id', '=',$store_id]);
  254. $member_info = model('member')->getColumn([ [ 'store_id', '=', $store_id] ],'member_id');
  255. $condition[] = [ 'member_id', 'in',$member_info ];
  256. }
  257. //支付时间
  258. if (!empty($start_time) && empty($end_time)) {
  259. $condition[] = [ "pay_time", ">=", date_to_time($start_time) ];
  260. } elseif (empty($start_time) && !empty($end_time)) {
  261. $condition[] = [ "pay_time", "<=", date_to_time($end_time) ];
  262. } elseif (!empty($start_time) && !empty($end_time)) {
  263. $condition[] = [ 'pay_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
  264. }
  265. $list = $model->getMemberRechargeOrderPageList($condition, $page, $page_size, 'order_id desc', $this->order_field);
  266. return $list;
  267. } else {
  268. $this->assign('recharge_id', $recharge_id);
  269. $order_num = $model->getOrderCount([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 2 ] ], 'order_id')[ 'data' ];
  270. $this->assign('order_num', $order_num);
  271. $order_money = $model->getOrderSum([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 2 ] ], 'price')[ 'data' ];
  272. $this->assign('order_money', $order_money);
  273. $date_time = date('Y-m-d');
  274. $end_time= date("Y-m-d 23:59:59", strtotime("$date_time Sunday"));//结束时间(2024-09-25 23:59:59)
  275. $start_time = date("Y-m-d 00:00:00", strtotime("$end_time - 6 days"));//开始时间(2025-09-19 00:00:00)
  276. $week_order_money = $model->getOrderSum([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 2 ],['pay_time','between',[strtotime($start_time),strtotime($end_time)]] ], 'price')[ 'data' ];
  277. $this->assign('week_order_money', $week_order_money);
  278. $month = date('Y-m',time());
  279. $month_start_day = $month.'-01 00:00:00';
  280. $month_order_money= $model->getOrderSum([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 2 ],['pay_time','>=',strtotime($month_start_day)] ], 'price')[ 'data' ];
  281. $this->assign('month_order_money', $month_order_money);
  282. $store_list = $store_id = model('store')->getList([[ 'status', '=', 1 ]],'store_id,store_name');
  283. $this->assign('store_list', $store_list);
  284. return $this->fetch('memberrecharge/order_lists', [], $this->replace);
  285. }
  286. }
  287. /**
  288. * 订单详情
  289. * @return mixed
  290. */
  291. public function orderDetail()
  292. {
  293. $model = new MemberRechargeOrderModel();
  294. $order_id = input('order_id', '');
  295. //获取详情
  296. $info = $model->getMemberRechargeOrderInfo(
  297. [
  298. [ 'order_id', '=', $order_id ],
  299. [ 'site_id', '=', $this->site_id ]
  300. ],
  301. $this->order_field
  302. )[ 'data' ] ?? [];
  303. if (empty($info)) $this->error('未获取到订单数据', addon_url('memberrecharge://shop/memberrecharge/order_lists'));
  304. $this->assign('info', $info);
  305. return $this->fetch('memberrecharge/order_detail');
  306. }
  307. /**
  308. * 是否开启充值
  309. * @return mixed
  310. */
  311. public function setConfig()
  312. {
  313. $model = new MemberRechargeModel();
  314. $is_use = input('is_use', 0);
  315. $data = [];
  316. return $model->setConfig($data, $is_use, $this->site_id);
  317. }
  318. public function exportRecharge()
  319. {
  320. $recharge_id = input("recharge_id", "");//订单状态
  321. $condition[] = [ "recharge_id", "=", $recharge_id ];
  322. $model = new MemberRechargeCardModel();
  323. $list = $model->getMemberRechargeCardPageList($condition, 1, 0, 'card_id desc', "*");
  324. if (empty($list[ 'data' ][ 'list' ])) {
  325. return $this->error("未查询到数据");
  326. }
  327. // 实例化excel
  328. $phpExcel = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
  329. $phpExcel->getProperties()->setTitle("充值记录");
  330. $phpExcel->getProperties()->setSubject("充值记录");
  331. // 对单元格设置居中效果
  332. $phpExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  333. $phpExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  334. $phpExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  335. $phpExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  336. $phpExcel->getActiveSheet()->getStyle('E')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  337. $phpExcel->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  338. $phpExcel->getActiveSheet()->getStyle('G')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  339. $phpExcel->getActiveSheet()->getStyle('H')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  340. $phpExcel->getActiveSheet()->getStyle('I')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  341. $phpExcel->getActiveSheet()->getStyle('J')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  342. $phpExcel->getActiveSheet()->getStyle('K')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  343. $phpExcel->getActiveSheet()->getStyle('L')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  344. //单独添加列名称
  345. $phpExcel->setActiveSheetIndex(0);
  346. $phpExcel->getActiveSheet()->setCellValue('A1', '店铺名称');//可以指定位置
  347. $phpExcel->getActiveSheet()->setCellValue('B1', '充值卡号');
  348. $phpExcel->getActiveSheet()->setCellValue('C1', '套餐名称');
  349. $phpExcel->getActiveSheet()->setCellValue('D1', '面值');
  350. $phpExcel->getActiveSheet()->setCellValue('E1', '积分');
  351. $phpExcel->getActiveSheet()->setCellValue('F1', '成长值');
  352. $phpExcel->getActiveSheet()->setCellValue('G1', '购买金额');
  353. $phpExcel->getActiveSheet()->setCellValue('H1', '会员昵称');
  354. $phpExcel->getActiveSheet()->setCellValue('I1', '订单编号');
  355. $phpExcel->getActiveSheet()->setCellValue('J1', '使用状态');
  356. $phpExcel->getActiveSheet()->setCellValue('K1', '创建时间');
  357. $phpExcel->getActiveSheet()->setCellValue('L1', '使用时间');
  358. //循环添加数据(根据自己的逻辑)
  359. foreach ($list[ 'data' ][ 'list' ] as $k => $v) {
  360. $i = $k + 2;
  361. if ($v[ 'use_status' ] == 1) {
  362. $status_name = "未使用";
  363. } else {
  364. $status_name = "已使用";
  365. }
  366. $phpExcel->getActiveSheet()->setCellValue('A' . $i, $v[ 'site_name' ]);
  367. $phpExcel->getActiveSheet()->setCellValue('B' . $i, $v[ 'card_account' ]);
  368. $phpExcel->getActiveSheet()->setCellValue('C' . $i, $v[ 'recharge_name' ]);
  369. $phpExcel->getActiveSheet()->setCellValue('D' . $i, $v[ 'face_value' ]);
  370. $phpExcel->getActiveSheet()->setCellValue('E' . $i, $v[ 'point' ]);
  371. $phpExcel->getActiveSheet()->setCellValue('F' . $i, $v[ 'growth' ]);
  372. $phpExcel->getActiveSheet()->setCellValue('G' . $i, $v[ 'buy_price' ]);
  373. $phpExcel->getActiveSheet()->setCellValue('H' . $i, $v[ 'nickname' ]);
  374. $phpExcel->getActiveSheet()->setCellValue('I' . $i, ' ' . (string) $v[ 'order_no' ]);
  375. $phpExcel->getActiveSheet()->setCellValue('J' . $i, $status_name);
  376. $phpExcel->getActiveSheet()->setCellValue('K' . $i, date('Y-m-d', $v[ 'create_time' ]));
  377. $phpExcel->getActiveSheet()->setCellValue('L' . $i, date('Y-m-d', $v[ 'use_time' ]));
  378. }
  379. // 重命名工作sheet
  380. $phpExcel->getActiveSheet()->setTitle('充值记录');
  381. // 设置第一个sheet为工作的sheet
  382. $phpExcel->setActiveSheetIndex(0);
  383. // 保存Excel 2007格式文件,保存路径为当前路径,名字为export.xlsx
  384. $objWriter = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($phpExcel, 'Xlsx');
  385. $file = date('Y年m月d日-充值记录表', time()) . '.xlsx';
  386. $objWriter->save($file);
  387. header("Content-type:application/octet-stream");
  388. $filename = basename($file);
  389. header("Content-Disposition:attachment;filename = " . $filename);
  390. header("Accept-ranges:bytes");
  391. header("Accept-length:" . filesize($file));
  392. readfile($file);
  393. unlink($file);
  394. exit;
  395. }
  396. }