// +---------------------------------------------------------------------- namespace App\Services\Common; use App\Models\AccountModel; use App\Models\GoodsModel; use App\Models\MemberModel; use App\Models\ShopModel; use App\Models\TradeModel; use App\Services\BaseService; use App\Services\ConfigService; use App\Services\RedisService; use Illuminate\Support\Facades\DB; /** * 交易管理-服务类 * @author laravel开发员 * @since 2020/11/11 * Class TradeService * @package App\Services\Common */ class TradeService extends BaseService { // 静态对象 protected static $instance = null; /** * 构造函数 * @author laravel开发员 * @since 2020/11/11 * TradeService constructor. */ public function __construct() { $this->model = new TradeModel(); } /** * 静态入口 * @return static|null */ public static function make() { if (!self::$instance) { self::$instance = (new static()); } return self::$instance; } /** * @param $params * @param int $pageSize * @return array */ public function getDataList($params, $pageSize = 15) { $where = ['a.mark' => 1]; $status = isset($params['status']) ? $params['status'] : 0; $userId = isset($params['user_id']) ? $params['user_id'] : 0; $shopId = isset($params['shop_id']) ? $params['shop_id'] : 0; $parentId = isset($params['parent_id']) ? $params['parent_id'] : 0; $isAppeal = isset($params['is_appeal']) ? $params['is_appeal'] : 0; $sellUid = isset($params['sell_uid']) ? $params['sell_uid'] : 0; $type = isset($params['type']) ? $params['type'] : 0; $goodsStatus = isset($params['goods_status']) ? $params['goods_status'] : 0; if ($shopId > 0) { $where['a.shop_id'] = $shopId; } if ($parentId > 0) { $where['b.parent_id'] = $parentId; } if ($isAppeal > 0) { $where['a.is_appeal'] = $isAppeal; } if ($goodsStatus > 0) { $where['g.status'] = $goodsStatus; } $model = $this->model->from('trade as a') ->leftJoin('member as b', 'a.user_id', '=', 'b.id') ->leftJoin('member as c', 'c.id', '=', 'a.sell_uid') ->leftJoin('goods as g', 'g.id', '=', 'a.goods_id') ->leftJoin('shop as s', 's.id', '=', 'g.shop_id') ->where($where) ->where('a.status', '>', 0) ->where(function ($query) use ($type, $status, $isAppeal) { if($type == 1 && $status == 2){ $query->whereIn('a.status',[1,2,3])->orWhere(function($query) { $query->where(['a.status'=>4])->where('a.is_sell','<=', 1); }); }else if($status>0 && !$isAppeal){ $query->where(['a.status'=> $status]); } }) ->where(function ($query) use ($params) { $keyword = isset($params['keyword']) ? $params['keyword'] : ''; if ($keyword) { $query->where('b.nickname', 'like', "%{$keyword}%")->orWhere('b.mobile', 'like', "%{$keyword}%") ->orWhere('s.name', 'like', "%{$keyword}%") ->orWhere('s.code', 'like', "%{$keyword}%") ->orWhere('g.goods_name', 'like', "%{$keyword}%"); } }) ->where(function ($query) use ($params) { $time = isset($params['time']) ? $params['time'] : 0; if ($time) { $query->where('a.pay_time', '>=', $time)->orWhere('a.create_time', '>=', $time); } }) ->where(function ($query) use ($type, $userId, $sellUid, $status) { if ($type == 1) { $query->whereIn('a.status',[1,2,3,4]); if ($status == 0) { $query->where(['a.user_id' => $userId, 'a.is_out' => 0]); $query->whereNotIn('a.sell_uid', [$userId]); } else if ($status == 2) { $query->where('a.sell_uid', '=', $userId); $query->whereNotIn('a.user_id', [$userId]); } else { $query->where(['a.user_id' => $userId, 'a.is_out' => 0]); } } else if($type == 3){ $query->whereIn('a.status',[1,2,3,4]); } else { if ($userId) { $query->where(['a.user_id' => $userId, 'a.is_out' => 0]); } else if ($sellUid) { $query->where('a.sell_uid', '=', $sellUid); } } }) ->select(['a.*', 'b.nickname', 'b.mobile as buy_mobile', 's.name as shop_name', 's.code as shop_code', 'c.nickname as sell_nickname', 'c.mobile as sell_mobile', 'g.goods_name', 'g.code', 'g.thumb']); // 店长排序 if ($type == 1) { $model = $model->orderBy('a.status', 'asc'); } else if ($type == 3) { $model = $model->orderBy('a.status', 'asc')->orderBy('a.is_sell', 'asc'); } $model = $model->orderBy('s.id', 'asc') ->orderBy('a.create_time', 'desc') ->orderBy('a.id', 'desc'); // 统计 $totalModdel = clone $model; $totalModdel = $totalModdel->whereIn('a.status', [2, 3, 4]); $counts = ['total' => 0, 'service_fee' => 0, 'bonus' => 0, 'fee' => 0]; $total = $totalModdel->sum('a.real_price'); $fee = $totalModdel->sum('a.fee'); $counts['fee'] = intval($fee); $countModel = clone $model; $countModel = $countModel->whereIn('a.status', [3, 4]); $counts['total'] = intval($total); $bonus = $countModel->sum('a.bonus'); $counts['bonus'] = intval($bonus); $serviceFee = $countModel->sum('a.service_fee'); $counts['service_fee'] = intval($serviceFee); $profit = $countModel->sum('a.profit'); $counts['profit'] = intval($profit); $list = $model->paginate($pageSize > 0 ? $pageSize : 9999999); $list = $list ? $list->toArray() : []; if ($list) { foreach ($list['data'] as &$item) { $item['create_time'] = $item['create_time'] ? datetime($item['create_time'], 'Y-m-d H:i:s') : ''; $item['pay_time'] = $item['pay_time'] ? datetime($item['pay_time'], 'Y-m-d H:i:s') : ''; $item['confirm_time'] = $item['confirm_time'] ? datetime($item['confirm_time'], 'Y-m-d H:i:s') : ''; $item['thumb'] = isset($item['thumb']) && $item['thumb'] ? get_image_url($item['thumb']) : ''; $item['pay_img'] = isset($item['pay_img']) && $item['pay_img'] ? get_image_url($item['pay_img']) : ''; $item['price'] = intval($item['price']); $item['real_price'] = intval($item['real_price']); $item['fee'] = intval($item['fee']); } } return [ 'pageSize' => $pageSize, 'total' => isset($list['total']) ? $list['total'] : 0, 'counts' => $counts, 'list' => isset($list['data']) ? $list['data'] : [] ]; } /** * 转商品列表数据 * @param $params * @param int $pageSize * @return array */ public function getSwitchGoods($params, $pageSize = 15) { $where = ['a.mark' => 1, 'a.status' => 1, 'a.is_pay' => 2]; $status = isset($params['status']) ? $params['status'] : 0; if ($status > 0) { $where['a.status'] = $status; } $isTrade = isset($params['is_trade']) ? $params['is_trade'] : 0; if ($isTrade > 0) { $where['a.is_trade'] = $isTrade; } $shopId = isset($params['shop_id']) ? $params['shop_id'] : 0; if ($shopId > 0) { $where['a.shop_id'] = $shopId; } $userId = isset($params['user_id']) ? $params['user_id'] : 0; if ($userId > 0) { $where['a.user_id'] = $userId; } $list = $this->model->from('trade as a') ->leftJoin('member as b', 'b.id', '=', 'a.sell_uid') ->leftJoin('shop as c', 'c.id', '=', 'a.shop_id') ->leftJoin('goods as g', 'g.id', '=', 'a.goods_id') ->where($where) ->where(function ($query) use ($params) { $keyword = isset($params['keyword']) ? $params['keyword'] : ''; if ($keyword) { $query->where('g.goods_name', 'like', "%{$keyword}%")->orWhere('c.name', 'like', "%{$keyword}%")->orWhere('b.nickname', 'like', "%{$keyword}%")->orWhere('b.mobile', 'like', "%{$keyword}%"); } $username = isset($params['username']) ? $params['username'] : ''; if ($username) { $query->orWhere('b.nickname', 'like', "%{$keyword}%")->orWhere('b.mobile', 'like', "%{$keyword}%"); } }) ->where(function ($query) use ($params) { $time = isset($params['time']) ? $params['time'] : ''; if ($time) { $query->where('a.pay_time', '>=', $time)->orWhere('a.create_time', '>=', $time); } }) ->select(['a.*', 'b.nickname', 'b.code as user_code', 'b.mobile as mobile', 'c.name as shop_name', 'c.code as shop_code', 'g.goods_name','g.code', 'g.thumb']) ->orderBy('a.create_time', 'desc') ->orderBy('a.id', 'desc') ->paginate($pageSize > 0 ? $pageSize : 9999999); $list = $list ? $list->toArray() : []; if ($list) { foreach ($list['data'] as &$item) { $item['create_time'] = $item['create_time'] ? datetime($item['create_time'], 'Y-m-d H.i.s') : ''; $item['thumb'] = isset($item['thumb']) && $item['thumb'] ? get_image_url($item['thumb']) : ''; } } return [ 'pageSize' => $pageSize, 'total' => isset($list['total']) ? $list['total'] : 0, 'list' => isset($list['data']) ? $list['data'] : [] ]; } /** * 详情 * @param $id * @return mixed */ public function getInfo($id) { $info = $this->model->from('trade as a') ->leftJoin('member as b', 'a.user_id', '=', 'b.id') ->leftJoin('member as c', 'c.id', '=', 'a.sell_uid') ->leftJoin('goods as g', 'g.id', '=', 'a.goods_id') ->where(['a.id' => $id, 'a.mark' => 1]) ->select(['a.*', 'b.nickname', 'b.mobile as buy_mobile', 'c.nickname as sell_nickname', 'c.mobile as sell_mobile', 'g.goods_name', 'g.code', 'g.thumb']) ->first(); if ($info) { $info['create_time_text'] = $info['create_time'] ? datetime($info['create_time'], 'Y-m-d H:i:s') : ''; $info['pay_time'] = $info['pay_time'] ? datetime($info['pay_time'], 'Y-m-d H:i:s') : ''; $info['confirm_time'] = $info['confirm_time'] ? datetime($info['confirm_time'], 'Y-m-d H:i:s') : ''; $info['thumb'] = isset($info['thumb']) && $info['thumb'] ? get_image_url($info['thumb']) : ''; $info['pay_img'] = isset($info['pay_img']) && $info['pay_img'] ? get_image_url($info['pay_img']) : ''; $info['price'] = intval($info['price']); $info['real_price'] = intval($info['real_price']); $info['fee'] = intval($info['fee']); $bankInfo = MemberBankService::make()->getBindInfo($info['sell_uid']); $info['bank_info'] = $bankInfo ? $bankInfo : ['realname' => '', 'bank_name' => '', 'bank_num' => '']; } return $info; } /** * 统计 * @param $params * @return int[] */ public function getCounts($params) { $counts = ['total' => 0, 'service_fee' => 0, 'bonus' => 0, 'fee' => 0]; $where = ['a.mark' => 1]; $status = isset($params['status']) ? $params['status'] : 0; $userId = isset($params['user_id']) ? $params['user_id'] : 0; $shopId = isset($params['shop_id']) ? $params['shop_id'] : 0; $parentId = isset($params['parent_id']) ? $params['parent_id'] : 0; $isAppeal = isset($params['is_appeal']) ? $params['is_appeal'] : 0; $sellUid = isset($params['sell_uid']) ? $params['sell_uid'] : 0; if ($shopId > 0) { $where['a.shop_id'] = $shopId; } if ($parentId > 0) { $where['b.parent_id'] = $parentId; } if ($userId > 0) { $where['a.user_id'] = $userId; } if ($sellUid > 0) { $where['a.sell_uid'] = $sellUid; } if ($isAppeal > 0) { $where['a.is_appeal'] = $isAppeal; } if ($status > 0) { $where['a.status'] = $status; } $counts['total'] = intval($this->model->from('trade as a') ->leftJoin('member as b', 'a.user_id', '=', 'b.id') ->where($where) ->where(function ($query) use ($params) { $time = isset($params['time']) ? $params['time'] : 0; if ($time) { $query->where('a.pay_time', '>=', $time)->orWhere('a.create_time', '>=', $time); } }) ->where(function ($query) use ($userId, $sellUid, $status) { if ($sellUid && $userId) { $query->where('a.user_id', $userId)->orWhere(function ($query) use ($sellUid) { $query->where('a.sell_uid', $sellUid)->whereIn('a.status', [1, 2]); }); } else if ($userId) { $query->where('a.user_id', '=', $userId); } else if ($sellUid) { $query->where('a.sell_uid', '=', $sellUid); } }) ->sum('real_price')); $bonusRate = ConfigService::make()->getConfigByCode('bonus_rate'); $bonusRate = $bonusRate ? $bonusRate : 5; $counts['bonus'] = intval($counts['total'] * $bonusRate / 100); $counts['fee'] = intval($this->model->from('trade as a') ->leftJoin('member as b', 'a.user_id', '=', 'b.id') ->where($where) ->where(function ($query) use ($params) { $time = isset($params['time']) ? $params['time'] : 0; if ($time) { $query->where('a.pay_time', '>=', $time)->orWhere('a.create_time', '>=', $time); } }) ->where(function ($query) use ($userId, $sellUid, $status) { if ($sellUid && $userId) { $query->where('a.user_id', $userId)->orWhere(function ($query) use ($sellUid) { $query->where('a.sell_uid', $sellUid)->whereIn('a.status', [1, 2]); }); } else if ($userId) { $query->where('a.user_id', '=', $userId); } else if ($sellUid) { $query->where('a.sell_uid', '=', $sellUid); } }) ->sum('fee')); $serviceRate = ConfigService::make()->getConfigByCode('service_fee_rate'); $serviceRate = $serviceRate ? $serviceRate : 8; $counts['service_fee'] = intval($counts['total'] * $serviceRate / 100); return $counts; } /** * 获取用户当天 * @param $userId * @return array|mixed */ public function getCountByDay($userId) { $cacheKey = "caches:trade:count:{$userId}"; $data = RedisService::get($cacheKey); if($data){ return $data; } $data = $this->model->where(['user_id'=> $userId, 'status'=> 4,'is_sell'=> 2,'mark'=>1]) ->where('create_time','>=',strtotime(date('Y-m-d'))) ->count('id'); if($data){ RedisService::set($cacheKey, $data, rand(3,5)); } return $data; } /** * 添加或编辑 * @return array * @since 2020/11/11 * @author laravel开发员 */ public function edit() { $data = request()->all(); return parent::edit($data); // TODO: Change the autogenerated stub } /** * 获取用户交易统计 * @param $userId * @param int $status * @param int $time * @return mixed */ public function getUserTradeTotal($userId, $status = 0, $time = 0) { $cacheKey = "caches:trade:userTotal:{$userId}_" . (is_array($status) ? implode('-', $status) : $status) . "_{$time}"; $data = RedisService::get($cacheKey); if ($data) { return $data; } $where = ['a.user_id' => $userId, 'a.mark' => 1, 'b.status' => 1, 'b.mark' => 1]; $data = $this->model->from('trade as a') ->leftJoin('member as b', 'b.id', '=', 'a.user_id') ->where($where) ->where(function ($query) use ($status, $time) { $query->whereIn('a.status', is_array($status) ? $status : [$status]); // 本月 if ($time == 1) { $query->where('a.pay_time', '>=', strtotime(date('Y-m-01'))); } // 今日 else if ($time == 2) { $query->where('a.pay_time', '>=', strtotime(date('Y-m-d'))); } }) ->sum('a.real_price'); RedisService::set($cacheKey, $data, rand(3, 5)); return $data; } /** * 获取用户团队交易统计 * @param $userId * @param int $status * @param int $time * @return mixed */ public function getTeamTradeTotal($userId, $status = 0, $time = 0) { $cacheKey = "caches:trade:teamTotal:{$userId}_" . (is_array($status) ? implode('-', $status) : $status) . "_{$time}"; $data = RedisService::get($cacheKey); if ($data) { return $data; } $where = ['b.parent_id' => $userId, 'a.mark' => 1, 'b.status' => 1]; $data = $this->model->from('trade as a') ->leftJoin('member as b', 'b.id', '=', 'a.user_id') ->where($where) ->where(function ($query) use ($status, $time) { $query->whereIn('a.status', is_array($status) ? $status : [$status]); // 本月 if ($time == 1) { $query->where('a.pay_time', '>=', strtotime(date('Y-m-01'))); } // 今日 else if ($time == 2) { $query->where('a.pay_time', '>=', strtotime(date('Y-m-d'))); } }) ->sum('a.real_price'); RedisService::set($cacheKey, $data, rand(3, 5)); return $data; } /** * 获取店铺交易统计 * @param $userId * @param int $time * @return mixed */ public function getShopTradeTotal($shopId, $type = 'real_price', $time = 2) { $cacheKey = "caches:trade:shop_{$type}:{$shopId}_" . (is_array($time) ? implode('-', $time) : $time); $data = RedisService::get($cacheKey); if ($data) { return round($data, 2); } $where = ['a.shop_id' => $shopId, 'a.mark' => 1]; $data = $this->model->from('trade as a') ->leftJoin('member as b', 'b.id', '=', 'a.user_id') ->where($where) ->whereIn('a.status', [3, 4]) ->where(function ($query) use ($time) { // 本月 if ($time == 1) { $query->where('a.pay_time', '>=', strtotime(date('Y-m-01'))); } // 今日 else if ($time == 2) { $query->where('a.pay_time', '>=', strtotime(date('Y-m-d'))); } }) ->sum('a.' . $type); RedisService::set($cacheKey, $data, rand(3, 5)); return round($data, 2); } /** * 获取店铺佣金统计 * @param $userId * @param int $time * @return mixed */ public function getShopBonusTotal($shopId, $time = 2) { $cacheKey = "caches:trade:shop_bonus:{$shopId}_" . (is_array($time) ? implode('-', $time) : $time); $data = RedisService::get($cacheKey); if ($data) { return round($data, 2); } $where = ['a.shop_id' => $shopId, 'type' => 2, 'a.coin_type' => 2, 'a.status' => 1, 'a.mark' => 1]; $data = AccountModel::from('account_log as a') ->leftJoin('member as b', 'b.id', '=', 'a.user_id') ->where($where) ->where(function ($query) use ($time) { // 本月 if ($time == 1) { $query->where('a.create_time', '>=', strtotime(date('Y-m-01'))); } // 今日 else if ($time == 2) { $query->where('a.create_time', '>=', strtotime(date('Y-m-d'))); } else if ($time) { $month = date('Y-m', $time / 1000); $lastDay = strtotime("{$month}-01 +1 month -1 day"); if ($month) { $query->where('a.create_time', '>=', $time / 1000); $query->where('a.create_time', '<', $lastDay + 86400); } } }) ->sum('a.money'); RedisService::set($cacheKey, $data, rand(3, 5)); return round($data, 2); } /** * 获取用户佣金统计 * @param $userId * @param int $time * @return mixed */ public function getTradeBonusTotal($userId, $time = 0) { $cacheKey = "caches:trade:bonus:{$userId}_" . (is_array($time) ? implode('-', $time) : $time); $data = RedisService::get($cacheKey); if ($data) { return round($data, 2); } $where = ['a.user_id' => $userId, 'type' => 2, 'a.coin_type' => 2, 'a.status' => 1, 'a.mark' => 1]; $data = AccountModel::from('account_log as a') ->leftJoin('member as b', 'b.id', '=', 'a.user_id') ->where($where) ->where(function ($query) use ($time) { // 本月 if ($time == 1) { $query->where('a.create_time', '>=', strtotime(date('Y-m-01'))); } // 今日 else if ($time == 2) { $query->where('a.create_time', '>=', strtotime(date('Y-m-d'))); } else if ($time) { $month = date('Y-m', $time / 1000); $lastDay = strtotime("{$month}-01 +1 month -1 day"); if ($month) { $query->where('a.create_time', '>=', $time / 1000); $query->where('a.create_time', '<', $lastDay + 86400); } } }) ->sum('a.money'); RedisService::set($cacheKey, $data, rand(3, 5)); return round($data, 2); } /** * 获取用户收益统计 * @param $userId * @param int $time * @return mixed */ public function getTradeProfitTotal($userId, $time = 0) { $cacheKey = "caches:trade:profit:{$userId}_" . (is_array($time) ? implode('-', $time) : $time); $data = RedisService::get($cacheKey); if ($data) { return round($data, 2); } $where = ['a.user_id' => $userId, 'type' => 2, 'a.coin_type' => 5, 'a.status' => 1, 'a.mark' => 1]; $data = AccountModel::from('account_log as a') ->leftJoin('member as b', 'b.id', '=', 'a.user_id') ->where($where) ->where(function ($query) use ($time) { // 本月 if ($time == 1) { $query->where('a.create_time', '>=', strtotime(date('Y-m-01'))); } // 今日 else if ($time == 2) { $query->where('a.create_time', '>=', strtotime(date('Y-m-d'))); } else if ($time) { $month = date('Y-m', $time / 1000); $lastDay = strtotime("{$month}-01 +1 month -1 day"); if ($month) { $query->where('a.create_time', '>=', $time / 1000); $query->where('a.create_time', '<', $lastDay + 86400); } } }) ->sum('a.money'); RedisService::set($cacheKey, $data, rand(3, 5)); return round($data, 2); } /** * 获取用户佣金统计 * @param $userId * @param int $status * @param int $time * @return mixed */ public function getTradeBonusTotal1($userId, $status = 0, $time = 0) { $cacheKey = "caches:trade:bonus:{$userId}_" . (is_array($status) ? implode('-', $status) : $status) . "_" . (is_array($time) ? implode('-', $time) : $time); $data = RedisService::get($cacheKey); if ($data) { return round($data, 2); } $where = ['b.parent_id' => $userId, 'a.mark' => 1, 'b.status' => 1]; $data = $this->model->from('trade as a') ->leftJoin('member as b', 'b.id', '=', 'a.user_id') ->where($where) ->where(function ($query) use ($status, $time) { $query->whereIn('a.status', is_array($status) ? $status : [$status]); // 本月 if ($time == 1) { $query->where('a.pay_time', '>=', strtotime(date('Y-m-01'))); } // 今日 else if ($time == 2) { $query->where('a.pay_time', '>=', strtotime(date('Y-m-d'))); } else if (is_array($time)) { $start = isset($time[0]) ? $time[0] : ''; $end = isset($time[1]) ? $time[1] : ''; if ($end && $end > $start) { $query->where('a.pay_time', '<=', strtotime($end)); if ($start) { $query->where('a.pay_time', '>=', strtotime($start)); } } else if ($start) { $query->where('a.pay_time', '=', strtotime($start)); } } }) ->sum('a.bonus'); RedisService::set($cacheKey, $data, rand(3, 5)); return round($data, 2); } /** * 获取用户收益统计 * @param $userId * @param int $status * @param int $time * @return mixed */ public function getTradeProfitTotal1($userId, $status = 0, $time = 0) { $cacheKey = "caches:trade:profit:{$userId}_" . (is_array($status) ? implode('-', $status) : $status) . "_" . (is_array($time) ? implode('-', $time) : $time); $data = RedisService::get($cacheKey); if ($data) { return round($data, 2); } $where = ['a.user_id' => $userId, 'a.mark' => 1, 'b.status' => 1]; $data = $this->model->from('trade as a') ->leftJoin('member as b', 'b.id', '=', 'a.user_id') ->where($where) ->where(function ($query) use ($status, $time) { $query->whereIn('a.status', is_array($status) ? $status : [$status]); // 本月 if ($time == 1) { $query->where('a.pay_time', '>=', strtotime(date('Y-m-01'))); } // 今日 else if ($time == 2) { $query->where('a.pay_time', '>=', strtotime(date('Y-m-d'))); } else if (is_array($time)) { $start = isset($time[0]) ? $time[0] : ''; $end = isset($time[1]) ? $time[1] : ''; if ($end && $end > $start) { $query->where('a.pay_time', '<=', strtotime($end)); if ($start) { $query->where('a.pay_time', '>=', strtotime($start)); } } else if ($start) { $query->where('a.pay_time', '=', strtotime($start)); } } }) ->sum('a.profit'); RedisService::set($cacheKey, $data, rand(3, 5)); return round($data, 2); } /** * 抢拍交易订单数 * @param $userId 用户ID * @param int $status 状态 * @return mixed */ public function getNewTradeCountByStatus($userId, $shopId = 0, $status = 0) { $where = ['user_id' => $userId, 'mark' => 1, 'is_read' => 0, 'is_out' => 0]; if ($shopId) { $where['shop_id'] = $shopId; } $counts = $this->model->where($where) ->where(function ($query) use ($status) { $query->whereIn('status', is_array($status) ? $status : [$status]); }) ->where('create_time', '>=', strtotime(date('Y-m-d'))) ->select(['status', DB::raw('count(*) as count')]) ->groupBy('status') ->get(); if ($counts) { $temps = ['status1' => 0, 'status2' => 0, 'status3' => 0]; foreach ($counts as $v) { $temps['status' . $v['status']] = $v['count']; } $counts = $temps; } else { $counts = ['status1' => 0, 'status2' => 0, 'status3' => 0]; } return $counts; } /** * 获取用户抢拍数量 * @param $userId * @param string $time * @return array|mixed */ public function getTradeByDay($userId, $time=''){ $cacheKey = "caches:trade:snapNum:{$userId}"; $data = RedisService::get($cacheKey); if($data){ return $data; } $data = $this->model->where(['user_id'=> $userId,'mark'=>1]) ->whereIn('status',[1,2,3,4]) ->where(function($query) use($time){ if($time){ $query->where('create_time','>=', $time); } }) ->count('id'); if($data){ RedisService::set($cacheKey, $data, rand(3,5)); } return $data; } /** * 抢购 * @param $params * @param $userId * @param $shopId * @return bool */ public function buy($params, $userId, $shopId) { $goodsId = isset($params['id']) ? $params['id'] : 0; $info = GoodsService::make()->getInfo(['id' => $goodsId, 'status' => 1, 'mark' => 1]); $goodsUserId = isset($info['user_id']) ? $info['user_id'] : 0; $isTrade = isset($info['is_trade']) ? $info['is_trade'] : 0; if (empty($info)) { $this->error = 2031; return false; } if ($isTrade == 1) { $this->error = 2032; return false; } // 验证用户是否可以抢拍 $memberInfo = MemberService::make()->getCacheInfo($userId); $memberIsTrade = isset($memberInfo['is_trade']) ? $memberInfo['is_trade'] : 0; if ($memberIsTrade != 1) { $this->error = 2032; return false; } $shopInfo = ShopService::make()->getInfo($shopId); $shopUid = isset($shopInfo['user_id'])? $shopInfo['user_id'] : 0; if (empty($shopInfo)) { $this->error = 2033; return false; } // 非店长不可拍自己商品 if ($goodsUserId == $userId && $shopUid != $userId) { $this->error = 2036; return false; } // 营业时间 $curTime = time(); $startTime = isset($shopInfo['start_time']) ? $shopInfo['start_time'] : ''; $endTime = isset($shopInfo['end_time']) ? $shopInfo['end_time'] : ''; // 抢拍数量限制 $snapNum = ConfigService::make()->getConfigByCode('member_snap_num'); $snapNum = $snapNum>0? $snapNum : 5; // 店长自己抢 if ($shopUid == $userId) { $shopownerSnapNum = ConfigService::make()->getConfigByCode('shopowner_snap_num'); $snapNum = $shopownerSnapNum>0? $shopownerSnapNum : 5; $snapTime = ConfigService::make()->getConfigByCode('snap_time'); $snapTime = $snapTime ? $snapTime : 5; $curTime = strtotime(date('Y-m-d') . ' ' . $startTime) + 1; if (time() < strtotime(date('Y-m-d') . ' ' . $startTime) - $snapTime * 60) { $this->error = 2034; return false; } else if (time() > strtotime(date('Y-m-d') . ' ' . $endTime)) { $this->error = 2035; return false; } } else { if (time() < strtotime(date('Y-m-d') . ' ' . $startTime)) { $this->error = 2034; return false; } else if (time() > strtotime(date('Y-m-d') . ' ' . $endTime)) { $this->error = 2035; return false; } } // 抢拍数量验证 $curSnapNum = TradeService::make()->getTradeByDay($userId, strtotime(date('Y-m-d'))); if($curSnapNum>=$snapNum){ $this->error = lang(2096,['num'=> $snapNum]); return false; } // 如果是店长拍自身商品,直接转为隔天待售 if($shopUid == $goodsUserId && $shopUid == $userId){ GoodsModel::where(['id' => $goodsId])->update(['last_sell_time' => time(),'remark' => '店长自拍重新上架 ' . date('Y-m-d H:i:s'), 'update_time' => time()]); $this->error = 2041; // 抢拍成功,清除当天已抢拍数量统计 RedisService::keyDel("caches:trade:snapNum:{$userId}"); return true; } // 验证收款账号 if (!MemberBankService::make()->getBindInfo($userId)) { $this->error = 2037; return false; } $feeRate = ConfigService::make()->getConfigByCode('sell_fee_rate'); $feeRate = $feeRate ? $feeRate : '2.5'; $realPrice = intval($info['price'] - $info['sell_price'] + $info['source_price']); $fee = round($realPrice * $feeRate / 100, 0); $lockCacheKey = "caches:trade:lock:{$goodsId}"; if (RedisService::get($lockCacheKey)) { $this->error = 2032; return false; } RedisService::set($lockCacheKey, $info, rand(5, 10)); $data = [ 'order_sn' => get_order_num('T'), 'goods_id' => $goodsId, 'user_id' => $userId, 'shop_id' => $shopId, 'sell_uid' => $info['user_id'], 'num' => 1, 'price' => $info['price'], 'source_price' => $info['source_price'], 'sell_price' => $info['sell_price'], 'real_price' => $realPrice, 'new_real_price' => $realPrice, 'fee' => $fee, 'new_price' => $info['price'], 'remark' => '抢拍交易', 'create_time' => $curTime, 'update_time' => $curTime, 'status' => 1 ]; DB::beginTransaction(); if (TradeModel::where(['goods_id' => $goodsId, 'mark' => 1])->whereIn('status', [1, 2])->value('id')) { DB::rollBack(); $this->error = 2032; return false; } if (!TradeModel::insertGetId($data)) { DB::rollBack(); $this->error = 2040; RedisService::keyDel($lockCacheKey); return false; } if (!GoodsModel::where(['id' => $goodsId])->update(['is_trade' => 1, 'update_time' => time()])) { DB::rollBack(); $this->error = 2040; RedisService::keyDel($lockCacheKey); return false; } DB::commit(); $this->error = 2041; RedisService::keyDel($lockCacheKey); // 抢拍成功,清除当天已抢拍数量统计 RedisService::keyDel("caches:trade:snapNum:{$userId}"); return true; } /** * 付款 * @param $params * @param $userId * @param $shopId * @return bool */ public function pay($params, $userId, $shopId) { $id = isset($params['id']) ? $params['id'] : 0; $payImg = isset($params['pay_img']) ? $params['pay_img'] : ''; if (empty($payImg)) { $this->error = 2043; return false; } $info = $this->model->where(['id' => $id, 'mark' => 1])->first(); if (empty($id) || empty($info)) { $this->error = 2042; return false; } if ($info['status'] != 1) { $this->error = 2044; return false; } if ($info['user_id'] != $userId) { $this->error = 2045; return false; } // 卖家收款账号 // $bankInfo = MemberBankService::make()->getBindInfo($info['user_id']); // if (empty($bankInfo)) { // $this->error = 2060; // return false; // } if ($this->model->where(['id' => $id, 'mark' => 1])->update(['pay_time' => time(), 'pay_img' => $payImg, 'status' => 2, 'update_time' => time()])) { $this->error = 2046; return true; } $this->error = 2047; return false; } /** * 确认收款 * @param $params * @param $userId * @return bool */ public function confirm($params, $userId) { $id = isset($params['id']) ? $params['id'] : 0; $info = $this->model->where(['id' => $id, 'mark' => 1])->first(); if (empty($id) || empty($info)) { $this->error = 2042; return false; } if (!in_array($info['status'], [1, 2])) { $this->error = 2044; return false; } DB::beginTransaction(); $data = ['confirm_time' => time(), 'is_pay' => 1, 'status' => 3, 'update_time' => time()]; if (!$this->model->where(['id' => $id, 'mark' => 1])->update($data)) { $this->error = 2050; DB::rollBack(); return false; } DB::commit(); $this->error = 2049; return true; } /** * 确认收款 * @param $params * @param $userId * @return bool */ public function confirm1($params, $userId) { $id = isset($params['id']) ? $params['id'] : 0; $info = $this->model->where(['id' => $id, 'mark' => 1])->first(); if (empty($id) || empty($info)) { $this->error = 2042; return false; } if (!in_array($info['status'], [1, 2])) { $this->error = 2044; return false; } DB::beginTransaction(); $data = ['confirm_time' => time(), 'is_pay' => 1, 'status' => 3, 'update_time' => time()]; if (!$this->model->where(['id' => $id, 'mark' => 1])->update($data)) { $this->error = 2050; DB::rollBack(); return false; } $this->model->where(['goods_id' => $info['goods_id'], 'status' => 4, 'mark' => 1])->update(['is_out' => 1, 'update_time' => time()]); // 更改商品归属人 if (!GoodsModel::where(['id' => $info['goods_id'], 'mark' => 1])->update(['user_id' => $info['user_id'], 'update_time' => time()])) { $this->error = 2050; DB::rollBack(); return false; } $memberInfo = MemberModel::where(['id' => $info['user_id'], 'mark' => 1])->first(); $parentId = isset($memberInfo['parent_id']) ? $memberInfo['parent_id'] : 0; $meritsCount = isset($memberInfo['merits_count']) ? $memberInfo['merits_count'] : 0; $updateData = ['merits_count' => $meritsCount + $info['real_price'], 'merits_time' => date('Y-m-d H:i:s'), 'member_level' => 1, 'update_time' => time()]; if (!MemberModel::where(['id' => $info['user_id']])->update($updateData)) { $this->error = 2050; DB::rollBack(); return false; } // 佣金结算 $parentInfo = MemberModel::where(['id' => $parentId, 'mark' => 1])->first(); $bonusRate = ConfigService::make()->getConfigByCode('bonus_rate'); $bonusRate = $bonusRate ? $bonusRate : 5; $bonus = $info['real_price'] * $bonusRate / 100; $profitRate = ConfigService::make()->getConfigByCode('profit_rate'); $profitRate = $profitRate ? $profitRate : 0; $profit = $info['real_price'] * $profitRate / 100; if (!$this->model->where(['id' => $id, 'mark' => 1])->update(['bonus' => $bonus, 'profit' => $profit, 'update_time' => time()])) { $this->error = 2051; DB::rollBack(); return true; } // 收益记录 $data = [ 'user_id' => $info['user_id'], 'shop_id' => $info['shop_id'], 'source_uid' => 0, 'source_order_sn' => $info['order_sn'], 'type' => 2, 'coin_type' => 5, 'money' => $profit, 'balance' => 0, 'create_time' => time(), 'update_time' => time(), 'remark' => '抢拍收益', 'status' => 1, 'mark' => 1 ]; if (!AccountModel::insertGetId($data)) { $this->error = 2051; DB::rollBack(); return true; } // 佣金入账 if ($memberInfo && $parentId && $parentInfo && $bonus > 0) { $meritsTotal = isset($parentInfo['merits_total']) ? $parentInfo['merits_total'] : 0; $updateData = ['merits_total' => $meritsTotal + $info['real_price'], 'bonus' => $parentInfo['bonus'] + $bonus, 'bonus_total' => $parentInfo['bonus_total'] + $bonus, 'update_time' => time()]; if (!MemberModel::where(['id' => $parentId, 'mark' => 1])->update($updateData)) { $this->error = 2051; DB::rollBack(); return true; } // 佣金记录 $data = [ 'user_id' => $parentId, 'shop_id' => $info['shop_id'], 'source_uid' => $info['user_id'], 'source_order_sn' => $info['order_sn'], 'type' => 2, 'coin_type' => 2, 'money' => $bonus, 'balance' => $parentInfo['bonus'], 'create_time' => time(), 'update_time' => time(), 'remark' => '推广佣金', 'status' => 1, 'mark' => 1 ]; if (!AccountModel::insertGetId($data)) { $this->error = 2051; DB::rollBack(); return true; } // 结算统计 FinanceService::make()->settleBonus($bonus, 2); } DB::commit(); // 店铺统计 $shopId = isset($info['shop_id']) ? $info['shop_id'] : 0; $shopInfo = ShopModel::where(['id' => $shopId])->first(); if ($shopInfo) { ShopModel::where(['id' => $shopId])->update(['trade_count' => $shopInfo['trade_count'], 'trade_total' => $info['real_price'] + $shopInfo['trade_total']]); } $this->error = 2049; return true; } /** * 申请待售 * @param $params * @param $userId * @return false */ public function sell($params, $userId) { $id = isset($params['id']) ? $params['id'] : 0; $info = $this->model->where(['id' => $id, 'mark' => 1])->first(); if (empty($id) || empty($info)) { $this->error = 2042; return false; } if ($info['status'] != 3) { $this->error = 2053; return false; } if ($info['user_id'] != $userId) { $this->error = 2045; return false; } DB::beginTransaction(); if (!$this->model->where(['id' => $id])->update(['status' => 4, 'is_sell' => 1, 'update_time' => time()])) { DB::rollBack(); $this->error = 2054; return false; } if (!GoodsModel::where(['id' => $info['goods_id']])->update(['confirm_status' => 2, 'update_time' => time()])) { DB::rollBack(); $this->error = 2054; return false; } DB::commit(); $this->error = 2055; return true; } /** * 申请待售审核 * @param $params * @param $userId * @return false */ public function sellConfirm($params) { $id = isset($params['id']) ? $params['id'] : 0; $info = $this->model->from('trade as a') ->leftJoin('goods as b', 'b.id', '=', 'a.goods_id') ->where(['a.id' => $id, 'a.mark' => 1]) ->select(['a.*', 'b.split_price', 'b.split_num']) ->first(); if (empty($id) || empty($info)) { $this->error = 2042; return false; } if (!in_array($info['status'], [3, 4])) { $this->error = 2053; return false; } DB::beginTransaction(); $priceRate = ConfigService::make()->getConfigByCode('price_rate'); $priceRate = $priceRate ? $priceRate : 4; $stopSplitPrice = ConfigService::make()->getConfigByCode('stop_split_price'); $stopSplitPrice = $stopSplitPrice ? $stopSplitPrice : 500; // 判断是否可以上架或拆分 if ($info['split_price'] <= 0) { $splitPrice = ConfigService::make()->getConfigByCode('split_price'); $splitPrice = $splitPrice ? $splitPrice : 10000; $info['split_price'] = $splitPrice; } $realPrice = $info['real_price']; $sellPrice = $info['sell_price']; // 特价 $price = $info['price']; // 买入价格 $price1 = $info['new_price']; // 买入价格 $addPrice = intval($realPrice * $priceRate / 100, 0); // 满足涨价上架 if ($price1 + $addPrice < $info['split_price']) { // 更新价格 if (!$this->model->where(['id' => $id])->update(['status' => 4, 'new_price' => $price1 + $addPrice, 'new_real_price' => $realPrice + $addPrice, 'is_sell' => 2, 'update_time' => time()])) { $this->error = 2056; DB::rollBack(); return false; } // 更新其他交易状态 $this->model->where(['goods_id' => $info['goods_id'], 'status' => 4, 'mark' => 1])->whereNotIn('id', [$id])->update(['is_out' => 1, 'update_time' => time()]); if (!GoodsModel::where(['id' => $info['goods_id']])->update(['user_id'=>$info['user_id'],'last_sell_time' => time(), 'price' => $price1 + $addPrice, 'real_price' => $realPrice + $addPrice, 'is_trade' => 2, 'confirm_status' => 1, 'remark' => '上架审核 ' . date('Y-m-d H:i:s'), 'update_time' => time()])) { $this->error = 2056; DB::rollBack(); return false; } DB::commit(); // 佣金结算 if (!TradeService::make()->tradeSettle($id, $info)) { return false; } $this->error = 2057; return true; } // 停止拆分 else if ($info['sell_price'] == $stopSplitPrice) { // 更新审核状态 if (!$this->model->where(['id' => $id])->update(['status' => 4, 'is_sell' => 2, 'update_time' => time()])) { $this->error = 2056; DB::rollBack(); return false; } // 更改商品归属人 if (!GoodsModel::where(['id' => $info['goods_id'], 'mark' => 1])->update(['user_id' => $info['user_id'], 'update_time' => time()])) { $this->error = 2050; DB::rollBack(); return false; } if (!GoodsModel::where(['id' => $info['goods_id']])->update(['status' => 1, 'confirm_status' => 2, 'split_stop' => 1, 'update_time' => time()])) { $this->error = 2054; DB::rollBack(); return false; } // 佣金结算 DB::commit(); if (!TradeService::make()->tradeSettle($id, $info)) { return false; } $this->error = 2064; return true; } // 满足拆分 else if ($info['split_price']) { // 更新审核状态 if (!$this->model->where(['id' => $id])->update(['status' => 4, 'is_sell' => 2, 'update_time' => time()])) { $this->error = 2056; DB::rollBack(); return false; } // 更新其他交易状态 $this->model->where(['goods_id' => $info['goods_id'], 'status' => 4, 'mark' => 1])->whereNotIn('id', [$id])->update(['is_out' => 1, 'update_time' => time()]); // 更改商品归属人 if (!GoodsModel::where(['id' => $info['goods_id'], 'mark' => 1])->update(['user_id' => $info['user_id'], 'update_time' => time()])) { $this->error = 2050; DB::rollBack(); return false; } if (!GoodsService::make()->split($info['goods_id'], $info)) { $this->error = 2058; DB::rollBack(); return false; } // 佣金结算 DB::commit(); if (!TradeService::make()->tradeSettle($id, $info)) { return false; } $this->error = 2059; return true; } $this->error = 2056; return false; } /** * 交易结算 * @param $tradeId * @param $info * @return bool */ public function tradeSettle($tradeId, $info) { // 更新商品交易状态 DB::beginTransaction(); // 交易次数 GoodsModel::where(['id' => $info['goods_id'], 'mark' => 1])->increment('trade_count', 1); $memberInfo = MemberModel::where(['id' => $info['user_id'], 'mark' => 1])->first(); $parentId = isset($memberInfo['parent_id']) ? $memberInfo['parent_id'] : 0; $meritsCount = isset($memberInfo['merits_count']) ? $memberInfo['merits_count'] : 0; $updateData = ['merits_count' => $meritsCount + $info['real_price'], 'merits_time' => date('Y-m-d H:i:s'), 'member_level' => 1, 'update_time' => time()]; if (!MemberModel::where(['id' => $info['user_id']])->update($updateData)) { $this->error = 2050; DB::rollBack(); return false; } // 佣金结算 $parentInfo = MemberModel::where(['id' => $parentId, 'mark' => 1])->first(); $bonusRate = ConfigService::make()->getConfigByCode('bonus_rate'); $bonusRate = $bonusRate ? $bonusRate : 5; $bonus = $info['real_price'] * $bonusRate / 100; $profitRate = ConfigService::make()->getConfigByCode('profit_rate'); $profitRate = $profitRate ? $profitRate : 0; $profit = $info['real_price'] * $profitRate / 100; // 平台服务费 $serviceRate = ConfigService::make()->getConfigByCode('service_fee_rate'); $serviceRate = $serviceRate ? $serviceRate : 8; $serviceFee = round($info['real_price'] * $serviceRate / 100, 0); if (!$this->model->where(['id' => $tradeId, 'mark' => 1])->update(['bonus' => $bonus,'service_fee'=> $serviceFee, 'profit' => $profit, 'update_time' => time()])) { $this->error = 2051; DB::rollBack(); return true; } // 服务费统计 if($serviceFee>0){ FinanceService::make()->settleBonus($serviceFee, 1); } // 收益记录 $data = [ 'user_id' => $info['user_id'], 'shop_id' => $info['shop_id'], 'source_uid' => 0, 'source_order_sn' => $info['order_sn'], 'type' => 2, 'coin_type' => 5, 'money' => $profit, 'balance' => 0, 'create_time' => time(), 'update_time' => time(), 'remark' => '抢拍收益', 'status' => 1, 'mark' => 1 ]; if (!AccountModel::insertGetId($data)) { $this->error = 2051; DB::rollBack(); return true; } // 佣金入账 if ($memberInfo && $parentId && $parentInfo && $bonus > 0) { $meritsTotal = isset($parentInfo['merits_total']) ? $parentInfo['merits_total'] : 0; $updateData = ['merits_total' => $meritsTotal + $info['real_price'], 'bonus' => $parentInfo['bonus'] + $bonus, 'bonus_total' => $parentInfo['bonus_total'] + $bonus, 'update_time' => time()]; if (!MemberModel::where(['id' => $parentId, 'mark' => 1])->update($updateData)) { $this->error = 2051; DB::rollBack(); return true; } // 佣金记录 $data = [ 'user_id' => $parentId, 'shop_id' => $info['shop_id'], 'source_uid' => $info['user_id'], 'source_order_sn' => $info['order_sn'], 'type' => 2, 'coin_type' => 2, 'money' => $bonus, 'balance' => $parentInfo['bonus'], 'create_time' => time(), 'update_time' => time(), 'remark' => '推广佣金', 'status' => 1, 'mark' => 1 ]; if (!AccountModel::insertGetId($data)) { $this->error = 2051; DB::rollBack(); return true; } // 结算统计 FinanceService::make()->settleBonus($bonus, 2); } DB::commit(); // 店铺统计 $shopId = isset($info['shop_id']) ? $info['shop_id'] : 0; $shopInfo = ShopModel::where(['id' => $shopId])->first(); if ($shopInfo) { ShopModel::where(['id' => $shopId])->update(['trade_count' => $shopInfo['trade_count'] + 1, 'trade_total' => $info['real_price'] + $shopInfo['trade_total']]); } return true; } /** * 修改订单 * @param $params * @return bool */ public function modify($params) { $id = isset($params['id']) ? $params['id'] : 0; $status = isset($params['status']) ? $params['status'] : 0; $info = $this->model->where(['id' => $id, 'mark' => 1])->first(); if (!$id || empty($info)) { $this->error = 2042; return false; } if (!in_array($info['status'], [1, 2, 3, 4])) { $this->error = 2082; return false; } if (!in_array($status, [1, 2, 4])) { $this->error = 2087; return false; } // $safePassword = isset($params['password'])? trim($params['password']) : ''; // if(empty($safePassword)){ // $this->error = 2085; // return false; // } $memberInfo = MemberModel::where(['id' => $info['user_id']])->select(['id', 'safe_password'])->first(); $password = isset($memberInfo['safe_password']) ? $memberInfo['safe_password'] : ''; if (empty($memberInfo)) { $this->error = 2019; return false; } // $safePassword = get_password($safePassword); // if($password != $safePassword){ // $this->error = 2086; // return false; // } if ($this->model->where(['id' => $id])->update(['status' => $status, 'update_time' => time()])) { $this->error = 1020; return true; } else { $this->error = 1021; return false; } } /** * 修改订单 * @param $params * @return bool */ public function cancel($params) { $id = isset($params['id']) ? $params['id'] : 0; $status = isset($params['status']) ? $params['status'] : 0; $info = $this->model->where(['id' => $id, 'mark' => 1])->first(); if (!$id || empty($info)) { $this->error = 2042; return false; } if (!in_array($info['status'], [1, 2, 3, 4])) { $this->error = 2082; return false; } DB::beginTransaction(); if (!$this->model->where(['id' => $id])->update(['status' => 5,'remark'=>'店长取消订单:'.date('Y-m-d H:i:s'), 'update_time' => time()])) { DB::rollBack(); $this->error = 2089; return false; } if(!GoodsModel::where(['id'=> $info['goods_id'],'mark'=>1])->update(['status'=>1,'is_trade'=>2,'confirm_status'=>1,'remark'=>'店长取消订单'])){ DB::rollBack(); $this->error = 2089; return false; } DB::commit(); $this->error = 2088; return true; } /** * 定期清除交易记录 * @return false */ public function clearByDay() { $day = ConfigService::make()->getConfigByCode('clear_trade_time'); $day = $day ? $day : 2; $cacheKey = "caches:task:clearTrade:d{$day}_" . date('Ymd'); if (RedisService::get($cacheKey)) { $this->error = '2301'; return false; } // 取消订单 $this->model->where('create_time', '<', strtotime(date('Y-m-d'))) ->where('create_time', '<', time() - 7200)->where(['mark' => 1]) ->where('status','<',4) ->update(['mark'=>0,'remark'=>'订单未付款取消']); // 清除订单 $clearDay = strtotime(date('Y-m-d')) - $day * 86400; $count = $this->model->where('create_time', '<', $clearDay)->count(); if ($count <= 0) { $this->error = ''; RedisService::set($cacheKey, ['error' => '没有记录可以清除', 'day' => $day, 'clearDay' => date('Y-m-d', $clearDay)], 6 * 3600); return false; } $this->model->where('create_time', '<', $clearDay)->update(['mark' => 0, 'remark' => '到期清除', 'update_time' => time()]); $lists = $this->model->where('create_time', '<', $clearDay - 86400)->where(['mark' => 0])->select(['id','pay_img'])->get(); if($lists){ $lists = $lists->toArray(); foreach ($lists as $v){ $payImg = isset($v['pay_img'])? $v['pay_img'] : ''; if($payImg && file_exists(ATTACHMENT_PATH.$payImg)){ unlink(ATTACHMENT_PATH.$payImg); } } } $this->model->where('create_time', '<', $clearDay - 86400)->where(['mark' => 0])->delete(); $result = ['count' => $count, 'day' => date('Y-m-d H:i:s', $clearDay)]; RedisService::set($cacheKey, $result, 7200); return $result; } }