fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/Quantity.java
@@ -18,7 +18,6 @@ @Entity @Table(name = "d_quantity") @TableName("d_quantity") @IdClass(QuantityKey.class) @EqualsAndHashCode(callSuper = false) public class Quantity extends BizBaseEntity implements Serializable { @@ -30,16 +29,14 @@ public static String SORT_PROP = "receiveDate"; @Id @Column(name = "batch_id", columnDefinition = "varchar(40) COMMENT 'æ¹æ¬¡ç¼å·'") @Column(name = "batch_id", columnDefinition = "varchar(40) COMMENT 'æ¹æ¬¡ç¼å·:ä»åºç¼ç _yyyyMMddHHmmss'") @TableField("batch_id") private String batchId; @Id @Column(name = "dept_id", columnDefinition = "varchar(40) COMMENT 'æå±åºåº'") @TableField("dept_id") private String deptId; @Id @Column(name = "depot_id", columnDefinition = "varchar(40) COMMENT 'æå±ä»åº'") @TableField("depot_id") private String depotId; @@ -64,7 +61,7 @@ @TableField("points") private String points; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") @Column(name = "receive_date", columnDefinition = "datetime COMMENT 'æ£æµæ¶é´'") @TableField("receive_date") private Date receiveDate; @@ -80,4 +77,5 @@ @Transient @TableField(exist = false) private Depot depotData; } fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/QuantityConf.java
@@ -135,6 +135,10 @@ @TableField("url_out") private String urlOut; @Column(name = "ptz_type", columnDefinition = "varchar(40) COMMENT 'äºå°æ¹å¼'") @TableField("ptz_type") private String ptzType; @Column(name = "media_addr", columnDefinition = "varchar(100) COMMENT 'RTSPå°å'") @TableField("media_addr") private String mediaAddr; fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/QuantityKey.java
ÎļþÒÑɾ³ý fzzy-igdss-core/src/main/java/com/fzzy/igds/service/FileService.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.fzzy.igds.domain.FileInfo; import com.fzzy.igds.domain.Quantity; import com.fzzy.igds.mapper.FileMapper; import com.fzzy.igds.utils.Base64Util; import com.fzzy.igds.utils.ContextUtil; @@ -31,6 +32,29 @@ private FileMapper fileMapper; /** * æ ¹æ®æ¡ä»¶è·åéä»¶ä¿¡æ¯ * @param companyId * @param bizId * @return */ public List<FileInfo> listFile(String companyId, String bizId) { if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } if (StringUtils.isEmpty(bizId)){ return null; } QueryWrapper<FileInfo> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("company_id", companyId); queryWrapper.eq("biz_id", bizId); queryWrapper.orderByAsc("create_time"); return fileMapper.selectList(queryWrapper); } /** * 弿¥æ§è¡éä»¶ä¿å * @param files éä»¶ä¿¡æ¯ * @param bizId ä¸å¡id fzzy-igdss-core/src/main/java/com/fzzy/igds/service/QuantityService.java
@@ -70,6 +70,25 @@ } /** * æ¥è¯¢æ°æ®å表 * @param depotId * @param limit æ¥è¯¢æ¡æ° * @return */ public List<Quantity> getQuantityList(String depotId, Integer limit) { if (StringUtils.isEmpty(depotId)) { return null; } QueryWrapper<Quantity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("depot_id", depotId); queryWrapper.orderByDesc("receive_date"); queryWrapper.last("LIMIT " + limit); return quantityMapper.selectList(queryWrapper); } /** * æ¥è¯¢é 置信æ¯ï¼æ ¹æ®åºåºç¼ç è·å * * @param companyId fzzy-igdss-view/src/main/java/com/fzzy/igds/QuantityConf.view.xml
@@ -17,19 +17,22 @@ <Property name="keyProperty">id</Property> <Property name="valueProperty">name</Property> </Property> <Property name="required">true</Property> </PropertyDef> <PropertyDef name="deptId"> <Property></Property> <Property name="label">æå±ååº</Property> <Property name="mapping"> <Property name="mapValues">${dorado.getDataProvider("deptPR#getAllData").getResult()}</Property> <Property name="mapValues">${dorado.getDataProvider("deptPR#getDeptByUserType").getResult()}</Property> <Property name="keyProperty">id</Property> <Property name="valueProperty">kqmc</Property> </Property> <Property name="required">true</Property> </PropertyDef> <PropertyDef name="name"> <Property></Property> <Property name="label">设å¤åç§°</Property> <Property name="required">true</Property> </PropertyDef> <PropertyDef name="sn"> <Property></Property> @@ -134,6 +137,17 @@ <Property name="keyProperty">dictValue</Property> <Property name="valueProperty">dictLabel</Property> </Property> <Property name="required">true</Property> </PropertyDef> <PropertyDef name="ptzType"> <Property></Property> <Property name="label">äºå°æ¹å¼</Property> <Property name="mapping"> <Property name="mapValues">${dorado.getDataProvider("dicPR#triggerPtzType").getResult()}</Property> <Property name="keyProperty">dictValue</Property> <Property name="valueProperty">dictLabel</Property> </Property> <Property name="required">true</Property> </PropertyDef> <PropertyDef name="urlIn"> <Property></Property> @@ -189,7 +203,6 @@ <ToolBar> <ToolBarButton> <ClientEvent name="onClick">view.get("#dsMain").insert();
 view.get("#depotId").set("readOnly",false);
 view.get("#dgMain").show();</ClientEvent> <Property name="caption">æ°å¢</Property> <Property name="exClassName">btn1</Property> @@ -200,7 +213,6 @@ <ClientEvent name="onClick">
 var select = view.get("#dataGridMain").get("selection");
 if(select){
 view.get("#depotId").set("readOnly",true)
 view.get("#dgMain").show();
 }else{
 $notify("è¯·éæ©éè¦ä¿®æ¹çæ°æ®â¦â¦");
 @@ -312,7 +324,7 @@ <ClientEvent name="onShow">//æ ¹æ®ä»åºç±»åä¸åï¼æ¾ç¤ºä¸åçé 置信æ¯</ClientEvent> <Property name="iconClass">fa fa-tasks</Property> <Property name="caption">æ°éæ£æµåæ°</Property> <Property name="width">60%</Property> <Property name="width">80%</Property> <Property name="closeable">false</Property> <Property name="height">90%</Property> <Buttons> @@ -335,13 +347,13 @@ </Button> </Buttons> <Children> <GroupBox layoutConstraint="padding:5"> <FieldSet layout="padding:5"> <Property name="caption">åºæ¬ä¿¡æ¯</Property> <Buttons/> <Children> <AutoForm> <Property name="dataSet">dsMain</Property> <Property name="cols">*,*,*</Property> <Property name="cols">*,*,*,*</Property> <Property name="labelSeparator">ï¼</Property> <Property name="labelAlign">right</Property> <Property name="labelWidth">110</Property> @@ -351,14 +363,13 @@ <Editor/> </AutoFormElement> <AutoFormElement> <Property name="name">sn</Property> <Property name="property">sn</Property> <Editor/> </AutoFormElement> <AutoFormElement id="depotId"> <Property name="name">depotId</Property> <Property name="property">depotId</Property> <Property name="readOnly">false</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">deptId</Property> <Property name="property">deptId</Property> <Editor/> </AutoFormElement> <AutoFormElement> @@ -371,6 +382,11 @@ <Property name="property">port</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">sn</Property> <Property name="property">sn</Property> <Editor/> </AutoFormElement> <AutoFormElement> <Property name="name">protocol</Property> <Property name="property">protocol</Property> @@ -381,21 +397,16 @@ <Property name="property">status</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">remark</Property> <Property name="property">remark</Property> <Editor/> </AutoFormElement> </AutoForm> </Children> </GroupBox> <GroupBox layoutConstraint="padding:5"> </FieldSet> <FieldSet layout="padding:5"> <Property name="caption">æå头é ç½®</Property> <Buttons/> <Children> <AutoForm> <Property name="dataSet">dsMain</Property> <Property name="cols">*,*,*</Property> <Property name="cols">*,*,*,*</Property> <Property name="labelSeparator">ï¼</Property> <Property name="labelAlign">right</Property> <Property name="labelWidth">110</Property> @@ -415,6 +426,11 @@ <Editor/> </AutoFormElement> <AutoFormElement> <Property name="name">chanNum</Property> <Property name="property">chanNum</Property> <Editor/> </AutoFormElement> <AutoFormElement> <Property name="name">loginId</Property> <Property name="property">loginId</Property> <Property name="readOnly">false</Property> @@ -426,18 +442,8 @@ <Editor/> </AutoFormElement> <AutoFormElement> <Property name="name">chanNum</Property> <Property name="property">chanNum</Property> <Editor/> </AutoFormElement> <AutoFormElement> <Property name="name">playType</Property> <Property name="property">playType</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">urlIn</Property> <Property name="property">urlIn</Property> <Editor/> </AutoFormElement> <AutoFormElement> @@ -445,17 +451,12 @@ <Property name="property">snapType</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">urlOut</Property> <Property name="property">urlOut</Property> <Editor/> </AutoFormElement> <AutoFormElement> <Property name="name">cameraSn</Property> <Property name="property">cameraSn</Property> <Property name="name">ptzType</Property> <Property name="property">ptzType</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <AutoFormElement layoutConstraint="colSpan:3"> <Property name="name">mediaAddr</Property> <Property name="property">mediaAddr</Property> <Property name="trigger">triggerMedia</Property> @@ -465,10 +466,30 @@ </TextEditor> </Editor> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">urlIn</Property> <Property name="property">urlIn</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">urlOut</Property> <Property name="property">urlOut</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">cameraSn</Property> <Property name="property">cameraSn</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">remark</Property> <Property name="property">remark</Property> <Editor/> </AutoFormElement> </AutoForm> </Children> </GroupBox> <GroupBox layoutConstraint="padding:5"> </FieldSet> <FieldSet layout="padding:5"> <Property name="caption">æ°éæ£æµåæ°</Property> <Buttons/> <Children> @@ -515,7 +536,7 @@ </AutoFormElement> </AutoForm> </Children> </GroupBox> </FieldSet> </Children> <Tools/> </Dialog> fzzy-igdss-web/src/main/java/com/fzzy/security/SecurityController.java
@@ -4,11 +4,11 @@ import com.fzzy.igds.camera.data.ApiCameraResp; import com.fzzy.igds.constant.CameraPlayType; import com.fzzy.igds.constant.Constant; import com.fzzy.igds.data.GroupIndexData; import com.fzzy.igds.data.IgdsBaseParam; import com.fzzy.igds.data.PageResponse; import com.fzzy.igds.data.PatrolSuperData; import com.fzzy.igds.domain.Camera; import com.fzzy.igds.domain.PatrolRecord; import com.fzzy.igds.domain.*; import com.fzzy.igds.utils.ContextUtil; import com.fzzy.igds.utils.SystemUtil; import com.fzzy.common.manager.CommonManager; @@ -228,8 +228,7 @@ * @return */ @RequestMapping("/quantity") public String infrared( @RequestParam(value = "type", required = false) String type, public String infrared(@RequestParam(value = "type", required = false) String type, ModelMap view) { SysUser user = ContextUtil.getLoginUser(); @@ -237,17 +236,47 @@ String deptId = ContextUtil.subDeptId(user); view.put("deptId", deptId); // List<InfraredCamera> listCamera = infraredManager.listCamera(deptId, user.getCompanyId()); // // if(null == listCamera){ // listCamera = new ArrayList<>(); // listCamera.add(new InfraredCamera()); // } // view.put("listCamera", listCamera); //æ¥è¯¢åºåºä¸æ°éæ£æµè®¾å¤ List<QuantityConf> listCamera = secManager.getQuantityConfByDeptId(deptId); view.put("listCamera", listCamera); return prefix + "/quantity"; } /** * æ¥è¯¢è®°å½ä¿¡æ¯ * @param param * @return */ @RequestMapping("/quantity-list") @ResponseBody public PageResponse<List<Quantity>> quantityList(@RequestBody IgdsBaseParam param) { return secManager.quantityList(param); } /** * æ¥è¯¢æ²çº¿å¾ä¿¡æ¯ * @param param * @return */ @RequestMapping("/quantity-chart") @ResponseBody public PageResponse<GroupIndexData> getQuantityChart(@RequestBody IgdsBaseParam param) { return secManager.getQuantityChart(param); } /** * æ¥è¯¢æ²çº¿å¾ä¿¡æ¯ * @param param * @return */ @RequestMapping("/quantity-files") @ResponseBody public PageResponse<List<FileInfo>> getQuantityFiles(@RequestBody IgdsBaseParam param) { return secManager.getQuantityFiles(param); } /*------------------å·¡æ´è½¨è¿¹é¡µé¢------------------*/ fzzy-igdss-web/src/main/java/com/fzzy/security/manager/SecManager.java
@@ -5,20 +5,16 @@ import com.fzzy.igds.camera.data.ApiCameraData; import com.fzzy.igds.camera.data.ApiCameraResp; import com.fzzy.igds.constant.RespCodeEnum; import com.fzzy.igds.data.PageResponse; import com.fzzy.igds.data.PatrolSuperData; import com.fzzy.igds.domain.Camera; import com.fzzy.igds.domain.Dept; import com.fzzy.igds.domain.Patrol; import com.fzzy.igds.domain.PatrolRecord; import com.fzzy.igds.service.CoreDeptService; import com.fzzy.igds.service.PatrolService; import com.fzzy.igds.service.SecCameraService; import com.fzzy.igds.data.*; import com.fzzy.igds.domain.*; import com.fzzy.igds.service.*; import com.fzzy.igds.utils.ContextUtil; import com.fzzy.igds.utils.DateUtil; import com.ruoyi.common.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Date; import java.util.HashMap; @@ -35,6 +31,8 @@ public class SecManager { @Resource private CommonManager commonManager; @Resource private SecCameraService secCameraService; @Resource private ApiCameraManager apiCameraManager; @@ -43,10 +41,11 @@ @Resource private CoreDeptService coreDeptService; @Resource private CommonManager commonManager; private QuantityService quantityService; @Resource private FileService fileService; /** * * @param deptId * @param companyId * @return @@ -67,6 +66,7 @@ /** * æ ¹æ®çæ§IDè·åçæ§ä¿¡æ¯ * * @param companyId * @param cameraId * @return @@ -83,6 +83,7 @@ /** * è·åææ¾ä¿¡æ¯ * * @param param * @return */ @@ -125,6 +126,7 @@ /** * äºå°æ§å¶ * * @param param * @return */ @@ -138,6 +140,7 @@ /** * é¢ç½®ä½è®¾ç½® * * @param param * @return */ @@ -146,7 +149,6 @@ } /** * * @param params * @return */ @@ -162,11 +164,12 @@ } secCameraService.refreshCache(ContextUtil.getCompanyId()); return new PageResponse<>(RespCodeEnum.CODE_0000, "æ§è¡æåï¼ï¼"); return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "æ§è¡æåï¼ï¼"); } /** * å·¡æ£ç»è®¡ * * @return */ public PatrolSuperData patrolTrack() { @@ -230,4 +233,87 @@ return patrolRecords; } /** * è·åæ°éæ£æµé ç½®ä¿¡æ¯ * * @param deptId * @return */ public List<QuantityConf> getQuantityConfByDeptId(String deptId) { return quantityService.getConfList(ContextUtil.getCompanyId(), deptId); } /** * æ¥è¯¢æ°éæ£æµè®°å½ï¼é»è®¤æ¥è¯¢4æ¡ * * @param param * @return */ public PageResponse<List<Quantity>> quantityList(IgdsBaseParam param) { if (StringUtils.isEmpty(param.getDepotId())) { return new PageResponse<>(RespCodeEnum.CODE_1007.getCode(), "åæ°ä¸ºç©ºï¼ï¼"); } List<Quantity> quantityList = quantityService.getQuantityList(param.getDepotId(), 4); if (null == quantityList || quantityList.isEmpty()) { return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "æ°æ®ä¸ºç©ºï¼ï¼"); } return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "æ§è¡æåï¼ï¼", quantityList); } /** * æ¥è¯¢æ°éæ£æµè®°å½ï¼é»è®¤æ¥è¯¢7æ¡ï¼å°è£ æå¾è¡¨ä¿¡æ¯ * * @param param * @return */ public PageResponse<GroupIndexData> getQuantityChart(IgdsBaseParam param) { if (StringUtils.isEmpty(param.getDepotId())) { return new PageResponse<>(RespCodeEnum.CODE_1007.getCode(), "åæ°ä¸ºç©ºï¼ï¼"); } List<Quantity> quantityList = quantityService.getQuantityList(param.getDepotId(), 7); if (null == quantityList || quantityList.isEmpty()) { return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "æ°æ®ä¸ºç©ºï¼ï¼"); } GroupIndexData data = new GroupIndexData(); for (int i = (quantityList.size() - 1); i >= 0; i--) { data.getXaxis().add(DateFormatUtils.format(quantityList.get(i).getReceiveDate(), "MM-dd HH:mm")); data.getSeriesData().add(quantityList.get(i).getWeight() + ""); } return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "æ§è¡æåï¼ï¼", data); } /** * æ¥è¯¢æ£æµæ°æ®å¯¹åºæå¾ * @param param * @return */ public PageResponse<List<FileInfo>> getQuantityFiles(IgdsBaseParam param) { if (StringUtils.isEmpty(param.getKey())) { return new PageResponse<>(RespCodeEnum.CODE_1007.getCode(), "åæ°ä¸ºç©ºï¼ï¼"); } List<FileInfo> fileList = fileService.listFile(null, param.getKey()); if (null == fileList || fileList.isEmpty()) { return new PageResponse<>(RespCodeEnum.CODE_2000.getCode(), "æ°æ®ä¸ºç©ºï¼ï¼"); } //夿æä»¶æ¯å¦åå¨ for (FileInfo fileInfo : fileList) { fileInfo.setFilePath(commonManager.isImgExit(fileInfo.getFilePath(), null)); } return new PageResponse<>(RespCodeEnum.CODE_0000.getCode(), "æ§è¡æåï¼ï¼", fileList); } } fzzy-igdss-web/src/main/resources/static/security/quantity.css
@@ -304,12 +304,19 @@ margin-top: 5px; } .render_btn { background-color: #f1ba1f; color: #333; height: 30px; } .alert-item { border-left: 4px solid #e6a23c; background-color: #fdf6ec; padding: 10px 15px; margin-bottom: 10px; border-radius: 0 4px 4px 0; height: 75px; } .alert-item.accent { @@ -320,6 +327,11 @@ .alert-item.gray { border-left-color: #909399; background-color: #f2f2f2; } .alert-item.blue { border-left-color: #205191; background-color: #dde8f1; } .alert-header { @@ -342,6 +354,7 @@ font-size: 13px; color: #606266; margin-bottom: 10px; margin-top: 20px; } .tool-grid { @@ -526,7 +539,7 @@ } .w-select { min-width: 150px; min-width: 250px; min-height: 36px; border-radius: 4px; } fzzy-igdss-web/src/main/resources/static/security/quantity.js
@@ -1,6 +1,12 @@ var layer; var form; var curCamera; var firstQuantity; var hisChart = null; //æ²çº¿å¾ var listRecord; var fileRecord; var names = ['12-01', '12-02', '12-03', '12-04', '12-05', '12-06', '12-07']; var data = [2560000, 2510000, 2540000, 2530000, 2490000, 2610000, 2570000]; layui.use(['layer'], function () { form = layui.form; @@ -22,17 +28,13 @@ //éæ©æå头å触åçäºä»¶ const cameraSelect = document.getElementById('select-camera'); cameraSelect.addEventListener('change', function() { const selectedCamera = this.value; //console.log("--------------"+selectedCamera); video(selectedCamera); const selectId = this.value; // æ´æ°æ¸©åº¦èµ°å¿å¾ // updateEchartsTemp(selectedCamera); ajaxData(selectId); }); // åå§åECharts温度走å¿å¾ initEchartsTemp(); // åå§åèµ°å¿å¾ initEcharts(names, data); }); @@ -40,39 +42,283 @@ * è§é¢ææ¾ * @param selectId */ function video(selectId) { function ajaxData(selectId) { curCamera = null; //ä»å表ä¸è·åæåå¤´ä¿¡æ¯ curCamera = listCamera.find(camera => camera.id === selectId); if (!curCamera) { layer.msg('没æè·åå°å½åæå头信æ¯â¦â¦', {icon: 1, time: 1200});} curCamera = listCamera.find(camera => camera.depotId === selectId); if (!curCamera) { layer.msg('没æè·åå°å½åæå头信æ¯â¦â¦', {icon: 1, time: 1200}); return; } //è·åè§é¢ video(); //渲æèµ°å¿å¾ ajaxEcharts(); //渲æè®°å½ ajaxListRecord(); //æ¸²æææå¾ ajaxSnapImg(); } /** * æ´æ°æ¸©åº¦èµ°å¿å¾ * @param selectId * 请æ±å¾è¡¨ä¿¡æ¯ */ function updateEchartsTemp(selectId) { function ajaxSnapImg() { if(!firstQuantity){ renderSnapImg(); return; } fileRecord = null; var data = { cameraId: selectId key: firstQuantity.batchId }; $.ajax({ type: 'POST', url: "/security/infrared/chart-data", url: "/security/quantity-files", dataType: 'JSON', contentType: "application/json;charset=UTF-8", data: JSON.stringify(data), success: function (result) { //layer.msg("ä¿¡æ¯æ´æ°å®æï¼ï¼"); if (result.code != "SUCCESS") { renderSnapImg(); } else { fileRecord = result.data; renderSnapImg(); } }, error: function (result) { // layer.msg(result.msg); renderSnapImg(); } }); } /** * 渲ææå¾ * @returns {null} */ function renderSnapImg() { if (!fileRecord) return null; if (fileRecord.length === 0) return null; var record = fileRecord[0]; if (record) { $("#file-time1").text(record.createTime); $("#file-img1").attr("src", record.filePath); } else { $("#file-time1").text("----"); $("#file-img1").attr("src", "/img/web/security/p-snap.jpg"); } record = fileRecord[1]; if (record) { $("#file-time2").text(record.createTime); $("#file-img2").attr("src", record.filePath); } else { $("#file-time2").text("----"); $("#file-img2").attr("src", "/img/web/security/p-snap.jpg"); } record = fileRecord[2]; if (record) { $("#file-time3").text(record.createTime); $("#file-img3").attr("src", record.filePath); } else { $("#file-time3").text("----"); $("#file-img3").attr("src", "/img/web/security/p-snap.jpg"); } record = fileRecord[3]; if (record) { $("#file-time4").text(record.createTime); $("#file-img4").attr("src", record.filePath); } else { $("#file-time4").text("----"); $("#file-img4").attr("src", "/img/web/security/p-snap.jpg"); } } /** * 请æ±å¾è¡¨ä¿¡æ¯ */ function ajaxEcharts() { var data = { depotId: curCamera.depotId }; $.ajax({ type: 'POST', url: "/security/quantity-chart", dataType: 'JSON', contentType: "application/json;charset=UTF-8", data: JSON.stringify(data), success: function (result) { if (result.code != "SUCCESS") { renderEcharts(null); } else { renderEcharts(result.data); } }, error: function (result) { renderEcharts(null); } }); } /** * 渲æå¾è¡¨ * @param chartData */ function renderEcharts(chartData) { var chart = hisChart; if (chartData && chartData.xaxis.length > 0 && chartData.seriesData.length > 0) { chart.option.xAxis.data = chartData.xaxis; chart.option.series[0].data = chartData.seriesData; chart.chart.setOption(chart.option, true); } else { chart.option.xAxis.data = names; chart.option.series[0].data = data; chart.chart.setOption(chart.option, true); } hisChart = chart; } /** * 请æ±è®°å½ */ function ajaxListRecord() { firstQuantity = null; listRecord = null; var data = { depotId: curCamera.depotId }; $.ajax({ type: 'POST', url: "/security/quantity-list", dataType: 'JSON', contentType: "application/json;charset=UTF-8", data: JSON.stringify(data), success: function (result) { if (result.code != "SUCCESS") { renderListRecord(); } else { listRecord = result.data; renderListRecord(); } }, error: function (result) { renderListRecord(); } }); } /** * 渲æè®°å½ * @returns {null} */ function renderListRecord() { if (!listRecord) return null; if (listRecord.length === 0) return null; var record = listRecord[0]; if (record) { firstQuantity = record; $("#record_title1").text("æ£æµééï¼" + record.weight + " KG"); $("#record_time1").text(record.receiveDate); $("#record_content1").text(record.remark); } else { $("#record_title1").text("æ£æµééï¼---- KG"); $("#record_time1").text("----"); $("#record_content1").text("æ£æµéé为---- KGï¼å®é éé为---- KGï¼è¯¯å·®å°äº-%ã"); } record = listRecord[1]; if (record) { $("#record_title2").text("æ£æµééï¼" + record.weight + " KG"); $("#record_time2").text(record.receiveDate); $("#record_content2").text(record.remark); } else { $("#record_title2").text("æ£æµééï¼---- KG"); $("#record_time2").text("----"); $("#record_content2").text("æ£æµéé为---- KGï¼å®é éé为---- KGï¼è¯¯å·®å°äº-%ã"); } record = listRecord[2]; if (record) { $("#record_title3").text("æ£æµééï¼" + record.weight + " KG"); $("#record_time3").text(record.receiveDate); $("#record_content3").text(record.remark); } else { $("#record_title3").text("æ£æµééï¼---- KG"); $("#record_time3").text("----"); $("#record_content3").text("æ£æµéé为---- KGï¼å®é éé为---- KGï¼è¯¯å·®å°äº-%ã"); } record = listRecord[3]; if (record) { $("#record_title4").text("æ£æµééï¼" + record.weight + " KG"); $("#record_time4").text(record.receiveDate); $("#record_content4").text(record.remark); } else { $("#record_title4").text("æ£æµééï¼---- KG"); $("#record_time4").text("----"); $("#record_content4").text("æ£æµéé为---- KGï¼å®é éé为---- KGï¼è¯¯å·®å°äº-%ã"); } } /** * è§é¢ææ¾ * @param */ function video() { var data = { id: curCamera.cameraSn, playType: curCamera.playType }; $.ajax({ type: 'POST', url: "/security/get-media", dataType: 'JSON', contentType: "application/json;charset=UTF-8", data: JSON.stringify(data), success: function (result) { if (result.code != "SUCCESS") { layer.msg(result.msg, {icon: 1, time: 1200}); } else { toPlay(result.playUrl); } }, error: function (result) { layer.msg("æªè·åå°ææ¾ä¿¡æ¯ï¼ï¼", {icon: 1, time: 1200}); } }); } /** * ææ¾è§é¢ * @param url */ function toPlay(url) { var html = ''; if (url) { html += '<iframe src="' + url + '" width="100%" height="100%" frameborder="0" allowfullscreen></iframe>'; } else { html += '<img src="/img/web/security/p-snap.jpg">'; } $("#divPlugin2").html(html); } // åå§åECharts温度走å¿å¾ function initEchartsTemp() { function initEcharts(names, data) { // åå§åECharts温度走å¿å¾ var temperatureChartDom = document.getElementById('temperatureChart'); var temperatureChart = echarts.init(temperatureChartDom); @@ -102,7 +348,7 @@ { type: 'category', boundaryGap: false, data: ['12-01', '12-02', '12-03', '12-04', '12-05', '12-06', '12-07'] data: names } ], yAxis: [ @@ -131,12 +377,14 @@ { offset: 1, color: 'rgba(15, 52, 96, 0.05)' } ]) }, data: [2560000, 2510000, 2540000, 2530000, 2490000, 2610000, 2570000] data: data } ] }; // 渲æå¾è¡¨ option && temperatureChart.setOption(option); hisChart = {"chart": temperatureChart, "option": option}; // çªå£å¤§å°ååæ¶è°æ´å¾è¡¨å¤§å° window.addEventListener('resize', function() { temperatureChart.resize(); fzzy-igdss-web/src/main/resources/templates/security/quantity.html
@@ -22,24 +22,24 @@ <h2>宿¶çæ§ç»é¢</h2> <div class="layui-row layui-col-space10"> <div class="layui-inline"> <label class="layui-form-label">ä»åºå表</label> <label class="layui-form-label">设å¤å表</label> <select id="select-camera" class="layui-form-select w-select"> <option>è¯·éæ©â¦â¦</option> <option th:each="camera:${listCamera}" th:value="${camera.id}" th:text="${camera.name}"></option> <option th:each="camera:${listCamera}" th:value="${camera.depotId}" th:text="${camera.name}"></option> </select> </div> </div> </div> <div class="card-body"> <!-- åè§é¢å±ç¤ºåºå --> <div class="video-container" id="video-container" style="grid-template-columns: 1fr;"> <!-- çæåè§é¢ç»é¢ --> <div class="video-box" id="thermal-video"> <div class="video-label"> <i class="layui-icon layui-icon-camera-fill"></i> çæåè§é¢ </div> <div id="divPlugin2"> <img th:src="@{/img/web/security/p-snap.jpg}" alt="çæå宿¶ç»é¢"> <div class="video-container" id="video-container" style="grid-template-columns: 1fr;min-height: 610px;"> <!-- <!– çæåè§é¢ç»é¢ –>--> <!-- <div class="video-box" id="thermal-video">--> <!-- <div class="video-label">--> <!-- <i class="layui-icon layui-icon-camera-fill"></i>--> <!-- </div>--> <div id="divPlugin2" style="height: 100%"> <img th:src="@{/img/web/security/p-snap.jpg}" alt=""> </div> <!-- 温度æ è®°ç¹ <div class="temp-mark" title="å¼å¸¸é«æ¸©ç¹: 32°C"> @@ -63,7 +63,7 @@ </div> --> </div> <!-- </div>--> </div> <!-- ç®åçè§é¢æ§å¶å·¥å ·æ --> @@ -86,6 +86,12 @@ <button class="layui-btn layui-btn-default layui-btn-sm"> åå <i class="layui-icon layui-icon-subtraction"></i> </button> <button class="layui-btn layui-btn-default layui-btn-sm"> å¼å§æ£æµ <i class="layui-icon layui-icon-subtraction"></i> </button> <button class="layui-btn layui-btn-default layui-btn-sm"> åæ¢æ£æµ <i class="layui-icon layui-icon-subtraction"></i> </button> </div> @@ -100,46 +106,46 @@ <div class="card-body"> <div class="record-grid"> <!-- æ®éè§é¢è®°å½ --> <div class="record-item"> <div class="record-item" style="border: 2px solid var(--warning-color);"> <div class="record-img"> <img th:src="@{/img/web/security/p-snap.jpg}" alt="æ®éè§é¢è®°å½"> <img id="file-img1" th:src="@{/img/web/security/p-snap.jpg}"> </div> <div class="record-info"> <div class="record-name">ç²®ä»1å·</div> <div class="record-time">2025-12-03 10:00</div> <div class="record-name">è¿ç¨ææ1</div> <div id="file-time1" class="record-time">2025-12-03 10:00</div> </div> </div> <!-- çæåè§é¢è®°å½ --> <div class="record-item"> <div class="record-item" style="border: 2px solid var(--warning-color);"> <div class="record-img"> <img th:src="@{/img/web/security/p-snap-red.jpg}" alt="çæåè§é¢è®°å½"> <img id="record-img2" th:src="@{/img/web/security/p-snap.jpg}"> </div> <div class="record-info"> <div class="record-name">ç²®ä»1å·</div> <div class="record-time">2025-12-03 10:00</div> <div class="record-name">è¿ç¨ææ2</div> <div id="file-time2" class="record-time">2025-12-03 10:00</div> </div> </div> <!-- å¼å¸¸äºä»¶è®°å½ --> <div class="record-item" style="border: 2px solid var(--warning-color);"> <div class="record-img"> <img th:src="@{/img/web/security/p-snap.jpg}" alt="å¼å¸¸äºä»¶è®°å½"> <img id="record-img3" th:src="@{/img/web/security/p-snap.jpg}"> </div> <div class="record-info"> <div class="record-name">ç²®ä»3å·</div> <div class="record-time">2025-12-03 14:20</div> <div class="record-name">è¿ç¨ææ3</div> <div id="file-time3" class="record-time">2025-12-03 14:20</div> </div> </div> <!-- çæåè§é¢è®°å½ --> <div class="record-item"> <div class="record-item" style="border: 2px solid var(--warning-color);"> <div class="record-img"> <img th:src="@{/img/web/security/p-snap-red.jpg}" alt="çæåè§é¢è®°å½"> <img id="record-img4" th:src="@{/img/web/security/p-snap.jpg}"> </div> <div class="record-info"> <div class="record-name">ç²®ä»1å·</div> <div class="record-time">2025-12-03 10:00</div> <div class="record-name">è¿ç¨ææ4</div> <div id="file-time4" class="record-time">2025-12-03 10:00</div> </div> </div> </div> @@ -175,43 +181,31 @@ <div class="card-body" style="max-height: 410px; overflow-y: hidden;"> <div class="alert-item accent"> <div class="alert-header"> <div class="alert-title">æ£æµééï¼2590000 KG</div> <div class="alert-time">2025-12-07 10:00</div> <div class="alert-title" id="record_title1">æ£æµééï¼---- KG</div> <div class="alert-time" id="record_time1">----</div> </div> <div class="alert-content">æ£æµéé为2590000 KGï¼å®é éé为2550000 KGï¼è¯¯å·®å°äº5%ã</div> <div style="text-align: right;"> <button class="layui-btn layui-btn-xs" style="background-color: var(--primary-color);">æ¥çä¸ç»´æ¸²æ</button> </div> <div class="alert-content" id="record_content1">æ£æµéé为---- KGï¼å®é éé为---- KGï¼è¯¯å·®å°äº-%ã</div> </div> <div class="alert-item"> <div class="alert-header"> <div class="alert-title">æ£æµééï¼2540000 KG</div> <div class="alert-time">2025-12-06 10:00</div> <div class="alert-title" id="record_title2">æ£æµééï¼---- KG</div> <div class="alert-time" id="record_time2">----</div> </div> <div class="alert-content">æ£æµéé为2540000 KGï¼å®é éé为2550000 KGï¼è¯¯å·®å°äº5%ã</div> <div style="text-align: right;"> <button class="layui-btn layui-btn-xs" style="background-color: var(--primary-color);">æ¥çä¸ç»´æ¸²æ</button> <div class="alert-content" id="record_content2">æ£æµéé为---- KGï¼å®é éé为---- KGï¼è¯¯å·®å°äº-%ã</div> </div> <div class="alert-item blue"> <div class="alert-header"> <div class="alert-title" id="record_title3">æ£æµééï¼---- KG</div> <div class="alert-time" id="record_time3">----</div> </div> <div class="alert-content" id="record_content3">æ£æµéé为---- KGï¼å®é éé为---- KGï¼è¯¯å·®å°äº-%ã</div> </div> <div class="alert-item gray"> <div class="alert-header"> <div class="alert-title">æ£æµééï¼2510000 KG</div> <div class="alert-time">2025-12-05 10:00</div> <div class="alert-title" id="record_title4">æ£æµééï¼---- KG</div> <div class="alert-time" id="record_time4">----</div> </div> <div class="alert-content">æ£æµéé为2510000 KGï¼å®é éé为2550000 KGï¼è¯¯å·®å°äº5%ã</div> <div style="text-align: right;"> <button class="layui-btn layui-btn-xs" style="background-color: var(--primary-color);">æ¥çä¸ç»´æ¸²æ</button> </div> </div> <div class="alert-item gray"> <div class="alert-header"> <div class="alert-title">æ£æµééï¼2560000 KG</div> <div class="alert-time">2025-12-04 10:00</div> </div> <div class="alert-content">æ£æµéé为2560000 KGï¼å®é éé为2550000 KGï¼è¯¯å·®å°äº5%ã</div> <div style="text-align: right;"> <button class="layui-btn layui-btn-xs" style="background-color: var(--primary-color);">æ¥çä¸ç»´æ¸²æ</button> </div> <div class="alert-content" id="record_content4">æ£æµéé为---- KGï¼å®é éé为---- KGï¼è¯¯å·®å°äº-%ã</div> </div> </div> </div> @@ -228,15 +222,15 @@ <div class="tool-item-simple" style="height: 65px"> <div class="tool-icon-simple"><i class="layui-icon layui-icon-chart"></i></div> <div class="tool-text"> <div class="tool-name-simple">温度ååæ²çº¿</div> <div class="tool-desc">æ¥ç温度ååè¶å¿åæ</div> </div> <div class="tool-name-simple">æ°æ®æ¥è¡¨</div> <div class="tool-desc">æ¥çæ°æ®æ¥è¡¨åæ</div> </div>-- </div> <div class="tool-item-simple" style="height: 65px"> <div class="tool-icon-simple"><i class="layui-icon layui-icon-print"></i></div> <div class="tool-text"> <div class="tool-name-simple">导åºåææ¥å</div> <div class="tool-desc">å¯¼åºæ¸©åº¦æ°æ®ååæç»æ</div> <div class="tool-desc">å¯¼åºæ°æ®æ°éåæç»æ</div> </div> </div> </div>