转销售、改企业
This commit is contained in:
parent
fcf5818d7e
commit
d2f53423ad
@ -3,6 +3,7 @@ namespace App\Domains\Real\Http\Controllers;
|
|||||||
|
|
||||||
use App\Core\Controller;
|
use App\Core\Controller;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\Real\RealVirtual;
|
||||||
use App\Domains\Real\Services\OrderService;
|
use App\Domains\Real\Services\OrderService;
|
||||||
|
|
||||||
class OrderController extends Controller
|
class OrderController extends Controller
|
||||||
@ -29,12 +30,19 @@ class OrderController extends Controller
|
|||||||
$conditions = $this->request->all();
|
$conditions = $this->request->all();
|
||||||
$conditions['limit'] = $this->request->get('limit', 10);
|
$conditions['limit'] = $this->request->get('limit', 10);
|
||||||
|
|
||||||
|
if (isset($conditions['sim'])) {
|
||||||
|
$conditions['sim'] = array_map('intval', array_map('trim', str_to_array($conditions['sim'], "\n")));
|
||||||
|
}
|
||||||
|
|
||||||
$orders = $this->orderService->index($conditions);
|
$orders = $this->orderService->index($conditions);
|
||||||
|
|
||||||
$orders->transform(function ($item) {
|
$orders->transform(function ($item) {
|
||||||
return $item->only([
|
return $item->only([
|
||||||
'id',
|
'id',
|
||||||
'sn',
|
'sn',
|
||||||
|
'company_id',
|
||||||
|
'package_id',
|
||||||
|
'carrier_operator',
|
||||||
'company_name',
|
'company_name',
|
||||||
'package_name',
|
'package_name',
|
||||||
'carrier_operator_name',
|
'carrier_operator_name',
|
||||||
@ -43,6 +51,10 @@ class OrderController extends Controller
|
|||||||
'shipments',
|
'shipments',
|
||||||
'total_price',
|
'total_price',
|
||||||
'order_at',
|
'order_at',
|
||||||
|
'transaction_no',
|
||||||
|
'address',
|
||||||
|
'contacts',
|
||||||
|
'mobile',
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -58,8 +70,23 @@ class OrderController extends Controller
|
|||||||
{
|
{
|
||||||
$conditions = $this->request->all();
|
$conditions = $this->request->all();
|
||||||
|
|
||||||
$orders = $this->orderService->cards($conditions);
|
if (isset($conditions['sim'])) {
|
||||||
|
$conditions['sim'] = array_map('intval', array_map('trim', str_to_array($conditions['sim'], "\n")));
|
||||||
|
}
|
||||||
|
|
||||||
return res($orders, '卡列表', 201);
|
$cards = $this->orderService->cards($conditions);
|
||||||
|
|
||||||
|
return res($cards, '卡列表', 201);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 记录关联
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function relations()
|
||||||
|
{
|
||||||
|
$relations = RealVirtual::get();
|
||||||
|
return res($relations, '关联列表', 201);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,6 @@ class MongoSyncJob implements ShouldQueue
|
|||||||
'carrier_operator' => self::$carrierOperators[$value['oType']] ?? 255,
|
'carrier_operator' => self::$carrierOperators[$value['oType']] ?? 255,
|
||||||
'activated_at' => $activated_at,
|
'activated_at' => $activated_at,
|
||||||
'virtual_activated_at' => $activated_at,
|
'virtual_activated_at' => $activated_at,
|
||||||
'real_company_id' => empty($value['bNo']) ? -1 : ($companies[$value['bNo']]['id'] ?? 0),
|
|
||||||
'created_at' => $value['sDate'] ? $value['sDate']->toDateTime()->format('Y-m-d H:i:s') : null,
|
'created_at' => $value['sDate'] ? $value['sDate']->toDateTime()->format('Y-m-d H:i:s') : null,
|
||||||
'updated_at' => date('Y-m-d H:i:s'),
|
'updated_at' => date('Y-m-d H:i:s'),
|
||||||
];
|
];
|
||||||
@ -94,8 +93,7 @@ class MongoSyncJob implements ShouldQueue
|
|||||||
|
|
||||||
$sql .= ' on conflict (sim) do update set
|
$sql .= ' on conflict (sim) do update set
|
||||||
activated_at=excluded.activated_at,
|
activated_at=excluded.activated_at,
|
||||||
virtual_activated_at=COALESCE(cards.virtual_activated_at, excluded.activated_at),
|
virtual_activated_at=COALESCE(cards.virtual_activated_at, excluded.activated_at)';
|
||||||
real_company_id=excluded.real_company_id';
|
|
||||||
|
|
||||||
$builder->connection->insert($sql, Arr::flatten($values, 1));
|
$builder->connection->insert($sql, Arr::flatten($values, 1));
|
||||||
|
|
||||||
|
@ -48,4 +48,34 @@ class OrderCardPartitionRepository extends Repository
|
|||||||
{
|
{
|
||||||
return $model->toArray();
|
return $model->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function withVirtual($conditions)
|
||||||
|
{
|
||||||
|
$select = 'distinct on (real_order_cards_partition.sim)
|
||||||
|
real_order_cards_partition.sim,
|
||||||
|
real_order_cards_partition.order_id,
|
||||||
|
real_order_cards_partition.virtual_order_id,
|
||||||
|
real_order_cards_partition.counts,
|
||||||
|
virtual_order_cards_partition.company_id,
|
||||||
|
virtual_order_cards_partition.package_id
|
||||||
|
';
|
||||||
|
|
||||||
|
$this->model = $this->model->selectRaw($select);
|
||||||
|
|
||||||
|
$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');
|
||||||
|
|
||||||
|
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['order_id'])) {
|
||||||
|
$conditions['order_id'] = array_wrap($conditions['order_id']);
|
||||||
|
$this->model= $this->model->whereIn('real_order_cards_partition.order_id', $conditions['order_id']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -108,6 +108,13 @@ class OrderRepository extends Repository
|
|||||||
$query->where('order_at', '<=', Carbon::parse($conditions['endtime']));
|
$query->where('order_at', '<=', Carbon::parse($conditions['endtime']));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($conditions['sim'])) {
|
||||||
|
$conditions['sim'] = array_wrap($conditions['sim']);
|
||||||
|
$query->whereHas('cards', function ($relation) use ($conditions) {
|
||||||
|
$relation->whereIn('sim', $conditions['sim']);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($conditions['used'])) {
|
if (isset($conditions['used'])) {
|
||||||
$operator = $conditions['used'] ? '>' : '=';
|
$operator = $conditions['used'] ? '>' : '=';
|
||||||
$query->whereHas('cards', function ($relation) use ($conditions) {
|
$query->whereHas('cards', function ($relation) use ($conditions) {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
$router->group(['prefix' => 'real', 'as' => 'reals', 'middleware' => ['adminAuth']], function ($router) {
|
$router->group(['prefix' => 'real', 'as' => 'reals', 'middleware' => ['adminAuth']], function ($router) {
|
||||||
$router->get('/orders/index', ['as' => 'orders.index', 'uses' => 'OrderController@index']);
|
$router->addRoute(['GET', 'POST'], '/orders/index', ['as' => 'orders.index', 'uses' => 'OrderController@index']);
|
||||||
$router->get('/orders/cards', ['as' => 'orders.cards', 'uses' => 'OrderController@cards']);
|
$router->addRoute(['GET', 'POST'], '/orders/cards', ['as' => 'orders.cards', 'uses' => 'OrderController@cards']);
|
||||||
|
$router->get('/orders/relations', ['as' => 'orders.relations', 'uses' => 'OrderController@relations']);
|
||||||
});
|
});
|
||||||
|
@ -9,7 +9,6 @@ use App\Domains\Real\Repositories\OrderRepository;
|
|||||||
use App\Domains\Real\Repositories\OrderCardPartitionRepository;
|
use App\Domains\Real\Repositories\OrderCardPartitionRepository;
|
||||||
use App\Domains\Virtual\Repositories\OrderRepository as VirtualOrderRepository;
|
use App\Domains\Virtual\Repositories\OrderRepository as VirtualOrderRepository;
|
||||||
use App\Domains\Virtual\Repositories\OrderCardPartitionRepository as VirtualOrderCardPartitionRepository;
|
use App\Domains\Virtual\Repositories\OrderCardPartitionRepository as VirtualOrderCardPartitionRepository;
|
||||||
use Carbon\Carbon;
|
|
||||||
|
|
||||||
class OrderService extends Service
|
class OrderService extends Service
|
||||||
{
|
{
|
||||||
@ -51,13 +50,14 @@ class OrderService extends Service
|
|||||||
$item->company_name = CommonService::company($item->company_id)['name'];
|
$item->company_name = CommonService::company($item->company_id)['name'];
|
||||||
$item->package = CommonService::package($item->package_id);
|
$item->package = CommonService::package($item->package_id);
|
||||||
$item->package_name = $item->package['name'];
|
$item->package_name = $item->package['name'];
|
||||||
$item->carrier_operator_name = $carrierOperators[$item->package['carrier_operator']];
|
$item->carrier_operator = $item->package['carrier_operator'];
|
||||||
|
$item->carrier_operator_name = $carrierOperators[$item->carrier_operator];
|
||||||
$item->unit_price = sprintf('%.02f', $item->unit_price/100);
|
$item->unit_price = sprintf('%.02f', $item->unit_price/100);
|
||||||
$item->total_price = sprintf('%.02f', $item->total_price/100);
|
$item->total_price = sprintf('%.02f', $item->total_price/100);
|
||||||
$item->shipments = $cards[$item->id] ?? 0;
|
$item->shipments = $cards[$item->id] ?? 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
return $res;
|
return $res->sortByDesc('order_at')->values();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -68,8 +68,11 @@ class OrderService extends Service
|
|||||||
*/
|
*/
|
||||||
public function cards(array $conditions = [])
|
public function cards(array $conditions = [])
|
||||||
{
|
{
|
||||||
$cards = $this->orderCardPartitionRepository->select(['sim', 'order_id', 'virtual_order_id', 'counts'])
|
set_time_limit(0);
|
||||||
->withConditions($conditions)->applyConditions()->get();
|
ini_set('memory_limit', '4096m');
|
||||||
|
ini_set('default_socket_timeout', -1);
|
||||||
|
|
||||||
|
$cards = $this->orderCardPartitionRepository->withVirtual($conditions)->get();
|
||||||
|
|
||||||
$tmpCards = $cards->groupBy('virtual_order_id');
|
$tmpCards = $cards->groupBy('virtual_order_id');
|
||||||
|
|
||||||
@ -87,33 +90,19 @@ class OrderService extends Service
|
|||||||
$virtualOrders = app(VirtualOrderRepository::class)->withConditions(['id' => $orderIds])->get()->keyBy('id');
|
$virtualOrders = app(VirtualOrderRepository::class)->withConditions(['id' => $orderIds])->get()->keyBy('id');
|
||||||
}
|
}
|
||||||
|
|
||||||
$simArray = isset($tmpCards[0]) ? $tmpCards[0]->pluck('sim')->toArray() : [];
|
|
||||||
|
|
||||||
$virtualOrderCards = [];
|
|
||||||
// 没有订单的从当前状态下读取公司和套餐
|
|
||||||
if (!empty($simArray)) {
|
|
||||||
$virtualOrderCards = app(VirtualOrderCardPartitionRepository::class)->selectRaw('distinct on (sim) sim,company_id,package_id')
|
|
||||||
->withConditions([
|
|
||||||
'type' => [0, 1],
|
|
||||||
'sim' => $simArray,
|
|
||||||
])->newest()->get()->keyBy('sim');
|
|
||||||
}
|
|
||||||
|
|
||||||
$cards->map(function ($item) use ($virtualOrders, $virtualOrderCards) {
|
$cards->map(function ($item) use ($virtualOrders, $virtualOrderCards) {
|
||||||
$item->sim = (string)$item->sim;
|
$item->sim = (string)$item->sim;
|
||||||
$item->company_name = '';
|
$item->company_id = $item->company_id ?? 0;
|
||||||
$item->package_name = '';
|
$item->package_id = $item->package_id ?? 0;
|
||||||
|
|
||||||
if ($item->virtual_order_id) {
|
if ($item->virtual_order_id) {
|
||||||
$virtual = $virtualOrders[$item->virtual_order_id];
|
$virtual = $virtualOrders[$item->virtual_order_id];
|
||||||
} else {
|
$item->company_id = $virtual['company_id'];
|
||||||
$virtual = $virtualOrderCards[$item->sim];
|
$item->package_id = $virtual['package_id'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($virtual) {
|
$item->company_name = !$item->company_id ? '' : CompanyService::load($item->company_id)['name'] ?? '';
|
||||||
$item->company_name = CompanyService::load($virtual['company_id'])['name'];
|
$item->package_name = !$item->package_id ? '' : PackageService::load($item->package_id)['name'] ?? '';
|
||||||
$item->package_name = PackageService::load($virtual['package_id'])['name'];
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return $cards->sortBy('sim')->sortBy('order_id')->values();
|
return $cards->sortBy('sim')->sortBy('order_id')->values();
|
||||||
|
@ -151,4 +151,18 @@ class OrderController extends Controller
|
|||||||
|
|
||||||
return res(true, '删除成功');
|
return res(true, '删除成功');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重置.
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function reset()
|
||||||
|
{
|
||||||
|
$ids = $this->request->ids();
|
||||||
|
|
||||||
|
$this->orderService->reset($ids);
|
||||||
|
|
||||||
|
return res(true, '重置成功');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ class CreateRealVirtualRelation implements ShouldQueue
|
|||||||
'real_package_id' => $value['package_id'],
|
'real_package_id' => $value['package_id'],
|
||||||
'virtual_company_id' => $virtualOrder['company_id'],
|
'virtual_company_id' => $virtualOrder['company_id'],
|
||||||
'virtual_package_id' => $virtualOrder['package_id'],
|
'virtual_package_id' => $virtualOrder['package_id'],
|
||||||
'counts' => 1,
|
'times' => 1,
|
||||||
'updated_at' => date('Y-m-d H:i:s'),
|
'updated_at' => date('Y-m-d H:i:s'),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -59,7 +59,7 @@ class CreateRealVirtualRelation implements ShouldQueue
|
|||||||
$sql = $builder->getGrammar()->compileInsert($builder, $array);
|
$sql = $builder->getGrammar()->compileInsert($builder, $array);
|
||||||
|
|
||||||
$sql .= ' on conflict (real_company_id,real_package_id,virtual_company_id,virtual_package_id) do update set
|
$sql .= ' on conflict (real_company_id,real_package_id,virtual_company_id,virtual_package_id) do update set
|
||||||
counts=real_virtual_relations.counts+excluded.counts,
|
times=real_virtual_relations.times+excluded.times,
|
||||||
updated_at=excluded.updated_at';
|
updated_at=excluded.updated_at';
|
||||||
|
|
||||||
$builder->connection->insert($sql, Arr::flatten($array, 1));
|
$builder->connection->insert($sql, Arr::flatten($array, 1));
|
||||||
|
@ -48,6 +48,7 @@ $router->group(['prefix' => 'virtual', 'as' => 'virtual', 'middleware' => ['admi
|
|||||||
$router->post('/orders/create', ['as' => 'orders.create', 'uses' => 'OrderController@create']);
|
$router->post('/orders/create', ['as' => 'orders.create', 'uses' => 'OrderController@create']);
|
||||||
$router->post('/orders/update/{id}', ['as' => 'orders.update', 'uses' => 'OrderController@update']);
|
$router->post('/orders/update/{id}', ['as' => 'orders.update', 'uses' => 'OrderController@update']);
|
||||||
$router->post('/orders/destroy', ['as' => 'orders.destroy', 'uses' => 'OrderController@destroy']);
|
$router->post('/orders/destroy', ['as' => 'orders.destroy', 'uses' => 'OrderController@destroy']);
|
||||||
|
$router->post('/orders/reset', ['as' => 'orders.reset', 'uses' => 'OrderController@reset']);
|
||||||
|
|
||||||
// 客户管理
|
// 客户管理
|
||||||
$router->get('/cards/index', ['as' => 'cards.index', 'uses' => 'CardController@index']);
|
$router->get('/cards/index', ['as' => 'cards.index', 'uses' => 'CardController@index']);
|
||||||
|
@ -9,7 +9,9 @@ use Illuminate\Support\Facades\DB;
|
|||||||
use App\Exceptions\NotExistException;
|
use App\Exceptions\NotExistException;
|
||||||
use App\Exceptions\NotAllowedException;
|
use App\Exceptions\NotAllowedException;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use App\Models\Virtual\OrderCardPartition;
|
||||||
use Dipper\Foundation\Exceptions\HttpException;
|
use Dipper\Foundation\Exceptions\HttpException;
|
||||||
|
use Illuminate\Database\Query\Grammars\Grammar;
|
||||||
use App\Domains\Virtual\Services\CompanyService;
|
use App\Domains\Virtual\Services\CompanyService;
|
||||||
use App\Domains\Virtual\Services\PackageService;
|
use App\Domains\Virtual\Services\PackageService;
|
||||||
use App\Domains\Virtual\Repositories\OrderRepository;
|
use App\Domains\Virtual\Repositories\OrderRepository;
|
||||||
@ -107,7 +109,7 @@ class OrderService extends Service
|
|||||||
public function store(array $attributes = [])
|
public function store(array $attributes = [])
|
||||||
{
|
{
|
||||||
$rule = [
|
$rule = [
|
||||||
'type' => ['in:0,1,2,3'],
|
'type' => ['in:0,1,2,3,-1,-2'], // 转销售 -1,改企业 -2
|
||||||
'company_id' => ['exists:virtual_companies,id'],
|
'company_id' => ['exists:virtual_companies,id'],
|
||||||
'product_id' => [],
|
'product_id' => [],
|
||||||
'counts' => [],
|
'counts' => [],
|
||||||
@ -163,6 +165,28 @@ class OrderService extends Service
|
|||||||
|
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
|
|
||||||
|
// 改企业的卡新增一批虚拟卡,并替换原有订单里的卡
|
||||||
|
if ($attributes['type'] == -2 && $attributes['selected']) {
|
||||||
|
$simArray = implode(',', array_pluck($attributes['selected'], 'sim'));
|
||||||
|
try {
|
||||||
|
DB::statement("select change_cards('{{$simArray}}'::INT8[]);");
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
DB::rollBack();
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 转销售和该企业的都立即激活卡
|
||||||
|
if ($attributes['type'] <0 && $attributes['selected']) {
|
||||||
|
$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));
|
||||||
|
array_unshift($params, $attributes['order_at']);
|
||||||
|
DB::update($sql, $params);
|
||||||
|
|
||||||
|
$attributes['type'] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!$attributes['id']) {
|
if (!$attributes['id']) {
|
||||||
if ($product->company_id != $attributes['company_id']) {
|
if ($product->company_id != $attributes['company_id']) {
|
||||||
throw new NotAllowedException('非法操作');
|
throw new NotAllowedException('非法操作');
|
||||||
@ -229,7 +253,10 @@ class OrderService extends Service
|
|||||||
$this->orderCardPartitionRepository->forgetCached();
|
$this->orderCardPartitionRepository->forgetCached();
|
||||||
app(RealOrderCardPartitionRepository::class)->forgetCached();
|
app(RealOrderCardPartitionRepository::class)->forgetCached();
|
||||||
|
|
||||||
|
// 销售订单创建企业套餐关联
|
||||||
|
if ($node['type'] === 0) {
|
||||||
CreateRealVirtualRelation::dispatch($node->id, array_pluck($attributes['selected'], 'order_id'));
|
CreateRealVirtualRelation::dispatch($node->id, array_pluck($attributes['selected'], 'order_id'));
|
||||||
|
}
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
throw new HttpException('操作失败');
|
throw new HttpException('操作失败');
|
||||||
@ -285,6 +312,41 @@ class OrderService extends Service
|
|||||||
return $node;
|
return $node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重置
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function reset($ids)
|
||||||
|
{
|
||||||
|
$ids = is_array($ids) ? $ids : [$ids];
|
||||||
|
|
||||||
|
foreach ($ids as $id) {
|
||||||
|
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)
|
||||||
|
)';
|
||||||
|
|
||||||
|
$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]);
|
||||||
|
});
|
||||||
|
|
||||||
|
app(RealOrderCardPartitionRepository::class)->forgetCached();
|
||||||
|
app(RealOrderRepository::class)->forgetCached();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除
|
* 删除
|
||||||
*
|
*
|
||||||
@ -300,14 +362,16 @@ class OrderService extends Service
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DB::transaction(function () use ($ids) {
|
|
||||||
$this->orderRepository->destroy($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();
|
// DB::transaction(function () use ($ids) {
|
||||||
app(RealOrderRepository::class)->forgetCached();
|
// $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;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,6 @@ class CreateCardsTable extends Migration
|
|||||||
$table->timestamp('activated_at')->nullable()->comment('激活时间');
|
$table->timestamp('activated_at')->nullable()->comment('激活时间');
|
||||||
$table->timestamp('virtual_activated_at')->nullable()->comment('虚拟激活时间');
|
$table->timestamp('virtual_activated_at')->nullable()->comment('虚拟激活时间');
|
||||||
$table->tinyInteger('type')->unsigned()->default(0)->comment('类型(0:真实卡 1:虚拟卡 2:未知卡)');
|
$table->tinyInteger('type')->unsigned()->default(0)->comment('类型(0:真实卡 1:虚拟卡 2:未知卡)');
|
||||||
$table->integer('real_company_id')->unsigned()->default(0)->comment("企业ID");
|
|
||||||
$table->timestamp('cancelled_at')->nullable()->comment('注销时间');
|
$table->timestamp('cancelled_at')->nullable()->comment('注销时间');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
|
|
||||||
|
@ -118,3 +118,56 @@ BEGIN
|
|||||||
RETURN TRUE;
|
RETURN TRUE;
|
||||||
END;
|
END;
|
||||||
$$ LANGUAGE plpgsql;
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION CHANGE_CARDS(INT8[])
|
||||||
|
RETURNS void
|
||||||
|
AS
|
||||||
|
$$
|
||||||
|
DECLARE
|
||||||
|
maxCursor INT2;
|
||||||
|
params TEXT := '';
|
||||||
|
simRow INT8;
|
||||||
|
query TEXT;
|
||||||
|
BEGIN
|
||||||
|
FOREACH simRow IN ARRAY $1
|
||||||
|
LOOP
|
||||||
|
IF SUBSTR(simRow::text, 4, 1)::INT > 4 THEN
|
||||||
|
RAISE EXCEPTION 'Error Card Sim --> %', simRow USING ERRCODE = '10000';
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
params := params || OVERLAY(simRow::text PLACING '_' FROM 4 FOR 1);
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
params := trim('|' from params);
|
||||||
|
|
||||||
|
RAISE NOTICE 'params : %', params;
|
||||||
|
|
||||||
|
SELECT MAX(SUBSTR(sim::text, 4, 1)) INTO maxCursor FROM cards WHERE sim::TEXT SIMILAR TO params;
|
||||||
|
|
||||||
|
|
||||||
|
RAISE NOTICE 'maxCursor : %', maxCursor;
|
||||||
|
|
||||||
|
IF maxCursor > 8 THEN
|
||||||
|
RAISE EXCEPTION 'Max Cursor --> %', maxCursor USING ERRCODE = '10001';
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
query := 'WITH new_cards AS (
|
||||||
|
SELECT
|
||||||
|
cards.sim as original_sim,
|
||||||
|
OVERLAY(cards.sim::TEXT PLACING (4 + t.counts)::TEXT FROM 4 FOR 1)::INT8 as sim,
|
||||||
|
OVERLAY(imsi::TEXT PLACING (1 + t.counts)::TEXT FROM 3 FOR 1) as imsi,
|
||||||
|
OVERLAY(iccid::TEXT PLACING (1 + t.counts)::TEXT FROM 5 FOR 1) as iccid,
|
||||||
|
bloc_id, carrier_operator, activated_at, virtual_activated_at, type, real_company_id, cancelled_at, created_at, updated_at
|
||||||
|
FROM cards JOIN (
|
||||||
|
SELECT OVERLAY(sim::TEXT PLACING $1 FROM 4 FOR 1), COUNT ( * ) AS counts, MIN ( sim ) AS sim FROM cards WHERE sim::TEXT SIMILAR TO $2 GROUP BY 1
|
||||||
|
) AS t ON t.sim = cards.sim
|
||||||
|
), new_inserts AS (
|
||||||
|
INSERT INTO cards SELECT sim,imsi,iccid,bloc_id, carrier_operator, activated_at, virtual_activated_at, type, real_company_id, cancelled_at, created_at, updated_at FROM new_cards
|
||||||
|
)
|
||||||
|
UPDATE virtual_order_cards_partition SET original_sim=t.original_sim,sim=t.sim FROM (SELECT sim,original_sim FROM new_cards) as t
|
||||||
|
WHERE virtual_order_cards_partition.sim=t.original_sim';
|
||||||
|
|
||||||
|
EXECUTE query USING '_', params;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql
|
||||||
|
SET synchronous_commit TO OFF;
|
||||||
|
@ -4,9 +4,7 @@
|
|||||||
* @return {[type]} [description]
|
* @return {[type]} [description]
|
||||||
*/
|
*/
|
||||||
export function index(data) {
|
export function index(data) {
|
||||||
return service.get('api/real/orders/index', {
|
return service.post('api/real/orders/index', data);
|
||||||
params: data
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -15,7 +13,16 @@ export function index(data) {
|
|||||||
* @return {[type]} [description]
|
* @return {[type]} [description]
|
||||||
*/
|
*/
|
||||||
export function cards(data) {
|
export function cards(data) {
|
||||||
return service.get('api/real/orders/cards', {
|
return service.post('api/real/orders/cards', data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [relations 关联列表]
|
||||||
|
* @param {[type]} data [description]
|
||||||
|
* @return {[type]} [description]
|
||||||
|
*/
|
||||||
|
export function relations(data = {}) {
|
||||||
|
return service.get('api/real/orders/relations', {
|
||||||
params: data
|
params: data
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -49,3 +49,12 @@ export function update(data, id) {
|
|||||||
export function destroy(data) {
|
export function destroy(data) {
|
||||||
return service.post('api/virtual/orders/destroy', data);
|
return service.post('api/virtual/orders/destroy', data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [reset 重置订单]
|
||||||
|
* @param {[type]} data [description]
|
||||||
|
* @return {[type]} [description]
|
||||||
|
*/
|
||||||
|
export function reset(data) {
|
||||||
|
return service.post('api/virtual/orders/reset', data);
|
||||||
|
}
|
||||||
|
@ -62,9 +62,9 @@ export default {
|
|||||||
initCompletePackages(type = 0) {
|
initCompletePackages(type = 0) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (!this.completePackageInitialized) {
|
if (!this.completePackageInitialized) {
|
||||||
this.completePackageInitialized = true;
|
|
||||||
FETCH.packages(type, null, 0).then(res => {
|
FETCH.packages(type, null, 0).then(res => {
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
|
this.completePackageInitialized = true;
|
||||||
this.completePackages = res.data;
|
this.completePackages = res.data;
|
||||||
resolve(res.data);
|
resolve(res.data);
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,27 @@
|
|||||||
import * as API from 'api/real/orders';
|
import * as API from 'api/real/orders';
|
||||||
|
|
||||||
const state = {
|
const state = {
|
||||||
real_orders: [],
|
order_group: {}, // 订单组
|
||||||
cards: [],
|
real_orders: [], // RD订单
|
||||||
|
cards: [], // RD订单卡列表
|
||||||
|
relations: [],
|
||||||
selected: [],
|
selected: [],
|
||||||
orderParams: {},
|
orderParams: {},
|
||||||
cardParams: {}
|
cardParams: {},
|
||||||
|
real_companies: [],
|
||||||
|
real_packages: [],
|
||||||
|
relationParams: {},
|
||||||
|
relationObj: {
|
||||||
|
real_company_id: '',
|
||||||
|
real_package_id: '',
|
||||||
|
virtual_company_id: '',
|
||||||
|
virtual_package_id: ''
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const getters = {
|
const getters = {
|
||||||
|
relations: state => state.relations,
|
||||||
|
relationObj: state => state.relationObj,
|
||||||
orders: state => state.real_orders,
|
orders: state => state.real_orders,
|
||||||
cards: state => state.cards,
|
cards: state => state.cards,
|
||||||
selected: state => state.selected,
|
selected: state => state.selected,
|
||||||
@ -40,15 +53,18 @@ const getters = {
|
|||||||
return state.selected.find(item => {
|
return state.selected.find(item => {
|
||||||
return item.order_id === order_id && item.sim === sim;
|
return item.order_id === order_id && item.sim === sim;
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
real_companies: (state) => {
|
||||||
|
return state.real_orders.map(el => { return el.company_name; }).filter((v, i, s) => { return s.indexOf(v) === i; });
|
||||||
|
},
|
||||||
|
real_packages: (state) => {
|
||||||
|
return state.real_orders.map(el => { return el.package_name; }).filter((v, i, s) => { return s.indexOf(v) === i; });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const mutations = {
|
const mutations = {
|
||||||
SET_CARD_PARAMS(state, obj) {
|
SET_ORDER_GROUP(state, data) {
|
||||||
state.cardParams = obj;
|
state.order_group = data;
|
||||||
},
|
|
||||||
SET_ORDER_PARAMS(state, obj) {
|
|
||||||
state.orderParams = obj;
|
|
||||||
},
|
},
|
||||||
SET_REAL_ORDERS(state, data) {
|
SET_REAL_ORDERS(state, data) {
|
||||||
state.real_orders = data;
|
state.real_orders = data;
|
||||||
@ -56,6 +72,21 @@ const mutations = {
|
|||||||
SET_CARDS(state, data) {
|
SET_CARDS(state, data) {
|
||||||
state.cards = data;
|
state.cards = data;
|
||||||
},
|
},
|
||||||
|
SET_RELATIONS(state, data) {
|
||||||
|
state.relations = data;
|
||||||
|
},
|
||||||
|
SET_RELATION_OBJ(state, obj) {
|
||||||
|
state.relationObj = obj;
|
||||||
|
},
|
||||||
|
SET_RELATION_PARAMS(state, data) {
|
||||||
|
state.relationParams = data;
|
||||||
|
},
|
||||||
|
SET_CARD_PARAMS(state, obj) {
|
||||||
|
state.cardParams = obj;
|
||||||
|
},
|
||||||
|
SET_ORDER_PARAMS(state, obj) {
|
||||||
|
state.orderParams = obj;
|
||||||
|
},
|
||||||
PUSH_CARDS(state, cards) {
|
PUSH_CARDS(state, cards) {
|
||||||
state.cards = state.cards.concat(cards.filter(item => {
|
state.cards = state.cards.concat(cards.filter(item => {
|
||||||
return state.cards.findIndex(v => {
|
return state.cards.findIndex(v => {
|
||||||
@ -67,9 +98,7 @@ const mutations = {
|
|||||||
state.selected = data;
|
state.selected = data;
|
||||||
},
|
},
|
||||||
PUSH_SELECTED(state, array) {
|
PUSH_SELECTED(state, array) {
|
||||||
let selected = state.selected.map(item => {
|
let selected = JSON.parse(JSON.stringify(state.selected));
|
||||||
return { order_id: item.order_id, sim: item.sim, counts: item.counts };
|
|
||||||
});
|
|
||||||
|
|
||||||
for (let index = 0; index < array.length; index++) {
|
for (let index = 0; index < array.length; index++) {
|
||||||
const element = array[index];
|
const element = array[index];
|
||||||
@ -82,7 +111,7 @@ const mutations = {
|
|||||||
selected.splice(i, 1);
|
selected.splice(i, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
let obj = { order_id: element.order_id, sim: element.sim, counts: element.counts };
|
let obj = element;
|
||||||
|
|
||||||
selected.push(obj);
|
selected.push(obj);
|
||||||
}
|
}
|
||||||
@ -91,7 +120,7 @@ const mutations = {
|
|||||||
},
|
},
|
||||||
REMOVE_SELECTED(state, array) {
|
REMOVE_SELECTED(state, array) {
|
||||||
let selected = state.selected.map(item => {
|
let selected = state.selected.map(item => {
|
||||||
return { order_id: item.order_id, sim: item.sim, counts: item.counts };
|
return JSON.parse(JSON.stringify(item));
|
||||||
});
|
});
|
||||||
|
|
||||||
for (let index = 0; index < array.length; index++) {
|
for (let index = 0; index < array.length; index++) {
|
||||||
@ -115,6 +144,36 @@ const mutations = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const actions = {
|
const actions = {
|
||||||
|
initOrder(context) {
|
||||||
|
context.commit('SET_RELATION_PARAMS', {});
|
||||||
|
context.commit('SET_ORDER_PARAMS', {});
|
||||||
|
context.commit('SET_CARD_PARAMS', {});
|
||||||
|
context.commit('SET_RELATION_OBJ', {});
|
||||||
|
context.commit('SET_ORDER_GROUP', {});
|
||||||
|
context.commit('SET_REAL_ORDERS', []);
|
||||||
|
context.commit('SET_CARDS', []);
|
||||||
|
context.commit('SET_SELECTED', []);
|
||||||
|
},
|
||||||
|
getRelations(context, params) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
if (JSON.stringify(context.state.relationParams) == JSON.stringify(params)) {
|
||||||
|
return resolve(context.state.relations);
|
||||||
|
}
|
||||||
|
|
||||||
|
context.commit('SET_RELATION_PARAMS', params);
|
||||||
|
|
||||||
|
API.relations(params).then(res => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
context.commit('SET_RELATIONS', res.data);
|
||||||
|
resolve(res.data);
|
||||||
|
} else {
|
||||||
|
reject(res);
|
||||||
|
}
|
||||||
|
}).catch(err => {
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
getOrders(context, params) {
|
getOrders(context, params) {
|
||||||
params.limit = 0;
|
params.limit = 0;
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
@ -167,8 +226,16 @@ const actions = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
API.cards({ order_id: array, type }).then(res => {
|
API.cards({ order_id: array, type }).then(res => {
|
||||||
|
let index = context.state.cards.length;
|
||||||
|
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
context.commit('PUSH_CARDS', res.data);
|
let data = res.data;
|
||||||
|
|
||||||
|
data.map(row => {
|
||||||
|
row._index = index++;
|
||||||
|
});
|
||||||
|
|
||||||
|
context.commit('PUSH_CARDS', data);
|
||||||
|
|
||||||
let cards = context.state.cards.filter(v => {
|
let cards = context.state.cards.filter(v => {
|
||||||
return order_id.indexOf(v.order_id) !== -1;
|
return order_id.indexOf(v.order_id) !== -1;
|
||||||
@ -181,6 +248,20 @@ const actions = {
|
|||||||
reject(err);
|
reject(err);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
getCardsByParams(context, params) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
API.cards(params).then(res => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
context.commit('PUSH_CARDS', res.data);
|
||||||
|
resolve(res.data);
|
||||||
|
} else {
|
||||||
|
reject(res);
|
||||||
|
}
|
||||||
|
}).catch(err => {
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -6,13 +6,20 @@
|
|||||||
@on-visible-change="visibleChange"
|
@on-visible-change="visibleChange"
|
||||||
v-model="my_show"
|
v-model="my_show"
|
||||||
width="1440"
|
width="1440"
|
||||||
:z-index="source === 0 ? 2000 : 1000"
|
:z-index="source === 0 ? 1000 : 500"
|
||||||
>
|
>
|
||||||
<div class="page-handle-wrap">
|
<div class="page-handle-wrap">
|
||||||
<ul class="handle-wraper bd-b">
|
<ul class="handle-wraper bd-b">
|
||||||
<li class="f-l">
|
<li class="f-l">
|
||||||
<div class="text-exp">
|
<div class="text-exp">
|
||||||
<Button type="text" v-if="counts" @click="sort">已选{{counts}}张</Button>
|
<Row v-if="counts">
|
||||||
|
<a @click="sort" class="umar-r10">
|
||||||
|
<b>已选{{counts}}张</b>
|
||||||
|
</a>
|
||||||
|
<a @click="clear">
|
||||||
|
<b>清空</b>
|
||||||
|
</a>
|
||||||
|
</Row>
|
||||||
<b v-else>全部信息</b>
|
<b v-else>全部信息</b>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
@ -41,7 +48,8 @@
|
|||||||
<li class="handle-item w-250">
|
<li class="handle-item w-250">
|
||||||
<Select clearable placeholder="使用状态" v-model="params.used">
|
<Select clearable placeholder="使用状态" v-model="params.used">
|
||||||
<Option :value="0">未使用</Option>
|
<Option :value="0">未使用</Option>
|
||||||
<Option :value="1">已使用</Option>
|
<Option :value="1">部分使用</Option>
|
||||||
|
<Option :value="2">全部使用</Option>
|
||||||
</Select>
|
</Select>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
@ -58,33 +66,35 @@
|
|||||||
|
|
||||||
<ul class="handle-wraper">
|
<ul class="handle-wraper">
|
||||||
<li class="handle-item w-250">
|
<li class="handle-item w-250">
|
||||||
<AutoComplete
|
<Select
|
||||||
@on-search="handleCompleteCompanies"
|
|
||||||
icon="ios-search"
|
icon="ios-search"
|
||||||
placeholder="企业名称"
|
placeholder="企业名称"
|
||||||
v-model.trim="params.company_name"
|
v-model.trim="params.company_name"
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
>
|
>
|
||||||
<Option
|
<Option
|
||||||
:key="item.id"
|
:key="index"
|
||||||
:value="item.name"
|
:value="item ? item : ''"
|
||||||
v-for="item in completeHandledCompanies"
|
v-for="(item, index) in real_companies"
|
||||||
>{{ item.name }}</Option>
|
>{{ item }}</Option>
|
||||||
</AutoComplete>
|
</Select>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="handle-item w-250">
|
<li class="handle-item w-250">
|
||||||
<AutoComplete
|
<Select
|
||||||
@on-search="handleCompletePackages(type)"
|
|
||||||
icon="ios-search"
|
icon="ios-search"
|
||||||
placeholder="套餐名称"
|
placeholder="套餐名称"
|
||||||
v-model.trim="params.package_name"
|
v-model.trim="params.package_name"
|
||||||
|
clearable
|
||||||
|
filterable
|
||||||
>
|
>
|
||||||
<Option
|
<Option
|
||||||
:key="item.id"
|
:key="index"
|
||||||
:value="item.name"
|
:value="item ? item : ''"
|
||||||
v-for="item in completeHandledPackages"
|
v-for="(item, index) in real_packages"
|
||||||
>{{ item.name }}</Option>
|
>{{ item }}</Option>
|
||||||
</AutoComplete>
|
</Select>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="handle-item w-250">
|
<li class="handle-item w-250">
|
||||||
@ -152,8 +162,8 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer class="ta-c" slot="footer">
|
<footer class="ta-c" slot="footer">
|
||||||
<Button @click="clear" class="w-80 umar-r5" ghost type="primary">取消</Button>
|
<Button @click="cannel" class="w-80 umar-r5" ghost type="primary">取消</Button>
|
||||||
<Button v-if="source === 0" :loading="loading" @click="ok" class="w-80" type="primary">确定</Button>
|
<Button v-if="source === 0" :loading="loading" @click="close" class="w-80" type="primary">确定</Button>
|
||||||
<Button v-if="source === 1" :loading="loading" @click="order" class="w-80" type="primary">创建订单</Button>
|
<Button v-if="source === 1" :loading="loading" @click="order" class="w-80" type="primary">创建订单</Button>
|
||||||
<Button v-if="source === 2" :loading="loading" @click="store" class="w-80" type="primary">提交</Button>
|
<Button v-if="source === 2" :loading="loading" @click="store" class="w-80" type="primary">提交</Button>
|
||||||
</footer>
|
</footer>
|
||||||
|
@ -6,8 +6,35 @@
|
|||||||
@on-visible-change="visibleChange"
|
@on-visible-change="visibleChange"
|
||||||
v-model="my_show"
|
v-model="my_show"
|
||||||
width="500"
|
width="500"
|
||||||
:mask-style="{ 'z-index': source === 1 ? 2000 : 1000}"
|
:mask-style="{ 'z-index': source === 1 ? 1000 : 500}"
|
||||||
>
|
>
|
||||||
|
<div v-if="Object.keys(order_group).length" class="order-group-wrap">
|
||||||
|
<ul>
|
||||||
|
<li
|
||||||
|
v-for="(item, index) in order_group"
|
||||||
|
:key="index"
|
||||||
|
class="order-group-list"
|
||||||
|
:class="groupIndex === index ? 'order-group-list-selected' : ''"
|
||||||
|
@click="selectGroup(item, index)"
|
||||||
|
>
|
||||||
|
<p>
|
||||||
|
<span class="order-group-list-title">企业:</span>
|
||||||
|
<span class="order-group-list-content">{{item[0].company_name}}</span>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<span class="order-group-list-title">套餐:</span>
|
||||||
|
<span class="order-group-list-content">{{item[0].package_name}}</span>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<span class="order-group-list-title">卡量:</span>
|
||||||
|
<span
|
||||||
|
class="order-group-list-content"
|
||||||
|
>{{item.reduce((acc, cur) => {return acc + cur.counts;}, 0)}}</span>
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="page-edit-wrap uinn-lr20">
|
<div class="page-edit-wrap uinn-lr20">
|
||||||
<ui-loading :show="loading"></ui-loading>
|
<ui-loading :show="loading"></ui-loading>
|
||||||
|
|
||||||
@ -58,6 +85,8 @@
|
|||||||
<Option :value="'bank'">银行转账</Option>
|
<Option :value="'bank'">银行转账</Option>
|
||||||
<Option :value="'wx'">微信支付</Option>
|
<Option :value="'wx'">微信支付</Option>
|
||||||
<Option :value="'alipay'">支付宝</Option>
|
<Option :value="'alipay'">支付宝</Option>
|
||||||
|
<Option :value="'account'">余额支付</Option>
|
||||||
|
<Option :value="'tmall'">天猫续费</Option>
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
@ -157,9 +186,60 @@
|
|||||||
<div class="ta-c">
|
<div class="ta-c">
|
||||||
<Button v-if="source === 0" @click="cards" class="w-80 umar-r5" ghost type="success">选卡</Button>
|
<Button v-if="source === 0" @click="cards" class="w-80 umar-r5" ghost type="success">选卡</Button>
|
||||||
<Button @click="clear" class="w-80 umar-r5" ghost type="primary">取消</Button>
|
<Button @click="clear" class="w-80 umar-r5" ghost type="primary">取消</Button>
|
||||||
<Button :loading="loading" @click="ok" class="w-80" type="primary">提交</Button>
|
<Button
|
||||||
|
:loading="loading"
|
||||||
|
@click="ok"
|
||||||
|
class="w-80"
|
||||||
|
type="warning"
|
||||||
|
v-if="groupIndex === '0_0'"
|
||||||
|
>转销售</Button>
|
||||||
|
<Button :loading="loading" @click="ok" class="w-80" type="primary" v-else>提交</Button>
|
||||||
</div>
|
</div>
|
||||||
</MDrawer>
|
</MDrawer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script src="./js/edit.js"></script>
|
<script src="./js/edit.js"></script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.order-group-wrap {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
right: 500px;
|
||||||
|
overflow: auto;
|
||||||
|
height: calc(100%);
|
||||||
|
.order-group-list {
|
||||||
|
display: block;
|
||||||
|
height: 120px;
|
||||||
|
padding: 15px;
|
||||||
|
font-size: 11px;
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid #ececec;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
.order-group-list-title {
|
||||||
|
line-height: 32px;
|
||||||
|
font-weight: 700;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
.order-group-list-content {
|
||||||
|
line-height: 32px;
|
||||||
|
text-align: left;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.order-group-list:hover {
|
||||||
|
background-color: #fff;
|
||||||
|
border-color: #57a3f3;
|
||||||
|
}
|
||||||
|
.order-group-list:active {
|
||||||
|
background-color: #fff;
|
||||||
|
border-color: #2b85e4;
|
||||||
|
}
|
||||||
|
.order-group-list-selected {
|
||||||
|
color: #2b85e4;
|
||||||
|
background-color: #fff;
|
||||||
|
border-color: #2b85e4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
@ -157,10 +157,12 @@
|
|||||||
<ui-detail :data="detailObj.data" :show.sync="detailObj.show"></ui-detail>
|
<ui-detail :data="detailObj.data" :show.sync="detailObj.show"></ui-detail>
|
||||||
|
|
||||||
<ui-cards
|
<ui-cards
|
||||||
|
:orderObj="cardsObj.orderObj"
|
||||||
:source="cardsObj.source"
|
:source="cardsObj.source"
|
||||||
:show.sync="cardsObj.show"
|
:show.sync="cardsObj.show"
|
||||||
:type="type"
|
:type="type"
|
||||||
@create-order="openEdit(true, 1, null)"
|
@create-order="openEdit(true, 1, null)"
|
||||||
|
@store-success="handleOrderSuccess(1)"
|
||||||
></ui-cards>
|
></ui-cards>
|
||||||
|
|
||||||
<Modal v-model="orderConfirmShow" width="360">
|
<Modal v-model="orderConfirmShow" width="360">
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { mapGetters } from 'vuex';
|
import { mapGetters } from 'vuex';
|
||||||
|
import * as API from 'api/virtual/orders';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@ -16,10 +17,22 @@ export default {
|
|||||||
type: {
|
type: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 0
|
default: 0
|
||||||
|
},
|
||||||
|
orderObj: {
|
||||||
|
type: Object,
|
||||||
|
default: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters(['orders', 'cards', 'selected', 'counts', 'getFilterUsedCards', 'getRealOrderById', 'getSelectedByOrderId', 'getCardByOderIdAndSim'])
|
relationObj: {
|
||||||
|
get() {
|
||||||
|
return this.$store.state.order.relationObj;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.$store.commit('SET_RELATION_OBJ', value);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
...mapGetters(['orders', 'cards', 'selected', 'counts', 'getFilterUsedCards', 'getRealOrderById', 'getSelectedByOrderId', 'getCardByOderIdAndSim', 'relations', 'real_companies', 'real_packages'])
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@ -36,8 +49,8 @@ export default {
|
|||||||
page: 1
|
page: 1
|
||||||
},
|
},
|
||||||
params: {
|
params: {
|
||||||
company_id: '',
|
company_name: '',
|
||||||
package_id: '',
|
package_name: '',
|
||||||
carrier_operator: '',
|
carrier_operator: '',
|
||||||
time: [
|
time: [
|
||||||
this.moment().subtract('2', 'months').startOf('month').format('YYYY-MM-DD'),
|
this.moment().subtract('2', 'months').startOf('month').format('YYYY-MM-DD'),
|
||||||
@ -46,6 +59,7 @@ export default {
|
|||||||
used: '',
|
used: '',
|
||||||
sim: ''
|
sim: ''
|
||||||
},
|
},
|
||||||
|
filterOrders: [],
|
||||||
showOrders: [],
|
showOrders: [],
|
||||||
showCards: [],
|
showCards: [],
|
||||||
orderColumns: [
|
orderColumns: [
|
||||||
@ -56,15 +70,11 @@ export default {
|
|||||||
let value = false;
|
let value = false;
|
||||||
let indeterminate = false;
|
let indeterminate = false;
|
||||||
|
|
||||||
let total = this.showOrders.reduce((acc, cur) => {
|
let total = this.orders.reduce((acc, cur) => {
|
||||||
return acc + cur.counts;
|
return acc + cur.counts;
|
||||||
}, 0);
|
}, 0);
|
||||||
|
|
||||||
let select = this.getSelectedByOrderId(this.showOrders.map(el => {
|
let counts = this.selected.reduce((acc, cur) => {
|
||||||
return el.id;
|
|
||||||
}));
|
|
||||||
|
|
||||||
let counts = select.reduce((acc, cur) => {
|
|
||||||
return acc + cur.counts;
|
return acc + cur.counts;
|
||||||
}, 0);
|
}, 0);
|
||||||
|
|
||||||
@ -78,7 +88,9 @@ export default {
|
|||||||
},
|
},
|
||||||
on: {
|
on: {
|
||||||
input: value => {
|
input: value => {
|
||||||
let order_id = this.showOrders.map(item => {
|
let order_id = this.filterOrders.filter(el => {
|
||||||
|
return el.shipments !== el.counts;
|
||||||
|
}).map(item => {
|
||||||
return item.id;
|
return item.id;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -113,23 +125,26 @@ export default {
|
|||||||
{
|
{
|
||||||
title: "订单编号",
|
title: "订单编号",
|
||||||
key: "sn",
|
key: "sn",
|
||||||
width: 220
|
width: 220,
|
||||||
|
sortable: true
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
title: "企业名称",
|
title: "企业名称",
|
||||||
key: "company_name",
|
key: "company_name",
|
||||||
width: 210
|
width: 210,
|
||||||
|
sortable: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "运营商",
|
title: "运营商",
|
||||||
key: "carrier_operator_name",
|
key: "carrier_operator_name",
|
||||||
width: 75
|
width: 80
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "套餐名称",
|
title: "套餐名称",
|
||||||
key: "package_name",
|
key: "package_name",
|
||||||
width: 150
|
width: 150,
|
||||||
|
sortable: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "支付方式",
|
title: "支付方式",
|
||||||
@ -139,7 +154,8 @@ export default {
|
|||||||
{
|
{
|
||||||
title: "数量",
|
title: "数量",
|
||||||
key: "counts",
|
key: "counts",
|
||||||
width: 90
|
width: 100,
|
||||||
|
sortable: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "已用数量",
|
title: "已用数量",
|
||||||
@ -149,13 +165,15 @@ export default {
|
|||||||
{
|
{
|
||||||
title: "订单金额",
|
title: "订单金额",
|
||||||
key: "total_price",
|
key: "total_price",
|
||||||
width: 100
|
width: 120,
|
||||||
|
sortable: true
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
title: "订单时间",
|
title: "订单时间",
|
||||||
key: "order_at",
|
key: "order_at",
|
||||||
width: 150
|
width: 150,
|
||||||
|
sortable: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "所需卡量",
|
title: "所需卡量",
|
||||||
@ -209,7 +227,14 @@ export default {
|
|||||||
let cards = this.getFilterUsedCards(this.showCards);
|
let cards = this.getFilterUsedCards(this.showCards);
|
||||||
|
|
||||||
let array = cards.map(item => {
|
let array = cards.map(item => {
|
||||||
return { order_id: item.order_id, sim: item.sim, counts: item.counts };
|
return {
|
||||||
|
order_id: item.order_id,
|
||||||
|
sim: item.sim,
|
||||||
|
counts: item.counts,
|
||||||
|
virtual_order_id: item.virtual_order_id,
|
||||||
|
company_id: item.company_id,
|
||||||
|
package_id: item.package_id
|
||||||
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
this.$store.commit('PUSH_SELECTED', array);
|
this.$store.commit('PUSH_SELECTED', array);
|
||||||
@ -247,12 +272,9 @@ export default {
|
|||||||
{
|
{
|
||||||
title: "SIM",
|
title: "SIM",
|
||||||
key: "sim",
|
key: "sim",
|
||||||
width: 135
|
width: 135,
|
||||||
},
|
sortable: true
|
||||||
{
|
|
||||||
title: "数量",
|
|
||||||
key: "counts",
|
|
||||||
width: 60
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "状态",
|
title: "状态",
|
||||||
@ -269,15 +291,22 @@ export default {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: "数量",
|
||||||
|
key: "counts",
|
||||||
|
width: 60
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: "VD企业",
|
title: "VD企业",
|
||||||
key: "company_name",
|
key: "company_name",
|
||||||
width: 210
|
width: 210,
|
||||||
|
sortable: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "VD套餐",
|
title: "VD套餐",
|
||||||
key: "package_name",
|
key: "package_name",
|
||||||
width: 150
|
width: 150,
|
||||||
|
sortable: true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
@ -289,31 +318,38 @@ export default {
|
|||||||
if (bool) {
|
if (bool) {
|
||||||
this.index();
|
this.index();
|
||||||
}
|
}
|
||||||
},
|
|
||||||
orders(array) {
|
|
||||||
this.page.total = array.length;
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
ok() {
|
|
||||||
this.my_show = false;
|
|
||||||
},
|
|
||||||
index(force = 0) {
|
index(force = 0) {
|
||||||
let params = this.parseParams(this.params);
|
if (this.params.type != this.type) {
|
||||||
|
this.params.type = this.type;
|
||||||
if (params.type !== this.type) {
|
this.$store.dispatch('initOrder');
|
||||||
params.type = this.type;
|
|
||||||
this.$store.commit('SET_SELECTED', []);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.orderLoading = true;
|
let params = this.parseParams({ times: this.params.times, type: this.params.type });
|
||||||
|
|
||||||
if (force) {
|
if (force) {
|
||||||
this.$store.commit('SET_ORDER_PARAMS', {});
|
this.$store.commit('SET_ORDER_PARAMS', {});
|
||||||
params.skipCache = 1;
|
params.skipCache = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.orderLoading = true;
|
||||||
|
|
||||||
|
if (this.params.sim !== '') {
|
||||||
|
params.sim = this.params.sim;
|
||||||
|
|
||||||
|
this.cardLoading = true;
|
||||||
|
this.$store.dispatch("getCardsByParams", params).then((cards) => {
|
||||||
|
this.showCards = cards;
|
||||||
|
this.cardLoading = false;
|
||||||
|
}).catch(() => {
|
||||||
|
this.cardLoading = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
this.$store.dispatch("getOrders", params).then(() => {
|
this.$store.dispatch("getOrders", params).then(() => {
|
||||||
|
this.sortOrders('order_at');
|
||||||
this.changePage(1);
|
this.changePage(1);
|
||||||
this.orderLoading = false;
|
this.orderLoading = false;
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
@ -326,7 +362,45 @@ export default {
|
|||||||
},
|
},
|
||||||
changePage(page) {
|
changePage(page) {
|
||||||
this.page.page = page;
|
this.page.page = page;
|
||||||
this.showOrders = this.orders.slice((page - 1) * this.page.limit, page * this.page.limit);
|
|
||||||
|
this.filterOrders = JSON.parse(JSON.stringify(this.orders));
|
||||||
|
|
||||||
|
if (this.params.company_name !== '' && this.params.company_name !== undefined) {
|
||||||
|
this.filterOrders = this.filterOrders.filter(el => {
|
||||||
|
return el.company_name.indexOf(this.params.company_name) !== -1;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.params.package_name !== '' && this.params.package_name !== undefined) {
|
||||||
|
this.filterOrders = this.filterOrders.filter(el => {
|
||||||
|
return el.package_name.indexOf(this.params.package_name) !== -1;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.params.carrier_operator !== '' && this.params.carrier_operator !== undefined) {
|
||||||
|
this.filterOrders = this.filterOrders.filter(el => {
|
||||||
|
return el.carrier_operator === this.params.carrier_operator;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.params.used !== '' && this.params.used !== undefined) {
|
||||||
|
this.filterOrders = this.filterOrders.filter(el => {
|
||||||
|
switch (this.params.used) {
|
||||||
|
case 0:
|
||||||
|
return el.shipments === 0;
|
||||||
|
case 1:
|
||||||
|
return el.shipments > 0 && el.shipments !== el.counts;
|
||||||
|
case 2:
|
||||||
|
return el.shipments > 0 && el.shipments === el.counts;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
this.page.total = this.filterOrders.length;
|
||||||
|
|
||||||
|
this.showOrders = this.filterOrders.slice((page - 1) * this.page.limit, page * this.page.limit);
|
||||||
},
|
},
|
||||||
handleOrderRowDblclick(row) {
|
handleOrderRowDblclick(row) {
|
||||||
this.getCards(row.id);
|
this.getCards(row.id);
|
||||||
@ -336,10 +410,16 @@ export default {
|
|||||||
this.$emit("update:show", false);
|
this.$emit("update:show", false);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
clear() {
|
close() {
|
||||||
this.$store.commit('SET_REAL_ORDER_SELECTED', []);
|
|
||||||
this.my_show = false;
|
this.my_show = false;
|
||||||
},
|
},
|
||||||
|
clear() {
|
||||||
|
this.$store.dispatch('initOrder');
|
||||||
|
},
|
||||||
|
cannel() {
|
||||||
|
this.clear();
|
||||||
|
this.close();
|
||||||
|
},
|
||||||
resetSearch() {
|
resetSearch() {
|
||||||
for (let k in this.params) {
|
for (let k in this.params) {
|
||||||
if (k === 'time') {
|
if (k === 'time') {
|
||||||
@ -351,7 +431,9 @@ export default {
|
|||||||
this.params[k] = '';
|
this.params[k] = '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.index();
|
|
||||||
|
this.$store.dispatch('initOrder');
|
||||||
|
this.index(1);
|
||||||
},
|
},
|
||||||
getCards(order_id) {
|
getCards(order_id) {
|
||||||
this.cardLoading = true;
|
this.cardLoading = true;
|
||||||
@ -402,7 +484,7 @@ export default {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let arr = cards.map(item => {
|
let arr = cards.map(item => {
|
||||||
return { order_id: item.order_id, sim: item.sim, counts: item.counts };
|
return JSON.parse(JSON.stringify(item));
|
||||||
});
|
});
|
||||||
|
|
||||||
if (counts !== null) {
|
if (counts !== null) {
|
||||||
@ -419,12 +501,65 @@ export default {
|
|||||||
},
|
},
|
||||||
handleSelectCards(row, value) {
|
handleSelectCards(row, value) {
|
||||||
let action = value ? 'PUSH_SELECTED' : 'REMOVE_SELECTED';
|
let action = value ? 'PUSH_SELECTED' : 'REMOVE_SELECTED';
|
||||||
this.$store.commit(action, [{ order_id: row.order_id, sim: row.sim, counts: row.counts }]);
|
this.$store.commit(action, [row]);
|
||||||
},
|
},
|
||||||
order() {
|
order() {
|
||||||
|
if (this.selected.findIndex(el => { return el.virtual_order_id !== 0; }) !== -1) {
|
||||||
|
return this.$Message.error('所选数据存在已使用的卡');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.type !== 0) {
|
||||||
|
let group = {};
|
||||||
|
|
||||||
|
for (let index = 0; index < this.selected.length; index++) {
|
||||||
|
const element = this.selected[index];
|
||||||
|
let key = element.company_id + '_' + element.package_id;
|
||||||
|
|
||||||
|
if (group.hasOwnProperty(key)) {
|
||||||
|
group[key].push(element);
|
||||||
|
} else {
|
||||||
|
group[key] = [element];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Object.keys(group).length >= 1) {
|
||||||
|
this.$store.commit('SET_ORDER_GROUP', group);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.$emit('create-order');
|
this.$emit('create-order');
|
||||||
},
|
},
|
||||||
store() {},
|
store() {
|
||||||
|
if (!this.orderObj) {
|
||||||
|
return this.$Message.error('订单错误');
|
||||||
|
}
|
||||||
|
|
||||||
|
let counts = this.selected.reduce((acc, cur) => {
|
||||||
|
return acc + cur.counts;
|
||||||
|
}, 0);
|
||||||
|
|
||||||
|
if (this.orderObj.counts !== counts) {
|
||||||
|
return this.$Message.error('选择的卡数量不正确');
|
||||||
|
}
|
||||||
|
|
||||||
|
let params = {};
|
||||||
|
params.type = this.type;
|
||||||
|
params.selected = this.selected.map(el => {
|
||||||
|
return { order_id: el.order_id, counts: el.counts, sim: el.sim };
|
||||||
|
});
|
||||||
|
this.loading = true;
|
||||||
|
// 编辑
|
||||||
|
API.update(params, this.orderObj.id).then(res => {
|
||||||
|
this.loading = false;
|
||||||
|
if (res.code == 0) {
|
||||||
|
this.$emit('store-success');
|
||||||
|
this.$Message.success('操作成功');
|
||||||
|
this.clear();
|
||||||
|
}
|
||||||
|
}).catch(err => {
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
sort() {
|
sort() {
|
||||||
this.showCards = this.cards;
|
this.showCards = this.cards;
|
||||||
|
|
||||||
@ -443,6 +578,65 @@ export default {
|
|||||||
this.$store.commit('SET_REAL_ORDERS', orders);
|
this.$store.commit('SET_REAL_ORDERS', orders);
|
||||||
|
|
||||||
this.changePage(1);
|
this.changePage(1);
|
||||||
|
},
|
||||||
|
sortOrders(sortBy = 'times') {
|
||||||
|
let mapped = [];
|
||||||
|
|
||||||
|
if (sortBy === 'order_at') {
|
||||||
|
mapped = this.orders.map((el, i) => {
|
||||||
|
return { index: i, order_at: el.order_at };
|
||||||
|
});
|
||||||
|
|
||||||
|
mapped.sort((a, b) => {
|
||||||
|
if (a.shipments === a.counts) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return a.order_at > b.order_at ? -1 : (a.order_at < b.order_at ? 1 : 0);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
let virtual_company_id = this.relationObj.virtual_company_id;
|
||||||
|
let virtual_package_id = this.relationObj.virtual_package_id;
|
||||||
|
|
||||||
|
let relations = this.relations;
|
||||||
|
|
||||||
|
let sortRules = relations.filter(el => {
|
||||||
|
if (virtual_company_id !== '' && virtual_package_id !== '') {
|
||||||
|
if (virtual_company_id == el.virtual_company_id || virtual_package_id == el.virtual_package_id) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
mapped = this.orders.map((el, i) => {
|
||||||
|
let display = -1;
|
||||||
|
|
||||||
|
for (let index = 0; index < sortRules.length; index++) {
|
||||||
|
const element = sortRules[index];
|
||||||
|
if (element.real_company_id == el.company_id && element.real_package_id == el.package_id) {
|
||||||
|
display = el[sortBy];
|
||||||
|
} else if (element.real_company_id == el.company_id) {
|
||||||
|
display = 0;
|
||||||
|
} else if (element.real_package_id == el.package_id) {
|
||||||
|
display = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return { index: i, display };
|
||||||
|
});
|
||||||
|
|
||||||
|
mapped.sort((a, b) => {
|
||||||
|
return a.display > b.display ? -1 : (a.display < b.display ? 1 : 0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
let orders = mapped.map(el => {
|
||||||
|
return this.orders[el.index];
|
||||||
|
});
|
||||||
|
|
||||||
|
this.$store.commit('SET_REAL_ORDERS', orders);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -47,11 +47,29 @@ export default {
|
|||||||
address: '',
|
address: '',
|
||||||
contacts: '',
|
contacts: '',
|
||||||
mobile: ''
|
mobile: ''
|
||||||
}
|
},
|
||||||
|
groupIndex: '',
|
||||||
|
group: {}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters(['selected', 'counts'])
|
relationObj: {
|
||||||
|
get() {
|
||||||
|
return this.$store.state.order.relationObj;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.$store.commit('SET_RELATION_OBJ', value);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
order_group: {
|
||||||
|
get() {
|
||||||
|
return this.$store.state.order.order_group;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.$store.commit('SET_ORDER_GROUP', value);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
...mapGetters(['selected', 'counts', 'orders', 'relations'])
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
show(bool) {
|
show(bool) {
|
||||||
@ -63,11 +81,7 @@ export default {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
this.initCompletePackages(this.type).then(packages => {
|
this.handleChange(0);
|
||||||
this.completePackagesFilter = packages.filter(function(item) {
|
|
||||||
return item.status === 0;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
if (this.data) {
|
if (this.data) {
|
||||||
for (let k in this.data) {
|
for (let k in this.data) {
|
||||||
@ -76,10 +90,23 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.selected.length && !Object.keys(this.order_group).length) {
|
||||||
|
this.setParamsByReal(this.selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Object.keys(this.order_group).length) {
|
||||||
|
let key = Object.keys(this.order_group)[0];
|
||||||
|
this.selectGroup(this.order_group[key], key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
counts(value) {
|
counts(value) {
|
||||||
if (value) {
|
if (value) {
|
||||||
|
if (this.selected.length && !Object.keys(this.order_group).length) {
|
||||||
|
this.setParamsByReal(this.selected);
|
||||||
|
}
|
||||||
|
|
||||||
this.params.counts = value;
|
this.params.counts = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -89,44 +116,67 @@ export default {
|
|||||||
this.params.type = this.type;
|
this.params.type = this.type;
|
||||||
|
|
||||||
if (!this.params.company_id) {
|
if (!this.params.company_id) {
|
||||||
this.$Message.info('请选择企业');
|
return this.$Message.info('请选择企业');
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.params.package_id) {
|
if (!this.params.package_id) {
|
||||||
this.$Message.info('请选择套餐');
|
return this.$Message.info('请选择套餐');
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.params.pay_channel) {
|
if (!this.params.pay_channel) {
|
||||||
this.$Message.info('请选择支付方式');
|
return this.$Message.info('请选择支付方式');
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.params.counts) {
|
if (!this.params.counts) {
|
||||||
this.$Message.info('请输入订单卡量');
|
return this.$Message.info('请输入订单卡量');
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.params.order_at) {
|
if (!this.params.order_at) {
|
||||||
this.$Message.info('请选择订单时间');
|
return this.$Message.info('请选择订单时间');
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.params.contacts && !(/[\s\S]{2,32}/.test(this.params.contacts))) {
|
if (this.params.contacts && !(/[\s\S]{2,32}/.test(this.params.contacts))) {
|
||||||
this.$Message.info('联系人长度在2-32之间');
|
return this.$Message.info('联系人长度在2-32之间');
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.params.mobile && !isPhone(this.params.mobile)) {
|
if (this.params.mobile && !isPhone(this.params.mobile)) {
|
||||||
this.$Message.info('手机号填写不正确');
|
return this.$Message.info('手机号填写不正确');
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.selected.length) {
|
if (Object.keys(this.order_group).length) {
|
||||||
this.params.selected = this.selected;
|
if (!this.group.length) {
|
||||||
|
return this.$Message.error('请选择一个订单组');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.groupIndex === '0_0') {
|
||||||
|
// 卡不在VD上转销售
|
||||||
|
this.params.type = -1;
|
||||||
|
this.post();
|
||||||
|
} else if (this.params.company_id !== this.group[0].company_id) {
|
||||||
|
// 改企业的
|
||||||
|
this.params.type = -2;
|
||||||
|
this.$Modal.confirm({
|
||||||
|
title: '提示',
|
||||||
|
content: '是否确认修改所选卡的企业?',
|
||||||
|
onOk: () => {
|
||||||
|
this.post();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
this.params.selected = this.group.map(el => {
|
||||||
|
return { order_id: el.order_id, counts: el.counts, sim: el.sim };
|
||||||
|
});
|
||||||
|
} else if (this.selected.length) {
|
||||||
|
this.params.selected = this.selected.map(el => {
|
||||||
|
return { order_id: el.order_id, counts: el.counts, sim: el.sim };
|
||||||
|
});
|
||||||
|
this.post();
|
||||||
|
} else {
|
||||||
|
this.post();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
post() {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
|
|
||||||
if (this.data) {
|
if (this.data) {
|
||||||
@ -134,9 +184,7 @@ export default {
|
|||||||
API.update(this.params, this.data.id).then(res => {
|
API.update(this.params, this.data.id).then(res => {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
this.$emit('update-success');
|
this.handelSuccess();
|
||||||
this.$Message.success('更新成功');
|
|
||||||
this.clear();
|
|
||||||
}
|
}
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
@ -146,9 +194,7 @@ export default {
|
|||||||
API.create(this.params).then(res => {
|
API.create(this.params).then(res => {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
if (res.code == 0) {
|
if (res.code == 0) {
|
||||||
this.$emit('add-success');
|
this.handelSuccess();
|
||||||
this.$Message.success('添加成功');
|
|
||||||
this.clear();
|
|
||||||
}
|
}
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
@ -173,17 +219,24 @@ export default {
|
|||||||
this.my_show = false;
|
this.my_show = false;
|
||||||
},
|
},
|
||||||
handleChange(type) {
|
handleChange(type) {
|
||||||
|
let packageType = this.type === 1 ? 0 : this.type;
|
||||||
|
this.initCompletePackages(packageType).then(packages => {
|
||||||
|
let completePackagesFilter = [];
|
||||||
|
|
||||||
|
completePackagesFilter = packages.filter(item => {
|
||||||
|
return item.status === 0;
|
||||||
|
});
|
||||||
|
|
||||||
if (type === 1) {
|
if (type === 1) {
|
||||||
this.params.package_id = '';
|
this.params.package_id = '';
|
||||||
this.initCompletePackages(this.type).then(packages => {
|
|
||||||
this.completePackagesFilter = packages.filter(item => {
|
completePackagesFilter = packages.filter(item => {
|
||||||
return item.status === 0 && item.carrier_operator === this.params.carrier_operator;
|
return item.carrier_operator === this.params.carrier_operator;
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type === 2) {
|
if (type === 2) {
|
||||||
let selectPackage = this.completePackagesFilter.find(item => {
|
let selectPackage = packages.find(item => {
|
||||||
return item.id === this.params.package_id;
|
return item.id === this.params.package_id;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -191,9 +244,142 @@ export default {
|
|||||||
this.params.carrier_operator = selectPackage.carrier_operator;
|
this.params.carrier_operator = selectPackage.carrier_operator;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.completePackagesFilter = completePackagesFilter;
|
||||||
|
});
|
||||||
},
|
},
|
||||||
cards() {
|
cards() {
|
||||||
|
this.relationObj = {
|
||||||
|
virtual_company_id: this.params.company_id,
|
||||||
|
virtual_package_id: this.params.package_id
|
||||||
|
};
|
||||||
this.$emit('select-cards');
|
this.$emit('select-cards');
|
||||||
|
},
|
||||||
|
selectGroup(item, index) {
|
||||||
|
this.groupIndex = index;
|
||||||
|
this.group = item;
|
||||||
|
|
||||||
|
this.params.company_id = item[0].company_id;
|
||||||
|
this.params.counts = item.reduce((acc, cur) => { return acc + cur.counts; }, 0);
|
||||||
|
|
||||||
|
if ([0, 1].indexOf(this.type)) {
|
||||||
|
this.params.package_id = item[0].package_id;
|
||||||
|
this.handleChange(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setParamsByReal(item);
|
||||||
|
},
|
||||||
|
setParamsByReal(array) {
|
||||||
|
let tmp = array.map(el => { return el.company_id + '_' + el.package_id; }).filter((v, i, a) => {
|
||||||
|
return a.indexOf(v) === i;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (tmp.length > 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let order = this.orders.find(el => { return el.id === array[0].order_id; });
|
||||||
|
|
||||||
|
if (order) {
|
||||||
|
switch (order.pay_channel_name) {
|
||||||
|
case '银行转账':
|
||||||
|
this.params.pay_channel = 'bank';
|
||||||
|
break;
|
||||||
|
case '微信支付':
|
||||||
|
this.params.pay_channel = 'wx';
|
||||||
|
break;
|
||||||
|
case '支付宝':
|
||||||
|
this.params.pay_channel = 'alipay';
|
||||||
|
break;
|
||||||
|
case '余额支付':
|
||||||
|
this.params.pay_channel = 'account';
|
||||||
|
break;
|
||||||
|
case '天猫续费':
|
||||||
|
this.params.pay_channel = 'tmall';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.params.order_at = order.order_at;
|
||||||
|
this.params.transaction_no = order.transaction_no;
|
||||||
|
this.params.contacts = order.contacts;
|
||||||
|
this.params.mobile = order.mobile;
|
||||||
|
this.params.remark = order.remark;
|
||||||
|
this.params.address = order.address;
|
||||||
|
}
|
||||||
|
|
||||||
|
let relations = this.relations.filter(el => {
|
||||||
|
return array.findIndex(e => { return e.company_id === el.real_company_id && e.package_id === el.real_package_id; }) !== -1;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (relations.length) {
|
||||||
|
let mappedCompany = this.companies.map(el, i => {
|
||||||
|
return { index: i, company_id: el.id };
|
||||||
|
});
|
||||||
|
|
||||||
|
mappedCompany = mappedCompany.map(el => {
|
||||||
|
el.display = 0;
|
||||||
|
let relation = relations.find(e => { return e.virtual_company_id === el.id; });
|
||||||
|
|
||||||
|
if (relation) {
|
||||||
|
el.display = relation.updated_at;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
mappedCompany.sort((a, b) => {
|
||||||
|
return a.display > b.display ? 1 : (a.display < b.display ? -1 : 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.companies = mappedCompany.map(el => {
|
||||||
|
return this.companies[el.index];
|
||||||
|
});
|
||||||
|
|
||||||
|
let mappedPackage = this.completePackagesFilter.map(el, i => {
|
||||||
|
return { index: i, package_id: el.id };
|
||||||
|
});
|
||||||
|
|
||||||
|
mappedPackage = mappedPackage.map(el => {
|
||||||
|
el.display = 0;
|
||||||
|
let relation = relations.find(e => { return e.virtual_package_id === el.id; });
|
||||||
|
|
||||||
|
if (relation) {
|
||||||
|
el.display = relation.updated_at;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
mappedPackage.sort((a, b) => {
|
||||||
|
return a.display > b.display ? 1 : (a.display < b.display ? -1 : 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.completePackagesFilter = mappedPackage.map(el => {
|
||||||
|
return this.completePackagesFilter[el.index];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handelSuccess() {
|
||||||
|
if (Object.keys(this.order_group).length >= 1) {
|
||||||
|
let mapped = JSON.parse(JSON.stringify(this.order_group));
|
||||||
|
this.$store.commit('REMOVE_SELECTED', mapped[this.groupIndex]);
|
||||||
|
delete mapped[this.groupIndex];
|
||||||
|
this.order_group = mapped;
|
||||||
|
|
||||||
|
if (Object.keys(this.order_group).length >= 1) {
|
||||||
|
let key = Object.keys(this.order_group)[0];
|
||||||
|
this.selectGroup(this.order_group[key], key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$Message.success('操作成功');
|
||||||
|
|
||||||
|
if (!this.order_group || Object.keys(this.order_group).length < 1) {
|
||||||
|
this.clear();
|
||||||
|
if (this.data) {
|
||||||
|
this.$emit('update-success');
|
||||||
|
} else {
|
||||||
|
this.$emit('add-success');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -419,7 +419,7 @@ export default {
|
|||||||
{
|
{
|
||||||
title: '操作',
|
title: '操作',
|
||||||
key: 'action',
|
key: 'action',
|
||||||
width: 210,
|
width: 190,
|
||||||
fixed: 'right',
|
fixed: 'right',
|
||||||
render: (h, {
|
render: (h, {
|
||||||
row,
|
row,
|
||||||
@ -469,20 +469,49 @@ export default {
|
|||||||
class: ['btn'],
|
class: ['btn'],
|
||||||
on: {
|
on: {
|
||||||
click: () => {
|
click: () => {
|
||||||
this.openCards(true, 2);
|
this.openCards(true, 2, row);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, '排单')]));
|
}, '排单')]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.haveJurisdiction('destroy')) {
|
if (this.haveJurisdiction('destroy') && row.shipments) {
|
||||||
|
html.push(h('Button', {
|
||||||
|
props: {
|
||||||
|
type: 'warning',
|
||||||
|
size: 'small',
|
||||||
|
disabled: false
|
||||||
|
},
|
||||||
|
class: ['btn'],
|
||||||
|
on: {
|
||||||
|
click: () => {
|
||||||
|
this.$Modal.confirm({
|
||||||
|
title: '提示',
|
||||||
|
content: '重置将清空该订单的排单记录,请谨慎操作',
|
||||||
|
onOk: () => {
|
||||||
|
this.isShowLoading(true);
|
||||||
|
API.reset({
|
||||||
|
ids: row.id
|
||||||
|
}).then(res => {
|
||||||
|
if (res.code == 0) {
|
||||||
|
this.$Message.success('操作成功');
|
||||||
|
this.request();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, '重置'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.haveJurisdiction('destroy') && !row.shipments) {
|
||||||
html.push(h('Button', {
|
html.push(h('Button', {
|
||||||
props: {
|
props: {
|
||||||
type: 'error',
|
type: 'error',
|
||||||
size: 'small',
|
size: 'small',
|
||||||
disabled: false,
|
disabled: false
|
||||||
icon: 'md-trash'
|
|
||||||
},
|
},
|
||||||
class: ['btn'],
|
class: ['btn'],
|
||||||
on: {
|
on: {
|
||||||
@ -572,10 +601,11 @@ export default {
|
|||||||
* source 0:选创建订单页面打开 1:从选卡按钮打开 2:从排单按钮打开
|
* source 0:选创建订单页面打开 1:从选卡按钮打开 2:从排单按钮打开
|
||||||
* @return {[type]} [description]
|
* @return {[type]} [description]
|
||||||
*/
|
*/
|
||||||
openCards(bool, source) {
|
openCards(bool, source, orderObj = {}) {
|
||||||
this.cardsObj = {
|
this.cardsObj = {
|
||||||
show: bool,
|
show: bool,
|
||||||
source
|
source,
|
||||||
|
orderObj
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -684,9 +714,7 @@ export default {
|
|||||||
handleOrderSuccess(value) {
|
handleOrderSuccess(value) {
|
||||||
let page = value ? this.list_data.current_page : 1;
|
let page = value ? this.list_data.current_page : 1;
|
||||||
this.cardsObj.show = false;
|
this.cardsObj.show = false;
|
||||||
this.$store.commit("SET_REAL_ORDER_SELECTED", []);
|
this.$store.dispatch('initOrder');
|
||||||
this.$store.commit("SET_ORDER_PARAMS", {});
|
|
||||||
this.$store.commit("SET_CARD_PARAMS", {});
|
|
||||||
this.index(page);
|
this.index(page);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2
public/css/chunk-aac852ec.251cac58.css
Normal file
2
public/css/chunk-aac852ec.251cac58.css
Normal file
File diff suppressed because one or more lines are too long
2
public/js/app.266531a3.js
Normal file
2
public/js/app.266531a3.js
Normal file
File diff suppressed because one or more lines are too long
1
public/js/app.266531a3.js.map
Normal file
1
public/js/app.266531a3.js.map
Normal file
File diff suppressed because one or more lines are too long
4
public/js/chunk-00ae0766.3874cd10.js
Normal file
4
public/js/chunk-00ae0766.3874cd10.js
Normal file
File diff suppressed because one or more lines are too long
1
public/js/chunk-00ae0766.3874cd10.js.map
Normal file
1
public/js/chunk-00ae0766.3874cd10.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/chunk-07a274ec.c3ad5dec.js
Normal file
2
public/js/chunk-07a274ec.c3ad5dec.js
Normal file
File diff suppressed because one or more lines are too long
1
public/js/chunk-07a274ec.c3ad5dec.js.map
Normal file
1
public/js/chunk-07a274ec.c3ad5dec.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/chunk-12217672.67e501de.js
Normal file
2
public/js/chunk-12217672.67e501de.js
Normal file
File diff suppressed because one or more lines are too long
1
public/js/chunk-12217672.67e501de.js.map
Normal file
1
public/js/chunk-12217672.67e501de.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/chunk-aac852ec.be64dbbe.js
Normal file
2
public/js/chunk-aac852ec.be64dbbe.js
Normal file
File diff suppressed because one or more lines are too long
1
public/js/chunk-aac852ec.be64dbbe.js.map
Normal file
1
public/js/chunk-aac852ec.be64dbbe.js.map
Normal file
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=\favicon.ico><script src=\config.js></script><title></title><link href=/css/chunk-12217672.0f76ed17.css rel=prefetch><link href=/css/chunk-68d959cc.4c3a90e7.css rel=prefetch><link href=/js/chunk-00ae0766.d130b440.js rel=prefetch><link href=/js/chunk-07a274ec.47bfd5a6.js rel=prefetch><link href=/js/chunk-12217672.35ad14fb.js rel=prefetch><link href=/js/chunk-68d959cc.dc5e174a.js rel=prefetch><link href=/css/app.d71a8195.css rel=preload as=style><link href=/css/chunk-vendors.5803e894.css rel=preload as=style><link href=/js/app.eb0a5ca2.js rel=preload as=script><link href=/js/chunk-vendors.ed6443e8.js rel=preload as=script><link href=/css/chunk-vendors.5803e894.css rel=stylesheet><link href=/css/app.d71a8195.css rel=stylesheet></head><body><noscript><strong>很抱歉,如果没有启用JavaScript,程序不能正常工作,若要继续使用请启用它。</strong></noscript><div id=app></div><script src=/js/chunk-vendors.ed6443e8.js></script><script src=/js/app.eb0a5ca2.js></script></body></html>
|
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=\favicon.ico><script src=\config.js></script><title></title><link href=/css/chunk-12217672.0f76ed17.css rel=prefetch><link href=/css/chunk-aac852ec.251cac58.css rel=prefetch><link href=/js/chunk-00ae0766.3874cd10.js rel=prefetch><link href=/js/chunk-07a274ec.c3ad5dec.js rel=prefetch><link href=/js/chunk-12217672.67e501de.js rel=prefetch><link href=/js/chunk-aac852ec.be64dbbe.js rel=prefetch><link href=/css/app.d71a8195.css rel=preload as=style><link href=/css/chunk-vendors.5803e894.css rel=preload as=style><link href=/js/app.266531a3.js rel=preload as=script><link href=/js/chunk-vendors.ed6443e8.js rel=preload as=script><link href=/css/chunk-vendors.5803e894.css rel=stylesheet><link href=/css/app.d71a8195.css rel=stylesheet></head><body><noscript><strong>很抱歉,如果没有启用JavaScript,程序不能正常工作,若要继续使用请启用它。</strong></noscript><div id=app></div><script src=/js/chunk-vendors.ed6443e8.js></script><script src=/js/app.266531a3.js></script></body></html>
|
@ -1,7 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Domains\Virtual\Jobs\CreateRealVirtualRelation;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Database\Query\Grammars\Grammar;
|
||||||
|
use App\Models\Card\Card;
|
||||||
require_once realpath(dirname(__FILE__) . '/TestCase.php');
|
require_once realpath(dirname(__FILE__) . '/TestCase.php');
|
||||||
|
|
||||||
CreateRealVirtualRelation::dispatchNow(1, [1, 2]);
|
$res = Card::selectRaw('MAX(SUBSTR(sim::text, 4, 1)) as max')
|
||||||
|
->whereRaw("sim::text SIMILAR TO '106\d244756200|106\d244756201|106_852546016|104_340502885'")
|
||||||
|
->first();
|
||||||
|
|
||||||
|
dd($res);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user