TotalXh.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. namespace app\command;
  3. // +----------------------------------------------------------------------
  4. // | [ WE CAN DO IT MORE SIMPLE ]
  5. // +----------------------------------------------------------------------
  6. // | Copyright (c) 2018-2020 rights reserved.
  7. // +----------------------------------------------------------------------
  8. // | Author: TABLE ME
  9. // +----------------------------------------------------------------------
  10. // | Date: 2020-09-08 16:19
  11. // +----------------------------------------------------------------------
  12. use app\model\api\Order;
  13. use app\model\system\OrderInfo;
  14. use app\model\system\Product;
  15. use app\model\system\Site;
  16. use library\utils\Qiniu;
  17. use think\console\Command;
  18. use think\console\Input;
  19. use think\console\Output;
  20. use think\facade\Db;
  21. /**
  22. * 生成业绩报表
  23. * @author huangjianfeng
  24. */
  25. class TotalXh extends Command
  26. {
  27. protected function configure()
  28. {
  29. $this
  30. ->setName('TotalXh')
  31. ->setDescription('每日统计分站业绩报表!')
  32. ->addArgument('action', null, "");
  33. }
  34. protected function execute(Input $input, Output $output)
  35. {
  36. $time = strtotime(date('Y-m-d', strtotime('-1 day')));
  37. $this->expData($time);
  38. /*
  39. for ($i = 1; $i < 5; $i++) {
  40. $time = strtotime('2021-03-' . $i);
  41. $this->expData($time);
  42. } */
  43. }
  44. /**
  45. * 统计数据
  46. * @param $time
  47. */
  48. private function expData($time)
  49. {
  50. $endTime = $time + 3600 * 24;
  51. //历史消耗客户数
  52. $count1 = Db::name("order")
  53. ->where('status', '>', 0)
  54. ->where('pay_time','between',[strtotime('2021-02-22'),$time])
  55. ->group("uid")
  56. ->count();
  57. $save['khs_total'] = $count1;
  58. //当日消耗客户数
  59. $count2 = Db::name("order")
  60. ->where('status', '>', 0)
  61. ->where('pay_time','between',[$time,$endTime])
  62. ->group("uid")
  63. ->count();
  64. $save['dr_total'] = $count2;
  65. //流失率 历史消耗客户数-当日消耗客户数)/历史消耗客户数
  66. $ls_lv = $save['khs_total'] == 0 ? 0 : (($save['khs_total'] - $save['dr_total']) / $save['khs_total']);
  67. $save['ls_lv'] = $ls_lv;
  68. //今日消费金额
  69. $save['dr_money'] = (new Order)
  70. ->where('status', '>', 0)
  71. ->where('pay_time','between',[$time,$endTime])
  72. ->sum('all_price');
  73. $save['dr_money'] = empty($save['dr_money']) ? 0 : $save['dr_money'];
  74. //历史最大日消耗
  75. $max_khs = Db::name("allTotal")
  76. ->order('dr_money', 'desc')
  77. ->value('dr_money');
  78. $save['khs_money'] = empty($max_khs) ? 0 : $max_khs;
  79. //今日总子订单数
  80. $save['dr_order'] = OrderInfo::alias("i")
  81. ->leftjoin('order o','o.id=i.o_id')
  82. ->where('i.status', '>', 0)
  83. ->where('o.pay_time','between',[$time,$endTime])
  84. ->count();
  85. //日均客消耗
  86. $save['dr_avg'] = $save['dr_money'] / $save['dr_total'];
  87. if (Db::name("allTotal")->where('time', $time)->count() > 0) {
  88. Db::name("allTotal")->where('time', $time)->update($save);
  89. } else {
  90. $save['time'] = $time;
  91. Db::name("allTotal")->insert($save);
  92. }
  93. echo "时间:" . date('Y-m-d', $time) . " 历史消耗客户数:" . $save['khs_total'] .
  94. ", 当日消耗客户数:" . $save['dr_total'] .
  95. ", 流失率:" . $save['ls_lv'] .
  96. ", 历史最大日消耗:" . $max_khs .
  97. ", 今日消费:" . $save['dr_money'] .
  98. ", 今日总子订单数:" . $save['dr_order'] .
  99. ",日均客消耗:" . $save['dr_avg'] . PHP_EOL;
  100. }
  101. }