diff --git a/app/Domains/Company/Http/Controllers/BootstrapController.php b/app/Domains/Company/Http/Controllers/BootstrapController.php index 3a8c80b9..d1e3506d 100644 --- a/app/Domains/Company/Http/Controllers/BootstrapController.php +++ b/app/Domains/Company/Http/Controllers/BootstrapController.php @@ -45,14 +45,26 @@ class BootstrapController extends Controller */ public function products(ProductService $productService) { - $conditions = [ - 'company_id' => $this->account->company_id, - 'carrier_operator' => $this->request->get('carrier_operator'), - ]; + $conditions = $this->request->all(); + + $conditions['company_id'] = $this->account->company_id; + + $conditions['type'] = $conditions['type'] ? ($conditions['type'] == 1 ? 0 : $conditions['type']) : 0; $res = $productService->index($conditions); - $res = $res->where('status', 0); + $res = $res->where('status', 0)->transform(function ($item) { + return [ + 'id' => $item->id, + 'sn' => $item->sn, + 'name' => $item->name, + 'carrier_operator' => $item->carrier_operator, + 'carrier_operator_name' => $item->carrier_operator_name, + 'package_id' => $item->package_id, + 'package_name' => $item->package['name'] ?? '', + 'price' => $item->price + ]; + })->values(); return res($res, '企业套餐列表', 201); } diff --git a/app/Domains/Company/Http/Controllers/CardController.php b/app/Domains/Company/Http/Controllers/CardController.php new file mode 100644 index 00000000..a69d3b99 --- /dev/null +++ b/app/Domains/Company/Http/Controllers/CardController.php @@ -0,0 +1,45 @@ +request = $request; + $this->account = $request->user('company'); + $this->orderCardPartitionRepository = $orderCardPartitionRepository; + } + + /** + * 订单列表 + */ + public function index() + { + $conditions = $this->request->all(); + $conditions['company_id'] = $this->account->company_id; + $conditions['type'] = [0, 1]; + $limit = $conditions['limit'] ?? 20; + + $cards = $this->orderCardPartitionRepository->selectRaw('distinct on (sim) sim')->withConditions($conditions)->paginate($limit); + + $services = $this->orderCardPartitionRepository->select('MIN(service_start_at),MAX(service_end_at)') + ->withConditions(['sim' => $cards->pluck('sim')->toArray()])->groupBy('sim')->get(); + + $time = Carbon::now()->format('Y-m-d H:i:s'); + + $packages = $this->orderCardPartitionRepository->selectRaw('distinct on (sim) package_id') + ->where('service_start_at', '<=', $time); + } +} diff --git a/app/Domains/Virtual/Commands/Sync/ProductSync.php b/app/Domains/Virtual/Commands/Sync/ProductSync.php index 3cad215e..ec4361b0 100644 --- a/app/Domains/Virtual/Commands/Sync/ProductSync.php +++ b/app/Domains/Virtual/Commands/Sync/ProductSync.php @@ -61,8 +61,16 @@ class ProductSync extends Command ]; } + + Product::upsert($products, ['sn', 'deleted_at'], true); + $subSql = 'SELECT DISTINCT ON (company_id, package_id) id FROM virtual_products ORDER BY company_id, package_id, updated_at DESC'; + + Product::whereRaw("id not in ($subSql)")->update(['status' => 1]); + app(ProductRepository::class)->forgetCached(); } } + + diff --git a/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php b/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php index db9ad000..8693cc02 100644 --- a/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php +++ b/app/Domains/Virtual/Repositories/Concerns/OrderCardConcern.php @@ -82,6 +82,22 @@ trait OrderCardConcern $query->where('created_at', '<=', Carbon::parse($conditions['endtime'])); } + if (isset($conditions['service_start_starttime'])) { + $query->where('created_at', '>=', Carbon::parse($conditions['service_start_starttime'])); + } + + if (isset($conditions['service_start_endtime'])) { + $query->where('created_at', '<=', Carbon::parse($conditions['service_start_endtime'])); + } + + if (isset($conditions['service_end_starttime'])) { + $query->where('created_at', '>=', Carbon::parse($conditions['service_end_starttime'])); + } + + if (isset($conditions['service_end_endtime'])) { + $query->where('created_at', '<=', Carbon::parse($conditions['service_end_endtime'])); + } + if (isset($conditions['month'])) { $time = Carbon::parse($conditions['month'])->format('Y-m-d H:i:s'); $query->where(function ($subQuery) use ($time) { diff --git a/app/Domains/Virtual/Services/OrderService.php b/app/Domains/Virtual/Services/OrderService.php index 4d706de7..fcb9fed4 100644 --- a/app/Domains/Virtual/Services/OrderService.php +++ b/app/Domains/Virtual/Services/OrderService.php @@ -324,23 +324,26 @@ class OrderService extends Service * * @return bool */ - public function reset($id) + public function reset($ids) { - if (!$node = $this->orderRepository->find($id)) { - throw new NotExistException('订单不存在或已删除'); - } + DB::transaction(function () use ($ids) { + foreach ($ids as $id) { + $id = intval($id); - DB::transaction(function () use ($id, $node) { - if ($node->type === 0) { - // 转销售重置 - $sql = 'UPDATE virtual_order_cards_partition SET sim=original_sim,original_sim=0 - WHERE original_sim IN ( - SELECT DISTINCT SIM FROM virtual_order_cards_partition WHERE type=0 AND order_id = ? - )'; - DB::statement($sql, $id); + if (!$node = $this->orderRepository->find($id)) { + throw new NotExistException('订单不存在或已删除'); + } + + if ($node->type === 0) { + // 转销售重置 + $sql = 'UPDATE virtual_order_cards_partition SET sim=original_sim,original_sim=0 + WHERE original_sim IN ( + SELECT DISTINCT SIM FROM virtual_order_cards_partition WHERE type=0 AND order_id = ? + )'; + DB::statement($sql, [$id]); + } } - $this->orderCardPartitionRepository->whereIn('order_id', $ids)->delete(); app(RealOrderCardPartitionRepository::class)->whereIn('virtual_order_id', $ids)->update(['virtual_order_id' => 0]); }); diff --git a/frontend/src/views/virtual/orders/index.vue b/frontend/src/views/virtual/orders/index.vue index c1c08457..24460a89 100644 --- a/frontend/src/views/virtual/orders/index.vue +++ b/frontend/src/views/virtual/orders/index.vue @@ -110,13 +110,6 @@ -
  • - -
  • -
  • diff --git a/frontend/src/views/virtual/products/index.vue b/frontend/src/views/virtual/products/index.vue index 0d324707..263bee5d 100644 --- a/frontend/src/views/virtual/products/index.vue +++ b/frontend/src/views/virtual/products/index.vue @@ -72,9 +72,14 @@ >{{ item.name }}
  • - -