BookController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. <?php
  2. namespace App\Http\Controllers\Cp\Book;
  3. use App\Http\Controllers\Cp\BaseController;
  4. use App\Modules\CpSub\Services\CpSubService;
  5. use App\Modules\CpUser\Services\CpUserService;
  6. use Illuminate\Http\Request;
  7. use App\Modules\Book\Services\CpExceptBookService;
  8. use Storage;
  9. class BookController extends BaseController
  10. {
  11. /**
  12. * @apiVersion 1.0.0
  13. * @apiDescription 书籍列表
  14. * @api {POST} book/index 书籍列表
  15. * @apiGroup Book
  16. * @apiName index
  17. * @apiParam {String} book_name 书名.
  18. * @apiParam {String} book_id 书籍id.
  19. * @apiParam {String} start_time 开始时间.
  20. * @apiParam {String} end_time 结束时间.
  21. * @apiSuccessExample {json} Success-Response:
  22. *
  23. * {
  24. * "code": 0,
  25. * "msg": "",
  26. * "data": {}
  27. * }
  28. */
  29. public function index(Request $request)
  30. {
  31. $params = array();
  32. $params['cp_user_id'] = session('cp_manage_auth');
  33. if ($params['cp_user_id'] == 1) {
  34. $params['cp_user_id'] = $request->get('cp_user_id') ? $request->get('cp_user_id') : $params['cp_user_id'];
  35. }
  36. $params['book_name'] = $request->has('book_name') ? $request->get('book_name') : '';
  37. $params['book_id'] = $request->has('book_id') ? $request->get('book_id') : '';
  38. $params['start_time'] = $request->has('start_time') ? $request->get('start_time') : date('Y-m', strtotime('- 3 month'));
  39. $params['end_time'] = $request->has('end_time') ? $request->get('end_time') : date('Y-m');
  40. \Log::info($params);
  41. $all_bid = CpExceptBookService::getCpBidList($params['cp_user_id']);
  42. if ($all_bid) {
  43. $params['all_bid'] = $all_bid;
  44. } else {
  45. $params['all_bid'] = [];
  46. }
  47. if ($params['cp_user_id'] == 1) {
  48. $params['cp_user_id'] = '';
  49. }
  50. $records = CpSubService::getCpSubs($params);
  51. $cps = CpExceptBookService::getAllcp();
  52. $cp_user = CpUserService::getCpUserById($params['cp_user_id']);
  53. \Log::info('$cp_user');
  54. \Log::info($cp_user);
  55. $params['cp'] = isset($cp_user['username']) ? $cp_user['username'] : '';
  56. \Log::info('params');
  57. \Log::info($params);
  58. $is_show_total_amount = isset($cp_user->is_show_total_amount) ? $cp_user->is_show_total_amount : '0';
  59. return view('cp.web.book.index', compact('records', 'params', 'is_show_total_amount', 'cps'));
  60. }
  61. public function subscribe_detail()
  62. {
  63. }
  64. /**
  65. * cp书籍导出
  66. * @param Request $request
  67. */
  68. public function record_export(Request $request)
  69. {
  70. set_time_limit(0);
  71. $params = array();
  72. // \Log::info('cp_manage_auth');
  73. // \Log::info(session('cp_manage_auth'));
  74. $params['cp_user_id'] = session('cp_manage_auth');
  75. $params['book_name'] = $request->has('book_name') ? $request->get('book_name') : '';
  76. $params['book_id'] = $request->has('book_id') ? $request->get('book_id') : '';
  77. $params['start_time'] = $request->has('start_time') ? $request->get('start_time') : date('Y-m', strtotime('- 3 month'));
  78. $params['end_time'] = $request->has('end_time') ? $request->get('end_time') : date('Y-m');
  79. \Log::info($params);
  80. $all_bid = CpExceptBookService::getCpBidList($params['cp_user_id']);
  81. if ($all_bid) {
  82. $params['all_bid'] = $all_bid;
  83. } else {
  84. $params['all_bid'] = [];
  85. }
  86. if ($params['cp_user_id'] == 1) {
  87. \Log::info('isis_1:' . $params['cp_user_id']);
  88. $params['cp_user_id'] = '';
  89. }
  90. \Log::info($params);
  91. $records = CpSubService::getCpSubs($params, true);
  92. //\Log::info('book_export_records');
  93. //\Log::info($records);
  94. // $cp_user = CpUserService::getCpUserById($params['cp_user_id']);
  95. // \Log::info('$cp_user');\Log::info($cp_user);
  96. // $is_show_total_amount = isset($cp_user->is_show_total_amount)?$cp_user->is_show_total_amount:'0';
  97. header("Content-type:application/vnd.ms-excel");
  98. header("Content-Disposition:attachment;filename=" . "cp书籍列表" . date("YmdHis") . ".csv");
  99. if (session('cp_manage_auth') == 1) {
  100. echo iconv("UTF-8", "GBK", "\"月份\",\"统计时间(截止零点)\",\"渠道\",\"书名\",\"书籍ID\",\"本月订阅量(书币)\",\"可分成金额\",\"最终分成金额\" \r\n");
  101. } else {
  102. echo iconv("UTF-8", "GBK", "\"月份\",\"统计时间(截止零点)\",\"书名\",\"书籍ID\",\"本月订阅量(书币)\",\"可分成金额\",\"最终分成金额\" \r\n");
  103. }
  104. /*$filename = 'cptotal' . date('YmdHis') . '.csv';
  105. if (session('cp_manage_auth') == 1){
  106. Storage::append($filename, mb_convert_encoding("月份,统计时间(截止零点),渠道,书名,书籍ID,本月订阅量(书币),可分成金额,最终分成金额", 'gbk'));
  107. }else{
  108. Storage::append($filename, mb_convert_encoding("月份,统计时间(截止零点),书名,书籍ID,本月订阅量(书币),可分成金额,最终分成金额", 'gbk'));
  109. }
  110. $str = '';
  111. $i = 1;
  112. foreach ($records as $record) {
  113. $month = isset($record->month) ? $record->month : "";
  114. $calculate_date = isset($record->calculate_date) ? $record->calculate_date : "";
  115. $cp_source = '';
  116. if (session('cp_manage_auth') == 1) {
  117. $cp_source = isset($record->cp_source) ? $record->cp_source : "";
  118. }
  119. $book_name = isset($record->book_name) ? $record->book_name : "";
  120. $bid = isset($record->bid) ? $record->bid : "";
  121. $current_month_book_num = isset($record->current_month_book_num) ? $record->current_month_book_num : "";
  122. $total_amount = isset($record->total_amount) ? $record->total_amount : "";
  123. $available_amount = isset($record->available_amount) ? $record->available_amount : "";
  124. $last_amount = isset($record->last_amount) ? $record->last_amount : "";
  125. if(session('cp_manage_auth') == 1){
  126. $str .= "{$month},{$calculate_date},{$cp_source},{$book_name},{$bid},{$total_amount},{$available_amount},{$last_amount}\r\n";
  127. }else{
  128. $str .= "{$month},{$calculate_date},{$book_name},{$bid},{$total_amount},{$available_amount},{$last_amount}\r\n";
  129. }
  130. if(($i++)%100 == 0){
  131. Storage::append($filename, mb_convert_encoding($str, 'gbk'));
  132. $str = '';
  133. }
  134. }
  135. Storage::append($filename, mb_convert_encoding($str, 'gbk'));
  136. return response()->download(storage_path('app/' . $filename))->deleteFileAfterSend(true);*/
  137. if ($records) {
  138. foreach ($records as $record) {
  139. echo("=\"" . (iconv('utf-8', 'gbk', isset($record->month) ? $record->month : "")) . "\",");
  140. echo("=\"" . (iconv('utf-8', 'gbk', isset($record->calculate_date) ? $record->calculate_date : "")) . "\",");
  141. if (session('cp_manage_auth') == 1) {
  142. echo("\"" . (iconv('utf-8', 'gbk', isset($record->cp_source) ? $record->cp_source : "")) . "\",");
  143. }
  144. echo("\"" . (iconv('utf-8', 'gbk//IGNORE', isset($record->book_name) ? $record->book_name : "")) . "\",");
  145. echo("\"" . (isset($record->bid) ? $record->bid : "") . "\",");
  146. // 实际书币不展示,展示折算过的值
  147. //echo("\"" . (isset($record->current_month_book_num) ? $record->current_month_book_num : "") . "\",");
  148. echo("\"" . (iconv('utf-8', 'gbk', isset($record->total_amount) ? $record->total_amount : "")) . "\",");
  149. echo("\"" . (isset($record->available_amount) ? $record->available_amount : "") . "\",");
  150. echo("\"" . (isset($record->last_amount) ? $record->last_amount : "") . "\"\r\n");
  151. }
  152. }
  153. exit();
  154. }
  155. public function exceptBook(Request $request)
  156. {
  157. $cp = $request->get('cp');
  158. $where = [];
  159. if ($cp)
  160. $where['username'] = $cp;
  161. $info = CpExceptBookService::getList($where);
  162. return view('cp.web.book.except', ['data' => $info, 'param' => $where]);
  163. }
  164. public function getBooks(Request $request)
  165. {
  166. $cp_user = $request->input('cp_user');
  167. $name = $request->input('name');
  168. $res = CpExceptBookService::getBookByCp($cp_user, $name);
  169. $str = '';
  170. if ($res) {
  171. $format = '<button type="button" class="btn btn-default btn-block js-list" data-id="%s">%s</button>';
  172. foreach ($res as $v) {
  173. $str .= sprintf($format, $v->id, $v->name);
  174. }
  175. }
  176. return response()->success($str);
  177. }
  178. public function exceptAddView(Request $request)
  179. {
  180. if (session('cp_manage_auth') != 1) {
  181. return redirect('book/index');
  182. }
  183. $cps = CpExceptBookService::getAllcp();
  184. return view('cp.web.book.exceptadd', ['cps' => $cps]);
  185. }
  186. public function exceptAddPost(Request $request)
  187. {
  188. if (session('cp_manage_auth') != 1) {
  189. return redirect('book/index');
  190. }
  191. $data = $request->all();
  192. if (empty($data['cp_user_id']) || empty($data['book_name']) || empty($data['bid'])) {
  193. return back()->withErrors(['message' => '缺少参数']);
  194. }
  195. IF (CpExceptBookService::isHadExcept($data['cp_user_id'], $data['bid'])) {
  196. return back()->withErrors(['message' => '已经添加过了']);
  197. }
  198. CpExceptBookService::create($data);
  199. return redirect('book/exceptadd')->with(['message' => '添加成功', 'cp_user_id' => $data['cp_user_id']]);
  200. }
  201. public function deleteExcept(Request $request)
  202. {
  203. if (session('cp_manage_auth') != 1) {
  204. return redirect('book/index');
  205. }
  206. $id = $request->input('id');
  207. if ($id) {
  208. CpExceptBookService::deleteExcept($id);
  209. return redirect('book/except')->with(['message' => '删除成功']);
  210. }
  211. return back()->withErrors(['message' => '缺少参数']);
  212. }
  213. public function bookCpList(Request $request)
  214. {
  215. if (session('cp_manage_auth') != 1) {
  216. return redirect('book/index');
  217. }
  218. $old_name = $request->get('old_name');
  219. $new_name = $request->get('new_name');
  220. $result = CpExceptBookService::getBookCpList($old_name, $new_name);
  221. $on_shelf_status = [
  222. ['未上架', 'bg-danger'],
  223. ['内部上架', 'bg-success'],
  224. ['外部上架', 'bg-primary'],
  225. ['屏蔽', 'bg-warning'],
  226. ['版权到期下架', 'bg-info']
  227. ];
  228. return view('cp.web.book.bookCpList', ['data' => $result, 'param' => compact('old_name', 'new_name'), 'on_shelf_status' => $on_shelf_status]);
  229. }
  230. public function editCp(Request $request)
  231. {
  232. if (session('cp_manage_auth') != 1) {
  233. return response()->json(['code' => 0, 'msg' => '']);
  234. }
  235. $param = $request->except('_url');
  236. $res = checkParam($param, ['id', 'cpid']);
  237. if ($res) {
  238. return response()->json(['code' => 0, 'msg' => $res . '不能为空']);
  239. }
  240. $cp_info = CpUserService::getCpUserById($param['cpid']);
  241. $param['cpname'] = $cp_info->username;
  242. CpExceptBookService::editBookCp($param['id'], $param['cpid'], $param['cpname']);
  243. return response()->json(['code' => 1, 'msg' => 'ok']);
  244. }
  245. public function cpDataStats(Request $request){
  246. if (session('cp_manage_auth') != 1) {
  247. return redirect('book/index');
  248. }
  249. $cps = CpExceptBookService::getAllcp();
  250. $param = $request->except('_url');
  251. $where = [];
  252. $whereIn = [];
  253. if(isset($param['bid']) && !empty($param['bid'])) {
  254. $whereIn = explode(',',$param['bid']);
  255. }
  256. if(isset($param['book_name']) && !empty($param['book_name'])){
  257. $where[] = ['book_configs.book_name','like','%'.trim($param['book_name']).'%'];
  258. }
  259. if(isset($param['cp_source']) && !empty($param['cp_source'])){
  260. $where[] = ['book_configs.cp_source','=',$param['cp_source']];
  261. }
  262. if(isset($param['start_time']) && !empty($param['start_time'])){
  263. $where[] = ['book_order_statistical.day','>=',$param['start_time']];
  264. }
  265. if(isset($param['end_time']) && !empty($param['end_time'])){
  266. $where[] = ['book_order_statistical.day','<=',$param['end_time']];
  267. }
  268. if(isset($param['groupby']) && !empty($param['groupby'])){
  269. \Log::info($param['groupby']);
  270. }
  271. $exporparam = $param;
  272. $exporparam['export'] = 1;
  273. if(isset($param['export']) && !empty($param['export'])){
  274. $result = CpExceptBookService::cpDataStats($where,$whereIn,[],true);
  275. $filename = 'cptotal'.date('YmdHis').'.csv';
  276. Storage::append($filename,mb_convert_encoding("图书bid,书名,所属cp,日期,书币,月份,年份",'gbk'));
  277. $str = '';
  278. foreach ($result as $val){
  279. $str .= "{$val->bid},{$val->book_name},{$val->cp_source},{$val->day},{$val->charge_balance},{$val->month},{$val->year}\r\n";
  280. }
  281. Storage::append($filename,mb_convert_encoding($str,'gbk'));
  282. return response()->download(storage_path('app/'.$filename))->deleteFileAfterSend(true);
  283. }else{
  284. $result = CpExceptBookService::cpDataStats($where,$whereIn,[]);
  285. }
  286. return view('cp.web.book.cpDataStats',['cps'=>$cps,'param'=>$param,'data'=>$result,'exporparam'=>$exporparam]);
  287. }
  288. }