默认头像

This commit is contained in:
邓皓元 2019-01-11 19:05:35 +08:00
parent e9283b466d
commit 763c03eaba
13 changed files with 311 additions and 133 deletions

View File

@ -35,7 +35,8 @@ class MongoSync extends Command
$blocs = app(BlocRepository::class)->get()->pluck('id', 'sn')->toArray();
$query = DB::connection('mongo')->table('tblCard')
->select(['cNo', 'bNo', 'iccid', 'imsi', 'comId', 'oType', 'saDate', 'sDate'])
->select(['cNo', 'bNo', 'iccid', 'imsi', 'comId', 'oType', 'saDate', 'sDate'])
->where('pNo', 'No00000000768')
->where('oRDate', '>', $utcDateTime)
->where('sDate', 'exists', true)
->orderBy('sDate');

View File

@ -216,8 +216,8 @@ class PackageSync extends Command
$package['id'] = ($package['type'] + 1) * 1000000 + $package['id'];
$package['parent_id'] = $package['parent_id'] ?? 0;
$package['carrier_operator'] = self::$carrier_operator[$package['carrier_operator']] ?? 255;
$package['cost_price'] = intval($package['cost_price'] * 100);
$package['guide_price'] = intval($package['guide_price'] * 100);
$package['cost_price'] = intval(floatval($package['cost_price']) * 100);
$package['guide_price'] = intval(floatval($package['guide_price']) * 100);
$package['flows'] = intval($package['flows']);
$package['voices'] = intval($package['voices']);
$package['messages'] = intval($package['messages']);

View File

@ -60,6 +60,7 @@ class LogSync extends Command
if ($page === 1) {
Artisan::call('virtual:sync-company');
Artisan::call('virtual:sync-package');
Artisan::call('virtual:sync-product');
}
echo 'sync_log_cursor page #: ' . $page . ' nextId #: ' . $nextId . PHP_EOL;
@ -109,11 +110,14 @@ class LogSync extends Command
}
$relationData = [
'type' => $type,
'sim' => $value['sim'],
'order_id' => $order->id,
'company_id' => $order->company_id,
'package_id' => $order->package_id,
'counts' => 1,
'service_start_at' => date('Y-m-d H:i:s', intval($value['valid_start_time'])),
'service_end_at' => date('Y-m-d H:i:s', intval($value['valid_end_time'])),
'created_at' => date('Y-m-d H:i:s', $value['create_time']),
'updated_at' => date('Y-m-d H:i:s'),
];

View File

@ -47,8 +47,8 @@ class PackageSync extends Command
'name' => $item->name,
'type' => 0,
'carrier_operator' => self::$carrier_operator[$item->carrieroperator],
'cost_price' => intval($item->price * 100),
'guide_price' => intval($item->package_rp * 100),
'cost_price' => intval(floatval($item->price) * 100),
'guide_price' => intval(floatval($item->package_rp) * 100),
'flows' => ($item->tag == 10) ? intval($item->package_value) : 0,
'voices' => ($item->tag == 11) ? intval($item->package_value) : 0,
'messages' => 0,

View File

@ -0,0 +1,30 @@
<?php
namespace App\Models\Virtual;
use App\Core\Model;
use App\Models\HasCompositePrimaryKey;
use Illuminate\Database\Eloquent\SoftDeletes;
use App\Models\Virtual\Relations\OrderRelations;
class OrderCardPartition extends Model
{
use SoftDeletes, OrderRelations, HasCompositePrimaryKey;
protected $table = 'virtual_order_cards';
public function renewals()
{
return $this->belongsToMany(Package::class, 'virtual_order_renewal_cards', 'sim', 'package_id', 'sim', 'id')->withPivot('created_at', 'counts');
}
public function renewalPackages()
{
return $this->belongsToMany(Package::class, 'virtual_order_renewal_package_cards', 'sim', 'package_id', 'sim', 'id')->withPivot('created_at', 'counts');
}
public function flowPackages()
{
return $this->belongsToMany(Package::class, 'virtual_order_flows_package_cards', 'sim', 'package_id', 'sim', 'id')->withPivot('created_at', 'counts');
}
}

View File

@ -21,7 +21,7 @@ class CreateVirtualCompanyAccountsTable extends Migration
$table->increments('id')->comment('自增ID');
$table->integer('company_id')->unsigned()->default(0)->comment('企业ID');
$table->string('nickname', 32)->default('')->comment('昵称');
$table->string('mobile', 20)->default('')->comment('手机号');
$table->string('mobile', 20)->nullable()->comment('手机号');
$table->string('username', 32)->default('')->comment('登录名');
$table->string('password', 32)->default('')->comment('密码');
$table->string('salt', 6)->default('')->comment('盐');

