Commit 60a42fe1 authored by yzm's avatar yzm

改为单独调用抽帧和分析的服务

parent 8de39672
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<artifactId>VideoofCultural</artifactId> <artifactId>VideoofCultural</artifactId>
<version>1.0</version> <version>1.0</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<description>文物局视频截图推送</description> <description></description>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
...@@ -175,11 +175,7 @@ ...@@ -175,11 +175,7 @@
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.46</version>
</dependency>
</dependencies> </dependencies>
......
...@@ -22,19 +22,19 @@ public class ScheduleTaskConfig { ...@@ -22,19 +22,19 @@ public class ScheduleTaskConfig {
@Value("${file.getrtspbyurl}") @Value("${file.getrtspbyurl}")
private String getrtspbyurl; private String getrtspbyurl;
RestUtil restUtil=new RestUtil(); RestUtil restUtil=new RestUtil();
/*** // /***
* 每隔20分钟执行一遍判断rtsp 是否变换 // * 每隔20分钟执行一遍判断rtsp 是否变换
*/ // */
// @Scheduled(cron = "0 0 2 * * ? ") //// @Scheduled(cron = "0 0 2 * * ? ")
private void statis() { // private void statis() {
//查询所有监控设备,更新rtsp 地址 // //查询所有监控设备,更新rtsp 地址
List<Sbtdspsr> sbtdpsrList= sbtdspsrService.list(); // List<Sbtdspsr> sbtdpsrList= sbtdspsrService.list();
//调用decice 端口获得新的rtsp 地址,如果与表里的一样无需更新,不一样则立即更新 // //调用decice 端口获得新的rtsp 地址,如果与表里的一样无需更新,不一样则立即更新
for(Sbtdspsr sbtd:sbtdpsrList) // for(Sbtdspsr sbtd:sbtdpsrList)
{ // {
restUtil.rtspChangeVlue(sbtd.getSbbh(),sbtd.getSqurllj(),getrtspbyurl); // restUtil.rtspChangeVlue(sbtd.getSbbh(),sbtd.getSqurllj(),getrtspbyurl);
} // }
} // }
// @Scheduled(cron = "0 30/5 6-19 * * ?")//每隔5分钟统计当天目前为止的数据 // @Scheduled(cron = "0 30/5 6-19 * * ?")//每隔5分钟统计当天目前为止的数据
......
package com.cx.cn.cxquartz.controller; package com.cx.cn.cxquartz.controller;
import com.alibaba.fastjson.JSONObject;
import com.cx.cn.cxquartz.bean.QuartzTaskErrors; import com.cx.cn.cxquartz.bean.QuartzTaskErrors;
import com.cx.cn.cxquartz.bean.QuartzTaskInformations; import com.cx.cn.cxquartz.bean.QuartzTaskInformations;
import com.cx.cn.cxquartz.service.quartz.FtpService; import com.cx.cn.cxquartz.service.quartz.FtpService;
...@@ -77,14 +76,15 @@ public class QuartzController { ...@@ -77,14 +76,15 @@ public class QuartzController {
public TaskResultObj scheduleJob(@RequestBody JobParam jobParam) { public TaskResultObj scheduleJob(@RequestBody JobParam jobParam) {
String taskno="fx_" + jobParam.getDeviceId() + "_" + jobParam.getDetectType(); String taskno="fx_" + jobParam.getDeviceId() + "_" + jobParam.getDetectType();
String cztaskno="cz_" + jobParam.getDeviceId() + "_" + jobParam.getDetectType();
QuartzTaskInformations taskInformations = new QuartzTaskInformations(); QuartzTaskInformations taskInformations = new QuartzTaskInformations();
taskInformations.setExecuteparamter(jobParam.getDeviceId()); taskInformations.setExecuteparamter(jobParam.getDeviceId());
taskInformations.setMetatype(jobParam.getDetectType()); taskInformations.setMetatype(jobParam.getDetectType());
//查询是否有抽帧服务 //查询是否有抽帧服务
// List<QuartzTaskInformations> tasks = quartzService.getTaskSByDeviceCode(jobParam.getDeviceId()); List<QuartzTaskInformations> tasks = quartzService.getTaskSByDeviceCode(jobParam.getDeviceId());
// Map<String, Integer> map = getTaskCzAndFxNumer(tasks); Map<String, Integer> map = getTaskCzAndFxNumer(tasks);
//Integer cznum = map.get("cznum"); Integer cznum = map.get("cznum");
//Integer fxnum = map.get("fxnum"); Integer fxnum = map.get("fxnum");
Long[] roiarray=new Long[4]; Long[] roiarray=new Long[4];
if ("0".equals(jobParam.getType())) {//0新增 1开启 2停止 3删除 if ("0".equals(jobParam.getType())) {//0新增 1开启 2停止 3删除
//判断是否存在抽帧任务,存在则直接新增分析任务,不存在则新增 //判断是否存在抽帧任务,存在则直接新增分析任务,不存在则新增
...@@ -104,15 +104,28 @@ public class QuartzController { ...@@ -104,15 +104,28 @@ public class QuartzController {
taskInformations.setVideoid(jobParam.getDeviceId() ); taskInformations.setVideoid(jobParam.getDeviceId() );
taskInformations.setRecordtype(jobParam.getDetectType()); taskInformations.setRecordtype(jobParam.getDetectType());
String result = quartzService.addTask(taskInformations); String result = quartzService.addTask(taskInformations);
try {
quartzService.startJob(taskno, "UNFROZEN");
}catch (Exception ex){
logger.error(taskno+" fx startJob error:"+ex.toString());
}
//查询是否有抽帧服务 //查询是否有抽帧服务
//if (cznum == 0) { if (cznum == 0) {
// taskInformations.setExecutorno("cz_" + jobParam.getDeviceId() + "_" + jobParam.getDetectType()); taskInformations.setExecutorno(cztaskno);
// taskInformations.setTaskno(taskInformations.getExecutorno()); taskInformations.setTaskno(cztaskno);
// quartzService.addTask(taskInformations); quartzService.addTask(taskInformations);
// } try {
quartzService.startJob(cztaskno, "UNFROZEN");
}catch (Exception ex){
logger.error(cztaskno+"cz startJob error:"+ex.toString());
}
}
} else if ("1".equals(jobParam.getType()))//开启 } else if ("1".equals(jobParam.getType()))//开启
{ {
try { try {
if (fxnum == 1) {
quartzService.startOrStopJob(cztaskno,"UNFROZEN");
}//开启分析服务,开启抽帧
quartzService.startOrStopJob(taskno,"UNFROZEN"); quartzService.startOrStopJob(taskno,"UNFROZEN");
} catch (Exception ex) { } catch (Exception ex) {
logger.error(ex.toString()); logger.error(ex.toString());
...@@ -120,15 +133,22 @@ public class QuartzController { ...@@ -120,15 +133,22 @@ public class QuartzController {
} else if ("2".equals(jobParam.getType()) ) {//停止 } else if ("2".equals(jobParam.getType()) ) {//停止
//一抽帧多分析,停止不停抽帧服务 //一抽帧多分析,停止不停抽帧服务
try { try {
if (fxnum == 1) {
quartzService.startOrStopJob(cztaskno,"FROZEN");
}
quartzService.startOrStopJob(taskno, "FROZEN"); quartzService.startOrStopJob(taskno, "FROZEN");
} catch (Exception ex) { } catch (Exception ex) {
logger.error(ex.toString()); logger.error(ex.toString());
} }
} else if ("3".equals(jobParam.getType())) {//删除 } else if ("3".equals(jobParam.getType())) {//删除
//一抽帧多分析,停止不停抽帧服务 try {
try {
quartzService.startOrStopJob(taskno, "FROZEN"); quartzService.startOrStopJob(taskno, "FROZEN");
quartzService.deletetask(taskno); quartzService.deletetask(taskno);
if(fxnum==1){
quartzService.startOrStopJob(cztaskno, "FROZEN");
quartzService.deletetask(cztaskno);
}
} catch (Exception ex) { } catch (Exception ex) {
logger.error(ex.toString()); logger.error(ex.toString());
} }
......
...@@ -50,7 +50,7 @@ public class QuartzMainJobFactory implements Job { ...@@ -50,7 +50,7 @@ public class QuartzMainJobFactory implements Job {
//if (ResultEnum.HTTP.getMessage().equals(sendType)) { //if (ResultEnum.HTTP.getMessage().equals(sendType)) {
try { try {
String result = HttpClientUtil.doPost(taskNo.contains("cz_") ? czurl : fxurl, "text/json", taskNo); String result = HttpClientUtil.doPost(taskNo.contains("cz_") ? czurl : fxurl, "text/json", executeParameter);
logger.info("taskNo={},执行结果result{}", taskNo, result); logger.info("taskNo={},执行结果result{}", taskNo, result);
if (StringUtils.isEmpty(result)) { if (StringUtils.isEmpty(result)) {
throw new RuntimeException("taskNo=" + taskNo + "http方式返回null"); throw new RuntimeException("taskNo=" + taskNo + "http方式返回null");
......
package com.cx.cn.cxquartz.job; package com.cx.cn.cxquartz.job;
import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.websocket.*; import javax.websocket.*;
...@@ -60,7 +60,12 @@ public class WebSocket { ...@@ -60,7 +60,12 @@ public class WebSocket {
Map map=new HashMap(); Map map=new HashMap();
map.put("type","HEARTBEAT"); map.put("type","HEARTBEAT");
map.put("ts",new Date().getTime()); map.put("ts",new Date().getTime());
AppointSending(name, JSONObject.toJSONString(map)); try {
AppointSending(name, new ObjectMapper().writeValueAsString(map));
}catch (Exception ex)
{
ex.printStackTrace();
}
} }
} }
......
...@@ -340,9 +340,7 @@ public class QuartzServiceImpl implements QuartzService, InitializingBean { ...@@ -340,9 +340,7 @@ public class QuartzServiceImpl implements QuartzService, InitializingBean {
// if (ResultEnum.HTTP.getMessage().equals(sendType)) { // if (ResultEnum.HTTP.getMessage().equals(sendType)) {
try { try {
//将抽取的时间段获得,如果是没有规则,全抽所有。、 HttpClientUtil.doPost(taskNo.contains("cz_") ? czurl : fxurl, "text/json", executeParameter);
//如果是当天上午八点,就抽当天8点之前喝前一天的3点之后0 30 8 ? * *
HttpClientUtil.doPost(taskNo.contains("cz_") ? czurl : fxurl, "text/json", taskNo);
logger.info(""); logger.info("");
} catch (Exception ex) { } catch (Exception ex) {
logger.error(""); logger.error("");
......
...@@ -11,6 +11,7 @@ import java.io.InputStream; ...@@ -11,6 +11,7 @@ import java.io.InputStream;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.CompletionService; import java.util.concurrent.CompletionService;
...@@ -89,32 +90,57 @@ public class FileTransferManager { ...@@ -89,32 +90,57 @@ public class FileTransferManager {
return record; return record;
} }
public static GoalStructureParam getGoalStructureParam(Long[] roiarray, int model, BASE64Encoder base64Encoder, TraffAlarmRecord transferRecord) { // public static GoalStructureParam getGoalStructureParam(Long[] roiarray, int model, BASE64Encoder base64Encoder, TraffAlarmRecord transferRecord) {
// //获得图片进行分析
// GoalStructureParam param = new GoalStructureParam();
// param.setOutput(new Output(1));
// param.setModel(model);
// param.setApiout("1");////打开1400标准输出,默认可以不填
// List<ImageList> list = new ArrayList<>();
// getImageList("1", roiarray, base64Encoder, list, transferRecord.getImg1path());
// param.setImageList(list);
// return param;
//
// }
public static GoalStructureParam getGoalStructureParam(Long[] roiarray, int model,int format, TraffAlarmRecord transferRecord) {
//获得图片进行分析 //获得图片进行分析
GoalStructureParam param = new GoalStructureParam(); GoalStructureParam param = new GoalStructureParam();
param.setOutput(new Output(1));
Map outmap=new HashMap();
outmap.put("SubClass",1);
param.setOutput(outmap);
param.setModel(model); param.setModel(model);
param.setApiout("1");////打开1400标准输出,默认可以不填 param.setApiout("1");////打开1400标准输出,默认可以不填
List<ImageList> list = new ArrayList<>(); List<Map> list = new ArrayList<>();
getImageList("1", roiarray, base64Encoder, list, transferRecord.getImg1path()); Map imgmap=new HashMap();
imgmap.put("ImageID","1");
imgmap.put("Roi",roiarray);
imgmap.put("apiout","1");
imgmap.put("Format",format);
imgmap.put("Data",transferRecord.getImg1path());
imgmap.put("RoiPadding",0);
imgmap.put("CropObjectImage",1);
imgmap.put("CropObjectImagePadding",20);
imgmap.put("CropObjectImageQuality",100);
list.add(imgmap);
// new ImageList("1", roiarray, format,10, 1, 20, 100, transferRecord.getImg1urlfrom())
// getImageList("1", roiarray,format, list, transferRecord.getImg1urlfrom());
param.setImageList(list); param.setImageList(list);
return param; return param;
} }
private static void getImageList(String id, Long[] roiarray, BASE64Encoder base64Encoder, List<ImageList> list, String img1path) { // private static void getImageList(String id, Long[] roiarray, BASE64Encoder base64Encoder, List<ImageList> list, String img1path) {
if (null != img1path && !"".equals(img1path)) { // if (null != img1path && !"".equals(img1path)) {
//
byte[] Img = FTPUtil.getFtpPicBytes(img1path); // byte[] Img = FTPUtil.getFtpPicBytes(img1path);
if (Img != null) { // if (Img != null) {
list.add(new ImageList(id, roiarray, 10, 1, 20, 100, base64Encoder.encode(Img).replaceAll("\r|\n", ""))); // list.add(new ImageList(id, roiarray, 10, 1, 20, 100, base64Encoder.encode(Img).replaceAll("\r|\n", "")));
//
} // }
} // }
} // }
public static String urlTransToFtp(String url, final Ftp ftp, final String basePath) { public static String urlTransToFtp(String url, final Ftp ftp, final String basePath) {
threadService.submit(() -> { threadService.submit(() -> {
......
...@@ -59,7 +59,8 @@ public static ByteArrayOutputStream drawByPoints(InputStream bais,List<Map> det ...@@ -59,7 +59,8 @@ public static ByteArrayOutputStream drawByPoints(InputStream bais,List<Map> det
try { try {
Location lo =(Location) box.get("location"); Location lo =(Location) box.get("location");
logger.info("detectObjects x1,x2,y1,y2==="+lo.toString()); logger.info("detectObjects x1,x2,y1,y2==="+lo.toString());
g.drawRect(lo.getX1(),lo.getY1(),lo.getX2()-lo.getX1(),lo.getY2()-lo.getY1()); g.drawRect(lo.getX1(),
lo.getY1(),lo.getX2()-lo.getX1(),lo.getY2()-lo.getY1());
}catch (Exception ex){ }catch (Exception ex){
logger.error("Location Map error:{}", ex.toString()); logger.error("Location Map error:{}", ex.toString());
} }
......
package com.cx.cn.cxquartz.vo; package com.cx.cn.cxquartz.vo;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import java.util.List; import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
@JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY, getterVisibility=JsonAutoDetect.Visibility.NONE)
public class GoalStructureParam { public class GoalStructureParam {
@JsonProperty("Output") @JsonProperty("Output")
private Output Output; private Map Output;
@JsonProperty("Model") @JsonProperty("Model")
private int Model; private int Model;
...@@ -19,16 +21,9 @@ public class GoalStructureParam { ...@@ -19,16 +21,9 @@ public class GoalStructureParam {
private String apiout; private String apiout;
@JsonProperty("ImageList") @JsonProperty("ImageList")
private List<ImageList> ImageList; private List<Map> ImageList;
public void setOutput(Output Output) {
this.Output = Output;
}
public Output getOutput() {
return this.Output;
}
public void setModel(int Model) { public void setModel(int Model) {
this.Model = Model; this.Model = Model;
...@@ -47,12 +42,19 @@ public class GoalStructureParam { ...@@ -47,12 +42,19 @@ public class GoalStructureParam {
return this.apiout; return this.apiout;
} }
public void setImageList(List<ImageList> ImageList) { public Map getOutput() {
this.ImageList = ImageList; return Output;
} }
public void setOutput(Map output) {
Output = output;
}
public List<Map> getImageList() {
return ImageList;
}
public List<ImageList> getImageList() { public void setImageList(List<Map> imageList) {
return this.ImageList; ImageList = imageList;
} }
} }
\ No newline at end of file
package com.cx.cn.cxquartz.vo; package com.cx.cn.cxquartz.vo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
public class ImageList { public class ImageList {
...@@ -10,12 +9,12 @@ public class ImageList { ...@@ -10,12 +9,12 @@ public class ImageList {
@JsonProperty("Roi") @JsonProperty("Roi")
private Long[] Roi; private Long[] Roi;
@JsonIgnore @JsonProperty("Format")
private int Format; private int Format;
@JsonProperty("Data") @JsonProperty("Data")
private String Data; private String Data;
// private Integer RoiPadding; private Integer RoiPadding;
private Integer CropObjectImage; private Integer CropObjectImage;
private Integer CropObjectImagePadding; private Integer CropObjectImagePadding;
private Integer CropObjectImageQuality; private Integer CropObjectImageQuality;
...@@ -29,13 +28,13 @@ public class ImageList { ...@@ -29,13 +28,13 @@ public class ImageList {
Roi = roi; Roi = roi;
} }
// public Integer getRoiPadding() { public Integer getRoiPadding() {
// return RoiPadding; return RoiPadding;
// } }
//
// public void setRoiPadding(Integer roiPadding) { public void setRoiPadding(Integer roiPadding) {
// RoiPadding = roiPadding; RoiPadding = roiPadding;
// } }
public Integer getCropObjectImage() { public Integer getCropObjectImage() {
return CropObjectImage; return CropObjectImage;
...@@ -70,13 +69,24 @@ public class ImageList { ...@@ -70,13 +69,24 @@ public class ImageList {
public ImageList(String imageID, Long[] roi, Integer roiPadding, Integer cropObjectImage, Integer cropObjectImagePadding, Integer cropObjectImageQuality, String data) { public ImageList(String imageID, Long[] roi, Integer roiPadding, Integer cropObjectImage, Integer cropObjectImagePadding, Integer cropObjectImageQuality, String data) {
ImageID = imageID; ImageID = imageID;
Roi = roi; Roi = roi;
// RoiPadding = roiPadding; RoiPadding = roiPadding;
CropObjectImage = cropObjectImage; CropObjectImage = cropObjectImage;
CropObjectImagePadding = cropObjectImagePadding; CropObjectImagePadding = cropObjectImagePadding;
CropObjectImageQuality = cropObjectImageQuality; CropObjectImageQuality = cropObjectImageQuality;
Data = data; Data = data;
} }
public ImageList(String imageID, Long[] roi, int format, Integer roiPadding, Integer cropObjectImage, Integer cropObjectImagePadding, Integer cropObjectImageQuality,String data) {
ImageID = imageID;
Roi = roi;
Format = format;
Data = data;
RoiPadding = roiPadding;
CropObjectImage = cropObjectImage;
CropObjectImagePadding = cropObjectImagePadding;
CropObjectImageQuality = cropObjectImageQuality;
}
public ImageList() { public ImageList() {
} }
......
package com.cx.cn.cxquartz.vo; package com.cx.cn.cxquartz.vo;
import com.alibaba.fastjson.annotation.JSONField; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.util.List;
/*** /***
* 行人 * 行人
*/ */
public class Pedestrian { public class Pedestrian {
@JsonIgnore
private Long id; private Long id;
private String Type; private String Type;
private ObjectBoundingBox ObjectBoundingBox; private ObjectBoundingBox ObjectBoundingBox;
...@@ -43,7 +39,7 @@ public class Pedestrian { ...@@ -43,7 +39,7 @@ public class Pedestrian {
public void setType(String Type) { public void setType(String Type) {
this.Type = Type; this.Type = Type;
} }
@JSONField(name = "Type") @JsonProperty("Type")
public String getType() { public String getType() {
return Type; return Type;
} }
...@@ -52,7 +48,7 @@ public class Pedestrian { ...@@ -52,7 +48,7 @@ public class Pedestrian {
public void setObjectBoundingBox(ObjectBoundingBox ObjectBoundingBox) { public void setObjectBoundingBox(ObjectBoundingBox ObjectBoundingBox) {
this.ObjectBoundingBox = ObjectBoundingBox; this.ObjectBoundingBox = ObjectBoundingBox;
} }
@JSONField(name = "ObjectBoundingBox") @JsonProperty("ObjectBoundingBox")
public ObjectBoundingBox getObjectBoundingBox() { public ObjectBoundingBox getObjectBoundingBox() {
return ObjectBoundingBox; return ObjectBoundingBox;
} }
...@@ -68,7 +64,7 @@ public class Pedestrian { ...@@ -68,7 +64,7 @@ public class Pedestrian {
public void setGender(String Gender) { public void setGender(String Gender) {
this.Gender = Gender; this.Gender = Gender;
} }
@JSONField(name = "Gender") @JsonProperty("Gender")
public String getGender() { public String getGender() {
return Gender; return Gender;
} }
...@@ -76,7 +72,7 @@ public class Pedestrian { ...@@ -76,7 +72,7 @@ public class Pedestrian {
public void setAge(String Age) { public void setAge(String Age) {
this.Age = Age; this.Age = Age;
} }
@JSONField(name = "Age") @JsonProperty("Age")
public String getAge() { public String getAge() {
return Age; return Age;
} }
...@@ -84,7 +80,7 @@ public class Pedestrian { ...@@ -84,7 +80,7 @@ public class Pedestrian {
public void setAngle(String Angle) { public void setAngle(String Angle) {
this.Angle = Angle; this.Angle = Angle;
} }
@JSONField(name = "Angle") @JsonProperty("Angle")
public String getAngle() { public String getAngle() {
return Angle; return Angle;
} }
...@@ -92,7 +88,7 @@ public class Pedestrian { ...@@ -92,7 +88,7 @@ public class Pedestrian {
public void setHasBackpack(String HasBackpack) { public void setHasBackpack(String HasBackpack) {
this.HasBackpack = HasBackpack; this.HasBackpack = HasBackpack;
} }
@JSONField(name = "HasBackpack") @JsonProperty("HasBackpack")
public String getHasBackpack() { public String getHasBackpack() {
return HasBackpack; return HasBackpack;
} }
...@@ -100,7 +96,7 @@ public class Pedestrian { ...@@ -100,7 +96,7 @@ public class Pedestrian {
public void setHasGlasses(String HasGlasses) { public void setHasGlasses(String HasGlasses) {
this.HasGlasses = HasGlasses; this.HasGlasses = HasGlasses;
} }
@JSONField(name = "HasGlasses") @JsonProperty("HasGlasses")
public String getHasGlasses() { public String getHasGlasses() {
return HasGlasses; return HasGlasses;
} }
...@@ -108,7 +104,7 @@ public class Pedestrian { ...@@ -108,7 +104,7 @@ public class Pedestrian {
public void setHasCarrybag(String HasCarrybag) { public void setHasCarrybag(String HasCarrybag) {
this.HasCarrybag = HasCarrybag; this.HasCarrybag = HasCarrybag;
} }
@JSONField(name = "HasCarrybag") @JsonProperty("HasCarrybag")
public String getHasCarrybag() { public String getHasCarrybag() {
return HasCarrybag; return HasCarrybag;
} }
...@@ -116,7 +112,7 @@ public class Pedestrian { ...@@ -116,7 +112,7 @@ public class Pedestrian {
public void setHasUmbrella(String HasUmbrella) { public void setHasUmbrella(String HasUmbrella) {
this.HasUmbrella = HasUmbrella; this.HasUmbrella = HasUmbrella;
} }
@JSONField(name = "HasUmbrella") @JsonProperty("HasUmbrella")
public String getHasUmbrella() { public String getHasUmbrella() {
return HasUmbrella; return HasUmbrella;
} }
...@@ -124,7 +120,7 @@ public class Pedestrian { ...@@ -124,7 +120,7 @@ public class Pedestrian {
public void setCoatLength(String CoatLength) { public void setCoatLength(String CoatLength) {
this.CoatLength = CoatLength; this.CoatLength = CoatLength;
} }
@JSONField(name = "CoatLength") @JsonProperty("CoatLength")
public String getCoatLength() { public String getCoatLength() {
return CoatLength; return CoatLength;
} }
...@@ -132,7 +128,7 @@ public class Pedestrian { ...@@ -132,7 +128,7 @@ public class Pedestrian {
public void setCoatColorNums(String CoatColorNums) { public void setCoatColorNums(String CoatColorNums) {
this.CoatColorNums = CoatColorNums; this.CoatColorNums = CoatColorNums;
} }
@JSONField(name = "CoatColorNums") @JsonProperty("CoatColorNums")
public String getCoatColorNums() { public String getCoatColorNums() {
return CoatColorNums; return CoatColorNums;
} }
...@@ -142,7 +138,7 @@ public class Pedestrian { ...@@ -142,7 +138,7 @@ public class Pedestrian {
public void setTrousersLength(String TrousersLength) { public void setTrousersLength(String TrousersLength) {
this.TrousersLength = TrousersLength; this.TrousersLength = TrousersLength;
} }
@JSONField(name = "TrousersLength") @JsonProperty( "TrousersLength")
public String getTrousersLength() { public String getTrousersLength() {
return TrousersLength; return TrousersLength;
} }
...@@ -150,7 +146,7 @@ public class Pedestrian { ...@@ -150,7 +146,7 @@ public class Pedestrian {
public void setTrousersColorNums(String TrousersColorNums) { public void setTrousersColorNums(String TrousersColorNums) {
this.TrousersColorNums = TrousersColorNums; this.TrousersColorNums = TrousersColorNums;
} }
@JSONField(name = "TrousersColorNums") @JsonProperty( "TrousersColorNums")
public String getTrousersColorNums() { public String getTrousersColorNums() {
return TrousersColorNums; return TrousersColorNums;
} }
...@@ -160,7 +156,7 @@ public class Pedestrian { ...@@ -160,7 +156,7 @@ public class Pedestrian {
public void setHeadBoundingBox(HeadBoundingBox HeadBoundingBox) { public void setHeadBoundingBox(HeadBoundingBox HeadBoundingBox) {
this.HeadBoundingBox = HeadBoundingBox; this.HeadBoundingBox = HeadBoundingBox;
} }
@JSONField(name = "HeadBoundingBox") @JsonProperty("HeadBoundingBox")
public HeadBoundingBox getHeadBoundingBox() { public HeadBoundingBox getHeadBoundingBox() {
return HeadBoundingBox; return HeadBoundingBox;
} }
...@@ -168,7 +164,7 @@ public class Pedestrian { ...@@ -168,7 +164,7 @@ public class Pedestrian {
public void setUpperBoundingBox(UpperBoundingBox UpperBoundingBox) { public void setUpperBoundingBox(UpperBoundingBox UpperBoundingBox) {
this.UpperBoundingBox = UpperBoundingBox; this.UpperBoundingBox = UpperBoundingBox;
} }
@JSONField(name = "UpperBoundingBox") @JsonProperty("UpperBoundingBox")
public UpperBoundingBox getUpperBoundingBox() { public UpperBoundingBox getUpperBoundingBox() {
return UpperBoundingBox; return UpperBoundingBox;
} }
...@@ -176,7 +172,7 @@ public class Pedestrian { ...@@ -176,7 +172,7 @@ public class Pedestrian {
public void setLowerBoundingBox(LowerBoundingBox LowerBoundingBox) { public void setLowerBoundingBox(LowerBoundingBox LowerBoundingBox) {
this.LowerBoundingBox = LowerBoundingBox; this.LowerBoundingBox = LowerBoundingBox;
} }
@JSONField(name = "LowerBoundingBox") @JsonProperty("LowerBoundingBox")
public LowerBoundingBox getLowerBoundingBox() { public LowerBoundingBox getLowerBoundingBox() {
return LowerBoundingBox; return LowerBoundingBox;
} }
...@@ -184,7 +180,7 @@ public class Pedestrian { ...@@ -184,7 +180,7 @@ public class Pedestrian {
public void setFaceBoundingBox(FaceBoundingBox FaceBoundingBox) { public void setFaceBoundingBox(FaceBoundingBox FaceBoundingBox) {
this.FaceBoundingBox = FaceBoundingBox; this.FaceBoundingBox = FaceBoundingBox;
} }
@JSONField(name = "FaceBoundingBox") @JsonProperty("FaceBoundingBox")
public FaceBoundingBox getFaceBoundingBox() { public FaceBoundingBox getFaceBoundingBox() {
return FaceBoundingBox; return FaceBoundingBox;
} }
...@@ -192,7 +188,7 @@ public class Pedestrian { ...@@ -192,7 +188,7 @@ public class Pedestrian {
public void setHasHat(String HasHat) { public void setHasHat(String HasHat) {
this.HasHat = HasHat; this.HasHat = HasHat;
} }
@JSONField(name = "HasHat") @JsonProperty("HasHat")
public String getHasHat() { public String getHasHat() {
return HasHat; return HasHat;
} }
...@@ -200,7 +196,7 @@ public class Pedestrian { ...@@ -200,7 +196,7 @@ public class Pedestrian {
public void setHasMask(String HasMask) { public void setHasMask(String HasMask) {
this.HasMask = HasMask; this.HasMask = HasMask;
} }
@JSONField(name = "HasMask") @JsonProperty("HasMask")
public String getHasMask() { public String getHasMask() {
return HasMask; return HasMask;
} }
...@@ -208,7 +204,7 @@ public class Pedestrian { ...@@ -208,7 +204,7 @@ public class Pedestrian {
public void setHairStyle(String HairStyle) { public void setHairStyle(String HairStyle) {
this.HairStyle = HairStyle; this.HairStyle = HairStyle;
} }
@JSONField(name = "HairStyle") @JsonProperty( "HairStyle")
public String getHairStyle() { public String getHairStyle() {
return HairStyle; return HairStyle;
} }
...@@ -216,7 +212,7 @@ public class Pedestrian { ...@@ -216,7 +212,7 @@ public class Pedestrian {
public void setCoatTexture(String CoatTexture) { public void setCoatTexture(String CoatTexture) {
this.CoatTexture = CoatTexture; this.CoatTexture = CoatTexture;
} }
@JSONField(name = "CoatTexture") @JsonProperty("CoatTexture")
public String getCoatTexture() { public String getCoatTexture() {
return CoatTexture; return CoatTexture;
} }
...@@ -224,7 +220,7 @@ public class Pedestrian { ...@@ -224,7 +220,7 @@ public class Pedestrian {
public void setTrousersTexture(String TrousersTexture) { public void setTrousersTexture(String TrousersTexture) {
this.TrousersTexture = TrousersTexture; this.TrousersTexture = TrousersTexture;
} }
@JSONField(name = "TrousersTexture") @JsonProperty("TrousersTexture")
public String getTrousersTexture() { public String getTrousersTexture() {
return TrousersTexture; return TrousersTexture;
} }
...@@ -232,7 +228,7 @@ public class Pedestrian { ...@@ -232,7 +228,7 @@ public class Pedestrian {
public void setHasTrolley(String HasTrolley) { public void setHasTrolley(String HasTrolley) {
this.HasTrolley = HasTrolley; this.HasTrolley = HasTrolley;
} }
@JSONField(name = "HasTrolley") @JsonProperty("HasTrolley")
public String getHasTrolley() { public String getHasTrolley() {
return HasTrolley; return HasTrolley;
} }
...@@ -240,7 +236,7 @@ public class Pedestrian { ...@@ -240,7 +236,7 @@ public class Pedestrian {
public void setHasLuggage(String HasLuggage) { public void setHasLuggage(String HasLuggage) {
this.HasLuggage = HasLuggage; this.HasLuggage = HasLuggage;
} }
@JSONField(name = "HasLuggage") @JsonProperty("HasLuggage")
public String getHasLuggage() { public String getHasLuggage() {
return HasLuggage; return HasLuggage;
} }
...@@ -248,7 +244,7 @@ public class Pedestrian { ...@@ -248,7 +244,7 @@ public class Pedestrian {
public void setLuggageColorNums(String LuggageColorNums) { public void setLuggageColorNums(String LuggageColorNums) {
this.LuggageColorNums = LuggageColorNums; this.LuggageColorNums = LuggageColorNums;
} }
@JSONField(name = "LuggageColorNums") @JsonProperty("LuggageColorNums")
public String getLuggageColorNums() { public String getLuggageColorNums() {
return LuggageColorNums; return LuggageColorNums;
} }
...@@ -256,12 +252,12 @@ public class Pedestrian { ...@@ -256,12 +252,12 @@ public class Pedestrian {
public void setHasKnife(int HasKnife) { public void setHasKnife(int HasKnife) {
this.HasKnife = HasKnife; this.HasKnife = HasKnife;
} }
@JSONField(name = "HasKnife") @JsonProperty("HasKnife")
public int getHasKnife() { public int getHasKnife() {
return HasKnife; return HasKnife;
} }
@JSONField(name = "CoatColor") @JsonProperty("CoatColor")
public String getCoatColor() { public String getCoatColor() {
return CoatColor; return CoatColor;
} }
...@@ -270,7 +266,7 @@ public class Pedestrian { ...@@ -270,7 +266,7 @@ public class Pedestrian {
CoatColor = coatColor; CoatColor = coatColor;
} }
@JSONField(name = "TrousersColor") @JsonProperty("TrousersColor")
public String getTrousersColor() { public String getTrousersColor() {
return TrousersColor; return TrousersColor;
} }
...@@ -279,7 +275,7 @@ public class Pedestrian { ...@@ -279,7 +275,7 @@ public class Pedestrian {
TrousersColor = trousersColor; TrousersColor = trousersColor;
} }
@JSONField(name = "LuggageColor") @JsonProperty("LuggageColor")
public String getLuggageColor() { public String getLuggageColor() {
return LuggageColor; return LuggageColor;
} }
......
...@@ -35,11 +35,11 @@ local: ...@@ -35,11 +35,11 @@ local:
file: file:
rtspurl: http://zjh189.ncpoi.cc:7080/getDeviceSnapshot rtspurl: http://zjh189.ncpoi.cc:7080/getDeviceSnapshot
recogurl: http://zjh189.ncpoi.cc:7080/getDeviceSnapshotAndRecognize recogurl: http://zjh189.ncpoi.cc:9098/images/recog
uploadurl: http://home2.ncpoi.cc:7080/uploadResultFile uploadurl: http://home2.ncpoi.cc:7080/uploadResultFile
countryside: countryside:
callbackurl: http://kvideo.51iwifi.com/hesc-mq/hesc/mq/receive callbackurl: http://kvideo.51iwifi.com/hesc-mq/hesc
logging: logging:
level: level:
......
...@@ -27,7 +27,9 @@ local: ...@@ -27,7 +27,9 @@ local:
countryside: countryside:
callbackurl: http://kvideo.51iwifi.com callbackurl: http://kvideo.51iwifi.com
file: file:
rootpath: /home/ubuntu/pictures # rootpath: /home/ubuntu/pictures
recogurl: http://172.16.24.29:9098/images/recog
rtspurl: http://172.16.24.29:7180/getDeviceSnapshot
logging: logging:
level: level:
com.cx.cn.cxquartz.dao: com.cx.cn.cxquartz.dao:
......
spring: spring:
profiles: profiles:
active: local active: dev85
mybatis: mybatis:
type-aliases-package: com.cx.cn.cxquartz.bean type-aliases-package: com.cx.cn.cxquartz.bean
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false"> <configuration debug="false" scan="false">
<springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/> <springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/>
<property name="log.path" value="/home/ubuntu/tar/zjdxtest/logs/${spring.application.name}"/> <!--<property name="log.path" value="/home/ubuntu/tar/zjdxtest/logs/${spring.application.name}"/>-->
<!--<property name="log.path" value="/home/prod/deploy/HZDXService/logs/${spring.application.name}"/>--> <property name="log.path" value="/home/prod/deploy/HZDXService/logs/${spring.application.name}"/>
<!-- 彩色日志格式 --> <!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" <property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
select * from select * from
quartz_task_informations b quartz_task_informations b
WHERE WHERE
(taskNo = #{rtsp}) (taskNo =#{rtsp})
and frozenstatus='UNFROZEN' and frozenstatus='UNFROZEN'
</select> </select>
......
...@@ -13,86 +13,10 @@ ...@@ -13,86 +13,10 @@
<insert id="inserTraffAlarmRecord" parameterType="com.cx.cn.cxquartz.vo.TraffAlarmRecord" useGeneratedKeys="true" keyProperty="recordid" keyColumn="recordid"> <insert id="inserTraffAlarmRecord" parameterType="com.cx.cn.cxquartz.vo.TraffAlarmRecord" useGeneratedKeys="true" keyProperty="recordid" keyColumn="recordid">
insert into traffalarmrecord insert into traffalarmrecord(areaid,fdid,recordtype,channelid,recordtime,img1urlfrom,img1path,processstatus)
<trim prefix="(" suffix=")" suffixOverrides=","> select #{areaid}, #{fdid},recordtype,#{ channelid},#{ recordtime},#{img1urlfrom},#{img1path},#{processstatus} from quartz_task_informations
<if test="algotype != null">algotype,</if> where executeparamter=#{fdid} and frozenStatus='UNFROZEN' and taskno like 'fx_%'
<if test="areaid != null">areaid,</if> </insert>
<if test="fdid != null">fdid,</if>
<if test="channelid != null">channelid,</if>
<if test="channeletype != null">channeletype,</if>
<if test="channelname != null">channelname ,</if>
<if test="recordtime != null">recordtime,</if>
<if test="recordtype != null">recordtype,</if>
<if test="location != null">location,</if>
<if test="img1urlfrom != null">img1urlfrom,</if>
<if test="img1path != null">img1path,</if>
<if test="img2urlfrom != null">img2urlfrom,</if>
<if test="img2path != null">img2path,</if>
<if test="img3urlfrom != null">img3urlfrom,</if>
<if test="img3path != null">img3path,</if>
<if test="img4urlfrom != null">img4urlfrom,</if>
<if test="img4path != null">img4path,</if>
<if test="img5urlfrom != null">img5urlfrom,</if>
<if test="img5path != null">img5path,</if>
<if test="videourlfrom != null">videourlfrom,</if>
<if test="videopath != null">videopath,</if>
<if test="retrytime != null">retrytime,</if>
<if test="retrycount != null">retrycount,</if>
<if test="recordlevel != null">recordlevel,</if>
<if test="checkstatus != null">checkstatus,</if>
<if test="creator != null">creator,</if>
<if test="createtime != null">createtime,</if>
<if test="updator != null">updator,</if>
<if test="updatetime != null">updatetime,</if>
<if test="remark != null">remark,</if>
<if test="pushstatus != null">pushstatus,</if>
<if test="pushdesc != null">pushdesc,</if>
<if test="processstatus != null">processstatus,</if>
<if test="objlable != null">objlable,</if>
<if test="rectificationtype != null">rectificationtype ,</if>
<if test="manualstatus != null">manualstatus ,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="algotype != null">#{algotype},</if>
<if test="areaid != null">#{areaid},</if>
<if test="fdid != null">#{fdid},</if>
<if test="channelid != null">#{ channelid},</if>
<if test="channeletype != null">#{channeletype},</if>
<if test="channelname != null">#{ channelname },</if>
<if test="recordtime != null">#{ recordtime},</if>
<if test="recordtype != null">#{ recordtype},</if>
<if test="location != null">#{ location},</if>
<if test="img1urlfrom != null">#{img1urlfrom},</if>
<if test="img1path != null">#{ img1path},</if>
<if test="img2urlfrom != null">#{img2urlfrom},</if>
<if test="img2path != null">#{ img2path},</if>
<if test="img3urlfrom != null">#{img3urlfrom},</if>
<if test="img3path != null">#{ img3path},</if>
<if test="img4urlfrom != null">#{img4urlfrom},</if>
<if test="img4path != null">#{ img4path},</if>
<if test="img5urlfrom != null">#{img5urlfrom},</if>
<if test="img5path != null">#{img5path},</if>
<if test="videourlfrom != null">#{videourlfrom},</if>
<if test="videopath != null">#{videopath},</if>
<if test="retrytime != null">#{retrytime},</if>
<if test="retrycount != null">#{retrycount},</if>
<if test="recordlevel != null">#{recordlevel,jdbcType=INTEGER},</if>
<if test="checkstatus != null">#{checkstatus,jdbcType=INTEGER},</if>
<if test="creator != null">#{creator},</if>
<if test="createtime != null">str_to_date(#{createtime},'%Y-%m-%d %H:%i:%s'),</if>
<if test="updator != null">#{updator},</if>
<if test="updatetime != null">#{updatetime},</if>
<if test="remark != null">#{remark},</if>
<if test="pushstatus != null">#{pushstatus},</if>
<if test="pushdesc != null">#{pushdesc},</if>
<if test="processstatus != null">#{processstatus},</if>
<if test="objlable != null">#{objlable},</if>
<if test="rectificationtype != null">#{rectificationtype},</if>
<if test="manualstatus != null">#{manualstatus,jdbcType=INTEGER},</if>
</trim>
</insert>
<update id="updateTraffAlarmRecordUrl" parameterType="com.cx.cn.cxquartz.vo.TraffAlarmRecord"> <update id="updateTraffAlarmRecordUrl" parameterType="com.cx.cn.cxquartz.vo.TraffAlarmRecord">
UPDATE traffalarmrecord UPDATE traffalarmrecord
set updatetime= now() set updatetime= now()
...@@ -150,7 +74,7 @@ ...@@ -150,7 +74,7 @@
</update> </update>
<select id="getTraffAlarmRecordByProgress" parameterType="java.util.HashMap" resultType="com.cx.cn.cxquartz.vo.TraffAlarmRecord"> <select id="getTraffAlarmRecordByProgress" parameterType="java.util.HashMap" resultType="com.cx.cn.cxquartz.vo.TraffAlarmRecord">
select * from traffalarmrecord where fdid=#{sbbh} and processstatus='-2' select * from traffalarmrecord where fdid=#{sbbh} and recordtype=#{recordtype} and processstatus='-2'
</select> </select>
<update id="updateTraffAlarmRecordProcess" parameterType="com.cx.cn.cxquartz.vo.TraffAlarmRecord"> <update id="updateTraffAlarmRecordProcess" parameterType="com.cx.cn.cxquartz.vo.TraffAlarmRecord">
......
package com.quartz.cn.com.cx.cn.cxquartz; package com.quartz.cn.com.cx.cn.cxquartz;
import com.alibaba.fastjson.JSONObject;
import com.cx.cn.cxquartz.service.quartz.impl.SbtdspsrImpl; import com.cx.cn.cxquartz.service.quartz.impl.SbtdspsrImpl;
import com.cx.cn.cxquartz.vo.Sbtdspsr; import com.cx.cn.cxquartz.vo.Sbtdspsr;
import org.junit.Test; import org.junit.Test;
...@@ -11,27 +10,27 @@ import org.springframework.test.context.junit4.SpringRunner; ...@@ -11,27 +10,27 @@ import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest @SpringBootTest
public class CXQuartzApplicationTests { public class CXQuartzApplicationTests {
//
@Test // @Test
public void contextLoads() { // public void contextLoads() {
String body = "{\"errorCode\":\"0\",\"errorMsg\":\"success\",\"data\":{\"rtspUri\":\"rtsp://60.188.134.18:30030/streamDelivery_JX04_136/1_0_52268/3d10d70b9e7012bd2f85f35fa3d5f8d3\",\"rtpUri\":\"rtp://60.188.134.18:11348/304\",\"rtmpUri\":\"rtmp://60.188.134.18:30031/streamDelivery_JX04_136/1_0_52268/3d10d70b9e7012bd2f85f35fa3d5f8d3\",\"hlsUri\":\"http://60.188.134.18:30120/streamDelivery_JX04_136/1_0_52268/3d10d70b9e7012bd2f85f35fa3d5f8d3.m3u8\",\"received\":true}}"; // String body = "{\"errorCode\":\"0\",\"errorMsg\":\"success\",\"data\":{\"rtspUri\":\"rtsp://60.188.134.18:30030/streamDelivery_JX04_136/1_0_52268/3d10d70b9e7012bd2f85f35fa3d5f8d3\",\"rtpUri\":\"rtp://60.188.134.18:11348/304\",\"rtmpUri\":\"rtmp://60.188.134.18:30031/streamDelivery_JX04_136/1_0_52268/3d10d70b9e7012bd2f85f35fa3d5f8d3\",\"hlsUri\":\"http://60.188.134.18:30120/streamDelivery_JX04_136/1_0_52268/3d10d70b9e7012bd2f85f35fa3d5f8d3.m3u8\",\"received\":true}}";
JSONObject json = JSONObject.parseObject(body); // JSONObject json = JSONObject.parseObject(body);
if (null != json.getString("errorCode") && json.getString("errorCode").equals("0")) { // if (null != json.getString("errorCode") && json.getString("errorCode").equals("0")) {
json = JSONObject.parseObject(json.getString("data")); // json = JSONObject.parseObject(json.getString("data"));
//返回rtsp 地址 // //返回rtsp 地址
if (null != json.get("rtspUri") && !"".equals(json.get("rtspUri"))) { // if (null != json.get("rtspUri") && !"".equals(json.get("rtspUri"))) {
String rtspnewvalue = String.valueOf(json.get("rtspUri")); // String rtspnewvalue = String.valueOf(json.get("rtspUri"));
if (rtspnewvalue.contains("rtsp")) { // if (rtspnewvalue.contains("rtsp")) {
//更新sbtdspsr 地址 // //更新sbtdspsr 地址
//int result = sbtdspsrService.updateRecogByRtsp(rtspnewvalue, devicecode); // //int result = sbtdspsrService.updateRecogByRtsp(rtspnewvalue, devicecode);
//
} // }
//
} // }
} // }
} // }
@Test @Test
public void testfilepath(){ public void testfilepath(){
String ftpfilepath="ftp://jiuling:9ling.cn@172.16.24.29:21/gstraff/picturedemo/20210625.jpg"; String ftpfilepath="ftp://jiuling:9ling.cn@172.16.24.29:21/gstraff/picturedemo/20210625.jpg";
......
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