diff --git a/app/Domains/Real/Commands/Sync/AddedOrderSync.php b/app/Domains/Real/Commands/Sync/AddedOrderSync.php index c17fdcf0..6c1b12b9 100644 --- a/app/Domains/Real/Commands/Sync/AddedOrderSync.php +++ b/app/Domains/Real/Commands/Sync/AddedOrderSync.php @@ -78,7 +78,25 @@ class AddedOrderSync extends Command foreach ($dataOrderCards as $type => $orderCards) { foreach (array_chunk($orderCards, $this->chunks) as $data) { $this->getOutput()->write('.'); - DB::table($this->tables[$type])->upsert($data, ['sim', 'order_id']); + + $table = $this->tables[$type]; + + $virtualTable = str_replace('real_', 'virtual_', $table); + + $starttime = $this->datetime->copy()->startOfMonth()->startOfDay(); + $endtime = $this->datetime->copy()->endOfMonth()->endOfDay(); + + $orders = DB::table($virtualTable)->selectRaw('sim,MAX(order_id)') + ->where('create_time', '>=', $starttime->timestamp) + ->where('create_time', '<=', $endtime->timestamp) + ->whereIn('sim', array_pluck($data, 'sim')) + ->groupBy('sim')->get()->pluck('order_id', 'sim'); + + foreach ($data as &$value) { + $value['virtual_order_id'] = $orders[$value['sim']] ?? 0; + } + + DB::table($table)->upsert($data, ['sim', 'order_id'], true); } } diff --git a/app/Domains/Real/Commands/Sync/OrderBaseSync.php b/app/Domains/Real/Commands/Sync/OrderBaseSync.php index eb8c607f..5e0327e8 100644 --- a/app/Domains/Real/Commands/Sync/OrderBaseSync.php +++ b/app/Domains/Real/Commands/Sync/OrderBaseSync.php @@ -46,7 +46,13 @@ class OrderBaseSync extends Command $this->line('插入订单关联数据,条数:'.count($cards)); foreach (array_chunk($cards, $this->chunks) as $data) { $this->getOutput()->write('.'); - DB::table('real_order_cards')->upsert($data, ['sim', 'deleted_at']); + $orders = DB::table('virtual_order_cards')->select(['sim', 'order_id'])->whereIn('sim', array_pluck($data, 'sim'))->get()->pluck('order_id', 'sim'); + + foreach ($data as &$value) { + $value['virtual_order_id'] = $orders[$value['sim']] ?? 0; + } + + DB::table('real_order_cards')->upsert($data, ['sim', 'deleted_at'], true); } app(OrderCardPartitionRepository::class)->forgetCached(); $this->line('插入订单关联数据成功'); diff --git a/app/Domains/Real/Repositories/OrderCardPartitionRepository.php b/app/Domains/Real/Repositories/OrderCardPartitionRepository.php index 78b2f704..903f72e4 100644 --- a/app/Domains/Real/Repositories/OrderCardPartitionRepository.php +++ b/app/Domains/Real/Repositories/OrderCardPartitionRepository.php @@ -51,7 +51,7 @@ class OrderCardPartitionRepository extends Repository public function withVirtual($conditions) { - $select = 'distinct on (real_order_cards_partition.sim) + $select = 'distinct on (real_order_cards_partition.id) real_order_cards_partition.sim, real_order_cards_partition.order_id, real_order_cards_partition.virtual_order_id, @@ -64,13 +64,20 @@ class OrderCardPartitionRepository extends Repository $this->model = $this->model->leftJoin('virtual_order_cards_partition', 'virtual_order_cards_partition.sim', '=', 'real_order_cards_partition.sim'); - $this->model= $this->model->orderBy('real_order_cards_partition.sim')->orderBy('virtual_order_cards_partition.created_at'); + $this->model= $this->model + ->orderBy('real_order_cards_partition.id') + ->orderBy('virtual_order_cards_partition.created_at'); if (isset($conditions['type'])) { $conditions['type'] = array_wrap($conditions['type']); $this->model= $this->model->whereIn('real_order_cards_partition.type', $conditions['type']); } + if (isset($conditions['sim'])) { + $conditions['sim'] = array_wrap($conditions['sim']); + $this->model= $this->model->whereIn('real_order_cards_partition.sim', $conditions['sim']); + } + if (isset($conditions['order_id'])) { $conditions['order_id'] = array_wrap($conditions['order_id']); $this->model= $this->model->whereIn('real_order_cards_partition.order_id', $conditions['order_id']); diff --git a/app/Domains/Real/Services/OrderService.php b/app/Domains/Real/Services/OrderService.php index 8db40f5c..74b01a9f 100644 --- a/app/Domains/Real/Services/OrderService.php +++ b/app/Domains/Real/Services/OrderService.php @@ -9,6 +9,7 @@ use App\Domains\Real\Repositories\OrderRepository; use App\Domains\Real\Repositories\OrderCardPartitionRepository; use App\Domains\Virtual\Repositories\OrderRepository as VirtualOrderRepository; use App\Domains\Virtual\Repositories\OrderCardPartitionRepository as VirtualOrderCardPartitionRepository; +use App\Exceptions\NotAllowedException; class OrderService extends Service { @@ -72,6 +73,12 @@ class OrderService extends Service ini_set('memory_limit', '4096m'); ini_set('default_socket_timeout', -1); + $counts = $this->orderCardPartitionRepository->withConditions($conditions)->count(); + + if ($counts > 100000) { + throw new NotAllowedException("当前请求总卡量为{$counts}张,数据量过大,请筛选过滤后查询"); + } + $cards = $this->orderCardPartitionRepository->withVirtual($conditions)->get(); $tmpCards = $cards->groupBy('virtual_order_id'); diff --git a/app/Domains/Virtual/Services/OrderService.php b/app/Domains/Virtual/Services/OrderService.php index 3aed21e0..f4368bd4 100644 --- a/app/Domains/Virtual/Services/OrderService.php +++ b/app/Domains/Virtual/Services/OrderService.php @@ -21,6 +21,7 @@ use App\Models\Real\OrderCardPartition as RealOrderCardPartition; use App\Domains\Virtual\Repositories\OrderCardPartitionRepository; use App\Domains\Real\Repositories\OrderRepository as RealOrderRepository; use App\Domains\Real\Repositories\OrderCardPartitionRepository as RealOrderCardPartitionRepository; +use App\Exceptions\InvalidArgumentException; class OrderService extends Service { @@ -109,7 +110,8 @@ class OrderService extends Service public function store(array $attributes = []) { $rule = [ - 'type' => ['in:0,1,2,3,-1,-2'], // 转销售 -1,改企业 -2 + 'type' => ['in:0,1,2,3'], + 'sign' => ['in:1,2'], // 转销售 1,改企业 2 'company_id' => ['exists:virtual_companies,id'], 'product_id' => [], 'counts' => [], @@ -165,9 +167,14 @@ class OrderService extends Service DB::beginTransaction(); - // 改企业的卡新增一批虚拟卡,并替换原有订单里的卡 - if ($attributes['type'] == -2 && $attributes['selected']) { + if (isset($attributes['sign']) && $attributes['sign'] == 2) { + if (empty($attributes['selected'])) { + throw new InvalidArgumentException('请选择卡'); + } + + // 改企业的卡新增一批虚拟卡,并替换原有订单里的卡 $simArray = implode(',', array_pluck($attributes['selected'], 'sim')); + try { DB::statement("select change_cards('{{$simArray}}'::INT8[]);"); } catch (\Exception $e) { @@ -176,8 +183,8 @@ class OrderService extends Service } } - // 转销售和该企业的都立即激活卡 - if ($attributes['type'] <0 && $attributes['selected']) { + // 转销售和改企业的都立即激活卡 + if (isset($attributes['sign']) && in_array($attributes['sign'], [1, 2])) { $params = array_pluck($attributes['selected'], 'sim'); $sql = 'UPDATE cards SET virtual_activated_at = ? WHERE sim IN (%s)'; $sql = sprintf($sql, app(Grammar::class)->parameterize($params)); @@ -317,25 +324,22 @@ class OrderService extends Service * * @return bool */ - public function reset($ids) + public function reset($id) { - $ids = is_array($ids) ? $ids : [$ids]; - - foreach ($ids as $id) { - if (!$node = $this->orderRepository->find($id)) { - throw new NotExistException('订单不存在或已删除'); - } + if (!$node = $this->orderRepository->find($id)) { + throw new NotExistException('订单不存在或已删除'); } - DB::transaction(function () use ($ids) { - $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 IN (%s) - )'; + 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); + } - $sql = sprintf($sql, app(Grammar::class)->parameterize($ids)); - - DB::statement($sql, $ids); $this->orderCardPartitionRepository->whereIn('order_id', $ids)->delete(); app(RealOrderCardPartitionRepository::class)->whereIn('virtual_order_id', $ids)->update(['virtual_order_id' => 0]); @@ -364,15 +368,6 @@ class OrderService extends Service $this->orderRepository->destroy($ids); - // DB::transaction(function () use ($ids) { - // $this->orderRepository->destroy($ids); - // $this->orderCardPartitionRepository->whereIn('order_id', $ids)->delete(); - // app(RealOrderCardPartitionRepository::class)->whereIn('virtual_order_id', $ids)->update(['virtual_order_id' => 0]); - // }); - - // app(RealOrderCardPartitionRepository::class)->forgetCached(); - // app(RealOrderRepository::class)->forgetCached(); - return true; } diff --git a/database/migrations/2018_12_31_165779_create_virtual_orders_table.php b/database/migrations/2018_12_31_165779_create_virtual_orders_table.php index dc23a563..60c734af 100644 --- a/database/migrations/2018_12_31_165779_create_virtual_orders_table.php +++ b/database/migrations/2018_12_31_165779_create_virtual_orders_table.php @@ -43,6 +43,7 @@ class CreateVirtualOrdersTable extends Migration $table->text('logistics_remark')->nullable()->comment('物流备注'); $table->text('remark')->nullable()->comment('订单备注'); $table->text('extends')->nullable()->comment('扩展信息(cancel_remark:取消备注 refund_channel:退款频道 refund_account:退款账号 refund_remark:退款备注)'); + $table->tinyInteger('sign')->unsigned()->default(0)->comment('特殊标记 0:非特殊 -1:不在VD上的改企业转销售 -2:改企业的转销售'); $table->timestamps(); $table->softDeletes(); diff --git a/frontend/src/components/table/cell.vue b/frontend/src/components/table/cell.vue index f30ad940..724619b8 100644 --- a/frontend/src/components/table/cell.vue +++ b/frontend/src/components/table/cell.vue @@ -132,6 +132,7 @@ export default { } else { this.renderType = "normal"; } + console.log(6); } }; diff --git a/frontend/src/components/table/table-body.vue b/frontend/src/components/table/table-body.vue index b34a9b5c..26a7cc11 100644 --- a/frontend/src/components/table/table-body.vue +++ b/frontend/src/components/table/table-body.vue @@ -6,38 +6,36 @@
-