WriteOffController.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. namespace app\admin\controller\finance;
  3. use app\common\Util;
  4. use app\model\SysCategory;
  5. use app\model\SysDept;
  6. use support\Db;
  7. use support\Request;
  8. class WriteOffController
  9. {
  10. public function list(Request $request)
  11. {
  12. $page = $request->get('page',1);
  13. $pageSize = $request->get('pageSize',20);
  14. $days = $request->get('days', ['2024-06-01','2024-06-30']);
  15. if (!empty($days)) {
  16. $days[0] = strtotime($days[0]);
  17. $days[1] = strtotime($days[1]);
  18. if (date('m', $days[0]) != date('m', $days[1])) {
  19. return json_fail('暂不支持跨月查询');
  20. }
  21. $month = date('Ym', $days[0]);
  22. $days[1] = strtotime(date('Y-m-d', $days[1]) . " 23:59:59");
  23. } else {
  24. $month = date('Ym');
  25. }
  26. if(!Util::schema()->hasTable("data_used_{$month}")){
  27. return json_fail('暂无数据');
  28. }
  29. $totalSql = "
  30. select count(*) as total from app_data_used_{$month}";
  31. $total = Db::select($totalSql);
  32. $recordStart = ($page - 1) * 20;
  33. $sql = "select
  34. g.goods_name,g.goods_sales_price,g.join_goods_category_id,gs.goods_sku_specs_json,wu.user_name as wu_username, su.user_name as su_username,du.data_used_addtimes,
  35. JSON_EXTRACT(du.join_data_used_object_json,'$.charge.charge_premises') as write_off_premises, su.join_user_dept_id as premises_id
  36. from app_data_used_{$month} as du
  37. left join app_goods as g on JSON_EXTRACT(du.join_data_used_object_json,'$.goods_id') = g.goods_id
  38. left join app_goods_sku as gs on JSON_EXTRACT(du.join_data_used_object_json,'$.goods_sku_id') = gs.goods_sku_id
  39. left join app_sys_user as wu on du.join_data_used_user_id = wu.user_id
  40. left join app_sys_user as su on JSON_EXTRACT(du.join_data_used_object_json,'$.salesman_id') = su.user_id
  41. order by du.data_used_addtimes desc
  42. limit " . $recordStart . ',' . $pageSize;
  43. $rows = Db::select($sql);
  44. foreach ($rows as &$row){
  45. $row->salesman_premises = '';
  46. if (!empty($row->premises_id) && $row->premises_id != 0){
  47. $premises = SysDept::where('dept_id',$row->premises_id)
  48. ->select('dept_id','dept_name')
  49. ->first();
  50. $row->salesman_premises = !empty($premises) ? $premises->dept_name : '';
  51. }
  52. if(!empty($row->goods_sku_specs_json)){
  53. $specsJson = json_decode($row->goods_sku_specs_json,true);
  54. $skuTitle = '';
  55. foreach($specsJson as $key => $item){
  56. if(is_array($item)){
  57. $item = implode('',$item);
  58. }
  59. $skuTitle .= $key.':'.$item.',';
  60. }
  61. $row->sku_title = rtrim($skuTitle,',');
  62. }
  63. $categoryClassify = 'SERVICE';
  64. $row->category = '';
  65. if(!empty($row->join_goods_category_id)){
  66. $category = SysCategory::where('category_id',$row->join_goods_category_id)->select('category_name','category_classify')->first();
  67. $row->category = $category->category_name ?? '';
  68. $categoryClassify = $category->category_classify ?? 'SERVICE';
  69. }
  70. $row->write_off_premises = trim($row->write_off_premises,"\"");
  71. }
  72. return json_success('', [
  73. 'page' => $page,
  74. 'pageSize' => $pageSize,
  75. 'total' => $total[0]->total,
  76. 'rows' => $rows
  77. ]);
  78. }
  79. public function statistics(Request $request)
  80. {
  81. $days = $request->get('days', ['2024-06-01','2024-06-30']);
  82. if (!empty($days)) {
  83. $days[0] = strtotime($days[0]);
  84. $days[1] = strtotime($days[1]);
  85. if (date('m', $days[0]) != date('m', $days[1])) {
  86. return json_fail('暂不支持跨月查询');
  87. }
  88. $month = date('Ym', $days[0]);
  89. $days[1] = strtotime(date('Y-m-d', $days[1]) . " 23:59:59");
  90. } else {
  91. $month = date('Ym');
  92. }
  93. if(!Util::schema()->hasTable("data_used_{$month}")){
  94. return json_fail('暂无数据');
  95. }
  96. $totalSql = "
  97. select count(*) as total from app_data_used_{$month}";
  98. $total = Db::select($totalSql);
  99. $sql = "select
  100. COUNT(*) as count,g.join_goods_category_id
  101. from app_data_used_{$month} as du
  102. left join app_goods as g on JSON_EXTRACT(du.join_data_used_object_json,'$.goods_id') = g.goods_id
  103. ";
  104. $rows = Db::select($sql);
  105. dump($rows);
  106. foreach ($rows as &$row){
  107. $row->salesman_premises = '';
  108. if (!empty($row->premises_id) && $row->premises_id != 0){
  109. $premises = SysDept::where('dept_id',$row->premises_id)
  110. ->select('dept_id','dept_name')
  111. ->first();
  112. $row->salesman_premises = !empty($premises) ? $premises->dept_name : '';
  113. }
  114. if(!empty($row->goods_sku_specs_json)){
  115. $specsJson = json_decode($row->goods_sku_specs_json,true);
  116. $skuTitle = '';
  117. foreach($specsJson as $key => $item){
  118. if(is_array($item)){
  119. $item = implode('',$item);
  120. }
  121. $skuTitle .= $key.':'.$item.',';
  122. }
  123. $row->sku_title = rtrim($skuTitle,',');
  124. }
  125. $categoryClassify = 'SERVICE';
  126. $row->category = '';
  127. if(!empty($row->join_goods_category_id)){
  128. $category = SysCategory::where('category_id',$row->join_goods_category_id)->select('category_name','category_classify')->first();
  129. $row->category = $category->category_name ?? '';
  130. $categoryClassify = $category->category_classify ?? 'SERVICE';
  131. }
  132. $row->write_off_premises = trim($row->write_off_premises,"\"");
  133. }
  134. }
  135. public function records()
  136. {
  137. $sql = "select a.appointment_id as benefit_id,a.appointment_addtimes as addtimes,m.member_mobile,c.member_cert_name,b.member_benefit_name as benefit_name,a.appointment_done_json as used_json,a.appointment_done_datetime from app_appointment as a
  138. left join app_member as m on m.member_id = a.join_appointment_member_id
  139. left join app_member_cert as c on c.join_cert_member_id = a.join_appointment_member_id
  140. left join app_member_benefit as b on b.join_benefit_member_id = a.join_appointment_member_id
  141. UNION
  142. select q.member_quota_id as benefit_id,q.member_quota_addtimes as addtimes,q.member_quota_used_json as used_json, q.member_quota_name as benefit_name,m.member_mobile,c.member_cert_name from app_member_quota as q
  143. left join app_member as m on m.member_id = q.join_quota_member_id
  144. left join app_member_cert as c on c.join_cert_member_id = q.join_quota_member_id
  145. order by addtimes desc limit 0,10";
  146. $records = Db::select($sql);
  147. dump($records);
  148. }
  149. }