StatisticsService.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace App\Service;
  3. use App\Model\RevenueCost;
  4. use App\Model\RevenueCostTotal;
  5. class StatisticsService extends Service
  6. {
  7. public function statisticsRevenueCostCommon($data,$user, $field = []){
  8. if(empty($field)) $field = RevenueCostTotal::$field;
  9. $model = RevenueCostTotal::where('del_time',0)
  10. ->select($field)
  11. ->orderby('id', 'desc');
  12. if(! empty($data['order_time'])){
  13. list($start_time, $end_time) = $this->changeDateToTimeStampAboutRange($data['order_time'],false);
  14. if ($start_time === null || $end_time === null || $start_time > $end_time) return [false, "单据日期的区间无效"];
  15. $model->where('order_time', '>=', $start_time)
  16. ->where('order_time', '<', $end_time);
  17. }
  18. if(! empty($data['order_type'])) $model->where('order_type',$data['order_type']);
  19. return [true, $model];
  20. }
  21. public function statisticsRevenueCost($data,$user){
  22. list($status, $model) = $this->statisticsRevenueCostCommon($data, $user);
  23. if(! $status) return [false, $model];
  24. $list = $this->limit($model,'',$data);
  25. $list = $this->statisticsRevenueCostFillData($list);
  26. return [true, $list];
  27. }
  28. public function statisticsRevenueCostFillData($data){
  29. if(empty($data['data'])) return $data;
  30. foreach ($data['data'] as $key => $value){
  31. $time = date("Y-m", $value['order_time']);
  32. $data['data'][$key]['order_time'] = $time;
  33. $data['data'][$key]['order_type_title'] = RevenueCost::$order_type[$value['order_type']] ?? "";
  34. $data['data'][$key]['profit_rate'] = bcmul($value['profit_rate'], 100,2);
  35. }
  36. return $data;
  37. }
  38. //无用
  39. public function statisticsRevenueCostFillData1($data){
  40. if(empty($data)) return $data;
  41. $return = [];
  42. foreach ($data as $key => $value){
  43. $time = date("Y-m", $value['order_time']);
  44. if($value['order_type'] == RevenueCost::ORDER_ONE){
  45. $income = $value['price_3_total'];
  46. }elseif ($value['order_type'] == RevenueCost::ORDER_TWO){
  47. $income = $value['price_1_total'];
  48. }else{
  49. $income = $value['payment_amount'];
  50. }
  51. $adjust = $income < 0 ? $income : 0;
  52. $business = $value['price_4_total'];
  53. if(isset($return[$time][$value['order_type']])){
  54. $income_total = bcadd($return[$time][$value['order_type']]['income'], $income,2);
  55. $adjust_total = bcadd($return[$time][$value['order_type']]['adjust'], $adjust,2);
  56. $business_total = bcadd($return[$time][$value['order_type']]['business'], $business,2);
  57. $return[$time][$value['order_type']]['income'] = $income_total;
  58. $return[$time][$value['order_type']]['adjust'] = $adjust_total;
  59. $return[$time][$value['order_type']]['business'] = $business_total;
  60. }else{
  61. $return[$time][$value['order_type']] = [
  62. 'income' => $income,
  63. 'adjust' => $adjust,
  64. 'business' => $business,
  65. 'time' => $time,
  66. ];
  67. }
  68. }
  69. $final = [];
  70. foreach ($return as $value){
  71. foreach ($value as $key => $val){
  72. $title = RevenueCost::$order_type[$key] ?? "";
  73. $val['title'] = $title;
  74. $profit = bcsub($val['income'], $val['business'],2);
  75. $profit_rate = $val['income'] > 0 ? bcdiv($profit, $val['income'],2) : 0;
  76. $profit_rate = bcmul($profit_rate, 100,2);
  77. $val['profit'] = $profit;
  78. $val['profit_rate'] = $profit_rate;
  79. $val['order_type'] = $key;
  80. $final[] = $val;
  81. }
  82. }
  83. return $final;
  84. }
  85. public function statisticsRevenueCostOneAndTwoCommon($data,$user, $field = []){
  86. if(empty($data['order_type']) || ! isset(RevenueCost::$order_type[$data['order_type']])) return [false, '单据类型不存在或错误'];
  87. if(empty($field)) {
  88. if($data['order_type'] == 1){
  89. $field = RevenueCost::$field_xhd;
  90. }else{
  91. $field = RevenueCost::$field_xsfp;
  92. }
  93. }
  94. $model = RevenueCost::where('del_time',0)
  95. ->select($field)
  96. ->orderby('id', 'desc');
  97. if(! empty($data['order_time'])){
  98. list($start_time, $end_time) = $this->changeDateToTimeStampAboutRange($data['order_time'],false);
  99. if ($start_time === null || $end_time === null || $start_time > $end_time) return [false, "单据日期的区间无效"];
  100. $model->where('order_time', '>=', $start_time)
  101. ->where('order_time', '<=', $end_time);
  102. }
  103. if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
  104. if(! empty($data['customer_title'])) $model->where('customer_title', 'LIKE', '%'.$data['customer_title'].'%');
  105. if(! empty($data['employee_id_1_title'])) $model->where('employee_id_1_title', 'LIKE', '%'.$data['employee_id_1_title'].'%');
  106. return [true, $model];
  107. }
  108. public function statisticsRevenueCostOneAndTwo($data,$user){
  109. list($status, $model) = $this->statisticsRevenueCostOneAndTwoCommon($data, $user);
  110. if(! $status) return [false, $model];
  111. $list = $this->limit($model,'',$data);
  112. $list = $this->statisticsRevenueCostOneAndTwoFillData($list,$user,$data);
  113. return [true, $list];
  114. }
  115. public function statisticsRevenueCostOneAndTwoFillData($data, $user, $ergs){
  116. if(empty($data['data'])) return $data;
  117. foreach ($data['data'] as $key => $value){
  118. $data['data'][$key]['profit_rate'] = bcmul($value['profit_rate'], 100,2);
  119. $data['data'][$key]['order_time'] = $value['order_time'] ? date("Y-m-d", $value['order_time']) : "";
  120. }
  121. return $data;
  122. }
  123. }