123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <?php
- namespace app\common\model;
- use think\facade\Db;
- /**
- * 退款商品统计模型
- * @package app\common\model
- */
- class RefundGoodsStatistics extends BaseModel
- {
- protected $name = 'refund_goods_statistics';
- /**
- * 获取记录
- * @param int $id
- * @param array $with
- * @return static
- */
- public static function detail(int $id, array $with = [])
- {
- return static::get($id, $with);
- }
- /**
- * 写入初始化数据
- *
- * @return bool
- */
- public static function addInitData()
- {
- $begin_date = '2021-10-01'; // 生成初始数据开始时间,建议时间为:小程序上线时间
- $end_date = date('Y-m-d', strtotime('-1 days')); // 生成初始数据结束时间,建议时间为:昨天
- $date_arr = period_date(strtotime($begin_date), strtotime($end_date), 'Y-m-d');
- foreach ($date_arr as $date) {
- self::addData($date);
- echo $date . PHP_EOL;
- }
- return true;
- }
- /**
- * 写入每日数据
- *
- * @param $date
- * @return mixed
- */
- public static function addData($date)
- {
- $startTime = strtotime("{$date} 00:00:00");
- $endTime = strtotime("{$date} 23:59:59");
- $insert = [];
- $now = time();
- // 单个商品退款
- $data = Db::name('order_refund')->alias('r')
- ->where('r.create_time', '<=', $endTime)
- ->where('r.create_time', '>', $startTime)
- ->where('r.order_goods_id', '>', 0)
- ->leftJoin('order_goods og', 'og.order_goods_id=r.order_goods_id')
- ->field('og.goods_id,sum(r.refund_money) as total_amount,sum(r.goods_num) as total_num')
- ->group('og.goods_id')
- ->select();
- if (!empty($data)) {
- foreach ($data as $v) {
- $insert[] = [
- 'start_time' => $startTime,
- 'end_time' => $endTime,
- 'goods_id' => $v['goods_id'],
- 'refund_amount' => $v['total_amount'],
- 'refund_num' => $v['total_num'],
- 'create_time' => $now,
- 'update_time' => $now,
- ];
- }
- }
- // 整单退款
- $data = Db::name('order_refund')->alias('r')
- ->where('r.create_time', '<=', $endTime)
- ->where('r.create_time', '>', $startTime)
- ->where('r.order_goods_id', '=', 0)
- ->leftJoin('order_goods og', 'og.order_id=r.order_id')
- ->field('og.goods_id,sum(r.refund_money) as total_amount,sum(r.goods_num) as total_num')
- ->group('og.goods_id')
- ->select();
- if (!empty($data)) {
- foreach ($data as $v) {
- $insert[] = [
- 'start_time' => $startTime,
- 'end_time' => $endTime,
- 'goods_id' => $v['goods_id'],
- 'refund_amount' => $v['total_amount'],
- 'refund_num' => $v['total_num'],
- 'create_time' => $now,
- 'update_time' => $now,
- ];
- }
- }
- self::insertAll($insert);
- }
- }
|