diff --git a/src/app/babylon/controller/config-manager.ts b/src/app/babylon/controller/config-manager.ts index e9b605e..0a48a06 100644 --- a/src/app/babylon/controller/config-manager.ts +++ b/src/app/babylon/controller/config-manager.ts @@ -103,6 +103,28 @@ export class ConfigManager { return result; } + /** + * 根据设备类型获取数目的单位 + * @param type + */ + static getFacilityNumUnit(type: FacilityType): string { + + let result = "个"; + + switch (type) { + case FacilityType.XF_XFS: result = "立方"; break; + case FacilityType.XF_MHT: result = "块"; break; + } + + if (TsTool.stringContain(type, "XF_MHQ_"))//灭火器 + { + result = "具"; + } + + return result; + + } + /** * 查询某设备所处位置类型(室内还是室外) * @param facilityType diff --git a/src/app/babylon/controller/data-manager.ts b/src/app/babylon/controller/data-manager.ts index 2ca8fe3..bf268db 100644 --- a/src/app/babylon/controller/data-manager.ts +++ b/src/app/babylon/controller/data-manager.ts @@ -9,6 +9,7 @@ import { BuildingData_Normal, BuildingType } from '../model/data/institution/building/building-data'; +import { ExportData } from '../model/data/institution/building/export-data'; import { AllFacilityData } from '../model/data/institution/facility/all-facility-data'; import { PropertyData_Base_IMG } from '../model/data/institution/facility/property-data/base/property-data-base-img'; import { PropertyData_JYJ } from '../model/data/institution/facility/property-data/in/property-data-jyj'; @@ -538,6 +539,27 @@ export class DataManager { } } + /** + * 保存导出数据 + * @param data + */ + static saveExportData(data: InstitutionData) { + + if (data != null && data.normalBuildingDatas != null && data.normalBuildingDatas.length > 0) { + let mainBuildingDate = data.normalBuildingDatas[0]; + + let exportData = new ExportData(mainBuildingDate.outdoorData.facilities); + + ServeManager.instance.saveGasStationExcelData(exportData); + + } + else { + console.log("单位没有初始化,缺少主体建筑"); + } + + + } + /** * 保存当前的标绘信息 */ diff --git a/src/app/babylon/controller/mode-manager.ts b/src/app/babylon/controller/mode-manager.ts index 8b28322..146f793 100644 --- a/src/app/babylon/controller/mode-manager.ts +++ b/src/app/babylon/controller/mode-manager.ts @@ -28,7 +28,7 @@ export class ModeManager { /** * 调试模式 */ - public static isDebug = false; + public static isDebug = true; diff --git a/src/app/babylon/controller/serve-manager.ts b/src/app/babylon/controller/serve-manager.ts index 99f774d..82098d5 100644 --- a/src/app/babylon/controller/serve-manager.ts +++ b/src/app/babylon/controller/serve-manager.ts @@ -3,6 +3,7 @@ import { classToPlain } from "class-transformer"; import { PlanComponent } from "src/app/pages/plan/plan.component"; import { BuildingBasicInfosService } from "src/app/service/babylon/building-basic-infos.service"; import { ObjectsService } from "src/app/service/objects.service"; +import { ExportData } from "../model/data/institution/building/export-data"; import { InsitutionDataSimple } from "../model/data/institution/institution-data-simple"; import { AllMarkPlanData } from "../model/data/mark/mark-plan-data"; import { DataManager } from "./data-manager"; @@ -68,6 +69,8 @@ export class ServeManager { //暂时没有失败的回调 onError }) + + } //保存单位列表 @@ -157,6 +160,18 @@ export class ServeManager { //#endregion + //#region 导出excel的信息 + + saveGasStationExcelData(exportData: ExportData) { + this.buildingBISrv.postGasStationExcelData(DataManager.institutionData_simple.name, DataManager.institutionData_simple.id, exportData) + .subscribe(data => { + console.log("保存导出信息成功:" + DataManager.institutionData_simple.id, `'${JSON.stringify(exportData)}'`); + }, (error) => { + console.log("保存导出信息失败:" + DataManager.institutionData_simple.id, error); + }); + } + + //#endregion //#region 文件上传 /** diff --git a/src/app/babylon/model/data/institution/building/export-data.ts b/src/app/babylon/model/data/institution/building/export-data.ts new file mode 100644 index 0000000..8f56d9a --- /dev/null +++ b/src/app/babylon/model/data/institution/building/export-data.ts @@ -0,0 +1,156 @@ +import { Type } from "class-transformer"; +import { ConfigManager } from "src/app/babylon/controller/config-manager"; +import { TsTool } from "src/app/babylon/tool/ts-tool"; +import { FacilityType } from "../../model-data/model-data-facility"; +import { FacilityDatasByType } from "../../model-data/model-edit-data"; +import { PropertyData_JYJ } from "../facility/property-data/in/property-data-jyj"; +import { PropertyData_SYGX } from "../facility/property-data/in/property-data-sygx"; +import { PropertyData_YG } from "../facility/property-data/in/property-data-yg"; +import { PropertyData_YQHSGX } from "../facility/property-data/in/property-data-yqhsgx"; + +/** + * 需要导出的数据 + */ +export class ExportData { + + // @Type(() => ExportData_JYJ) + 加油机: ExportData_JYJ[] = []; + + // @Type(() => ExportData_YG) + 油罐: ExportData_YG[] = []; + + // @Type(() => ExportData_SYGX) + 输油管线: ExportData_SYGX[] = []; + + // @Type(() => ExportData_YQHS) + 油气回收: ExportData_YQHS[] = []; + + // @Type(() => ExportData_XFSB) + 消防设备: ExportData_XFSB[] = []; + + constructor(facilityByTypes: FacilityDatasByType[]) { + for (let i = 0; i < facilityByTypes.length; i++) { + let facilities = facilityByTypes[i].facilities; + if (facilities == null) { + continue; + } + let type = facilityByTypes[i].facilityType; + if (TsTool.stringContain(type, "XF_")) { + this.消防设备.push(new ExportData_XFSB(facilityByTypes[i])); + } + + for (let j = 0; j < facilities.length; j++) { + + switch (type) { + case FacilityType.JY_JYJ: this.加油机.push(new ExportData_JYJ(facilities[j].propertyData as PropertyData_JYJ)); + break; + case FacilityType.JY_YG: this.油罐.push(new ExportData_YG(facilities[j].propertyData as PropertyData_YG)); + break; + case FacilityType.JY_SYGX: this.输油管线.push(new ExportData_SYGX(facilities[j].propertyData as PropertyData_SYGX)); + break; + case FacilityType.JY_YQHSGX: this.油气回收.push(new ExportData_YQHS(facilities[j].propertyData as PropertyData_YQHSGX)); + break; + } + } + } + + } + +} + +/** + * 加油机信息 + */ +export class ExportData_JYJ { + 名称: string; + 品牌: string; + 油枪数量: string; + 油品品号: string; + 油泵类型: string; + 流量: string; + 功率: string; + constructor(jyj_property: PropertyData_JYJ) { + this.名称 = jyj_property.name; + this.品牌 = jyj_property.brand; + this.油枪数量 = jyj_property.oilGunNum; + this.油品品号 = jyj_property.oilProductNo; + this.油泵类型 = jyj_property.oilPumpType; + this.流量 = jyj_property.flow; + this.功率 = jyj_property.power; + } + +} + +/** + * 油罐信息 + */ +export class ExportData_YG { + + 名称: string; + 油品品号: string; + 油罐容积: string; + 安全容积: string; + 罐区: string; + 油罐类型: string; + + constructor(yg_property: PropertyData_YG) { + this.名称 = yg_property.name; + this.油品品号 = yg_property.oilProductNo; + this.油罐容积 = yg_property.oilTankVolume; + this.安全容积 = yg_property.safeVolume; + this.罐区 = yg_property.tankFarm; + this.油罐类型 = yg_property.oilTankType; + } + +} + +/** + * 输油管线 + */ +export class ExportData_SYGX { + + 名称: string; + 连接的加油机: string; + 连接的油罐: string; + + + constructor(sygx_property: PropertyData_SYGX) { + this.名称 = sygx_property.name; + this.连接的加油机 = sygx_property.linkJYJ; + this.连接的油罐 = sygx_property.linkYG; + + } + +} + +/** + * 油气回收 + */ +export class ExportData_YQHS { + 名称: string; + 油气回收系统类型: string; + 油气回收泵类型: string; + constructor(yqhs_property: PropertyData_YQHSGX) { + this.名称 = yqhs_property.name; + this.油气回收系统类型 = yqhs_property.VRUType; + this.油气回收泵类型 = yqhs_property.VRUPumpType; + } +} + +/** + * 导出的消防设备信息 + */ +export class ExportData_XFSB { + 名称: string; + 数目: string; + constructor(facByType: FacilityDatasByType) { + this.名称 = ConfigManager.getFacilityTypeName(facByType.facilityType); + this.数目 = "0"; + if (facByType.facilities != null) { + this.数目 = facByType.facilities.length.toString(); + } + this.数目 += ConfigManager.getFacilityNumUnit(facByType.facilityType); + + } +} + diff --git a/src/app/babylon/model/info/mark/other/mark-plan-multi-arrow.ts b/src/app/babylon/model/info/mark/other/mark-plan-multi-arrow.ts index 0c4de2c..a474d8a 100644 --- a/src/app/babylon/model/info/mark/other/mark-plan-multi-arrow.ts +++ b/src/app/babylon/model/info/mark/other/mark-plan-multi-arrow.ts @@ -94,7 +94,6 @@ export class ModelInfo_mark_multiArrow extends ModelInfo_mark { let localPos = point.subtract(this.modelBox.absolutePosition); localPos.y = localPos.y / this.modelBox.scaling.y; - console.log(point, localPos, this.modelBox.absolutePosition); // let startBox = MeshBuilder.CreateBox("start", { size: 1 }); // startBox.setParent(this.modelBox); @@ -233,7 +232,8 @@ export class ModelInfo_mark_multiArrow extends ModelInfo_mark { */ class ArrowInfo { - static s_step = 3;//箭头间隔(从头到下一个的头) + static s_step = 1;//箭头间隔(从头到下一个的头) + // static s_scale = 0.3;//整体大小的缩放 lastArrowInfo: ArrowInfo;//上一个箭头 parent: Mesh; @@ -269,23 +269,25 @@ class ArrowInfo { let index = 0; - + let size = ArrowInfo.s_step / 3;//整体大小 while (distance > ArrowInfo.s_step) { let offset = index * ArrowInfo.s_step; let forwardDistance = this.forward.multiplyByFloats(1, 0, 1).normalize().multiplyByFloats(offset, offset, offset); let meshStart: Vector3 = this.start.add(forwardDistance); + + let posArray = []; - posArray.push(new Vector3(0, 0, 2)); - posArray.push(new Vector3(-1, 0, 1)); - posArray.push(new Vector3(-0.5, 0, 1)); - posArray.push(new Vector3(-0.5, 0, 0)); - posArray.push(new Vector3(0.5, 0, 0)); - posArray.push(new Vector3(0.5, 0, 1)); - posArray.push(new Vector3(1, 0, 1)); - - let l_mesh = MeshBuilder.ExtrudePolygon("arrow", { shape: posArray, depth: 1, updatable: false }, SceneManager.Instance.scene); + posArray.push(new Vector3(0, 0, 2 * size)); + posArray.push(new Vector3(-1 * size, 0, 1 * size)); + posArray.push(new Vector3(-0.5 * size, 0, 1 * size)); + posArray.push(new Vector3(-0.5 * size, 0, 0 * size)); + posArray.push(new Vector3(0.5 * size, 0, 0 * size)); + posArray.push(new Vector3(0.5 * size, 0, 1 * size)); + posArray.push(new Vector3(1 * size, 0, 1 * size)); + + let l_mesh = MeshBuilder.ExtrudePolygon("arrow", { shape: posArray, depth: size * 0.5, updatable: false }, SceneManager.Instance.scene); l_mesh.material = this.mat; diff --git a/src/app/babylon/view/facilityinfoinscene-window/facilityinfo-ui-item.ts b/src/app/babylon/view/facilityinfoinscene-window/facilityinfo-ui-item.ts index 0ff2857..60eaba4 100644 --- a/src/app/babylon/view/facilityinfoinscene-window/facilityinfo-ui-item.ts +++ b/src/app/babylon/view/facilityinfoinscene-window/facilityinfo-ui-item.ts @@ -1,6 +1,7 @@ import { Vector2 } from "@babylonjs/core"; import { SceneManager } from "../../controller/scene-manager"; +import { ExportData_JYJ } from "../../model/data/institution/building/export-data"; import { PropertyData_Base } from "../../model/data/institution/facility/property-data/property-data-base"; import { FacilityType, ModelData_facility } from "../../model/data/model-data/model-data-facility"; import { ModelInfo_facility } from "../../model/info/model/model-info-facility"; diff --git a/src/app/babylon/view/facilityinfoinscene-window/facilityinfoinscene-window.ts b/src/app/babylon/view/facilityinfoinscene-window/facilityinfoinscene-window.ts index 8b496d9..44c0e4b 100644 --- a/src/app/babylon/view/facilityinfoinscene-window/facilityinfoinscene-window.ts +++ b/src/app/babylon/view/facilityinfoinscene-window/facilityinfoinscene-window.ts @@ -467,7 +467,7 @@ export class FacilityInfoInSceneWindow extends UIBase { /** * 选中加油机时,高亮颜色 */ - static readonly c_selectJYJColor = Color3.Green(); + static readonly c_selectJYJColor = Color3.Teal(); /** * 当前选中的加油机 diff --git a/src/app/babylon/view/toolbar-window/toobar-window.ts b/src/app/babylon/view/toolbar-window/toobar-window.ts index 7701043..17f3085 100644 --- a/src/app/babylon/view/toolbar-window/toobar-window.ts +++ b/src/app/babylon/view/toolbar-window/toobar-window.ts @@ -48,10 +48,15 @@ export class ToolbarWindow extends UIBase { //保存数据 onBtnSave() { let data = DataManager.institutionData; - ModeManager.log(data); + // ModeManager.log(data); ServeManager.instance.saveInstitutionData(data, DataManager.institutionData_simple.key, DataManager.institutionData_simple.id, () => { ModeManager.log("保存成功" + DataManager.institutionData_simple.key); }); + + console.log("导出数据"); + //保存导出数据 + DataManager.saveExportData(data); + } /*** diff --git a/src/app/service/babylon/building-basic-infos.service.ts b/src/app/service/babylon/building-basic-infos.service.ts index 248f9a6..47020e4 100644 --- a/src/app/service/babylon/building-basic-infos.service.ts +++ b/src/app/service/babylon/building-basic-infos.service.ts @@ -24,6 +24,11 @@ export class BuildingBasicInfosService { */ readonly api_sandBox = "api/Services/3D/Sandboxie"; + /** + * 单独保存的一份用于导出的数据 + */ + readonly api_excelData = "api/Services/3D/GasStationExcelData"; + /** * 获取三维信息 @@ -58,6 +63,17 @@ export class BuildingBasicInfosService { } + /** + * 推送导出的数据 + * @param name + * @param id + * @param data + */ + postGasStationExcelData(name: string, id: number, data: object): Observable { + return this.postInfos(this.api_excelData, data, { name: name, "gasStationId": id }); + } + + //#region 通用封装,新增api时调用即可,不需关心具体组装规则。若修改规则,只需修改此通用封装 /** * get类api所需的固定内容