provider.order.stats.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. <?php defined('InShopNC') or exit('Access Invalid!'); ?>
  2. <style>
  3. .page .fixed-bar .item-title h3 {
  4. margin-top:18px !important;
  5. margin-bottom:10px !important;
  6. font-weight:700 !important;
  7. }
  8. .tab-base li span {
  9. font-size:12px !important;
  10. }
  11. .layui-form-select .layui-input {
  12. height:26px;
  13. }
  14. input::placeholder{
  15. color:#333;
  16. }
  17. .row_q {
  18. display: flex;
  19. }
  20. .row_q ul li {
  21. height: 30px;
  22. line-height: 30px;
  23. }
  24. #merchant_name_form {
  25. display: block;
  26. margin-top: 123px;
  27. }
  28. .moveright {
  29. margin-left: 40px;
  30. }
  31. </style>
  32. <div class="page">
  33. <div class="fixed-bar">
  34. <div class="item-title">
  35. <h3>对账管理</h3>
  36. <ul class="tab-base">
  37. <li><a href="index.php?act=OrderStats&op=index&type=system"><span>平台对账记录</span></a></li>
  38. <li><a href="JavaScript:void(0);" class="current"><span>上游对账记录</span></a></li>
  39. <li><a href="index.php?act=OrderStats&op=index&type=merchant"><span>下游对账记录</span></a></li>
  40. </ul>
  41. </div>
  42. </div>
  43. <div class="fixed-empty"></div>
  44. <form method="get" name="formSearch" id="formSearch" class="layui-form">
  45. <input type="hidden" value="OrderStats" name="act">
  46. <input type="hidden" value="index" name="op">
  47. <input type="hidden" value="provider" name="type">
  48. <table class="tb-type1 noborder search">
  49. <tbody>
  50. <tr>
  51. <th><label for="query_start_time">统计时间</label></th>
  52. <td>
  53. <input class="txt date" type="text" value="<?php echo $_GET['query_start_time']; ?>"
  54. id="startTime" name="query_start_time" autocomplete="off" style="width:120px" />
  55. <label for="query_start_time">~</label>
  56. <input class="txt date" type="text" value="<?php echo $_GET['query_end_time']; ?>"
  57. id="endTime" name="query_end_time" autocomplete="off" style="width:120px" />
  58. </td>
  59. <th><label>统计日期类型</label></th>
  60. <td>
  61. <select name="order_time_type">
  62. <option value="">请选择...</option>
  63. <option value="notify_time" <?php if($_GET['order_time_type'] == 'notify_time'){ echo 'selected';}?>>回调日期</option>
  64. <option value="order_time" <?php if($_GET['order_time_type'] == 'order_time'){ echo 'selected';}?>>下单日期</option>
  65. </select>
  66. </td>
  67. <th><label>通道名称</label></th>
  68. <td>
  69. <select name="cid" class="querySelect" lay-verify="" lay-search>
  70. <option value=""><?php echo $lang['nc_please_choose']; ?></option>
  71. <?php foreach($output['provider_list'] as $provider){?>
  72. <option value="<?php echo $provider['store_id']?>"
  73. <?php if ($_GET['cid'] == $provider['store_id']){ ?>selected<?php } ?>><?php echo $provider['store_name']?>
  74. </option>
  75. <?php }?>
  76. </select>
  77. </td>
  78. <td><a href="javascript:void(0);" id="ncsubmit" class="btn-search "
  79. title="<?php echo $lang['nc_query']; ?>">&nbsp;</a>
  80. <?php if ($output['mch_name'] != '') { ?>
  81. <a href="index.php?act=OrderStats&op=index" class="btns "
  82. title="<?php echo $lang['nc_cancel_search']; ?>"><span><?php echo $lang['nc_cancel_search']; ?></span></a>
  83. <?php } ?></td>
  84. <td>
  85. <a href="javascript:void(0);" id="ncexport" class="btn">
  86. <span>导出</span>
  87. </a>
  88. </td>
  89. </tr>
  90. </tbody>
  91. </table>
  92. </form>
  93. <table class="table tb-type2" id="prompt">
  94. <tbody>
  95. <tr class="space odd">
  96. <th colspan="12"><div class="title">
  97. <h5>总量统计</h5>
  98. <span class="arrow"></span></div></th>
  99. </tr>
  100. <tr>
  101. <td class="row_q">
  102. <ul>
  103. <li>回调日期统计</li>
  104. <li class="lineLi" style="color:#000;">总计成功订单量: <?php echo $output['total_stats']['notify_time']['success_count_total'] ?? 0?></li>
  105. <li class="lineLi" style="color:#000;">总计成功订单金额:<?php echo $output['total_stats']['notify_time']['success_refill_amounts_total'] ?? 0?></li>
  106. <li class="lineLi" style="color:#000;">总计下游扣款金额:<?php echo $output['total_stats']['notify_time']['success_mch_amounts_toatl'] ?? 0?></li>
  107. <li class="lineLi" style="color:#000;">总计上游扣款金额:<?php echo $output['total_stats']['notify_time']['success_channel_amounts_total'] ?? 0?></li>
  108. </ul>
  109. <ul class="moveright">
  110. <li>下单日期统计</li>
  111. <li class="lineLi" style="color:#000;">总计成功订单量: <?php echo $output['total_stats']['order_time']['success_count_total'] ?? 0?></li>
  112. <li class="lineLi" style="color:#000;">总计成功订单金额:<?php echo $output['total_stats']['order_time']['success_refill_amounts_total'] ?? 0?></li>
  113. <li class="lineLi" style="color:#000;">总计下游扣款金额:<?php echo $output['total_stats']['order_time']['success_mch_amounts_toatl'] ?? 0?></li>
  114. <li class="lineLi" style="color:#000;">总计上游扣款金额:<?php echo $output['total_stats']['order_time']['success_channel_amounts_total'] ?? 0?></li>
  115. </ul>
  116. </td>
  117. </tr>
  118. </tbody>
  119. </table>
  120. <form method="post" id="merchant_name_form">
  121. <input type="hidden" name="form_submit" value="ok"/>
  122. <table class="table tb-type2">
  123. <thead>
  124. <tr class="thead">
  125. <th>统计日期</th>
  126. <th>主体名称</th>
  127. <th>主体ID</th>
  128. <th class="align-center">成功订单数</th>
  129. <th class="align-center">成功金额</th>
  130. <th class="align-center">上游金额</th>
  131. <th class="align-center">下游金额</th>
  132. <th class="align-center">利润</th>
  133. <th class="align-center">订单总量</th>
  134. <th class="align-center">失败订单数量</th>
  135. <th class="align-center">成功占比</th>
  136. <th class="align-center">上游成功单量</th>
  137. <th class="align-center">上游成功金额</th>
  138. <th class="align-center">单量误差</th>
  139. <th class="align-center">金额误差</th>
  140. <th class="align-center">备注</th>
  141. <th class="align-center">匹配状态</th>
  142. <th class="align-center">统计日期类型</th>
  143. <th class="align-center"><?php echo $lang['operation']; ?></th>
  144. </tr>
  145. </thead>
  146. <tbody>
  147. <?php if (!empty($output['stats_list']) && is_array($output['stats_list'])) { ?>
  148. <?php foreach ($output['stats_list'] as $k => $v) { ?>
  149. <tr class="trFlex">
  150. <td><?php echo $v['time_text']; ?></td>
  151. <td><?php echo $v['cname']; ?></td>
  152. <td><?php echo $v['cid']; ?></td>
  153. <td class="align-center"><?php echo $v['success_count']; ?></td>
  154. <td class="align-center"><?php echo $v['success_refill_amounts']; ?></td>
  155. <td class="align-center"><?php echo $v['success_channel_amounts']; ?></td>
  156. <td class="align-center"><?php echo $v['success_mch_amounts']; ?></td>
  157. <td class="align-center"><?php echo $v['profit_amounts']; ?></td>
  158. <td class="align-center"><?php echo $v['order_count']; ?></td>
  159. <td class="align-center"><?php echo $v['cancel_count']; ?></td>
  160. <td class="align-center"><?php echo $v['success_ratio']; ?></td>
  161. <td class="align-center"><?php echo $v['corder_success_count']; ?></td>
  162. <td class="align-center"><?php echo $v['corder_success_amounts']; ?></td>
  163. <td class="align-center"><?php echo $v['gap_order_count']; ?></td>
  164. <td class="align-center"><?php echo $v['gap_success_amounts']; ?></td>
  165. <td class="align-center"><?php echo $v['remark']; ?></td>
  166. <td class="align-center">
  167. <?php if($v['check_status'] == 1){?>
  168. <span style="color: #0bb20c">匹配</span>
  169. <?php }elseif ($v['check_status'] == 2) {?>
  170. <span style="color: #f30707">不匹配</span>
  171. <?php }else{?>
  172. <span style="color: #fd9d0e">未编辑</span>
  173. <?php }?>
  174. </td>
  175. <td class="align-center"><?php echo $output['order_time_type_text'][$v['order_time_type']]; ?></td>
  176. <td class="align-center w200">
  177. <a href="index.php?act=merchant&op=OrderStatsReload&stat_id=<?php echo $v['stat_id'];?>">重新统计</a>
  178. |<a href="index.php?act=merchant&op=OrderStatsCheck&stat_id=<?php echo $v['stat_id'] ?>">编辑</a>
  179. </td>
  180. </tr>
  181. <?php } ?>
  182. <?php } else { ?>
  183. <tr class="no_data">
  184. <td colspan="15"><?php echo $lang['nc_no_record']; ?></td>
  185. </tr>
  186. <?php } ?>
  187. </tbody>
  188. <tfoot>
  189. <tr class="tfoot">
  190. <td></td>
  191. <td colspan="16">
  192. <div class="pagination"><?php echo $output['page']; ?></div>
  193. </td>
  194. </tr>
  195. </tfoot>
  196. </table>
  197. </form>
  198. </div>
  199. <script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/js/jquery.edit.js" charset="utf-8"></script>
  200. <script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/laydate/laydate.js"></script>
  201. <script type="text/javascript" src="<?php echo ADMIN_TEMPLATES_URL;?>/layui/layui.js"></script>
  202. <link rel="stylesheet" type="text/css" href="<?php echo ADMIN_TEMPLATES_URL; ?>/layui/css/layui.css"/>
  203. <script>
  204. $(function () {
  205. $('#ncsubmit').click(function () {
  206. $('input[name="op"]').val('index');
  207. $('#formSearch').submit();
  208. });
  209. // 日期选择器
  210. laydate.render({
  211. elem: '#startTime',
  212. type: 'datetime'
  213. });
  214. laydate.render({
  215. elem: '#endTime',
  216. type: 'datetime'
  217. });
  218. // 表格hover时背景
  219. $('.trFlex').each(function () {
  220. $(this).hover(function () {
  221. $(this)[0].style.backgroundColor = '#cbe9f3'
  222. },function() {
  223. $(this)[0].style.backgroundColor = '#fff'
  224. })
  225. })
  226. function JSONToExcelConvertor(JSONData, FileName, ShowLabel, headData) {
  227. //先转化json
  228. var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;
  229. var excel = '<table>';
  230. // 标题
  231. for (const key in headData) {
  232. var head = "<tr>";
  233. var td = "<td colspan='12' style='font-size:16px;'>"+ headData[key] + '</td>';
  234. excel += td + "</tr>";
  235. }
  236. //设置表头
  237. var row = "<tr>";
  238. for (var i = 0, l = ShowLabel.length; i < l; i++) {
  239. row += "<th style='font-size:14px;'>" + ShowLabel[i].value + '</th>';
  240. }
  241. //换行
  242. excel += row + "</tr>";
  243. //设置数据
  244. for (var i = 0; i < arrData.length; i++) {
  245. var row = "<tr>";
  246. let code = i+1
  247. row += "<td>" +code+ "</td>"
  248. row += '<td style=font-size:14px;'+ 'mso-number-format:"\@"'+ '>' + arrData[i].time_text + '</td>';
  249. row += '<td style=font-size:14px;'+ 'mso-number-format:"\@"'+ '>' + arrData[i].cname + '</td>';
  250. row += '<td style=font-size:14px;'+ 'mso-number-format:"\@"'+ '>' + arrData[i].cid + '</td>';
  251. row += '<td style=font-size:14px;'+ 'mso-number-format:"\@"'+ '>' + arrData[i].success_count + '</td>';
  252. row += '<td style=font-size:14px;'+ 'mso-number-format:"\@"'+ '>' + arrData[i].success_refill_amounts + '</td>';
  253. row += '<td style=font-size:14px;'+ 'mso-number-format:"\@"'+ '>' + arrData[i].success_channel_amounts + '</td>';
  254. row += '<td style=font-size:14px;'+ 'mso-number-format:"\@"'+ '>' + arrData[i].success_mch_amounts + '</td>';
  255. row += '<td style=font-size:14px;'+ 'mso-number-format:"\@"'+ '>' + arrData[i].profit_amounts + '</td>';
  256. row += '<td style=font-size:14px;'+ 'mso-number-format:"\@"'+ '>' + arrData[i].order_count + '</td>';
  257. row += '<td style=font-size:14px;'+ 'mso-number-format:"\@"'+ '>' + arrData[i].cancel_count + '</td>';
  258. row += '<td style=font-size:14px;'+ 'mso-number-format:"\@"'+ '>' + arrData[i].success_ratio + '</td>';
  259. excel += row + "</tr>";
  260. }
  261. excel += "</table>";
  262. var excelFile = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>";
  263. excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">';
  264. excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel';
  265. excelFile += '; charset=UTF-8">';
  266. excelFile += "<head>";
  267. excelFile += "<!--[if gte mso 9]>";
  268. excelFile += "<xml>";
  269. excelFile += "<x:ExcelWorkbook>";
  270. excelFile += "<x:ExcelWorksheets>";
  271. excelFile += "<x:ExcelWorksheet>";
  272. excelFile += "<x:Name>";
  273. excelFile += "{worksheet}";
  274. excelFile += "</x:Name>";
  275. excelFile += "<x:WorksheetOptions>";
  276. excelFile += "<x:DisplayGridlines/>";
  277. excelFile += "</x:WorksheetOptions>";
  278. excelFile += "</x:ExcelWorksheet>";
  279. excelFile += "</x:ExcelWorksheets>";
  280. excelFile += "</x:ExcelWorkbook>";
  281. excelFile += "</xml>";
  282. excelFile += "<![endif]-->";
  283. excelFile += "</head>";
  284. excelFile += "<body>";
  285. excelFile += excel;
  286. excelFile += "</body>";
  287. excelFile += "</html>";
  288. var uri = 'data:application/vnd.ms-excel;charset=utf-8,' + encodeURIComponent(excelFile);
  289. var link = document.createElement("a");
  290. link.href = uri;
  291. link.style = "visibility:hidden";
  292. link.download = FileName + ".xls";
  293. document.body.appendChild(link);
  294. link.click();
  295. document.body.removeChild(link);
  296. }
  297. $('#ncexport').click(function () {
  298. let starTime = new Date($('input[name="query_start_time"]').val()).getTime()/1000;
  299. let endTime = new Date($('input[name="query_end_time"]').val()).getTime()/1000;
  300. let cid = $('select').val()
  301. let text = $('select option:selected').text()
  302. $.get('index.php?act=orderstats&op=ExportData&type=provider', {
  303. query_start_time: starTime,
  304. query_end_time: endTime,
  305. cid: cid
  306. }, function (data) {
  307. data = JSON.parse(data)
  308. if (data && data.data) {
  309. let head = ['北京椰子电子商务有限责任公司']
  310. let time = ''
  311. if (starTime && endTime) {
  312. time = '统计时间:'+$('input[name="query_start_time"]').val()+' - '+$('input[name="query_end_time"]').val()
  313. } else if (starTime) {
  314. time = '统计时间:'+$('input[name="query_start_time"]').val()
  315. }
  316. if (text && cid) {
  317. time += ' 上游名称:'+text
  318. }
  319. if (time) {
  320. head.push(time)
  321. }
  322. head.push('总计成功订单量:' + parseFloat(data.total_stats.success_count_total))
  323. head.push('总计成功订单金额:' + parseFloat(data.total_stats.success_refill_amounts_total))
  324. head.push('总计下游扣款金额:' + parseFloat(data.total_stats.success_mch_amounts_toatl))
  325. head.push('总计上游扣款金额:' + parseFloat(data.total_stats.success_channel_amounts_total))
  326. head.push('总计利润金额:' + parseFloat(data.total_stats.profit_amounts_total))
  327. let title = [{value: "序号"},{value: "统计日期"},{value: "主体名称"},{value: "主体ID"},{value: "成功订单数"},{value: "成功金额"},{value: "上游金额"},{value: "下游金额"},{value: "利润"},{value: "订单总量"}, {value: "失败订单数量"},{value: "成功占比"}]
  328. JSONToExcelConvertor(data.data, '上游对账记录', title, head)
  329. }
  330. // console.log('data', data);
  331. })
  332. })
  333. });
  334. </script>