// +---------------------------------------------------------------------- namespace app\common\repositories\user; use app\common\dao\user\AwardIntegralPriceDao; use app\common\dao\user\AwardLakeDao; 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('check_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')); } /** * 列表搜索 * @param int $merId * @param array $where * @param $page * @param $limit * @return array * @author Qinii */ public function search(int $merId, array $where, $page, $limit) { $query = $this->dao->search($merId, $where)->order('add_time DESC'); $count = $query->count($this->dao->getPk()); $list = $query->page($page, $limit)->hidden(['update_time'])->select(); return compact('count', 'list'); } /** * 根据条件获取列表数据 * * 每日分红价格列表 * @param array $where 查询条件数组,用于指定数据库查询的条件。 * @param int $page 当前页码,用于指定要返回的页码。 * @param int $limit 每页的数据数量,用于指定每页返回的数据条数。 * @return array 返回包含 'count' 和 'list' 两个元素的数组,'count' 为数据总数,'list' 为数据列表。 */ public function getList(array $where, $page, $limit) { // 根据条件查询数据,$where 为查询条件数组 $query = $this->dao->search($where); // 统计满足条件的数据总数 $count = $query->count(); // 查询满足条件的数据列表,带有 'label' 关联数据,按 'label_rule_id' 倒序排列 // 分页查询,返回当前页码的 $limit 条数据,并将结果转换为数组形式 $list = $query->page($page, $limit)->select()->toArray(); // 返回包含数据总数和数据列表的数组 return compact('count', 'list'); } /** * 根据条件获取列表数据 * * 每日奖池列表 * @param array $where 查询条件数组,用于指定数据库查询的条件。 * @param int $page 当前页码,用于指定要返回的页码。 * @param int $limit 每页的数据数量,用于指定每页返回的数据条数。 * @return array 返回包含 'count' 和 'list' 两个元素的数组,'count' 为数据总数,'list' 为数据列表。 */ public function getLakeList(array $where, $page, $limit) { // 根据条件查询数据,$where 为查询条件数组 $query = AwardLakeDao::search($where); // 统计满足条件的数据总数 $count = $query->count(); // 查询满足条件的数据列表,带有 'label' 关联数据,按 'label_rule_id' 倒序排列 // 分页查询,返回当前页码的 $limit 条数据,并将结果转换为数组形式 $list = $query->page($page, $limit)->select()->toArray(); // 返回包含数据总数和数据列表的数组 return compact('count', 'list'); } }