// +---------------------------------------------------------------------- namespace app\common\repositories\user; use app\common\dao\user\AwardIntegralPriceDao; use app\common\model\store\order\StoreOrder; use app\common\model\user\AwardIntegralPrice; use app\common\model\user\UserExtract; use app\common\repositories\BaseRepository; class AwardIntegralPriceRepository extends BaseRepository { /** * @var AwardIntegralPriceDao */ protected $dao; /** * UserSignRepository constructor. * @param AwardIntegralPriceDao $dao */ public function __construct(AwardIntegralPriceDao $dao) { $this->dao = $dao; } public function awardIntegralPrice($day = '') { if (!$day) { $day = date('Y-m-d'); } if ($info = $this->dao->search(['day' => $day])->find()) { return $info->toArray(); } // @file_put_contents('yesterday.txt', AwardIntegralPrice::getLastSql() . PHP_EOL, FILE_APPEND); $yesterday_price = $this->dao->search(['day' => date('Y-m-d', strtotime('-1 day', strtotime($day)))])->find(); if ($yesterday_price) { $basePrice = $yesterday_price->price; } else { $basePrice = systemConfig('award_integral_price', 0.1); } $time_start = strtotime($day); $time_end = strtotime($day) + 86400; //todo 业绩 $achievement = StoreOrder::where('paid', 1) ->whereBetween('create_time', [$day . ' 00:00:00', $day . ' 23:59:59']) ->where('is_del', 0)->where('is_system_del', 0) ->where('status', '>=', 0) ->sum('total_price'); @file_put_contents('yesterday.txt', StoreOrder::getLastSql() . PHP_EOL, FILE_APPEND); $achievement = bcmul((string)$achievement, '0.05', 2); /** @var UserExtractRepository $extractRepositories */ $extractRepositories = app()->make(UserExtractRepository::class); $commission = $extractRepositories->search(['status' => 1])->whereBetween('create_time', [$time_start, $time_end])->sum('commission'); @file_put_contents('yesterday.txt', UserExtract::getLastSql() . PHP_EOL, FILE_APPEND); $userService = app()->make(UserRepository::class); $num = $userService->search(['status' => 1])->sum('award_integral'); $sum_achievement = bcadd((string)$commission, (string)$achievement, 2); $rise = $num > 0 ? bcdiv($sum_achievement, $num, 3) : 0; $price = bcadd($rise, $basePrice, 3); return compact('basePrice', 'price', 'rise', 'achievement', 'commission', 'num'); } public function setPrice($day, $price, $commission, $achievement, $num) { $add_time = time(); return $this->dao->create(compact('day', 'price', 'commission', 'achievement', 'num', 'add_time')); } }