| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- <?php
- namespace app\services\activity;
- use app\dao\activity\StoreActivityDao;
- use app\services\activity\seckill\StoreSeckillServices;
- use app\services\BaseServices;
- use app\services\product\product\StoreProductServices;
- use app\services\product\sku\StoreProductAttrValueServices;
- use crmeb\exceptions\AdminException;
- use crmeb\services\CacheService;
- class StoreActivityServices extends BaseServices
- {
- public function __construct(StoreActivityDao $dao)
- {
- $this->dao = $dao;
- }
- public function activityList($where)
- {
- [$page, $limit] = $this->getPageValue();
- $list = $this->dao->activityList($where, '*', $page, $limit, ['seckill' => function ($query) {
- $query->field('id,activity_id');
- }]);
- $seckillTimesData = sys_data('routine_seckill_time');
- $resultArray = [];
- foreach ($seckillTimesData as $timesData) {
- $id = $timesData['id'];
- $time = intval($timesData['time']);
- $continued = intval($timesData['continued']);
- // 格式化时间,加上 ":00"
- $startTime = sprintf("%02d:00", $time);
- $endTime = sprintf("%02d:00", $time + $continued);
- $resultArray[$id] = $startTime . '-' . $endTime;
- }
- foreach ($list as &$item) {
- $item['start_day'] = date('Y-m-d H:i:s', $item['start_day']);
- $item['end_day'] = date('Y-m-d 23:59:59', $item['end_day']);
- $item['add_time'] = date('Y-m-d H:i:s', $item['add_time']);
- $item['product_count'] = count($item['seckill']);
- foreach (explode(',', $item['time_ids']) as $timeId) {
- $item['times_list'][] = $resultArray[$timeId];
- }
- }
- $count = $this->dao->activityCount($where);
- return compact('list', 'count');
- }
- public function activityInfo($id)
- {
- $info = $this->dao->get(['id' => $id]);
- if (!$info) throw new AdminException('数据不存在');
- $info = $info->toArray();
- /** @var StoreSeckillServices $seckillServices */
- $seckillServices = app()->make(StoreSeckillServices::class);
- $seckill = $seckillServices->getList(['activity_id' => $id, 'is_del' => 0], 0, 0);
- $info['section_time'] = [date('Y-m-d', $info['start_day']), date('Y-m-d', $info['end_day'])];
- $info['time_ids'] = array_map('intval', explode(',', $info['time_ids']));
- $productList = [];
- if ($seckill) {
- /** @var StoreProductServices $productServices */
- $productServices = app()->make(StoreProductServices::class);
- $productList = $productServices->searchList(['id' => array_column($seckill, 'product_id'), 'is_del' => 0]);
- $productList = $productList['list'] ?? [];
- $seckill = array_combine(array_column($seckill, 'product_id'), $seckill);
- //放入秒杀商品价格
- foreach ($productList as &$product) {
- $product['product_price'] = $product['price'];
- $seckillInfo = $seckill[$product['id']] ?? [];
- $attrValue = $product['attrs'] ?? [];
- if ($seckillInfo && $attrValue) {
- $product['status'] = $seckillInfo['status'];
- $seckillAttrValue = $seckillInfo['attrs'] ?? [];
- if ($seckillAttrValue) {
- $seckillAttrValue = array_combine(array_column($seckillAttrValue, 'suk'), $seckillAttrValue);
- foreach ($attrValue as &$value) {
- $value['status'] = 0;
- if (isset($seckillAttrValue[$value['suk']])) {
- $value['status'] = 1;
- }
- $value['product_price'] = $value['price'];
- if ($value['status']) {
- $value['quota'] = $seckillAttrValue[$value['suk']]['quota'] ?? 0;
- $value['quota_show'] = $seckillAttrValue[$value['suk']]['quota_show'] ?? 0;
- $value['price'] = $seckillAttrValue[$value['suk']]['price'] ?? 0;
- $value['cost'] = $seckillAttrValue[$value['suk']]['cost'] ?? 0;
- $value['ot_price'] = $seckillAttrValue[$value['suk']]['ot_price'] ?? 0;
- }
- }
- $product['attrs'] = $attrValue;
- }
- }
- }
- }
- $info['product_infos'] = $productList;
- return $info;
- }
- public function activityDel($id, $type)
- {
- if (!$id) throw new AdminException('缺少参数');
- $this->dao->update($id, ['is_del' => 1]);
- if ($type == 1) {
- /** @var StoreSeckillServices $storeSeckillServices */
- $storeSeckillServices = app()->make(StoreSeckillServices::class);
- $ids = $storeSeckillServices->getColumn(['activity_id' => $id], 'id');
- /** @var StoreProductAttrValueServices $storeProductAttrValueServices */
- $storeProductAttrValueServices = app()->make(StoreProductAttrValueServices::class);
- foreach ($ids as $sid) {
- $storeSeckillServices->update($sid, ['is_del' => 1]);
- $unique = $storeProductAttrValueServices->value(['product_id' => $id, 'type' => 1], 'unique');
- if ($unique) {
- CacheService::delete('seckill_' . $unique . '_1');
- }
- }
- }
- return true;
- }
- public function activityStatus($id, $status, $type)
- {
- if (!$id) throw new AdminException('缺少参数');
- $this->dao->update($id, ['status' => $status]);
- if ($type == 1) {
- /** @var StoreSeckillServices $storeSeckillServices */
- $storeSeckillServices = app()->make(StoreSeckillServices::class);
- $ids = $storeSeckillServices->getColumn(['activity_id' => $id], 'id');
- foreach ($ids as $sid) {
- $storeSeckillServices->update($sid, ['status' => $status]);
- }
- }
- return true;
- }
- }
|