RefundGoodsStatistics.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace app\common\model;
  3. use think\facade\Db;
  4. /**
  5. * 退款商品统计模型
  6. * @package app\common\model
  7. */
  8. class RefundGoodsStatistics extends BaseModel
  9. {
  10. protected $name = 'refund_goods_statistics';
  11. /**
  12. * 获取记录
  13. * @param int $id
  14. * @param array $with
  15. * @return static
  16. */
  17. public static function detail(int $id, array $with = [])
  18. {
  19. return static::get($id, $with);
  20. }
  21. /**
  22. * 写入初始化数据
  23. *
  24. * @return bool
  25. */
  26. public static function addInitData()
  27. {
  28. $begin_date = '2021-10-01'; // 生成初始数据开始时间,建议时间为:小程序上线时间
  29. $end_date = date('Y-m-d', strtotime('-1 days')); // 生成初始数据结束时间,建议时间为:昨天
  30. $date_arr = period_date(strtotime($begin_date), strtotime($end_date), 'Y-m-d');
  31. foreach ($date_arr as $date) {
  32. self::addData($date);
  33. echo $date . PHP_EOL;
  34. }
  35. return true;
  36. }
  37. /**
  38. * 写入每日数据
  39. *
  40. * @param $date
  41. * @return mixed
  42. */
  43. public static function addData($date)
  44. {
  45. $startTime = strtotime("{$date} 00:00:00");
  46. $endTime = strtotime("{$date} 23:59:59");
  47. $insert = [];
  48. $now = time();
  49. // 单个商品退款
  50. $data = Db::name('order_refund')->alias('r')
  51. ->where('r.create_time', '<=', $endTime)
  52. ->where('r.create_time', '>', $startTime)
  53. ->where('r.order_goods_id', '>', 0)
  54. ->leftJoin('order_goods og', 'og.order_goods_id=r.order_goods_id')
  55. ->field('og.goods_id,sum(r.refund_money) as total_amount,sum(r.goods_num) as total_num')
  56. ->group('og.goods_id')
  57. ->select();
  58. if (!empty($data)) {
  59. foreach ($data as $v) {
  60. $insert[] = [
  61. 'start_time' => $startTime,
  62. 'end_time' => $endTime,
  63. 'goods_id' => $v['goods_id'],
  64. 'refund_amount' => $v['total_amount'],
  65. 'refund_num' => $v['total_num'],
  66. 'create_time' => $now,
  67. 'update_time' => $now,
  68. ];
  69. }
  70. }
  71. // 整单退款
  72. $data = Db::name('order_refund')->alias('r')
  73. ->where('r.create_time', '<=', $endTime)
  74. ->where('r.create_time', '>', $startTime)
  75. ->where('r.order_goods_id', '=', 0)
  76. ->leftJoin('order_goods og', 'og.order_id=r.order_id')
  77. ->field('og.goods_id,sum(r.refund_money) as total_amount,sum(r.goods_num) as total_num')
  78. ->group('og.goods_id')
  79. ->select();
  80. if (!empty($data)) {
  81. foreach ($data as $v) {
  82. $insert[] = [
  83. 'start_time' => $startTime,
  84. 'end_time' => $endTime,
  85. 'goods_id' => $v['goods_id'],
  86. 'refund_amount' => $v['total_amount'],
  87. 'refund_num' => $v['total_num'],
  88. 'create_time' => $now,
  89. 'update_time' => $now,
  90. ];
  91. }
  92. }
  93. self::insertAll($insert);
  94. }
  95. }