View File

@ -1,18 +1,13 @@
<?php
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateVirtualOrderCardsTables extends Migration
{
protected $tables = [
'virtual_order_cards' => 'VD卡关联基础套餐订单',
'virtual_order_renewal_cards' => 'VD卡关联基础续费订单',
'virtual_order_renewal_package_cards' => 'VD卡关联续费包订单',
'virtual_order_flows_package_cards' => 'VD卡关联加油包订单',
];
/**
* Run the migrations.
*
@ -20,27 +15,12 @@ class CreateVirtualOrderCardsTables extends Migration
*/
public function up()
{
foreach ($this->tables as $table_name => $table_comment) {
if (Schema::hasTable($table_name)) {
continue;
}
Schema::create($table_name, function (Blueprint $table) use ($table_comment) {
$table->increments('id')->comment('关联表ID');
$table->bigInteger('sim')->unsigned()->default(0)->comment('SIM卡号');
$table->integer('order_id')->unsigned()->default(0)->comment('订单ID');
$table->integer('company_id')->unsigned()->default(0)->comment('企业ID');
$table->integer('package_id')->unsigned()->default(0)->comment('套餐ID');
$table->integer('counts')->unsigned()->default(1)->comment('数量');
$table->timestamp('service_start_at')->nullable()->comment('服务开始时间');
$table->timestamp('service_end_at')->nullable()->comment('服务结束时间');
$table->timestamps();
$table->softDeletes();
$table->unique(['order_id', 'sim', 'deleted_at']);
$table->comment($table_comment);
});
if (Schema::hasTable('virtual_order_cards_partition')) {
return;
}
DB::unprepared(File::get(__DIR__ . '/create_virtual_order_cards_table.pgsql'));
DB::unprepared(File::get(__DIR__ . '/functions.pgsql'));
}
/**
@ -50,8 +30,6 @@ class CreateVirtualOrderCardsTables extends Migration
*/
public function down()
{
foreach ($this->tables as $table_name => $table_comment) {
Schema::dropIfExists($table_name);
}
Schema::dropIfExists('virtual_order_cards_partition');
}
}

View File

@ -0,0 +1,76 @@
CREATE SEQUENCE IF NOT EXISTS "virtual_order_cards_partition_id_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 2147483647 START 1
CACHE 1;
CREATE TABLE "virtual_order_cards_partition" (
"id" int4 NOT NULL DEFAULT nextval('virtual_order_cards_partition_id_seq'::regclass),
"type" int2 NOT NULL DEFAULT 0,
"sim" int8 NOT NULL DEFAULT 0,
"order_id" int4 NOT NULL DEFAULT 0,
"company_id" int4 NOT NULL DEFAULT 0,
"package_id" int4 NOT NULL DEFAULT 0,
"counts" int4 NOT NULL DEFAULT 1,
"service_start_at" timestamp(0),
"service_end_at" timestamp(0),
"created_at" timestamp(0),
"updated_at" timestamp(0),
"deleted_at" timestamp(0))
PARTITION BY
LIST (
"type"
);
ALTER SEQUENCE "virtual_order_cards_partition_id_seq" OWNED BY "virtual_order_cards_partition"."id";
COMMENT ON COLUMN "virtual_order_cards_partition"."id" IS '关联表ID';
COMMENT ON COLUMN "virtual_order_cards_partition"."sim" IS 'SIM卡号';
COMMENT ON COLUMN "virtual_order_cards_partition"."order_id" IS '订单ID';
COMMENT ON COLUMN "virtual_order_cards_partition"."company_id" IS '企业ID';
COMMENT ON COLUMN "virtual_order_cards_partition"."package_id" IS '套餐ID';
COMMENT ON COLUMN "virtual_order_cards_partition"."counts" IS '数量';
COMMENT ON COLUMN "virtual_order_cards_partition"."service_start_at" IS '服务开始时间';
COMMENT ON COLUMN "virtual_order_cards_partition"."service_end_at" IS '服务结束时间';
COMMENT ON TABLE "virtual_order_cards_partition" IS 'VD卡关联套餐订单';
CREATE TABLE virtual_order_cards PARTITION OF virtual_order_cards_partition FOR
VALUES
IN (
0
);
CREATE TABLE virtual_order_renewal_cards PARTITION OF virtual_order_cards_partition FOR
VALUES
IN (
1
);
CREATE TABLE virtual_order_renewal_package_cards PARTITION OF virtual_order_cards_partition FOR
VALUES
IN (
2
);
CREATE TABLE virtual_order_flows_package_cards PARTITION OF virtual_order_cards_partition FOR
VALUES
IN (
3
);
CREATE UNIQUE INDEX "virtual_order_cards_order_id_sim_deleted_at_unique" ON "virtual_order_cards" (order_id, sim, COALESCE(deleted_at, '1970-01-01 08:00:00'::timestamp));
CREATE UNIQUE INDEX "virtual_order_renewal_cards_order_id_sim_deleted_at_unique" ON "virtual_order_cards" (order_id, sim, COALESCE(deleted_at, '1970-01-01 08:00:00'::timestamp));
CREATE UNIQUE INDEX "virtual_order_renewal_package_cards_order_id_sim_deleted_at_unique" ON "virtual_order_cards" (order_id, sim, COALESCE(deleted_at, '1970-01-01 08:00:00'::timestamp));
CREATE UNIQUE INDEX "virtual_order_flows_package_cards_order_id_sim_deleted_at_unique" ON "virtual_order_cards" (order_id, sim, COALESCE(deleted_at, '1970-01-01 08:00:00'::timestamp));

View File

@ -0,0 +1,164 @@
CREATE OR REPLACE FUNCTION FIX_TIMELINES (sim INT8, activated_at TIMESTAMP without TIME zone)
RETURNS BOOLEAN
AS $$
DECLARE
query TEXT;
order_row RECORD;
temp_service_start_at TIMESTAMP;
temp_service_end_at TIMESTAMP;
next_timestamp TIMESTAMP;
BEGIN
RAISE NOTICE '% - %', sim, activated_at;
IF activated_at IS NULL THEN
UPDATE
vd.virtual_order_cards_partition
SET
service_start_at = NULL,
service_end_at = NULL
WHERE
virtual_order_cards_partition.sim = FIX_TIMELINES.sim;
ELSE
query := 'SELECT
virtual_order_cards_partition.*,
virtual_packages.service_months,
virtual_packages.effect_months,
virtual_packages.delay_months
FROM
vd.virtual_order_cards_partition
JOIN vd.virtual_packages ON virtual_order_cards_partition.package_id = virtual_packages."id"
WHERE
virtual_order_cards_partition.sim = $1
ORDER BY
"type" ASC,
created_at ASC';
FOR order_row IN EXECUTE query
USING sim LOOP
-- 服务时间
CASE (order_row. "type")
WHEN 0 THEN
temp_service_start_at := TO_CHAR(activated_at, 'YYYY-MM-01 00:00:00');
temp_service_end_at := temp_service_start_at + (order_row.service_months || ' month')::INTERVAL + (order_row.delay_months || ' month')::INTERVAL - '1 second'::INTERVAL;
WHEN 1,
2 THEN
IF (next_timestamp > order_row.created_at) THEN
temp_service_start_at := TO_CHAR(next_timestamp, 'YYYY-MM-01 00:00:00');
ELSE
temp_service_start_at := TO_CHAR(order_row.created_at, 'YYYY-MM-01 00:00:00');
END IF;
temp_service_end_at := temp_service_start_at + order_row.counts * (order_row.service_months || ' month')::INTERVAL + (order_row.delay_months || ' month')::INTERVAL - '1 second'::INTERVAL;
ELSE
-- 先购买了加油包后再激活的
IF (order_row.created_at < activated_at) THEN
IF (order_row.created_at < TO_CHAR(activated_at - '1 month'::INTERVAL, 'YYYY-MM-01 00:00:00')::TIMESTAMP) THEN
-- 购买时间小于一个月的,直接生效
temp_service_start_at := TO_CHAR(activated_at, 'YYYY-MM-01 00:00:00');
ELSE
-- 延时生效
temp_service_start_at := TO_CHAR(activated_at + (order_row.effect_months || ' month')::INTERVAL,
'YYYY-MM-01 00:00:00');
END IF;
ELSE
-- 延时生效
temp_service_start_at := TO_CHAR(order_row.created_at + (order_row.effect_months || ' month')::INTERVAL,
'YYYY-MM-01 00:00:00');
END IF;
temp_service_end_at := temp_service_start_at + (order_row.service_months || ' month')::INTERVAL + (order_row.delay_months || ' month')::INTERVAL - '1 second'::INTERVAL;
END CASE;
next_timestamp := temp_service_end_at + '1 second'::INTERVAL;
-- 更新数据库
UPDATE
vd.virtual_order_cards_partition
SET
service_start_at = temp_service_start_at,
service_end_at = temp_service_end_at
WHERE
virtual_order_cards_partition. "id" = order_row. "id";
END LOOP;
END IF;
RETURN TRUE;
END;
$$
LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION CARD_TIMELINES ()
RETURNS TRIGGER
AS $$
BEGIN
IF (TG_OP = 'INSERT') THEN
-- 插入数据
IF (NEW.virtual_activated_at IS NOT NULL) THEN
PERFORM
vd.FIX_TIMELINES (NEW.sim,
NEW.virtual_activated_at);
END IF;
ELSIF (TG_OP = 'UPDATE') THEN
-- 更新数据
IF (OLD.virtual_activated_at IS NOT NULL) OR (NEW.virtual_activated_at IS NOT NULL) THEN
PERFORM
vd.FIX_TIMELINES (NEW.sim,
NEW.virtual_activated_at);
END IF;
ELSIF (TG_OP = 'DELETE') THEN
-- 删除数据
PERFORM
vd.FIX_TIMELINES (NEW.sim,
NULL);
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS CARD_TIMELINES ON cards;
CREATE TRIGGER CARD_TIMELINES AFTER INSERT
OR
UPDATE
OR DELETE ON cards FOR EACH ROW EXECUTE PROCEDURE CARD_TIMELINES ();
CREATE OR REPLACE FUNCTION RENEW_TIMELINES ()
RETURNS TRIGGER
AS $$
DECLARE
order_row RECORD;
BEGIN
RAISE NOTICE '% - %', NEW.sim, NEW.virtual_activated_at;
IF (TG_OP = 'INSERT') THEN
-- 插入数据
SELECT
NEW.sim,
virtual_activated_at
FROM
vd.cards INTO order_row
WHERE
cards.sim = NEW.sim;
PERFORM
vd.FIX_TIMELINES (order_row.sim,
order_row.virtual_activated_at);
ELSIF (TG_OP = 'DELETE') THEN
SELECT
NEW.sim,
virtual_activated_at
FROM
vd.cards INTO order_row
WHERE
cards.sim = NEW.sim;
PERFORM
vd.FIX_TIMELINES (order_row.sim,
order_row.virtual_activated_at);
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS RENEW_TIMELINES ON virtual_order_renewal_cards;
CREATE TRIGGER RENEW_TIMELINES AFTER INSERT
OR DELETE ON virtual_order_renewal_cards FOR EACH ROW EXECUTE PROCEDURE RENEW_TIMELINES ();
DROP TRIGGER IF EXISTS RENEW_TIMELINES ON virtual_order_renewal_package_cards;
CREATE TRIGGER RENEW_TIMELINES AFTER INSERT
OR DELETE ON virtual_order_renewal_package_cards FOR EACH ROW EXECUTE PROCEDURE RENEW_TIMELINES ();

View File

@ -1,90 +0,0 @@
CREATE OR REPLACE FUNCTION card_timelines ()
RETURNS TRIGGER
AS $$
DECLARE
temp RECORD;
srow RECORD;
BEGIN
IF (TG_OP = 'INSERT') THEN
IF NEW.virtual_activated_at IS NOT NULL THEN
RAISE NOTICE 'row % inserted', NEW.sim;
SELECT
virtual_order_cards.order_id
virtual_order_cards.created_at,
virtual_packages.service_months,
virtual_packages.name AS package_name INTO srow
FROM
virtual_order_cards
JOIN virtual_packages ON virtual_order_cards.package_id = virtual_packages.id
WHERE
sim = NEW.sim;
IF FOUND THEN
INSERT INTO timelines (sim, package_type, package_name, starttime, endtime)
VALUES (NEW.sim, 0, srow.package_name, NEW.virtual_activated_at, NEW.virtual_activated_at + (srow.service_months || ' month')::interval);
END IF;
END IF;
ELSIF (TG_OP = 'UPDATE') THEN
IF OLD.virtual_activated_at IS NOT NULL OR NEW.virtual_activated_at IS NOT NULL THEN
IF NEW.virtual_activated_at IS NULL THEN
RAISE NOTICE 'NEW virtual_activated_at IS NULL';
ELSE
RAISE NOTICE 'NEW virtual_activated_at IS NOT NULL';
END IF;
END IF;
ELSIF (TG_OP = 'DELETE') THEN
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
CREATE SEQUENCE "order_cards_id_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 2147483647
START 1
CACHE 1;
CREATE TABLE "order_cards" (
"id" int4 NOT NULL DEFAULT nextval('order_cards_id_seq'::regclass),
"type" int2 NOT NULL DEFAULT 0,
"sim" int8 NOT NULL DEFAULT '0'::bigint,
"order_id" int4 NOT NULL DEFAULT 0,
"company_id" int4 NOT NULL DEFAULT 0,
"package_id" int4 NOT NULL DEFAULT 0,
"counts" int4 NOT NULL DEFAULT 1,
"created_at" timestamp(0),
"updated_at" timestamp(0),
"deleted_at" timestamp(0),
"service_start_at" timestamp(0),
"service_end_at" timestamp(0),
CONSTRAINT "order_cards_pkey" PRIMARY KEY ("id", "type")
) PARTITION BY LIST (type);
;
CREATE UNIQUE INDEX "virtual_order_cards_order_id_sim_deleted_at_unique" ON "virtual_order_cards" USING btree (
"order_id" "pg_catalog"."int4_ops" ASC NULLS LAST,
"sim" "pg_catalog"."int8_ops" ASC NULLS LAST,
COALESCE(deleted_at, '1970-01-01 08:00:00'::timestamp without time zone) "pg_catalog"."timestamp_ops" ASC NULLS LAST
);
COMMENT ON COLUMN "order_cards"."id" IS '关联表ID';
COMMENT ON COLUMN "order_cards"."sim" IS 'SIM卡号';
COMMENT ON COLUMN "order_cards"."order_id" IS '订单ID';
COMMENT ON COLUMN "order_cards"."company_id" IS '企业ID';
COMMENT ON COLUMN "order_cards"."package_id" IS '套餐ID';
COMMENT ON COLUMN "order_cards"."counts" IS '数量';
COMMENT ON TABLE "order_cards" IS 'VD卡关联基础套餐订单';
CREATE TABLE virtual_order_cards PARTITION OF order_cards FOR VALUES IN (0);
CREATE TABLE virtual_order_renewal_cards PARTITION OF order_cards FOR VALUES IN (1);
CREATE TABLE virtual_order_renewal_package_cards PARTITION OF order_cards FOR VALUES IN (2);
CREATE TABLE virtual_order_flows_package_cards PARTITION OF order_cards FOR VALUES IN (3);

View File

@ -4,7 +4,7 @@
<input class="ds-n" type="file" accept="image/*" ref="file" @change="imgChange(index)">
<div class="img-common" v-if="item.src && !item.loading">
<img class="ui-img" :src="item.src">
<img class="ui-img" :src="item.src" @error="imgError($event, default_head)">
<div class="ui-cover" @click="delImg(index)"></div>
</div>

View File

@ -40,16 +40,16 @@
</li>
<li class="ui-list">
<div class="ui-list-title">重置周期</div>
<span class="title-require">*</span><div class="ui-list-title">重置周期</div>
<div class="ui-list-content">
<InputNumber :max="100000" :min="0" :precision="0" :step="1" v-model="params.reset_months"></InputNumber>&nbsp;
<InputNumber :max="100000" :min="1" :precision="0" :step="1" v-model="params.reset_months"></InputNumber>&nbsp;
</div>
</li>
<li class="ui-list">
<div class="ui-list-title">套餐周期</div>
<span class="title-require">*</span><div class="ui-list-title">套餐周期</div>
<div class="ui-list-content">
<InputNumber :disabled="data ? true : false" :max="100000" :min="0" :precision="0" :step="1" v-model="params.service_months"></InputNumber>&nbsp;
<InputNumber :disabled="data ? true : false" :max="100000" :min="1" :precision="0" :step="1" v-model="params.service_months"></InputNumber>&nbsp;
</div>
</li>

View File

@ -12,7 +12,7 @@ export default {
},
data: {
type: Object,
default() {
default () {
return null;
}
}
@ -75,6 +75,21 @@ export default {
return;
}
if (!this.params.reset_months) {
this.$Message.info('请输入重置周期');
return;
}
if (!this.params.service_months) {
this.$Message.info('请输入套餐周期');
return;
}
if (this.params.reset_months > this.params.service_months) {
this.$Message.info('重置周期必须小于套餐周期');
return;
}
this.params.type = this.type;
if (this.data) {
@ -123,4 +138,4 @@ export default {
this.my_show = false;
}
}
};
};