Commit d27bddfe authored by 赵啸非's avatar 赵啸非

添加海康对接接口数据

parent b352a552
...@@ -44,18 +44,12 @@ ...@@ -44,18 +44,12 @@
{type: "selection", width: 60}, {type: "selection", width: 60},
{type: "index",label: "序号",width: 50}, {type: "index",label: "序号",width: 50},
{label: "站点Id", prop: "siteId", formatter: this.formatter}, {label: "设备ID", prop: "deviceId"},
{label: "站点名称", prop: "siteName"},
{label: "设备ID,海康", prop: "deviceId"},
{label: "设备名称", prop: "deviceName"}, {label: "设备名称", prop: "deviceName"},
{label: "设备编码", prop: "deviceCode"}, {label: "设备编码", prop: "deviceCode"},
{label: "设备的MAC地址", prop: "deviceMac"},
{label: "设备位置", prop: "deviceLocation"}, {label: "设备位置", prop: "deviceLocation"},
{label: "经度", prop: "lon"}, {label: "经度", prop: "lon"},
...@@ -66,13 +60,10 @@ ...@@ -66,13 +60,10 @@
{label: "楼栋", prop: "build",formatter: this.formatter}, {label: "楼栋", prop: "build",formatter: this.formatter},
{label: "负责人", prop: "leadingOfficial"},
{label: "联系电话", prop: "leadingOfficialTelephone"},
{label: "超时时间,单位天", prop: "timeOutPeriod",formatter: this.formatter}, {label: "超时时间", prop: "timeOutPeriod",formatter: this.formatter},
{label: "临近时间,单位天", prop: "nearTime",formatter: this.formatter}, {label: "临近时间", prop: "nearTime",formatter: this.formatter},
{label: "设备状态 ", prop: "deviceStatus",formatter: this.formatter}, {label: "设备状态 ", prop: "deviceStatus",formatter: this.formatter},
...@@ -82,7 +73,7 @@ ...@@ -82,7 +73,7 @@
width: 240, width: 240,
formatter: row => { formatter: row => {
return ( return (
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} /> <table-buttons noAdd noEdit row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
); );
} }
} }
...@@ -91,4 +82,4 @@ ...@@ -91,4 +82,4 @@
}; };
} }
}; };
</script> </script>
\ No newline at end of file
<template> <template>
<!-- 弹出框表单 --> <!-- 弹出框表单 -->
<el-dialog :title="title" :visible.sync="open" width="90%" append-to-body> <el-dialog :title="title" :visible.sync="open" width="90%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px"> <el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row> <el-row>
<Field label="站点Id" prop="siteId" v-model="form.siteId" placeholder="请输入站点Id"/> <Field label="站点Id" prop="siteId" v-model="form.siteId" placeholder="请输入站点Id"/>
<Field label="站点名称" prop="siteName" v-model="form.siteName" type="textarea" placeholder="请输入站点名称"/> <Field label="站点名称" prop="siteName" v-model="form.siteName" type="textarea" placeholder="请输入站点名称"/>
<Field label="用户名称" prop="name" v-model="form.name" placeholder="请输入用户名称"/> <Field label="用户名称" prop="name" v-model="form.name" placeholder="请输入用户名称"/>
<Field label="身份证号码" prop="idCard" v-model="form.idCard" placeholder="请输入身份证号码"/> <Field label="身份证号码" prop="idCard" v-model="form.idCard" placeholder="请输入身份证号码"/>
<Field label="性别" prop="gender" v-model="form.gender" type="select" :enumData="dict.gender" placeholder="请选择性别"/> <Field label="性别" prop="gender" v-model="form.gender" type="select" :enumData="dict.gender" placeholder="请选择性别"/>
<Field label="手机号码" prop="phone" v-model="form.phone" placeholder="请输入手机号码"/> <Field label="手机号码" prop="phone" v-model="form.phone" placeholder="请输入手机号码"/>
<Field label="出生日期" prop="birthday" v-model="form.birthday" type="date" /> <Field label="出生日期" prop="birthday" v-model="form.birthday" type="date" />
<Field label="家庭住址" prop="address" v-model="form.address" type="textarea" placeholder="请输入家庭住址"/> <Field label="家庭住址" prop="address" v-model="form.address" type="textarea" placeholder="请输入家庭住址"/>
<Field label="照片路径" prop="photo" v-model="form.photo" placeholder="请输入照片路径"/> <Field label="照片路径"><imageUpload v-model="form.photo" prePath="/file/preview"/></Field>
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/> <Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/>
<Field label="注册人员来源" prop="source" v-model="form.source" type="select" :enumData="dict.source" placeholder="请选择注册人员来源"/> <Field label="注册人员来源" prop="source" v-model="form.source" type="select" :enumData="dict.source" placeholder="请选择注册人员来源"/>
<Field label="是否添加到海康人脸库" prop="inFaceHk" v-model="form.inFaceHk" type="select" :enumData="dict.inFaceHk" placeholder="请选择是否添加到海康人脸库"/> <Field label="是否添加到海康人脸库" prop="inFaceHk" v-model="form.inFaceHk" type="select" :enumData="dict.inFaceHk" placeholder="请选择是否添加到海康人脸库"/>
<Field label="人脸的唯一标识" prop="indexCode" v-model="form.indexCode" type="textarea" placeholder="请输入人脸的唯一标识"/> <Field label="人脸的唯一标识" prop="indexCode" v-model="form.indexCode" type="textarea" placeholder="请输入人脸的唯一标识"/>
<Field label="人脸所属的人脸分组的唯一标识" prop="ifaceGroupIndexCode" v-model="form.ifaceGroupIndexCode" type="textarea" placeholder="请输入人脸所属的人脸分组的唯一标识"/> <Field label="人脸所属的人脸分组的唯一标识" prop="ifaceGroupIndexCode" v-model="form.ifaceGroupIndexCode" type="textarea" placeholder="请输入人脸所属的人脸分组的唯一标识"/>
</el-row> </el-row>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" v-if="pageInfo.type !== 'view'" @click="submitForm">确 定</el-button> <el-button type="primary" v-if="pageInfo.type !== 'view'" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button> <el-button @click="cancel">取 消</el-button>
</div> </div>
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
import form from "@/assets/mixins/formdialog"; import form from "@/assets/mixins/formdialog";
import dialogShow from "./dialogshow"; import dialogShow from "./dialogshow";
export default { import ImageUpload from '@/components/ImageUpload';
mixins: [form], export default {
components: { mixins: [form],
dialogShow , components: {
}, dialogShow ,
data() { ImageUpload,
return { },
// 遮罩层 data() {
loading: true, return {
// 弹出层标题 // 遮罩层
title: "注册人员", loading: true,
// 是否显示弹出层 // 弹出层标题
open: false, title: "注册人员",
toString:[ // 是否显示弹出层
"gender", open: false,
"source", toString:[
"inFaceHk", "gender",
], "source",
// 表单校验 "inFaceHk",
rules: { ],
gender: [ // 表单校验
{required: true,message: "请输入性别", trigger: "blur" }, rules: {
], gender: [
birthday: [ {required: true,message: "请输入性别", trigger: "blur" },
{required: true,message: "请选择出生日期" }, ],
], birthday: [
address: [ {required: true,message: "请选择出生日期" },
{required: true,message: "请输入家庭住址", trigger: "blur" }, ],
{max: 256,message: "最多只能录入256个字符",trigger: "blur",}, address: [
], {required: true,message: "请输入家庭住址", trigger: "blur" },
photo: [ {max: 256,message: "最多只能录入256个字符",trigger: "blur",},
{required: true,message: "请输入照片路径", trigger: "blur" }, ],
{max: 100,message: "最多只能录入100个字符",trigger: "blur",}, photo: [
], {required: true,message: "请输入照片路径", trigger: "blur" },
inFaceHk: [ {max: 100,message: "最多只能录入100个字符",trigger: "blur",},
{required: true,message: "请输入是否添加到海康人脸库", trigger: "blur" }, ],
], inFaceHk: [
createTime: [ {required: true,message: "请输入是否添加到海康人脸库", trigger: "blur" },
{required: true,message: "请选择创建时间" }, ],
], createTime: [
} {required: true,message: "请选择创建时间" },
}; ],
}, }
};
},
methods: { methods: {
/** 编辑 */ /** 编辑 */
edit(row) { edit(row) {
this.reset() this.reset()
this.query = { id: row.id }; this.query = { id: row.id };
this.urls.currUrl ="person/edit"; this.urls.currUrl ="person/edit";
this.getData(); this.getData();
this.pageInfo.type="edit" this.pageInfo.type="edit"
this.title = "修改注册人员"; this.title = "修改注册人员";
}, },
/** 新增 */ /** 新增 */
add(row) { add(row) {
this.reset() this.reset()
this.urls.currUrl = "person/add"; this.urls.currUrl = "person/add";
this.getData(); this.getData();
this.pageInfo.type="add" this.pageInfo.type="add"
this.title = "新增注册人员"; this.title = "新增注册人员";
}, },
/** 查看*/ /** 查看*/
view(row) { view(row) {
this.reset() this.reset()
this.query = { id: row.id }; this.query = { id: row.id };
this.urls.currUrl ="person/view"; this.urls.currUrl ="person/view";
this.getData(); this.getData();
this.pageInfo.type="view" this.pageInfo.type="view"
this.title = "注册人员详细"; this.title = "注册人员详细";
}, },
/**取消按钮 */ /**取消按钮 */
cancel() { cancel() {
this.open = false; this.open = false;
}, },
/**获取数据后弹框 */ /**获取数据后弹框 */
afterRender(data) { afterRender(data) {
this.open = true; this.open = true;
}, },
afterSubmit(data) { afterSubmit(data) {
this.open = false; this.open = false;
this.$emit("ok"); this.$emit("ok");
}, },
// 表单重置 // 表单重置
reset() { reset() {
this.form = { this.form = {
siteId : null, siteId : null,
siteName : "", siteName : "",
name : "", name : "",
idCard : "", idCard : "",
gender : 0, gender : 0,
phone : "", phone : "",
birthday : null, birthday : null,
address : "", address : "",
photo : "", photo : "",
remark : "", remark : "",
source : null, source : null,
inFaceHk : 0, inFaceHk : 0,
indexCode : "", indexCode : "",
ifaceGroupIndexCode : "", ifaceGroupIndexCode : "",
}; };
this.resetForm("form"); this.resetForm("form");
}, },
resetForm(refName) { resetForm(refName) {
if (this.$refs[refName]) { if (this.$refs[refName]) {
this.$refs[refName].resetFields(); this.$refs[refName].resetFields();
} }
}, },
}, },
}; };
</script> </script>
<template> <template>
<div class="page"> <div class="page">
<LayoutTable :data="tableData" :config="tableConfig"> <LayoutTable :data="tableData" :config="tableConfig">
</LayoutTable> </LayoutTable>
<dialog-show ref="dialogform" @ok="getData" /> <dialog-show ref="dialogform" @ok="getData" />
</div> </div>
</template> </template>
<script> <script>
/** 表单弹出框模式需引入 */ /** 表单弹出框模式需引入 */
import dialogShow from "./dialogshow"; import dialogShow from "./dialogshow";
import table from "@/assets/mixins/table"; import table from "@/assets/mixins/table";
export default { export default {
name: "PersonList", name: "PersonList",
components: { components: {
dialogShow dialogShow
}, },
mixins: [table], mixins: [table],
created() { created() {
}, },
methods: { methods: {
/** 重写新增方法 */ /** 重写新增方法 */
toAdd(row) { toAdd(row) {
this.$refs.dialogform.add(row); this.$refs.dialogform.add(row);
}, },
/** 重写编辑方法 */ /** 重写编辑方法 */
toEdit(row) { toEdit(row) {
this.$refs.dialogform.edit(row); this.$refs.dialogform.edit(row);
}, },
/** 重写查看方法 */ /** 重写查看方法 */
toView(row) { toView(row) {
this.$refs.dialogform.view(row); this.$refs.dialogform.view(row);
}, },
}, },
data() { data() {
return { return {
config: { config: {
search: [ search: [
], ],
columns: [ columns: [
{type: "selection", width: 60}, {type: "selection", width: 60},
{type: "index",label: "序号",width: 50}, {type: "index",label: "序号",width: 50},
{label: "站点Id", prop: "siteId", formatter: this.formatter}, {label: "身份证号码", prop: "idCard"},
{label: "站点名称", prop: "siteName"}, {label: "性别", prop: "gender",formatter: this.formatter},
{label: "身份证号码", prop: "idCard"}, {label: "出生日期", prop: "birthday", formatter: this.formatterDate},
{label: "性别", prop: "gender",formatter: this.formatter}, {label: "家庭住址", prop: "address"},
{label: "出生日期", prop: "birthday", formatter: this.formatterDate}, {label: "照片路径", prop: "photo"},
{label: "家庭住址", prop: "address"}, {label: "注册人员来源", prop: "source",formatter: this.formatter},
{label: "创建用户", prop: "createUserId", formatter: this.formatter}, {label: "是否添加到海康人脸库", prop: "inFaceHk",formatter: this.formatter},
{
label: "操作", {label: "创建用户", prop: "createUserId", formatter: this.formatter},
width: 240, {
formatter: row => { label: "操作",
return ( width: 240,
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} /> formatter: row => {
); return (
} <table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
} );
] }
} }
}; ]
} }
}; };
</script> }
\ No newline at end of file };
</script>
...@@ -77,10 +77,6 @@ ...@@ -77,10 +77,6 @@
{type: "selection", width: 60}, {type: "selection", width: 60},
{type: "index",label: "序号",width: 50}, {type: "index",label: "序号",width: 50},
{label: "站点Id", prop: "siteId", formatter: this.formatter},
{label: "站点名称", prop: "siteName"},
{label: "姓名", prop: "name"}, {label: "姓名", prop: "name"},
{label: "监测设备", prop: "device"}, {label: "监测设备", prop: "device"},
......
...@@ -31,6 +31,13 @@ ...@@ -31,6 +31,13 @@
<profiles.log.path>/mortals/app/logs</profiles.log.path> <profiles.log.path>/mortals/app/logs</profiles.log.path>
<profiles.log.level>info</profiles.log.level> <profiles.log.level>info</profiles.log.level>
<profiles.publish.path>/home/publish</profiles.publish.path> <profiles.publish.path>/home/publish</profiles.publish.path>
<profiles.sms.smsSendUrl>http://127.0.0.1:8089/api/index/index</profiles.sms.smsSendUrl>
<profiles.sms.apiId>k6BVS1PEbyzcJAE4</profiles.sms.apiId>
<profiles.sms.type>3</profiles.sms.type>
<profiles.hik.host>8.136.255.30:8001</profiles.hik.host>
<profiles.hik.appKey>k6BVS1PEbyzcJAE4</profiles.hik.appKey>
<profiles.hik.appSecret>2m9RcPJOKq5j2QPQM4v5</profiles.hik.appSecret>
<package.environment>serve</package.environment> <package.environment>serve</package.environment>
<skipUi>false</skipUi> <skipUi>false</skipUi>
</properties> </properties>
......
package com.mortals.xhx.module.hik;
import org.springframework.beans.factory.annotation.Value;
public abstract class AbstractHikService {
@Value("${hik.host:''")
protected String host;
@Value("${hik.appKey:''}")
protected String appKey;
@Value("${hik.appSecret:''}")
protected String appSecret;
@Value("${hik.protocol:'http://'}")
protected String protocol;
public String ARTEMIS_PATH = "/artemis";
}
package com.mortals.xhx.module.hik.model;
import lombok.Data;
/**
* 海康请求基础类
* @author:
* @date: 2023/4/12 17:57
*/
@Data
public class BaseReq {
/**
* 当前页
*/
private String pageNo;
/**
* 每页大小
*/
private String pageSize;
// /**
// * http协议
// */
// private String httpProtocol="http://";
}
package com.mortals.xhx.module.hik.model.person.req;
import com.mortals.xhx.module.hik.model.BaseReq;
import lombok.Data;
import java.io.Serializable;
@Data
public class PersonReq extends BaseReq implements Serializable {
/**
* 当前页
*/
private String pageNo;
/**
* 每页大小
*/
private String pageSize;
}
package com.mortals.xhx.module.hik.service;
import com.mortals.framework.common.Rest;
import com.mortals.xhx.module.hik.model.person.req.PersonReq;
/**
* 海康人员接口对接类
* @author:
* @date: 2023/4/12 17:47
*/
public interface IHikPersonService {
/**
* 请求人员接口
* @param personReq
* @return
*/
Rest<String> callPostApiGetPersonList(PersonReq personReq);
}
package com.mortals.xhx.module.hik.service.impl;
import com.alibaba.fastjson.JSON;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import com.mortals.framework.common.Rest;
import com.mortals.xhx.module.hik.AbstractHikService;
import com.mortals.xhx.module.hik.model.person.req.PersonReq;
import com.mortals.xhx.module.hik.service.IHikPersonService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
* 海康人员接口类
*
* @author: zxfei
* @date: 2023/4/12 17:51
*/
@Service("hikPersonService")
@Slf4j
public class HikPersonServiceImpl extends AbstractHikService implements IHikPersonService {
@Override
public Rest<String> callPostApiGetPersonList(PersonReq personReq) {
ArtemisConfig config = new ArtemisConfig();
config.setHost(super.host);
config.setAppKey(appKey); // 秘钥appkey
config.setAppSecret(appSecret);// 秘钥appSecret
String getCamsApi = ARTEMIS_PATH + "/api/resource/v1/person/personList";
Map<String, String> path = new HashMap<String, String>(2) {
{
put(protocol, getCamsApi);
}
};
try {
String resp = ArtemisHttpUtil.doPostStringArtemis(config, path, JSON.toJSONString(personReq), null, null, "application/json");
log.info("person resp=>", resp);
return Rest.ok(resp);
} catch (Exception e) {
log.error("获取人员异常", e);
return Rest.fail(e.getMessage());
}
}
}
...@@ -53,3 +53,11 @@ hystrix: ...@@ -53,3 +53,11 @@ hystrix:
isolation: isolation:
thread: thread:
timeoutInMilliseconds: 60000 timeoutInMilliseconds: 60000
sms:
smsSendUrl: @profiles.sms.smsSendUrl@
apiId: @profiles.sms.apiId@
type: @profiles.sms.type@
hik:
host: @profiles.hik.host@
appKey: @profiles.hik.appKey@
appSecret: @profiles.hik.appSecret@
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment