预警误报审核
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

512 lines
17 KiB

import { HttpClient } from "@angular/common/http";
import { Component, ElementRef, OnInit, ViewContainerRef } from "@angular/core";
import { FormBuilder, FormGroup, Validators } from "@angular/forms";
import { Router } from "@angular/router";
import { fromEvent } from "rxjs";
import { debounceTime } from "rxjs/operators";
import * as moment from "moment";
import { NzModalService } from "ng-zorro-antd/modal";
import { GetOutOfLineDetailsComponent } from "../get-out-of-line-details/get-out-of-line-details.component";
import { NzMessageService } from "ng-zorro-antd/message";
import { TreeService } from "src/app/service/tree.service";
import { DisposeequipmentComponent } from "../disposeequipment/disposeequipment.component";
import { SignalRAspNetCoreHelper } from "../../../shared/helpers/SignalRAspNetCoreHelper";
declare var abp: any;
import "linqjs";
import { ImgListComponent } from "./img-list/img-list.component";
@Component({
selector: "app-histories",
templateUrl: "./histories.component.html",
styleUrls: ["./histories.component.scss"],
})
export class HistoriesComponent implements OnInit {
validateForm!: FormGroup;
constructor(
private element: ElementRef,
private toTree: TreeService,
private http: HttpClient,
private fb: FormBuilder,
private router: Router,
private modal: NzModalService,
private viewContainerRef: ViewContainerRef,
private message: NzMessageService
) {}
startdate;
enddate;
ngOnInit(): void {
//当前日期
let myDate: any = new Date();
let nowY = myDate.getFullYear();
let nowM = myDate.getMonth() + 1;
let nowD = myDate.getDate();
this.enddate =
nowY +
"-" +
(nowM < 10 ? "0" + nowM : nowM) +
"-" +
(nowD < 10 ? "0" + nowD : nowD); //当前日期
//获取三十天前日期
let lw = new Date(myDate - 1000 * 60 * 60 * 24 * 30); //最后一个数字30可改,30天的意思
let lastY = lw.getFullYear();
let lastM = lw.getMonth() + 1;
let lastD = lw.getDate();
this.startdate =
lastY +
"-" +
(lastM < 10 ? "0" + lastM : lastM) +
"-" +
(lastD < 10 ? "0" + lastD : lastD); //三十天之前日期
this.validateForm = this.fb.group({
level: [null],
organization: [null],
type: [null],
event: [null],
site: [null],
manufacturer: [null], //厂商
operation: [null], //操作记录
disposalState: [null],
datePicker: [[this.startdate, this.enddate]],
});
this.warningType();
this.tableSpin = true;
this.getAllOrganization();
}
defaultOrId: string;
//获取所有组织机构
nodes: any = [];
getAllOrganization() {
let OrganizationUnitId =
sessionStorage.getItem("isGasStation") == "true"
? JSON.parse(sessionStorage.getItem("userdataOfgasstation"))
.organization.id
: JSON.parse(sessionStorage.getItem("userdata")).organization.id;
let params = {
OrganizationUnitId: OrganizationUnitId,
IsContainsChildren: "true",
};
this.http
.get("/api/services/app/Organization/GetAll", {
params: params,
})
.subscribe((data: any) => {
data.result.items.forEach((element) => {
if (element.id == OrganizationUnitId) {
element.parentId = null;
}
element.key = element.id;
element.title = element.displayName;
});
this.nodes = [...this.toTree.toTree(data.result.items)];
this.defaultOrId = JSON.parse(
sessionStorage.getItem("userdata")
).organization.id;
this.validateForm.value.organization = this.defaultOrId;
this.getViolateRecordList();
});
}
//获得违规记录列表
SkipCount: string = "0";
MaxResultCount: string = "50";
list: any = [];
totalCount: string;
tableSpin: boolean = false;
getViolateRecordList() {
let ViolationIds = [];
if (this.validateForm.value.event) {
ViolationIds.push(this.validateForm.value.event);
}
if (this.validateForm.value.type && !this.validateForm.value.event) {
this.warningTypesDetails.forEach((item) => {
item.id ? ViolationIds.push(item.id) : null;
});
}
let VendorName: any = null;
if (this.validateForm.value.manufacturer) {
VendorName = this.validateForm.value.manufacturer;
}
let NotificationState: any = "All";
if (this.validateForm.value.operation) {
if (this.validateForm.value.operation === "null") {
NotificationState = null;
} else {
NotificationState = this.validateForm.value.operation;
}
}
let params = {
Level: this.validateForm.value.level,
ViolationIds: ViolationIds,
ViolateArea: this.validateForm.value.site,
OrganizationUnitId: this.validateForm.value.organization,
IsContainsChildren: "true",
CanVerify: "false",
ViolateTime: this.validateForm.value.datePicker
? [
moment(this.validateForm.value.datePicker[0]).format("yyyy-MM-DD"),
moment(this.validateForm.value.datePicker[1]).format("yyyy-MM-DD"),
]
: null,
SkipCount: this.SkipCount,
MaxResultCount: this.MaxResultCount, //每页50条
Positive: this.validateForm.value.disposalState,
VendorName: VendorName,
NotificationState: NotificationState,
};
this.tableSpin = true;
this.http
.get("/api/services/app/ViolateRecordVerification/GetAll", {
params: params,
})
.subscribe(
(data: any) => {
this.list = this.list.concat(data.result.items);
this.list = [...this.list];
// this.list = data.result.items
this.totalCount = data.result.totalCount;
console.log("违规记录列表", data);
this.tableSpin = false;
console.log(this.list.length);
},
(err) => {
this.tableSpin = false;
this.message.create("error", err.error.error.details);
}
);
}
imgUrls() {
let ViolationIds = [];
if (this.validateForm.value.event) {
ViolationIds.push(this.validateForm.value.event);
}
if (this.validateForm.value.type && !this.validateForm.value.event) {
this.warningTypesDetails.forEach((item) => {
item.id ? ViolationIds.push(item.id) : null;
});
}
let VendorName: any = null;
if (this.validateForm.value.manufacturer) {
VendorName = this.validateForm.value.manufacturer;
}
let NotificationState: any = "All";
if (this.validateForm.value.operation) {
if (this.validateForm.value.operation === "null") {
NotificationState = null;
} else {
NotificationState = this.validateForm.value.operation;
}
}
let params = {
Level: this.validateForm.value.level,
ViolationIds: ViolationIds,
ViolateArea: this.validateForm.value.site,
OrganizationUnitId: this.validateForm.value.organization,
IsContainsChildren: "true",
CanVerify: "false",
ViolateTime: this.validateForm.value.datePicker
? [
moment(this.validateForm.value.datePicker[0]).format("yyyy-MM-DD"),
moment(this.validateForm.value.datePicker[1]).format("yyyy-MM-DD"),
]
: null,
Positive: this.validateForm.value.disposalState,
VendorName: VendorName,
NotificationState: NotificationState,
};
this.http
.get("/api/services/app/ViolateRecordVerification/GetRecordImageUrls", {
params: params,
})
.subscribe(
(data: any) => {
console.log("图片列表");
this.openImgModel(data.result);
},
(err) => {
this.tableSpin = false;
this.message.create("error", err.error.error.details);
}
);
}
openImgModel(data) {
const modal = this.modal.create({
nzTitle: "图片列表",
nzContent: ImgListComponent,
nzViewContainerRef: this.viewContainerRef,
nzGetContainer: () => document.body,
nzComponentParams: {
data: data,
},
nzWidth: 700,
nzOnOk: () => new Promise((resolve) => setTimeout(resolve, 1000)),
nzFooter: null,
});
const instance = modal.getContentComponent();
modal.afterOpen.subscribe(() => console.log("[afterOpen] emitted!"));
// Return a result when closed
modal.afterClose.subscribe((result) =>
console.log("[afterClose] The result is:", result)
);
}
ngAfterViewInit(): void {
fromEvent(
this.element.nativeElement.querySelector(`#tbody`) as HTMLCanvasElement,
"scroll"
)
.pipe(debounceTime(100))
.subscribe((event: any) => {
//监听 DOM 滚动事件
if (
event.target.scrollHeight -
(event.target.scrollTop + event.target.clientHeight) <=
10
) {
if (this.totalCount > this.list.length) {
console.log("需要加载数据了", event);
this.SkipCount = String(Number(this.SkipCount) + 50);
this.getViolateRecordList();
}
}
});
}
getThirtyDays() {
//获取当前日期
let myDate = new Date();
var nowY = myDate.getFullYear();
var nowM = myDate.getMonth() + 1;
var nowD = myDate.getDate();
var enddateStr =
nowY +
"-" +
(nowM < 10 ? "0" + nowM : nowM) +
"-" +
(nowD < 10 ? "0" + nowD : nowD); //当前日期
var enddate = new Date(enddateStr);
//获取三十天前日期
var lw = new Date(new Date().getTime() - 1000 * 60 * 60 * 24 * 30); //最后一个数字30可改,30天的意思
var lastY = lw.getFullYear();
var lastM = lw.getMonth() + 1;
var lastD = lw.getDate();
var startdateStr =
lastY +
"-" +
(lastM < 10 ? "0" + lastM : lastM) +
"-" +
(lastD < 10 ? "0" + lastD : lastD); //三十天之前日期
var startDate = new Date(startdateStr);
const dateList = [];
while (true) {
startDate.setDate(startDate.getDate() + 1);
if (startDate.getTime() <= enddate.getTime()) {
if (startDate.getDate() < 10) {
// startDate.getFullYear() 获取年,此处没加上年份
dateList.push(startDate.getMonth() + 1 + ".0" + startDate.getDate());
} else {
dateList.push(startDate.getMonth() + 1 + "." + startDate.getDate());
}
} else {
break;
}
}
return dateList;
}
submitForm(): void {
for (const i in this.validateForm.controls) {
this.validateForm.controls[i].markAsDirty();
this.validateForm.controls[i].updateValueAndValidity();
}
this.list = [];
this.SkipCount = "0";
this.getViolateRecordList();
}
resetForm(e: MouseEvent): void {
e.preventDefault();
this.validateForm.reset();
for (const key in this.validateForm.controls) {
this.validateForm.controls[key].markAsPristine();
this.validateForm.controls[key].updateValueAndValidity();
}
this.validateForm.patchValue({
organization: JSON.parse(sessionStorage.getItem("userdata")).organization
.id,
datePicker: [this.startdate, this.enddate],
});
this.list = [];
this.SkipCount = "0";
this.getViolateRecordList();
}
//预警类型接口
warningTypes: any; //预警接口数据
warningTypesDetails: any;
warningType() {
this.http
.get("/api/services/app/Violation/GetAllList")
.subscribe((data: any) => {
this.warningTypesDetails = data.result;
this.warningTypes = (data.result as any).groupBy((t) => {
return t.violationType;
});
});
}
typeChange(e: any) {
this.warningTypes.forEach((element) => {
if (element.key == e) {
this.warningTypesDetails = element;
}
});
this.validateForm.patchValue({
event: null,
});
}
look(item) {
// console.log("点击item", item);
if (item.violation.eventSystemName == "灭火器维护") {
item.violatedItemSnapshotObj = JSON.parse(item.violatedItemSnapshot);
const modal = this.modal.create({
nzContent: DisposeequipmentComponent,
nzViewContainerRef: this.viewContainerRef,
nzWidth: 380,
nzBodyStyle: {
border: "1px solid #91CCFF",
"border-radius": "0px",
padding: "7px",
"box-shadow": "0 0 8px 0 #fff",
"background-image": "linear-gradient(#003665, #000f25)",
},
nzComponentParams: {
data: item,
},
nzFooter: null,
nzClosable: false,
nzOnOk: async () => {
if (instance.isScrap) {
await new Promise((resolve) => {
let body = {
id: item.violatedItemSnapshotObj.id,
name: instance.copydata2.violatedItemSnapshotObj.name,
storageLocation:
instance.copydata2.violatedItemSnapshotObj.storageLocation,
productionDate: moment(
instance.copydata2.violatedItemSnapshotObj.productionDate
).format("yyyy-MM-DD"),
maintenanceDate: moment(
instance.copydata2.violatedItemSnapshotObj.maintenanceDate
).format("yyyy-MM-DD"),
validityEndTime: moment(
instance.copydata2.violatedItemSnapshotObj.validityEndTime
).format("yyyy-MM-DD"),
isScrapped: true,
organizationUnitId:
item.violatedItemSnapshotObj.organizationUnitId,
};
this.http
.put("/api/services/app/FireEquipment/Update", body)
.subscribe((data: any) => {
let body = {
id: item.id,
handleRecord: "报废成功!",
};
this.http
.post(
"/api/services/app/ViolateRecord/HandleViolateRecord",
body
)
.subscribe((data) => {
resolve(data);
this.message.create("success", "报废成功!");
item.handleTime = new Date();
return true;
});
});
});
} else {
if (instance.validateForm.valid) {
await new Promise((resolve) => {
let body = {
id: item.violatedItemSnapshotObj.id,
name: instance.validateForm.value.name,
storageLocation: instance.validateForm.value.storageLocation,
productionDate: moment(
instance.validateForm.value.productionDate
).format("yyyy-MM-DD"),
maintenanceDate: moment(
instance.validateForm.value.maintenanceDate
).format("yyyy-MM-DD"),
validityEndTime: moment(
instance.validateForm.value.validityEndTime
).format("yyyy-MM-DD"),
organizationUnitId:
item.violatedItemSnapshotObj.organizationUnitId,
};
this.http
.put("/api/services/app/FireEquipment/Update", body)
.subscribe((data: any) => {
// item.violatedItemSnapshotObj = data.result
let body = {
id: item.id,
handleRecord: "维保成功!",
};
this.http
.post(
"/api/services/app/ViolateRecord/HandleViolateRecord",
body
)
.subscribe((data) => {
resolve(data);
this.message.create("success", "维保成功!");
item.handleTime = new Date();
return true;
});
});
});
} else {
this.message.create("warning", "请填写完整!");
return false;
}
}
},
});
const instance = modal.getContentComponent();
} else {
const modal = this.modal.create({
nzContent: GetOutOfLineDetailsComponent,
nzWrapClassName: "vertical-center-modal",
nzViewContainerRef: this.viewContainerRef,
nzWidth:
document.documentElement.clientHeight < 650 ||
document.documentElement.clientWidth < 1400
? 1000
: 1200,
nzBodyStyle: {
border: "1px solid #6d9cc7",
"border-radius": "0px",
padding: "0px",
"box-shadow": "0 0 8px 0 #fff",
background: "#000D21",
},
nzComponentParams: {
data: item,
isBtn: false,
},
nzFooter: null,
nzOnOk: async () => {
console.log("推送成功了!!!", item);
},
});
const instance = modal.getContentComponent();
}
}
}