diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index 4f1136b..d560517 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -2,6 +2,7 @@ import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.HsRequest; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; @@ -34,9 +35,9 @@ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") @PostMapping("/control") @ResponseBody - public ResponseDataDTO control(String command,Long detectorId) { + public ResponseDataDTO control(String command, Long detectorId) { //toDo:需要加返回值 - neutronOptService.control(command,detectorId); + neutronOptService.control(command, detectorId); return ResponseDataDTO.success(); } @@ -57,5 +58,18 @@ return ResponseDataDTO.success(iPsdService.dataList(taskId)); } + @ApiOperation("主界面HS显示,需传探测器detectorId,type值为1:启动,0:停止") + @PostMapping("/hsList") + @ResponseBody + public ResponseDataDTO hsList(HsRequest request) { + + return ResponseDataDTO.success(neutronOptService.hsList(request.getDetectorId(), + request.getType(), + request.getX1(), + request.getX2(), + request.getX3(), + request.getX4())); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index 4f1136b..d560517 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -2,6 +2,7 @@ import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.HsRequest; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; @@ -34,9 +35,9 @@ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") @PostMapping("/control") @ResponseBody - public ResponseDataDTO control(String command,Long detectorId) { + public ResponseDataDTO control(String command, Long detectorId) { //toDo:需要加返回值 - neutronOptService.control(command,detectorId); + neutronOptService.control(command, detectorId); return ResponseDataDTO.success(); } @@ -57,5 +58,18 @@ return ResponseDataDTO.success(iPsdService.dataList(taskId)); } + @ApiOperation("主界面HS显示,需传探测器detectorId,type值为1:启动,0:停止") + @PostMapping("/hsList") + @ResponseBody + public ResponseDataDTO hsList(HsRequest request) { + + return ResponseDataDTO.success(neutronOptService.hsList(request.getDetectorId(), + request.getType(), + request.getX1(), + request.getX2(), + request.getX3(), + request.getX4())); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml index 5ac549c..236aa30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml @@ -31,7 +31,7 @@ FROM detector_info di WHERE di.robot_id = #{robotId}) AND dp.CREATE_TIME >= #{startTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 ORDER BY dp.CREATE_TIME ASC LIMIT 13 @@ -50,7 +50,7 @@ and dp.CREATE_TIME #{endTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 GROUP BY dp.CREATE_TIME ORDER BY dp.CREATE_TIME ASC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index 4f1136b..d560517 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -2,6 +2,7 @@ import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.HsRequest; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; @@ -34,9 +35,9 @@ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") @PostMapping("/control") @ResponseBody - public ResponseDataDTO control(String command,Long detectorId) { + public ResponseDataDTO control(String command, Long detectorId) { //toDo:需要加返回值 - neutronOptService.control(command,detectorId); + neutronOptService.control(command, detectorId); return ResponseDataDTO.success(); } @@ -57,5 +58,18 @@ return ResponseDataDTO.success(iPsdService.dataList(taskId)); } + @ApiOperation("主界面HS显示,需传探测器detectorId,type值为1:启动,0:停止") + @PostMapping("/hsList") + @ResponseBody + public ResponseDataDTO hsList(HsRequest request) { + + return ResponseDataDTO.success(neutronOptService.hsList(request.getDetectorId(), + request.getType(), + request.getX1(), + request.getX2(), + request.getX3(), + request.getX4())); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml index 5ac549c..236aa30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml @@ -31,7 +31,7 @@ FROM detector_info di WHERE di.robot_id = #{robotId}) AND dp.CREATE_TIME >= #{startTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 ORDER BY dp.CREATE_TIME ASC LIMIT 13 @@ -50,7 +50,7 @@ and dp.CREATE_TIME #{endTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 GROUP BY dp.CREATE_TIME ORDER BY dp.CREATE_TIME ASC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java new file mode 100644 index 0000000..4b42612 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * psd报警DTO + */ +@Data +public class HsDTO { + + @ApiModelProperty(value = "psd横坐标值(道数)") + private Integer psdX; + @ApiModelProperty(value = "psd纵坐标值") + private Integer psdY; + @ApiModelProperty(value = "psd1横坐标值(道数)") + private Integer psdX1; + @ApiModelProperty(value = "psd1纵坐标值") + private Integer psdY1; + @ApiModelProperty(value = "mca横坐标值(道数)") + private Integer mcaX; + @ApiModelProperty(value = "mca纵坐标值") + private Integer mcaY; + @ApiModelProperty(value = "mca1横坐标值(道数)") + private Integer mcaX1; + @ApiModelProperty(value = "mca1纵坐标值") + private Integer mcaY1; +// @ApiModelProperty(value = "时间值") +// private String timeCount; + + public HsDTO() { + } + + public HsDTO(int psdX, int psdY, int mcaX, int mcaY) { + this.psdX = psdX; + this.psdY = psdY; + this.mcaX = mcaX; + this.mcaY = mcaY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index 4f1136b..d560517 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -2,6 +2,7 @@ import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.HsRequest; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; @@ -34,9 +35,9 @@ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") @PostMapping("/control") @ResponseBody - public ResponseDataDTO control(String command,Long detectorId) { + public ResponseDataDTO control(String command, Long detectorId) { //toDo:需要加返回值 - neutronOptService.control(command,detectorId); + neutronOptService.control(command, detectorId); return ResponseDataDTO.success(); } @@ -57,5 +58,18 @@ return ResponseDataDTO.success(iPsdService.dataList(taskId)); } + @ApiOperation("主界面HS显示,需传探测器detectorId,type值为1:启动,0:停止") + @PostMapping("/hsList") + @ResponseBody + public ResponseDataDTO hsList(HsRequest request) { + + return ResponseDataDTO.success(neutronOptService.hsList(request.getDetectorId(), + request.getType(), + request.getX1(), + request.getX2(), + request.getX3(), + request.getX4())); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml index 5ac549c..236aa30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml @@ -31,7 +31,7 @@ FROM detector_info di WHERE di.robot_id = #{robotId}) AND dp.CREATE_TIME >= #{startTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 ORDER BY dp.CREATE_TIME ASC LIMIT 13 @@ -50,7 +50,7 @@ and dp.CREATE_TIME #{endTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 GROUP BY dp.CREATE_TIME ORDER BY dp.CREATE_TIME ASC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java new file mode 100644 index 0000000..4b42612 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * psd报警DTO + */ +@Data +public class HsDTO { + + @ApiModelProperty(value = "psd横坐标值(道数)") + private Integer psdX; + @ApiModelProperty(value = "psd纵坐标值") + private Integer psdY; + @ApiModelProperty(value = "psd1横坐标值(道数)") + private Integer psdX1; + @ApiModelProperty(value = "psd1纵坐标值") + private Integer psdY1; + @ApiModelProperty(value = "mca横坐标值(道数)") + private Integer mcaX; + @ApiModelProperty(value = "mca纵坐标值") + private Integer mcaY; + @ApiModelProperty(value = "mca1横坐标值(道数)") + private Integer mcaX1; + @ApiModelProperty(value = "mca1纵坐标值") + private Integer mcaY1; +// @ApiModelProperty(value = "时间值") +// private String timeCount; + + public HsDTO() { + } + + public HsDTO(int psdX, int psdY, int mcaX, int mcaY) { + this.psdX = psdX; + this.psdY = psdY; + this.mcaX = mcaX; + this.mcaY = mcaY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java new file mode 100644 index 0000000..2f83779 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Hs请求参数Request + */ +@Data +public class HsRequest { + + @ApiModelProperty(value = "探测器Id") + Long detectorId; + @ApiModelProperty(value = "type值为1:启动,0:停止") + String type; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标开始值") + int x1; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标截止值") + int x2; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标开始值") + int x3; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标截止值") + int x4; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index 4f1136b..d560517 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -2,6 +2,7 @@ import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.HsRequest; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; @@ -34,9 +35,9 @@ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") @PostMapping("/control") @ResponseBody - public ResponseDataDTO control(String command,Long detectorId) { + public ResponseDataDTO control(String command, Long detectorId) { //toDo:需要加返回值 - neutronOptService.control(command,detectorId); + neutronOptService.control(command, detectorId); return ResponseDataDTO.success(); } @@ -57,5 +58,18 @@ return ResponseDataDTO.success(iPsdService.dataList(taskId)); } + @ApiOperation("主界面HS显示,需传探测器detectorId,type值为1:启动,0:停止") + @PostMapping("/hsList") + @ResponseBody + public ResponseDataDTO hsList(HsRequest request) { + + return ResponseDataDTO.success(neutronOptService.hsList(request.getDetectorId(), + request.getType(), + request.getX1(), + request.getX2(), + request.getX3(), + request.getX4())); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml index 5ac549c..236aa30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml @@ -31,7 +31,7 @@ FROM detector_info di WHERE di.robot_id = #{robotId}) AND dp.CREATE_TIME >= #{startTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 ORDER BY dp.CREATE_TIME ASC LIMIT 13 @@ -50,7 +50,7 @@ and dp.CREATE_TIME #{endTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 GROUP BY dp.CREATE_TIME ORDER BY dp.CREATE_TIME ASC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java new file mode 100644 index 0000000..4b42612 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * psd报警DTO + */ +@Data +public class HsDTO { + + @ApiModelProperty(value = "psd横坐标值(道数)") + private Integer psdX; + @ApiModelProperty(value = "psd纵坐标值") + private Integer psdY; + @ApiModelProperty(value = "psd1横坐标值(道数)") + private Integer psdX1; + @ApiModelProperty(value = "psd1纵坐标值") + private Integer psdY1; + @ApiModelProperty(value = "mca横坐标值(道数)") + private Integer mcaX; + @ApiModelProperty(value = "mca纵坐标值") + private Integer mcaY; + @ApiModelProperty(value = "mca1横坐标值(道数)") + private Integer mcaX1; + @ApiModelProperty(value = "mca1纵坐标值") + private Integer mcaY1; +// @ApiModelProperty(value = "时间值") +// private String timeCount; + + public HsDTO() { + } + + public HsDTO(int psdX, int psdY, int mcaX, int mcaY) { + this.psdX = psdX; + this.psdY = psdY; + this.mcaX = mcaX; + this.mcaY = mcaY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java new file mode 100644 index 0000000..2f83779 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Hs请求参数Request + */ +@Data +public class HsRequest { + + @ApiModelProperty(value = "探测器Id") + Long detectorId; + @ApiModelProperty(value = "type值为1:启动,0:停止") + String type; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标开始值") + int x1; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标截止值") + int x2; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标开始值") + int x3; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标截止值") + int x4; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java index e54ac10..540ba70 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java @@ -44,6 +44,10 @@ private String qshort; @TableField("PSD") private String psd; + @TableField("PSDX") + private String psdx; + @TableField("MCAX") + private String mcax; @TableField("IP_PORT") private String ipPort; /** @@ -61,8 +65,9 @@ public Psd() { } - public Psd(Long detectorId, String gateOffet, String baseLine, String shortGate, String longGate, String qlong, String qshort, String createTime) { - this.detectorId = detectorId; + public Psd(String gateOffet, String baseLine, String shortGate, + String longGate, String qlong, String qshort, + String createTime) { this.gateOffet = gateOffet; this.baseLine = baseLine; this.shortGate = shortGate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index 4f1136b..d560517 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -2,6 +2,7 @@ import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.HsRequest; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; @@ -34,9 +35,9 @@ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") @PostMapping("/control") @ResponseBody - public ResponseDataDTO control(String command,Long detectorId) { + public ResponseDataDTO control(String command, Long detectorId) { //toDo:需要加返回值 - neutronOptService.control(command,detectorId); + neutronOptService.control(command, detectorId); return ResponseDataDTO.success(); } @@ -57,5 +58,18 @@ return ResponseDataDTO.success(iPsdService.dataList(taskId)); } + @ApiOperation("主界面HS显示,需传探测器detectorId,type值为1:启动,0:停止") + @PostMapping("/hsList") + @ResponseBody + public ResponseDataDTO hsList(HsRequest request) { + + return ResponseDataDTO.success(neutronOptService.hsList(request.getDetectorId(), + request.getType(), + request.getX1(), + request.getX2(), + request.getX3(), + request.getX4())); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml index 5ac549c..236aa30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml @@ -31,7 +31,7 @@ FROM detector_info di WHERE di.robot_id = #{robotId}) AND dp.CREATE_TIME >= #{startTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 ORDER BY dp.CREATE_TIME ASC LIMIT 13 @@ -50,7 +50,7 @@ and dp.CREATE_TIME #{endTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 GROUP BY dp.CREATE_TIME ORDER BY dp.CREATE_TIME ASC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java new file mode 100644 index 0000000..4b42612 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * psd报警DTO + */ +@Data +public class HsDTO { + + @ApiModelProperty(value = "psd横坐标值(道数)") + private Integer psdX; + @ApiModelProperty(value = "psd纵坐标值") + private Integer psdY; + @ApiModelProperty(value = "psd1横坐标值(道数)") + private Integer psdX1; + @ApiModelProperty(value = "psd1纵坐标值") + private Integer psdY1; + @ApiModelProperty(value = "mca横坐标值(道数)") + private Integer mcaX; + @ApiModelProperty(value = "mca纵坐标值") + private Integer mcaY; + @ApiModelProperty(value = "mca1横坐标值(道数)") + private Integer mcaX1; + @ApiModelProperty(value = "mca1纵坐标值") + private Integer mcaY1; +// @ApiModelProperty(value = "时间值") +// private String timeCount; + + public HsDTO() { + } + + public HsDTO(int psdX, int psdY, int mcaX, int mcaY) { + this.psdX = psdX; + this.psdY = psdY; + this.mcaX = mcaX; + this.mcaY = mcaY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java new file mode 100644 index 0000000..2f83779 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Hs请求参数Request + */ +@Data +public class HsRequest { + + @ApiModelProperty(value = "探测器Id") + Long detectorId; + @ApiModelProperty(value = "type值为1:启动,0:停止") + String type; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标开始值") + int x1; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标截止值") + int x2; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标开始值") + int x3; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标截止值") + int x4; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java index e54ac10..540ba70 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java @@ -44,6 +44,10 @@ private String qshort; @TableField("PSD") private String psd; + @TableField("PSDX") + private String psdx; + @TableField("MCAX") + private String mcax; @TableField("IP_PORT") private String ipPort; /** @@ -61,8 +65,9 @@ public Psd() { } - public Psd(Long detectorId, String gateOffet, String baseLine, String shortGate, String longGate, String qlong, String qshort, String createTime) { - this.detectorId = detectorId; + public Psd(String gateOffet, String baseLine, String shortGate, + String longGate, String qlong, String qshort, + String createTime) { this.gateOffet = gateOffet; this.baseLine = baseLine; this.shortGate = shortGate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java index ef4fc59..a65e5b0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java @@ -61,8 +61,7 @@ public Vol() { } - public Vol(Long detectorId, String volData6, String createTime) { - this.detectorId = detectorId; + public Vol( String volData6, String createTime) { this.volData6 = volData6; this.createTime = createTime; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index 4f1136b..d560517 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -2,6 +2,7 @@ import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.HsRequest; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; @@ -34,9 +35,9 @@ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") @PostMapping("/control") @ResponseBody - public ResponseDataDTO control(String command,Long detectorId) { + public ResponseDataDTO control(String command, Long detectorId) { //toDo:需要加返回值 - neutronOptService.control(command,detectorId); + neutronOptService.control(command, detectorId); return ResponseDataDTO.success(); } @@ -57,5 +58,18 @@ return ResponseDataDTO.success(iPsdService.dataList(taskId)); } + @ApiOperation("主界面HS显示,需传探测器detectorId,type值为1:启动,0:停止") + @PostMapping("/hsList") + @ResponseBody + public ResponseDataDTO hsList(HsRequest request) { + + return ResponseDataDTO.success(neutronOptService.hsList(request.getDetectorId(), + request.getType(), + request.getX1(), + request.getX2(), + request.getX3(), + request.getX4())); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml index 5ac549c..236aa30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml @@ -31,7 +31,7 @@ FROM detector_info di WHERE di.robot_id = #{robotId}) AND dp.CREATE_TIME >= #{startTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 ORDER BY dp.CREATE_TIME ASC LIMIT 13 @@ -50,7 +50,7 @@ and dp.CREATE_TIME #{endTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 GROUP BY dp.CREATE_TIME ORDER BY dp.CREATE_TIME ASC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java new file mode 100644 index 0000000..4b42612 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * psd报警DTO + */ +@Data +public class HsDTO { + + @ApiModelProperty(value = "psd横坐标值(道数)") + private Integer psdX; + @ApiModelProperty(value = "psd纵坐标值") + private Integer psdY; + @ApiModelProperty(value = "psd1横坐标值(道数)") + private Integer psdX1; + @ApiModelProperty(value = "psd1纵坐标值") + private Integer psdY1; + @ApiModelProperty(value = "mca横坐标值(道数)") + private Integer mcaX; + @ApiModelProperty(value = "mca纵坐标值") + private Integer mcaY; + @ApiModelProperty(value = "mca1横坐标值(道数)") + private Integer mcaX1; + @ApiModelProperty(value = "mca1纵坐标值") + private Integer mcaY1; +// @ApiModelProperty(value = "时间值") +// private String timeCount; + + public HsDTO() { + } + + public HsDTO(int psdX, int psdY, int mcaX, int mcaY) { + this.psdX = psdX; + this.psdY = psdY; + this.mcaX = mcaX; + this.mcaY = mcaY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java new file mode 100644 index 0000000..2f83779 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Hs请求参数Request + */ +@Data +public class HsRequest { + + @ApiModelProperty(value = "探测器Id") + Long detectorId; + @ApiModelProperty(value = "type值为1:启动,0:停止") + String type; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标开始值") + int x1; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标截止值") + int x2; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标开始值") + int x3; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标截止值") + int x4; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java index e54ac10..540ba70 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java @@ -44,6 +44,10 @@ private String qshort; @TableField("PSD") private String psd; + @TableField("PSDX") + private String psdx; + @TableField("MCAX") + private String mcax; @TableField("IP_PORT") private String ipPort; /** @@ -61,8 +65,9 @@ public Psd() { } - public Psd(Long detectorId, String gateOffet, String baseLine, String shortGate, String longGate, String qlong, String qshort, String createTime) { - this.detectorId = detectorId; + public Psd(String gateOffet, String baseLine, String shortGate, + String longGate, String qlong, String qshort, + String createTime) { this.gateOffet = gateOffet; this.baseLine = baseLine; this.shortGate = shortGate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java index ef4fc59..a65e5b0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java @@ -61,8 +61,7 @@ public Vol() { } - public Vol(Long detectorId, String volData6, String createTime) { - this.detectorId = detectorId; + public Vol( String volData6, String createTime) { this.volData6 = volData6; this.createTime = createTime; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java index 34d7056..277ccc2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.neutron.service; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import java.util.List; @@ -25,7 +26,7 @@ * No.3 解析 * 设备会在tcp上 上报数据,读取后进行解析 */ - void analysis(String deviceIpPort,String msg); + void analysis(String deviceIpPort,String msg,Long uid); /** * No.4 退高压,停止工作 @@ -41,4 +42,6 @@ List alarmList(Long taskId); + boolean hsList(Long detectorId, String type,int x1, int x2, int x3, int x4); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index 4f1136b..d560517 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -2,6 +2,7 @@ import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.HsRequest; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; @@ -34,9 +35,9 @@ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") @PostMapping("/control") @ResponseBody - public ResponseDataDTO control(String command,Long detectorId) { + public ResponseDataDTO control(String command, Long detectorId) { //toDo:需要加返回值 - neutronOptService.control(command,detectorId); + neutronOptService.control(command, detectorId); return ResponseDataDTO.success(); } @@ -57,5 +58,18 @@ return ResponseDataDTO.success(iPsdService.dataList(taskId)); } + @ApiOperation("主界面HS显示,需传探测器detectorId,type值为1:启动,0:停止") + @PostMapping("/hsList") + @ResponseBody + public ResponseDataDTO hsList(HsRequest request) { + + return ResponseDataDTO.success(neutronOptService.hsList(request.getDetectorId(), + request.getType(), + request.getX1(), + request.getX2(), + request.getX3(), + request.getX4())); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml index 5ac549c..236aa30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml @@ -31,7 +31,7 @@ FROM detector_info di WHERE di.robot_id = #{robotId}) AND dp.CREATE_TIME >= #{startTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 ORDER BY dp.CREATE_TIME ASC LIMIT 13 @@ -50,7 +50,7 @@ and dp.CREATE_TIME #{endTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 GROUP BY dp.CREATE_TIME ORDER BY dp.CREATE_TIME ASC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java new file mode 100644 index 0000000..4b42612 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * psd报警DTO + */ +@Data +public class HsDTO { + + @ApiModelProperty(value = "psd横坐标值(道数)") + private Integer psdX; + @ApiModelProperty(value = "psd纵坐标值") + private Integer psdY; + @ApiModelProperty(value = "psd1横坐标值(道数)") + private Integer psdX1; + @ApiModelProperty(value = "psd1纵坐标值") + private Integer psdY1; + @ApiModelProperty(value = "mca横坐标值(道数)") + private Integer mcaX; + @ApiModelProperty(value = "mca纵坐标值") + private Integer mcaY; + @ApiModelProperty(value = "mca1横坐标值(道数)") + private Integer mcaX1; + @ApiModelProperty(value = "mca1纵坐标值") + private Integer mcaY1; +// @ApiModelProperty(value = "时间值") +// private String timeCount; + + public HsDTO() { + } + + public HsDTO(int psdX, int psdY, int mcaX, int mcaY) { + this.psdX = psdX; + this.psdY = psdY; + this.mcaX = mcaX; + this.mcaY = mcaY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java new file mode 100644 index 0000000..2f83779 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Hs请求参数Request + */ +@Data +public class HsRequest { + + @ApiModelProperty(value = "探测器Id") + Long detectorId; + @ApiModelProperty(value = "type值为1:启动,0:停止") + String type; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标开始值") + int x1; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标截止值") + int x2; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标开始值") + int x3; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标截止值") + int x4; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java index e54ac10..540ba70 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java @@ -44,6 +44,10 @@ private String qshort; @TableField("PSD") private String psd; + @TableField("PSDX") + private String psdx; + @TableField("MCAX") + private String mcax; @TableField("IP_PORT") private String ipPort; /** @@ -61,8 +65,9 @@ public Psd() { } - public Psd(Long detectorId, String gateOffet, String baseLine, String shortGate, String longGate, String qlong, String qshort, String createTime) { - this.detectorId = detectorId; + public Psd(String gateOffet, String baseLine, String shortGate, + String longGate, String qlong, String qshort, + String createTime) { this.gateOffet = gateOffet; this.baseLine = baseLine; this.shortGate = shortGate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java index ef4fc59..a65e5b0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java @@ -61,8 +61,7 @@ public Vol() { } - public Vol(Long detectorId, String volData6, String createTime) { - this.detectorId = detectorId; + public Vol( String volData6, String createTime) { this.volData6 = volData6; this.createTime = createTime; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java index 34d7056..277ccc2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.neutron.service; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import java.util.List; @@ -25,7 +26,7 @@ * No.3 解析 * 设备会在tcp上 上报数据,读取后进行解析 */ - void analysis(String deviceIpPort,String msg); + void analysis(String deviceIpPort,String msg,Long uid); /** * No.4 退高压,停止工作 @@ -41,4 +42,6 @@ List alarmList(Long taskId); + boolean hsList(Long detectorId, String type,int x1, int x2, int x3, int x4); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java index 321336b..462f31a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java @@ -21,4 +21,6 @@ List dataList(Long taskId); + List hsList(Long detectorId,String type); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index 4f1136b..d560517 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -2,6 +2,7 @@ import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.HsRequest; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; @@ -34,9 +35,9 @@ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") @PostMapping("/control") @ResponseBody - public ResponseDataDTO control(String command,Long detectorId) { + public ResponseDataDTO control(String command, Long detectorId) { //toDo:需要加返回值 - neutronOptService.control(command,detectorId); + neutronOptService.control(command, detectorId); return ResponseDataDTO.success(); } @@ -57,5 +58,18 @@ return ResponseDataDTO.success(iPsdService.dataList(taskId)); } + @ApiOperation("主界面HS显示,需传探测器detectorId,type值为1:启动,0:停止") + @PostMapping("/hsList") + @ResponseBody + public ResponseDataDTO hsList(HsRequest request) { + + return ResponseDataDTO.success(neutronOptService.hsList(request.getDetectorId(), + request.getType(), + request.getX1(), + request.getX2(), + request.getX3(), + request.getX4())); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml index 5ac549c..236aa30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml @@ -31,7 +31,7 @@ FROM detector_info di WHERE di.robot_id = #{robotId}) AND dp.CREATE_TIME >= #{startTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 ORDER BY dp.CREATE_TIME ASC LIMIT 13 @@ -50,7 +50,7 @@ and dp.CREATE_TIME #{endTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 GROUP BY dp.CREATE_TIME ORDER BY dp.CREATE_TIME ASC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java new file mode 100644 index 0000000..4b42612 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * psd报警DTO + */ +@Data +public class HsDTO { + + @ApiModelProperty(value = "psd横坐标值(道数)") + private Integer psdX; + @ApiModelProperty(value = "psd纵坐标值") + private Integer psdY; + @ApiModelProperty(value = "psd1横坐标值(道数)") + private Integer psdX1; + @ApiModelProperty(value = "psd1纵坐标值") + private Integer psdY1; + @ApiModelProperty(value = "mca横坐标值(道数)") + private Integer mcaX; + @ApiModelProperty(value = "mca纵坐标值") + private Integer mcaY; + @ApiModelProperty(value = "mca1横坐标值(道数)") + private Integer mcaX1; + @ApiModelProperty(value = "mca1纵坐标值") + private Integer mcaY1; +// @ApiModelProperty(value = "时间值") +// private String timeCount; + + public HsDTO() { + } + + public HsDTO(int psdX, int psdY, int mcaX, int mcaY) { + this.psdX = psdX; + this.psdY = psdY; + this.mcaX = mcaX; + this.mcaY = mcaY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java new file mode 100644 index 0000000..2f83779 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Hs请求参数Request + */ +@Data +public class HsRequest { + + @ApiModelProperty(value = "探测器Id") + Long detectorId; + @ApiModelProperty(value = "type值为1:启动,0:停止") + String type; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标开始值") + int x1; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标截止值") + int x2; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标开始值") + int x3; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标截止值") + int x4; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java index e54ac10..540ba70 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java @@ -44,6 +44,10 @@ private String qshort; @TableField("PSD") private String psd; + @TableField("PSDX") + private String psdx; + @TableField("MCAX") + private String mcax; @TableField("IP_PORT") private String ipPort; /** @@ -61,8 +65,9 @@ public Psd() { } - public Psd(Long detectorId, String gateOffet, String baseLine, String shortGate, String longGate, String qlong, String qshort, String createTime) { - this.detectorId = detectorId; + public Psd(String gateOffet, String baseLine, String shortGate, + String longGate, String qlong, String qshort, + String createTime) { this.gateOffet = gateOffet; this.baseLine = baseLine; this.shortGate = shortGate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java index ef4fc59..a65e5b0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java @@ -61,8 +61,7 @@ public Vol() { } - public Vol(Long detectorId, String volData6, String createTime) { - this.detectorId = detectorId; + public Vol( String volData6, String createTime) { this.volData6 = volData6; this.createTime = createTime; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java index 34d7056..277ccc2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.neutron.service; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import java.util.List; @@ -25,7 +26,7 @@ * No.3 解析 * 设备会在tcp上 上报数据,读取后进行解析 */ - void analysis(String deviceIpPort,String msg); + void analysis(String deviceIpPort,String msg,Long uid); /** * No.4 退高压,停止工作 @@ -41,4 +42,6 @@ List alarmList(Long taskId); + boolean hsList(Long detectorId, String type,int x1, int x2, int x3, int x4); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java index 321336b..462f31a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java @@ -21,4 +21,6 @@ List dataList(Long taskId); + List hsList(Long detectorId,String type); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java index c15e68c..9e0e888 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java @@ -37,7 +37,7 @@ try { for (int i = 1; i <= codeArr.length / 3; i++) { - nettyClient.send(codeArr[i * 3 - 1]); + nettyClient.send(config.getDetectorId(),codeArr[i * 3 - 1]); Thread.sleep(500); } } catch (InterruptedException e) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index 4f1136b..d560517 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -2,6 +2,7 @@ import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.HsRequest; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; @@ -34,9 +35,9 @@ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") @PostMapping("/control") @ResponseBody - public ResponseDataDTO control(String command,Long detectorId) { + public ResponseDataDTO control(String command, Long detectorId) { //toDo:需要加返回值 - neutronOptService.control(command,detectorId); + neutronOptService.control(command, detectorId); return ResponseDataDTO.success(); } @@ -57,5 +58,18 @@ return ResponseDataDTO.success(iPsdService.dataList(taskId)); } + @ApiOperation("主界面HS显示,需传探测器detectorId,type值为1:启动,0:停止") + @PostMapping("/hsList") + @ResponseBody + public ResponseDataDTO hsList(HsRequest request) { + + return ResponseDataDTO.success(neutronOptService.hsList(request.getDetectorId(), + request.getType(), + request.getX1(), + request.getX2(), + request.getX3(), + request.getX4())); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml index 5ac549c..236aa30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml @@ -31,7 +31,7 @@ FROM detector_info di WHERE di.robot_id = #{robotId}) AND dp.CREATE_TIME >= #{startTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 ORDER BY dp.CREATE_TIME ASC LIMIT 13 @@ -50,7 +50,7 @@ and dp.CREATE_TIME #{endTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 GROUP BY dp.CREATE_TIME ORDER BY dp.CREATE_TIME ASC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java new file mode 100644 index 0000000..4b42612 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * psd报警DTO + */ +@Data +public class HsDTO { + + @ApiModelProperty(value = "psd横坐标值(道数)") + private Integer psdX; + @ApiModelProperty(value = "psd纵坐标值") + private Integer psdY; + @ApiModelProperty(value = "psd1横坐标值(道数)") + private Integer psdX1; + @ApiModelProperty(value = "psd1纵坐标值") + private Integer psdY1; + @ApiModelProperty(value = "mca横坐标值(道数)") + private Integer mcaX; + @ApiModelProperty(value = "mca纵坐标值") + private Integer mcaY; + @ApiModelProperty(value = "mca1横坐标值(道数)") + private Integer mcaX1; + @ApiModelProperty(value = "mca1纵坐标值") + private Integer mcaY1; +// @ApiModelProperty(value = "时间值") +// private String timeCount; + + public HsDTO() { + } + + public HsDTO(int psdX, int psdY, int mcaX, int mcaY) { + this.psdX = psdX; + this.psdY = psdY; + this.mcaX = mcaX; + this.mcaY = mcaY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java new file mode 100644 index 0000000..2f83779 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Hs请求参数Request + */ +@Data +public class HsRequest { + + @ApiModelProperty(value = "探测器Id") + Long detectorId; + @ApiModelProperty(value = "type值为1:启动,0:停止") + String type; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标开始值") + int x1; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标截止值") + int x2; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标开始值") + int x3; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标截止值") + int x4; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java index e54ac10..540ba70 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java @@ -44,6 +44,10 @@ private String qshort; @TableField("PSD") private String psd; + @TableField("PSDX") + private String psdx; + @TableField("MCAX") + private String mcax; @TableField("IP_PORT") private String ipPort; /** @@ -61,8 +65,9 @@ public Psd() { } - public Psd(Long detectorId, String gateOffet, String baseLine, String shortGate, String longGate, String qlong, String qshort, String createTime) { - this.detectorId = detectorId; + public Psd(String gateOffet, String baseLine, String shortGate, + String longGate, String qlong, String qshort, + String createTime) { this.gateOffet = gateOffet; this.baseLine = baseLine; this.shortGate = shortGate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java index ef4fc59..a65e5b0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java @@ -61,8 +61,7 @@ public Vol() { } - public Vol(Long detectorId, String volData6, String createTime) { - this.detectorId = detectorId; + public Vol( String volData6, String createTime) { this.volData6 = volData6; this.createTime = createTime; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java index 34d7056..277ccc2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.neutron.service; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import java.util.List; @@ -25,7 +26,7 @@ * No.3 解析 * 设备会在tcp上 上报数据,读取后进行解析 */ - void analysis(String deviceIpPort,String msg); + void analysis(String deviceIpPort,String msg,Long uid); /** * No.4 退高压,停止工作 @@ -41,4 +42,6 @@ List alarmList(Long taskId); + boolean hsList(Long detectorId, String type,int x1, int x2, int x3, int x4); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java index 321336b..462f31a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java @@ -21,4 +21,6 @@ List dataList(Long taskId); + List hsList(Long detectorId,String type); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java index c15e68c..9e0e888 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java @@ -37,7 +37,7 @@ try { for (int i = 1; i <= codeArr.length / 3; i++) { - nettyClient.send(codeArr[i * 3 - 1]); + nettyClient.send(config.getDetectorId(),codeArr[i * 3 - 1]); Thread.sleep(500); } } catch (InterruptedException e) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java index 7171d3b..9f7768a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java @@ -2,7 +2,9 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.neutron.dto.HsDTO; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; import com.casic.missiles.modular.neutron.service.IDetectorLogService; @@ -13,12 +15,14 @@ import com.casic.missiles.netty.InstructCode; import com.casic.missiles.netty.NettyClient; import com.casic.missiles.common.WebSocket; +import com.sun.javafx.util.Utils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -42,7 +46,7 @@ try { for (int i = 1; i <= InstructCode.InitCodeArr.length / 3; i++) { - nettyClient.send(InstructCode.InitCodeArr[i * 3 - 1]); + nettyClient.send(detectorId, InstructCode.InitCodeArr[i * 3 - 1]); Thread.sleep(500); } } catch (InterruptedException e) { @@ -52,26 +56,30 @@ @Override public void pressurize(Long detectorId) { - if (nettyClient.send(InstructCode.DAC_UP)) { + if (nettyClient.send(detectorId, InstructCode.DAC_UP)) { iLogService.addLog(detectorId, "6", "start"); } } @Override @Async("syncExecutorPool") - public void analysis(String deviceIpPort, String msg) { + public void analysis(String deviceIpPort, String msg, Long uid) { Map resultMap = CacheUtils.processData(msg); List psdList = (List) resultMap.get("psd"); List volList = (List) resultMap.get("vol"); if (volList != null && volList.size() > 0) { volList.forEach(vol -> { + JSONObject headerJson = new JSONObject(); + headerJson.put("msgKey", "detector_vol"); JSONObject jsonObject = new JSONObject(); jsonObject.put("deviceIp", deviceIpPort); jsonObject.put("vol", vol.getVolData6()); jsonObject.put("time", vol.getCreateTime()); - webSocket.sendAllMessage(jsonObject.toJSONString()); - log.info("推送电压数据"+jsonObject.toJSONString()); + headerJson.put("data", jsonObject); + webSocket.sendAllMessage(headerJson.toJSONString()); + log.info("推送电压数据" + headerJson.toJSONString()); vol.setIpPort(deviceIpPort.substring(1)); + vol.setDetectorId(uid); }); iVolService.saveBatch(volList); } @@ -85,15 +93,75 @@ Long Qshort = Math.abs(Long.valueOf(psd.getQshort(), 16) - Long.parseLong(psd.getBaseLine(), 16) * Long.parseLong(psd.getShortGate(), 16)); Double psdRate = (Qlong - Qshort) * 1.000 / Qlong; psd.setPsd(String.format("%.2f", psdRate)); + psd.setDetectorId(uid); + //设置psdx值 toDo:4096、100000 需要自动取 + int psdx = (int) ((Qlong - Qshort) * 1.000 / Qlong * 4096); + int mcax = (int) ((Qlong) * 1.00000 / 100000 * 4096); + psd.setPsdx(psdx + ""); + psd.setMcax(mcax + ""); + //根据是否启动,向前端推送hs曲线数值 + if (hsFlag) { + HsDTO hsDTO = new HsDTO(psdx, 1, mcax, 1); + if (psdx < 0 || psdx > 4096) { + hsDTO.setPsdX(null); + hsDTO.setPsdY(null); + } + if (mcax < 0 || mcax > 4096) { + hsDTO.setMcaX(null); + hsDTO.setMcaY(null); + } + //psd数据叠加到mca曲线上 + if (psdx >= x3_3 && psdx <= x4_4) { + hsDTO.setMcaX1(mcax); + hsDTO.setMcaY1(1); + } + //mca数据叠加到psd曲线上 + if (mcax >= x1_1 && mcax <= x2_2) { + if (psdx > 0) { + hsDTO.setPsdX1(psdx); + hsDTO.setPsdY1(1); + } + } + JSONObject headJson = new JSONObject(); + headJson.put("msgKey", "detector_hs"); + headJson.put("data", hsDTO); + webSocket.sendAllMessage(headJson.toJSONString()); + log.info("推送HS数据" + headJson.toJSONString()); + } } }); iPsdService.saveBatch(psdList); } } + + private volatile boolean hsFlag = false; + private volatile int x1_1 = 0; + private volatile int x2_2 = 0; + private volatile int x3_3 = 0; + private volatile int x4_4 = 0; +// private volatile List hsDTOList = new ArrayList<>() ; + + @Override + public boolean hsList(Long detectorId, String type, int x1, int x2, int x3, int x4) { + x1_1 = x1; + x2_2 = x2; + x3_3 = x3; + x4_4 = x4; + switch (type) { + case "1": + hsFlag = true; + break; + case "0": + hsFlag = false; + break; + } + return true; + } + @Override public void depress(Long detectorId) { - if (nettyClient.send(InstructCode.DAC_DOWN)) { + if (nettyClient.send(detectorId, InstructCode.DAC_DOWN)) { iLogService.addLog(detectorId, "6", "stop"); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index 4f1136b..d560517 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -2,6 +2,7 @@ import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.HsRequest; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; @@ -34,9 +35,9 @@ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") @PostMapping("/control") @ResponseBody - public ResponseDataDTO control(String command,Long detectorId) { + public ResponseDataDTO control(String command, Long detectorId) { //toDo:需要加返回值 - neutronOptService.control(command,detectorId); + neutronOptService.control(command, detectorId); return ResponseDataDTO.success(); } @@ -57,5 +58,18 @@ return ResponseDataDTO.success(iPsdService.dataList(taskId)); } + @ApiOperation("主界面HS显示,需传探测器detectorId,type值为1:启动,0:停止") + @PostMapping("/hsList") + @ResponseBody + public ResponseDataDTO hsList(HsRequest request) { + + return ResponseDataDTO.success(neutronOptService.hsList(request.getDetectorId(), + request.getType(), + request.getX1(), + request.getX2(), + request.getX3(), + request.getX4())); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml index 5ac549c..236aa30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml @@ -31,7 +31,7 @@ FROM detector_info di WHERE di.robot_id = #{robotId}) AND dp.CREATE_TIME >= #{startTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 ORDER BY dp.CREATE_TIME ASC LIMIT 13 @@ -50,7 +50,7 @@ and dp.CREATE_TIME #{endTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 GROUP BY dp.CREATE_TIME ORDER BY dp.CREATE_TIME ASC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java new file mode 100644 index 0000000..4b42612 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * psd报警DTO + */ +@Data +public class HsDTO { + + @ApiModelProperty(value = "psd横坐标值(道数)") + private Integer psdX; + @ApiModelProperty(value = "psd纵坐标值") + private Integer psdY; + @ApiModelProperty(value = "psd1横坐标值(道数)") + private Integer psdX1; + @ApiModelProperty(value = "psd1纵坐标值") + private Integer psdY1; + @ApiModelProperty(value = "mca横坐标值(道数)") + private Integer mcaX; + @ApiModelProperty(value = "mca纵坐标值") + private Integer mcaY; + @ApiModelProperty(value = "mca1横坐标值(道数)") + private Integer mcaX1; + @ApiModelProperty(value = "mca1纵坐标值") + private Integer mcaY1; +// @ApiModelProperty(value = "时间值") +// private String timeCount; + + public HsDTO() { + } + + public HsDTO(int psdX, int psdY, int mcaX, int mcaY) { + this.psdX = psdX; + this.psdY = psdY; + this.mcaX = mcaX; + this.mcaY = mcaY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java new file mode 100644 index 0000000..2f83779 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Hs请求参数Request + */ +@Data +public class HsRequest { + + @ApiModelProperty(value = "探测器Id") + Long detectorId; + @ApiModelProperty(value = "type值为1:启动,0:停止") + String type; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标开始值") + int x1; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标截止值") + int x2; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标开始值") + int x3; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标截止值") + int x4; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java index e54ac10..540ba70 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java @@ -44,6 +44,10 @@ private String qshort; @TableField("PSD") private String psd; + @TableField("PSDX") + private String psdx; + @TableField("MCAX") + private String mcax; @TableField("IP_PORT") private String ipPort; /** @@ -61,8 +65,9 @@ public Psd() { } - public Psd(Long detectorId, String gateOffet, String baseLine, String shortGate, String longGate, String qlong, String qshort, String createTime) { - this.detectorId = detectorId; + public Psd(String gateOffet, String baseLine, String shortGate, + String longGate, String qlong, String qshort, + String createTime) { this.gateOffet = gateOffet; this.baseLine = baseLine; this.shortGate = shortGate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java index ef4fc59..a65e5b0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java @@ -61,8 +61,7 @@ public Vol() { } - public Vol(Long detectorId, String volData6, String createTime) { - this.detectorId = detectorId; + public Vol( String volData6, String createTime) { this.volData6 = volData6; this.createTime = createTime; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java index 34d7056..277ccc2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.neutron.service; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import java.util.List; @@ -25,7 +26,7 @@ * No.3 解析 * 设备会在tcp上 上报数据,读取后进行解析 */ - void analysis(String deviceIpPort,String msg); + void analysis(String deviceIpPort,String msg,Long uid); /** * No.4 退高压,停止工作 @@ -41,4 +42,6 @@ List alarmList(Long taskId); + boolean hsList(Long detectorId, String type,int x1, int x2, int x3, int x4); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java index 321336b..462f31a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java @@ -21,4 +21,6 @@ List dataList(Long taskId); + List hsList(Long detectorId,String type); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java index c15e68c..9e0e888 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java @@ -37,7 +37,7 @@ try { for (int i = 1; i <= codeArr.length / 3; i++) { - nettyClient.send(codeArr[i * 3 - 1]); + nettyClient.send(config.getDetectorId(),codeArr[i * 3 - 1]); Thread.sleep(500); } } catch (InterruptedException e) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java index 7171d3b..9f7768a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java @@ -2,7 +2,9 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.neutron.dto.HsDTO; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; import com.casic.missiles.modular.neutron.service.IDetectorLogService; @@ -13,12 +15,14 @@ import com.casic.missiles.netty.InstructCode; import com.casic.missiles.netty.NettyClient; import com.casic.missiles.common.WebSocket; +import com.sun.javafx.util.Utils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -42,7 +46,7 @@ try { for (int i = 1; i <= InstructCode.InitCodeArr.length / 3; i++) { - nettyClient.send(InstructCode.InitCodeArr[i * 3 - 1]); + nettyClient.send(detectorId, InstructCode.InitCodeArr[i * 3 - 1]); Thread.sleep(500); } } catch (InterruptedException e) { @@ -52,26 +56,30 @@ @Override public void pressurize(Long detectorId) { - if (nettyClient.send(InstructCode.DAC_UP)) { + if (nettyClient.send(detectorId, InstructCode.DAC_UP)) { iLogService.addLog(detectorId, "6", "start"); } } @Override @Async("syncExecutorPool") - public void analysis(String deviceIpPort, String msg) { + public void analysis(String deviceIpPort, String msg, Long uid) { Map resultMap = CacheUtils.processData(msg); List psdList = (List) resultMap.get("psd"); List volList = (List) resultMap.get("vol"); if (volList != null && volList.size() > 0) { volList.forEach(vol -> { + JSONObject headerJson = new JSONObject(); + headerJson.put("msgKey", "detector_vol"); JSONObject jsonObject = new JSONObject(); jsonObject.put("deviceIp", deviceIpPort); jsonObject.put("vol", vol.getVolData6()); jsonObject.put("time", vol.getCreateTime()); - webSocket.sendAllMessage(jsonObject.toJSONString()); - log.info("推送电压数据"+jsonObject.toJSONString()); + headerJson.put("data", jsonObject); + webSocket.sendAllMessage(headerJson.toJSONString()); + log.info("推送电压数据" + headerJson.toJSONString()); vol.setIpPort(deviceIpPort.substring(1)); + vol.setDetectorId(uid); }); iVolService.saveBatch(volList); } @@ -85,15 +93,75 @@ Long Qshort = Math.abs(Long.valueOf(psd.getQshort(), 16) - Long.parseLong(psd.getBaseLine(), 16) * Long.parseLong(psd.getShortGate(), 16)); Double psdRate = (Qlong - Qshort) * 1.000 / Qlong; psd.setPsd(String.format("%.2f", psdRate)); + psd.setDetectorId(uid); + //设置psdx值 toDo:4096、100000 需要自动取 + int psdx = (int) ((Qlong - Qshort) * 1.000 / Qlong * 4096); + int mcax = (int) ((Qlong) * 1.00000 / 100000 * 4096); + psd.setPsdx(psdx + ""); + psd.setMcax(mcax + ""); + //根据是否启动,向前端推送hs曲线数值 + if (hsFlag) { + HsDTO hsDTO = new HsDTO(psdx, 1, mcax, 1); + if (psdx < 0 || psdx > 4096) { + hsDTO.setPsdX(null); + hsDTO.setPsdY(null); + } + if (mcax < 0 || mcax > 4096) { + hsDTO.setMcaX(null); + hsDTO.setMcaY(null); + } + //psd数据叠加到mca曲线上 + if (psdx >= x3_3 && psdx <= x4_4) { + hsDTO.setMcaX1(mcax); + hsDTO.setMcaY1(1); + } + //mca数据叠加到psd曲线上 + if (mcax >= x1_1 && mcax <= x2_2) { + if (psdx > 0) { + hsDTO.setPsdX1(psdx); + hsDTO.setPsdY1(1); + } + } + JSONObject headJson = new JSONObject(); + headJson.put("msgKey", "detector_hs"); + headJson.put("data", hsDTO); + webSocket.sendAllMessage(headJson.toJSONString()); + log.info("推送HS数据" + headJson.toJSONString()); + } } }); iPsdService.saveBatch(psdList); } } + + private volatile boolean hsFlag = false; + private volatile int x1_1 = 0; + private volatile int x2_2 = 0; + private volatile int x3_3 = 0; + private volatile int x4_4 = 0; +// private volatile List hsDTOList = new ArrayList<>() ; + + @Override + public boolean hsList(Long detectorId, String type, int x1, int x2, int x3, int x4) { + x1_1 = x1; + x2_2 = x2; + x3_3 = x3; + x4_4 = x4; + switch (type) { + case "1": + hsFlag = true; + break; + case "0": + hsFlag = false; + break; + } + return true; + } + @Override public void depress(Long detectorId) { - if (nettyClient.send(InstructCode.DAC_DOWN)) { + if (nettyClient.send(detectorId, InstructCode.DAC_DOWN)) { iLogService.addLog(detectorId, "6", "stop"); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java index 8a20e31..f1adc1e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java @@ -58,7 +58,7 @@ long countX = DateUtil.between(DateUtil.parseDateTime(last.getTimeCount()), DateUtil.parseDateTime(startTime), DateUnit.SECOND, true); for (int i = 0; i <= countX / 5; i++) { if (i == 0) { - psdDataDTOS.add(new PsdDataDTO("0", "0")); + psdDataDTOS.add(new PsdDataDTO("0", "0")); continue; } int countY = 0; @@ -74,7 +74,7 @@ } } } - psdDataDTO.setValueCount((int) Math.ceil(countY / 5) + ""); + psdDataDTO.setValueCount(String.format("%.2f",countY*1.00 / 5)); psdDataDTOS.add(psdDataDTO); } } @@ -105,10 +105,14 @@ trajectoryInfo.getPostionY() + "", alarmTime)); return psdAlarmDTOList; - } } } return psdAlarmDTOList; } + + @Override + public List hsList(Long detectorId,String type) { + return null; + } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index 4f1136b..d560517 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -2,6 +2,7 @@ import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.HsRequest; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; @@ -34,9 +35,9 @@ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") @PostMapping("/control") @ResponseBody - public ResponseDataDTO control(String command,Long detectorId) { + public ResponseDataDTO control(String command, Long detectorId) { //toDo:需要加返回值 - neutronOptService.control(command,detectorId); + neutronOptService.control(command, detectorId); return ResponseDataDTO.success(); } @@ -57,5 +58,18 @@ return ResponseDataDTO.success(iPsdService.dataList(taskId)); } + @ApiOperation("主界面HS显示,需传探测器detectorId,type值为1:启动,0:停止") + @PostMapping("/hsList") + @ResponseBody + public ResponseDataDTO hsList(HsRequest request) { + + return ResponseDataDTO.success(neutronOptService.hsList(request.getDetectorId(), + request.getType(), + request.getX1(), + request.getX2(), + request.getX3(), + request.getX4())); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml index 5ac549c..236aa30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml @@ -31,7 +31,7 @@ FROM detector_info di WHERE di.robot_id = #{robotId}) AND dp.CREATE_TIME >= #{startTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 ORDER BY dp.CREATE_TIME ASC LIMIT 13 @@ -50,7 +50,7 @@ and dp.CREATE_TIME #{endTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 GROUP BY dp.CREATE_TIME ORDER BY dp.CREATE_TIME ASC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java new file mode 100644 index 0000000..4b42612 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * psd报警DTO + */ +@Data +public class HsDTO { + + @ApiModelProperty(value = "psd横坐标值(道数)") + private Integer psdX; + @ApiModelProperty(value = "psd纵坐标值") + private Integer psdY; + @ApiModelProperty(value = "psd1横坐标值(道数)") + private Integer psdX1; + @ApiModelProperty(value = "psd1纵坐标值") + private Integer psdY1; + @ApiModelProperty(value = "mca横坐标值(道数)") + private Integer mcaX; + @ApiModelProperty(value = "mca纵坐标值") + private Integer mcaY; + @ApiModelProperty(value = "mca1横坐标值(道数)") + private Integer mcaX1; + @ApiModelProperty(value = "mca1纵坐标值") + private Integer mcaY1; +// @ApiModelProperty(value = "时间值") +// private String timeCount; + + public HsDTO() { + } + + public HsDTO(int psdX, int psdY, int mcaX, int mcaY) { + this.psdX = psdX; + this.psdY = psdY; + this.mcaX = mcaX; + this.mcaY = mcaY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java new file mode 100644 index 0000000..2f83779 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Hs请求参数Request + */ +@Data +public class HsRequest { + + @ApiModelProperty(value = "探测器Id") + Long detectorId; + @ApiModelProperty(value = "type值为1:启动,0:停止") + String type; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标开始值") + int x1; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标截止值") + int x2; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标开始值") + int x3; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标截止值") + int x4; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java index e54ac10..540ba70 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java @@ -44,6 +44,10 @@ private String qshort; @TableField("PSD") private String psd; + @TableField("PSDX") + private String psdx; + @TableField("MCAX") + private String mcax; @TableField("IP_PORT") private String ipPort; /** @@ -61,8 +65,9 @@ public Psd() { } - public Psd(Long detectorId, String gateOffet, String baseLine, String shortGate, String longGate, String qlong, String qshort, String createTime) { - this.detectorId = detectorId; + public Psd(String gateOffet, String baseLine, String shortGate, + String longGate, String qlong, String qshort, + String createTime) { this.gateOffet = gateOffet; this.baseLine = baseLine; this.shortGate = shortGate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java index ef4fc59..a65e5b0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java @@ -61,8 +61,7 @@ public Vol() { } - public Vol(Long detectorId, String volData6, String createTime) { - this.detectorId = detectorId; + public Vol( String volData6, String createTime) { this.volData6 = volData6; this.createTime = createTime; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java index 34d7056..277ccc2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.neutron.service; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import java.util.List; @@ -25,7 +26,7 @@ * No.3 解析 * 设备会在tcp上 上报数据,读取后进行解析 */ - void analysis(String deviceIpPort,String msg); + void analysis(String deviceIpPort,String msg,Long uid); /** * No.4 退高压,停止工作 @@ -41,4 +42,6 @@ List alarmList(Long taskId); + boolean hsList(Long detectorId, String type,int x1, int x2, int x3, int x4); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java index 321336b..462f31a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java @@ -21,4 +21,6 @@ List dataList(Long taskId); + List hsList(Long detectorId,String type); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java index c15e68c..9e0e888 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java @@ -37,7 +37,7 @@ try { for (int i = 1; i <= codeArr.length / 3; i++) { - nettyClient.send(codeArr[i * 3 - 1]); + nettyClient.send(config.getDetectorId(),codeArr[i * 3 - 1]); Thread.sleep(500); } } catch (InterruptedException e) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java index 7171d3b..9f7768a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java @@ -2,7 +2,9 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.neutron.dto.HsDTO; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; import com.casic.missiles.modular.neutron.service.IDetectorLogService; @@ -13,12 +15,14 @@ import com.casic.missiles.netty.InstructCode; import com.casic.missiles.netty.NettyClient; import com.casic.missiles.common.WebSocket; +import com.sun.javafx.util.Utils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -42,7 +46,7 @@ try { for (int i = 1; i <= InstructCode.InitCodeArr.length / 3; i++) { - nettyClient.send(InstructCode.InitCodeArr[i * 3 - 1]); + nettyClient.send(detectorId, InstructCode.InitCodeArr[i * 3 - 1]); Thread.sleep(500); } } catch (InterruptedException e) { @@ -52,26 +56,30 @@ @Override public void pressurize(Long detectorId) { - if (nettyClient.send(InstructCode.DAC_UP)) { + if (nettyClient.send(detectorId, InstructCode.DAC_UP)) { iLogService.addLog(detectorId, "6", "start"); } } @Override @Async("syncExecutorPool") - public void analysis(String deviceIpPort, String msg) { + public void analysis(String deviceIpPort, String msg, Long uid) { Map resultMap = CacheUtils.processData(msg); List psdList = (List) resultMap.get("psd"); List volList = (List) resultMap.get("vol"); if (volList != null && volList.size() > 0) { volList.forEach(vol -> { + JSONObject headerJson = new JSONObject(); + headerJson.put("msgKey", "detector_vol"); JSONObject jsonObject = new JSONObject(); jsonObject.put("deviceIp", deviceIpPort); jsonObject.put("vol", vol.getVolData6()); jsonObject.put("time", vol.getCreateTime()); - webSocket.sendAllMessage(jsonObject.toJSONString()); - log.info("推送电压数据"+jsonObject.toJSONString()); + headerJson.put("data", jsonObject); + webSocket.sendAllMessage(headerJson.toJSONString()); + log.info("推送电压数据" + headerJson.toJSONString()); vol.setIpPort(deviceIpPort.substring(1)); + vol.setDetectorId(uid); }); iVolService.saveBatch(volList); } @@ -85,15 +93,75 @@ Long Qshort = Math.abs(Long.valueOf(psd.getQshort(), 16) - Long.parseLong(psd.getBaseLine(), 16) * Long.parseLong(psd.getShortGate(), 16)); Double psdRate = (Qlong - Qshort) * 1.000 / Qlong; psd.setPsd(String.format("%.2f", psdRate)); + psd.setDetectorId(uid); + //设置psdx值 toDo:4096、100000 需要自动取 + int psdx = (int) ((Qlong - Qshort) * 1.000 / Qlong * 4096); + int mcax = (int) ((Qlong) * 1.00000 / 100000 * 4096); + psd.setPsdx(psdx + ""); + psd.setMcax(mcax + ""); + //根据是否启动,向前端推送hs曲线数值 + if (hsFlag) { + HsDTO hsDTO = new HsDTO(psdx, 1, mcax, 1); + if (psdx < 0 || psdx > 4096) { + hsDTO.setPsdX(null); + hsDTO.setPsdY(null); + } + if (mcax < 0 || mcax > 4096) { + hsDTO.setMcaX(null); + hsDTO.setMcaY(null); + } + //psd数据叠加到mca曲线上 + if (psdx >= x3_3 && psdx <= x4_4) { + hsDTO.setMcaX1(mcax); + hsDTO.setMcaY1(1); + } + //mca数据叠加到psd曲线上 + if (mcax >= x1_1 && mcax <= x2_2) { + if (psdx > 0) { + hsDTO.setPsdX1(psdx); + hsDTO.setPsdY1(1); + } + } + JSONObject headJson = new JSONObject(); + headJson.put("msgKey", "detector_hs"); + headJson.put("data", hsDTO); + webSocket.sendAllMessage(headJson.toJSONString()); + log.info("推送HS数据" + headJson.toJSONString()); + } } }); iPsdService.saveBatch(psdList); } } + + private volatile boolean hsFlag = false; + private volatile int x1_1 = 0; + private volatile int x2_2 = 0; + private volatile int x3_3 = 0; + private volatile int x4_4 = 0; +// private volatile List hsDTOList = new ArrayList<>() ; + + @Override + public boolean hsList(Long detectorId, String type, int x1, int x2, int x3, int x4) { + x1_1 = x1; + x2_2 = x2; + x3_3 = x3; + x4_4 = x4; + switch (type) { + case "1": + hsFlag = true; + break; + case "0": + hsFlag = false; + break; + } + return true; + } + @Override public void depress(Long detectorId) { - if (nettyClient.send(InstructCode.DAC_DOWN)) { + if (nettyClient.send(detectorId, InstructCode.DAC_DOWN)) { iLogService.addLog(detectorId, "6", "stop"); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java index 8a20e31..f1adc1e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java @@ -58,7 +58,7 @@ long countX = DateUtil.between(DateUtil.parseDateTime(last.getTimeCount()), DateUtil.parseDateTime(startTime), DateUnit.SECOND, true); for (int i = 0; i <= countX / 5; i++) { if (i == 0) { - psdDataDTOS.add(new PsdDataDTO("0", "0")); + psdDataDTOS.add(new PsdDataDTO("0", "0")); continue; } int countY = 0; @@ -74,7 +74,7 @@ } } } - psdDataDTO.setValueCount((int) Math.ceil(countY / 5) + ""); + psdDataDTO.setValueCount(String.format("%.2f",countY*1.00 / 5)); psdDataDTOS.add(psdDataDTO); } } @@ -105,10 +105,14 @@ trajectoryInfo.getPostionY() + "", alarmTime)); return psdAlarmDTOList; - } } } return psdAlarmDTOList; } + + @Override + public List hsList(Long detectorId,String type) { + return null; + } } diff --git a/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java b/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java index 8b9aaf2..7531a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java @@ -58,14 +58,6 @@ } if (ObjectUtil.isNotEmpty(msgs)) { CacheUtils.VOL_MAP.clear(); - //继续拆包处理 -// String msgLast = ""; -// if (msgs.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) != -1) { -// if (msgs.length() < (msgs.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) + 24 + InstructCode.DAC_DATA_LENGTH)) { -// msgLast = msgs.substring(msgs.indexOf(msgs.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH))); -// CacheUtils.VOL_MAP.put(keyInts.get(keyInts.size() - 1), msgLast); -// } -// } } } @@ -83,17 +75,6 @@ } if (ObjectUtil.isNotEmpty(msgs)) { CacheUtils.PSD_MAP.clear(); - //继续拆包处理 -// String msgLast = ""; -// if (msgs.indexOf(InstructCode.PSD1_HEAD) != -1) { -// if (msgs.length() >= 24) { -// int totalLength = Integer.parseInt(ByteUtil.reverseHex(msgs.substring(msgs.indexOf(InstructCode.PSD1_HEAD) + 16, 24)), 16); -// if (msgs.length() < totalLength * 2) { -// msgLast = msgs.substring(msgs.indexOf(InstructCode.PSD1_HEAD)); -// CacheUtils.PSD_MAP.put(keyInts.get(keyInts.size() - 1), msgLast); -// } -// } -// } } } return msgs; @@ -133,12 +114,12 @@ for (int i = 0; i < (msg.length() - (msg.indexOf(InstructCode.PSD1_HEAD) + 24)) / 64; i++) { String msgi = msg.substring((msg.indexOf(InstructCode.PSD1_HEAD) + 24) + i * 64, (msg.indexOf(InstructCode.PSD1_HEAD) + 24) + (i + 1) * 64); if (msgi.indexOf(InstructCode.PSD2_HEAD) == 0) { - String gateOff = msgi.substring(16, 20); - String baseline = msgi.substring(20, 24); - String shortGate = msgi.substring(24, 28); - String longGate = msgi.substring(28, 32); - String qlong = msgi.substring(48, 56); - String qshort = msgi.substring(56, 64); + String gateOff = ByteUtil.reverseHex(msgi.substring(16, 20)); + String baseline = ByteUtil.reverseHex(msgi.substring(20, 24)); + String shortGate = ByteUtil.reverseHex(msgi.substring(24, 28)); + String longGate = ByteUtil.reverseHex(msgi.substring(28, 32)); + String qlong = ByteUtil.reverseHex(msgi.substring(48, 56)); + String qshort = ByteUtil.reverseHex(msgi.substring(56, 64)); log.info("gateOff--->" + gateOff + "baseline--->" + baseline + "shortGate--->" + shortGate + @@ -146,7 +127,7 @@ "qlong--->" + qlong + "qshort--->" + qshort); - psdList.add(new Psd(1L, gateOff, baseline, shortGate, longGate, qlong, qshort, DateUtil.formatDateTime(new Date()))); + psdList.add(new Psd(gateOff, baseline, shortGate, longGate, qlong, qshort, DateUtil.formatDateTime(new Date()))); } } } else { @@ -168,23 +149,23 @@ int totalLength = Integer.parseInt(ByteUtil.reverseHex(str.substring(str.indexOf(InstructCode.PSD1_HEAD) + 16, str.indexOf(InstructCode.PSD1_HEAD) + 24)), 16); if (str.length() >= totalLength * 2) { + PSD_FLAG = false; for (int i = 0; i < (str.length() - (str.indexOf(InstructCode.PSD1_HEAD) + 24)) / 64; i++) { String msgi = str.substring((str.indexOf(InstructCode.PSD1_HEAD) + 24) + i * 64, (str.indexOf(InstructCode.PSD1_HEAD) + 24) + (i + 1) * 64); if (msgi.indexOf(InstructCode.PSD2_HEAD) == 0) { - String gateOff = msgi.substring(16, 20); - String baseline = msgi.substring(20, 24); - String shortGate = msgi.substring(24, 28); - String longGate = msgi.substring(28, 32); - String qlong = msgi.substring(48, 56); - String qshort = msgi.substring(56, 64); - //toDo:算法计算 + String gateOff = ByteUtil.reverseHex(msgi.substring(16, 20)); + String baseline = ByteUtil.reverseHex(msgi.substring(20, 24)); + String shortGate = ByteUtil.reverseHex(msgi.substring(24, 28)); + String longGate = ByteUtil.reverseHex(msgi.substring(28, 32)); + String qlong = ByteUtil.reverseHex(msgi.substring(48, 56)); + String qshort = ByteUtil.reverseHex(msgi.substring(56, 64)); log.info("分包:gateOff--->" + gateOff + "baseline--->" + baseline + "shortGate--->" + shortGate + "longGate--->" + longGate + "qlong--->" + qlong + "qshort--->" + qshort); - psdList.add(new Psd(1L, gateOff, baseline, shortGate, longGate, qlong, qshort, DateUtil.formatDateTime(new Date()))); + psdList.add(new Psd(gateOff, baseline, shortGate, longGate, qlong, qshort, DateUtil.formatDateTime(new Date()))); } } } @@ -211,7 +192,7 @@ //本设备只用到第6通道 String vol6 = volArr[5]; log.info("第6通道电压值-------->" + vol6); - volList.add(new Vol(1L, Long.parseLong(vol6,16)+"", DateUtil.formatDateTime(new Date()))); + volList.add(new Vol(Long.parseLong(vol6,16)+"", DateUtil.formatDateTime(new Date()))); } else { //分包处理,先放到缓存 VOL_FLAG = true; @@ -222,15 +203,15 @@ VOL_I++; CacheUtils.VOL_MAP.put(VOL_I, msg); String str = startVolMapCache(); - if (ObjectUtil.isNotEmpty(str) && + VOL_FLAG = false; + if (ObjectUtil.isNotEmpty(str) &&str.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) != -1&& str.length() >= (str.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) + 24 + InstructCode.DAC_DATA_LENGTH)) { - VOL_FLAG = false; str = str.substring(str.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) + 24); String[] volArr = InstructCode.getVolArr(str); //本设备只用到第6通道 String vol6 = volArr[5]; log.info("分包第6通道电压值-------->" + vol6); - volList.add(new Vol(1L, Long.parseLong(vol6,16)+"", DateUtil.formatDateTime(new Date()))); + volList.add(new Vol(Long.parseLong(vol6,16)+"", DateUtil.formatDateTime(new Date()))); } } return volList; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index 4f1136b..d560517 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -2,6 +2,7 @@ import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.HsRequest; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; @@ -34,9 +35,9 @@ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") @PostMapping("/control") @ResponseBody - public ResponseDataDTO control(String command,Long detectorId) { + public ResponseDataDTO control(String command, Long detectorId) { //toDo:需要加返回值 - neutronOptService.control(command,detectorId); + neutronOptService.control(command, detectorId); return ResponseDataDTO.success(); } @@ -57,5 +58,18 @@ return ResponseDataDTO.success(iPsdService.dataList(taskId)); } + @ApiOperation("主界面HS显示,需传探测器detectorId,type值为1:启动,0:停止") + @PostMapping("/hsList") + @ResponseBody + public ResponseDataDTO hsList(HsRequest request) { + + return ResponseDataDTO.success(neutronOptService.hsList(request.getDetectorId(), + request.getType(), + request.getX1(), + request.getX2(), + request.getX3(), + request.getX4())); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml index 5ac549c..236aa30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml @@ -31,7 +31,7 @@ FROM detector_info di WHERE di.robot_id = #{robotId}) AND dp.CREATE_TIME >= #{startTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 ORDER BY dp.CREATE_TIME ASC LIMIT 13 @@ -50,7 +50,7 @@ and dp.CREATE_TIME #{endTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 GROUP BY dp.CREATE_TIME ORDER BY dp.CREATE_TIME ASC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java new file mode 100644 index 0000000..4b42612 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * psd报警DTO + */ +@Data +public class HsDTO { + + @ApiModelProperty(value = "psd横坐标值(道数)") + private Integer psdX; + @ApiModelProperty(value = "psd纵坐标值") + private Integer psdY; + @ApiModelProperty(value = "psd1横坐标值(道数)") + private Integer psdX1; + @ApiModelProperty(value = "psd1纵坐标值") + private Integer psdY1; + @ApiModelProperty(value = "mca横坐标值(道数)") + private Integer mcaX; + @ApiModelProperty(value = "mca纵坐标值") + private Integer mcaY; + @ApiModelProperty(value = "mca1横坐标值(道数)") + private Integer mcaX1; + @ApiModelProperty(value = "mca1纵坐标值") + private Integer mcaY1; +// @ApiModelProperty(value = "时间值") +// private String timeCount; + + public HsDTO() { + } + + public HsDTO(int psdX, int psdY, int mcaX, int mcaY) { + this.psdX = psdX; + this.psdY = psdY; + this.mcaX = mcaX; + this.mcaY = mcaY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java new file mode 100644 index 0000000..2f83779 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Hs请求参数Request + */ +@Data +public class HsRequest { + + @ApiModelProperty(value = "探测器Id") + Long detectorId; + @ApiModelProperty(value = "type值为1:启动,0:停止") + String type; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标开始值") + int x1; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标截止值") + int x2; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标开始值") + int x3; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标截止值") + int x4; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java index e54ac10..540ba70 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java @@ -44,6 +44,10 @@ private String qshort; @TableField("PSD") private String psd; + @TableField("PSDX") + private String psdx; + @TableField("MCAX") + private String mcax; @TableField("IP_PORT") private String ipPort; /** @@ -61,8 +65,9 @@ public Psd() { } - public Psd(Long detectorId, String gateOffet, String baseLine, String shortGate, String longGate, String qlong, String qshort, String createTime) { - this.detectorId = detectorId; + public Psd(String gateOffet, String baseLine, String shortGate, + String longGate, String qlong, String qshort, + String createTime) { this.gateOffet = gateOffet; this.baseLine = baseLine; this.shortGate = shortGate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java index ef4fc59..a65e5b0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java @@ -61,8 +61,7 @@ public Vol() { } - public Vol(Long detectorId, String volData6, String createTime) { - this.detectorId = detectorId; + public Vol( String volData6, String createTime) { this.volData6 = volData6; this.createTime = createTime; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java index 34d7056..277ccc2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.neutron.service; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import java.util.List; @@ -25,7 +26,7 @@ * No.3 解析 * 设备会在tcp上 上报数据,读取后进行解析 */ - void analysis(String deviceIpPort,String msg); + void analysis(String deviceIpPort,String msg,Long uid); /** * No.4 退高压,停止工作 @@ -41,4 +42,6 @@ List alarmList(Long taskId); + boolean hsList(Long detectorId, String type,int x1, int x2, int x3, int x4); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java index 321336b..462f31a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java @@ -21,4 +21,6 @@ List dataList(Long taskId); + List hsList(Long detectorId,String type); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java index c15e68c..9e0e888 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java @@ -37,7 +37,7 @@ try { for (int i = 1; i <= codeArr.length / 3; i++) { - nettyClient.send(codeArr[i * 3 - 1]); + nettyClient.send(config.getDetectorId(),codeArr[i * 3 - 1]); Thread.sleep(500); } } catch (InterruptedException e) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java index 7171d3b..9f7768a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java @@ -2,7 +2,9 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.neutron.dto.HsDTO; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; import com.casic.missiles.modular.neutron.service.IDetectorLogService; @@ -13,12 +15,14 @@ import com.casic.missiles.netty.InstructCode; import com.casic.missiles.netty.NettyClient; import com.casic.missiles.common.WebSocket; +import com.sun.javafx.util.Utils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -42,7 +46,7 @@ try { for (int i = 1; i <= InstructCode.InitCodeArr.length / 3; i++) { - nettyClient.send(InstructCode.InitCodeArr[i * 3 - 1]); + nettyClient.send(detectorId, InstructCode.InitCodeArr[i * 3 - 1]); Thread.sleep(500); } } catch (InterruptedException e) { @@ -52,26 +56,30 @@ @Override public void pressurize(Long detectorId) { - if (nettyClient.send(InstructCode.DAC_UP)) { + if (nettyClient.send(detectorId, InstructCode.DAC_UP)) { iLogService.addLog(detectorId, "6", "start"); } } @Override @Async("syncExecutorPool") - public void analysis(String deviceIpPort, String msg) { + public void analysis(String deviceIpPort, String msg, Long uid) { Map resultMap = CacheUtils.processData(msg); List psdList = (List) resultMap.get("psd"); List volList = (List) resultMap.get("vol"); if (volList != null && volList.size() > 0) { volList.forEach(vol -> { + JSONObject headerJson = new JSONObject(); + headerJson.put("msgKey", "detector_vol"); JSONObject jsonObject = new JSONObject(); jsonObject.put("deviceIp", deviceIpPort); jsonObject.put("vol", vol.getVolData6()); jsonObject.put("time", vol.getCreateTime()); - webSocket.sendAllMessage(jsonObject.toJSONString()); - log.info("推送电压数据"+jsonObject.toJSONString()); + headerJson.put("data", jsonObject); + webSocket.sendAllMessage(headerJson.toJSONString()); + log.info("推送电压数据" + headerJson.toJSONString()); vol.setIpPort(deviceIpPort.substring(1)); + vol.setDetectorId(uid); }); iVolService.saveBatch(volList); } @@ -85,15 +93,75 @@ Long Qshort = Math.abs(Long.valueOf(psd.getQshort(), 16) - Long.parseLong(psd.getBaseLine(), 16) * Long.parseLong(psd.getShortGate(), 16)); Double psdRate = (Qlong - Qshort) * 1.000 / Qlong; psd.setPsd(String.format("%.2f", psdRate)); + psd.setDetectorId(uid); + //设置psdx值 toDo:4096、100000 需要自动取 + int psdx = (int) ((Qlong - Qshort) * 1.000 / Qlong * 4096); + int mcax = (int) ((Qlong) * 1.00000 / 100000 * 4096); + psd.setPsdx(psdx + ""); + psd.setMcax(mcax + ""); + //根据是否启动,向前端推送hs曲线数值 + if (hsFlag) { + HsDTO hsDTO = new HsDTO(psdx, 1, mcax, 1); + if (psdx < 0 || psdx > 4096) { + hsDTO.setPsdX(null); + hsDTO.setPsdY(null); + } + if (mcax < 0 || mcax > 4096) { + hsDTO.setMcaX(null); + hsDTO.setMcaY(null); + } + //psd数据叠加到mca曲线上 + if (psdx >= x3_3 && psdx <= x4_4) { + hsDTO.setMcaX1(mcax); + hsDTO.setMcaY1(1); + } + //mca数据叠加到psd曲线上 + if (mcax >= x1_1 && mcax <= x2_2) { + if (psdx > 0) { + hsDTO.setPsdX1(psdx); + hsDTO.setPsdY1(1); + } + } + JSONObject headJson = new JSONObject(); + headJson.put("msgKey", "detector_hs"); + headJson.put("data", hsDTO); + webSocket.sendAllMessage(headJson.toJSONString()); + log.info("推送HS数据" + headJson.toJSONString()); + } } }); iPsdService.saveBatch(psdList); } } + + private volatile boolean hsFlag = false; + private volatile int x1_1 = 0; + private volatile int x2_2 = 0; + private volatile int x3_3 = 0; + private volatile int x4_4 = 0; +// private volatile List hsDTOList = new ArrayList<>() ; + + @Override + public boolean hsList(Long detectorId, String type, int x1, int x2, int x3, int x4) { + x1_1 = x1; + x2_2 = x2; + x3_3 = x3; + x4_4 = x4; + switch (type) { + case "1": + hsFlag = true; + break; + case "0": + hsFlag = false; + break; + } + return true; + } + @Override public void depress(Long detectorId) { - if (nettyClient.send(InstructCode.DAC_DOWN)) { + if (nettyClient.send(detectorId, InstructCode.DAC_DOWN)) { iLogService.addLog(detectorId, "6", "stop"); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java index 8a20e31..f1adc1e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java @@ -58,7 +58,7 @@ long countX = DateUtil.between(DateUtil.parseDateTime(last.getTimeCount()), DateUtil.parseDateTime(startTime), DateUnit.SECOND, true); for (int i = 0; i <= countX / 5; i++) { if (i == 0) { - psdDataDTOS.add(new PsdDataDTO("0", "0")); + psdDataDTOS.add(new PsdDataDTO("0", "0")); continue; } int countY = 0; @@ -74,7 +74,7 @@ } } } - psdDataDTO.setValueCount((int) Math.ceil(countY / 5) + ""); + psdDataDTO.setValueCount(String.format("%.2f",countY*1.00 / 5)); psdDataDTOS.add(psdDataDTO); } } @@ -105,10 +105,14 @@ trajectoryInfo.getPostionY() + "", alarmTime)); return psdAlarmDTOList; - } } } return psdAlarmDTOList; } + + @Override + public List hsList(Long detectorId,String type) { + return null; + } } diff --git a/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java b/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java index 8b9aaf2..7531a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java @@ -58,14 +58,6 @@ } if (ObjectUtil.isNotEmpty(msgs)) { CacheUtils.VOL_MAP.clear(); - //继续拆包处理 -// String msgLast = ""; -// if (msgs.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) != -1) { -// if (msgs.length() < (msgs.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) + 24 + InstructCode.DAC_DATA_LENGTH)) { -// msgLast = msgs.substring(msgs.indexOf(msgs.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH))); -// CacheUtils.VOL_MAP.put(keyInts.get(keyInts.size() - 1), msgLast); -// } -// } } } @@ -83,17 +75,6 @@ } if (ObjectUtil.isNotEmpty(msgs)) { CacheUtils.PSD_MAP.clear(); - //继续拆包处理 -// String msgLast = ""; -// if (msgs.indexOf(InstructCode.PSD1_HEAD) != -1) { -// if (msgs.length() >= 24) { -// int totalLength = Integer.parseInt(ByteUtil.reverseHex(msgs.substring(msgs.indexOf(InstructCode.PSD1_HEAD) + 16, 24)), 16); -// if (msgs.length() < totalLength * 2) { -// msgLast = msgs.substring(msgs.indexOf(InstructCode.PSD1_HEAD)); -// CacheUtils.PSD_MAP.put(keyInts.get(keyInts.size() - 1), msgLast); -// } -// } -// } } } return msgs; @@ -133,12 +114,12 @@ for (int i = 0; i < (msg.length() - (msg.indexOf(InstructCode.PSD1_HEAD) + 24)) / 64; i++) { String msgi = msg.substring((msg.indexOf(InstructCode.PSD1_HEAD) + 24) + i * 64, (msg.indexOf(InstructCode.PSD1_HEAD) + 24) + (i + 1) * 64); if (msgi.indexOf(InstructCode.PSD2_HEAD) == 0) { - String gateOff = msgi.substring(16, 20); - String baseline = msgi.substring(20, 24); - String shortGate = msgi.substring(24, 28); - String longGate = msgi.substring(28, 32); - String qlong = msgi.substring(48, 56); - String qshort = msgi.substring(56, 64); + String gateOff = ByteUtil.reverseHex(msgi.substring(16, 20)); + String baseline = ByteUtil.reverseHex(msgi.substring(20, 24)); + String shortGate = ByteUtil.reverseHex(msgi.substring(24, 28)); + String longGate = ByteUtil.reverseHex(msgi.substring(28, 32)); + String qlong = ByteUtil.reverseHex(msgi.substring(48, 56)); + String qshort = ByteUtil.reverseHex(msgi.substring(56, 64)); log.info("gateOff--->" + gateOff + "baseline--->" + baseline + "shortGate--->" + shortGate + @@ -146,7 +127,7 @@ "qlong--->" + qlong + "qshort--->" + qshort); - psdList.add(new Psd(1L, gateOff, baseline, shortGate, longGate, qlong, qshort, DateUtil.formatDateTime(new Date()))); + psdList.add(new Psd(gateOff, baseline, shortGate, longGate, qlong, qshort, DateUtil.formatDateTime(new Date()))); } } } else { @@ -168,23 +149,23 @@ int totalLength = Integer.parseInt(ByteUtil.reverseHex(str.substring(str.indexOf(InstructCode.PSD1_HEAD) + 16, str.indexOf(InstructCode.PSD1_HEAD) + 24)), 16); if (str.length() >= totalLength * 2) { + PSD_FLAG = false; for (int i = 0; i < (str.length() - (str.indexOf(InstructCode.PSD1_HEAD) + 24)) / 64; i++) { String msgi = str.substring((str.indexOf(InstructCode.PSD1_HEAD) + 24) + i * 64, (str.indexOf(InstructCode.PSD1_HEAD) + 24) + (i + 1) * 64); if (msgi.indexOf(InstructCode.PSD2_HEAD) == 0) { - String gateOff = msgi.substring(16, 20); - String baseline = msgi.substring(20, 24); - String shortGate = msgi.substring(24, 28); - String longGate = msgi.substring(28, 32); - String qlong = msgi.substring(48, 56); - String qshort = msgi.substring(56, 64); - //toDo:算法计算 + String gateOff = ByteUtil.reverseHex(msgi.substring(16, 20)); + String baseline = ByteUtil.reverseHex(msgi.substring(20, 24)); + String shortGate = ByteUtil.reverseHex(msgi.substring(24, 28)); + String longGate = ByteUtil.reverseHex(msgi.substring(28, 32)); + String qlong = ByteUtil.reverseHex(msgi.substring(48, 56)); + String qshort = ByteUtil.reverseHex(msgi.substring(56, 64)); log.info("分包:gateOff--->" + gateOff + "baseline--->" + baseline + "shortGate--->" + shortGate + "longGate--->" + longGate + "qlong--->" + qlong + "qshort--->" + qshort); - psdList.add(new Psd(1L, gateOff, baseline, shortGate, longGate, qlong, qshort, DateUtil.formatDateTime(new Date()))); + psdList.add(new Psd(gateOff, baseline, shortGate, longGate, qlong, qshort, DateUtil.formatDateTime(new Date()))); } } } @@ -211,7 +192,7 @@ //本设备只用到第6通道 String vol6 = volArr[5]; log.info("第6通道电压值-------->" + vol6); - volList.add(new Vol(1L, Long.parseLong(vol6,16)+"", DateUtil.formatDateTime(new Date()))); + volList.add(new Vol(Long.parseLong(vol6,16)+"", DateUtil.formatDateTime(new Date()))); } else { //分包处理,先放到缓存 VOL_FLAG = true; @@ -222,15 +203,15 @@ VOL_I++; CacheUtils.VOL_MAP.put(VOL_I, msg); String str = startVolMapCache(); - if (ObjectUtil.isNotEmpty(str) && + VOL_FLAG = false; + if (ObjectUtil.isNotEmpty(str) &&str.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) != -1&& str.length() >= (str.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) + 24 + InstructCode.DAC_DATA_LENGTH)) { - VOL_FLAG = false; str = str.substring(str.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) + 24); String[] volArr = InstructCode.getVolArr(str); //本设备只用到第6通道 String vol6 = volArr[5]; log.info("分包第6通道电压值-------->" + vol6); - volList.add(new Vol(1L, Long.parseLong(vol6,16)+"", DateUtil.formatDateTime(new Date()))); + volList.add(new Vol(Long.parseLong(vol6,16)+"", DateUtil.formatDateTime(new Date()))); } } return volList; diff --git a/casic-server/src/main/java/com/casic/missiles/netty/ChannelCache.java b/casic-server/src/main/java/com/casic/missiles/netty/ChannelCache.java index 24ec5a5..d58645a 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/ChannelCache.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/ChannelCache.java @@ -1,44 +1,36 @@ package com.casic.missiles.netty; +import cn.hutool.core.util.ObjectUtil; import io.netty.channel.Channel; -import io.netty.channel.group.ChannelGroup; -import io.netty.channel.group.DefaultChannelGroup; -import io.netty.util.concurrent.GlobalEventExecutor; -import org.springframework.context.annotation.Configuration; +import io.netty.util.AttributeKey; +import org.springframework.stereotype.Component; import java.util.concurrent.ConcurrentHashMap; -@Configuration +@Component public class ChannelCache { - // 存储所有Channel - private ChannelGroup channelGroup = new DefaultChannelGroup("channelGroups", GlobalEventExecutor.INSTANCE); - // 存储Channel.id().asLongText()和用户id对应关系 - private ConcurrentHashMap channelIdUid = new ConcurrentHashMap(); + // 存储用户id和Channel.id().asLongText()对应关系 + private static final ConcurrentHashMap channelMap = new ConcurrentHashMap(); - public ChannelGroup getChannelGroup() { - return channelGroup; - } + // 存储用户id和Channel.id().asLongText()对应关系 + private static final ConcurrentHashMap channelIdUid = new ConcurrentHashMap(); - public ConcurrentHashMap getChannelIdUid() { + private static final AttributeKey CHANNEL_ATTR_KEY = AttributeKey.valueOf("user"); + + + public ConcurrentHashMap getChannelIdUid() { return channelIdUid; } - /** * 获取Channel * * @return */ - public Channel getChannel(Channel channel) { - Channel channel_ = channelGroup.find(channel.id()); - if (channel_ != null) { - return channel_; - } - return null; - } + /** * 添加Channel到ChannelGroup @@ -46,15 +38,14 @@ * @param uid * @param channel */ - public void addChannel(Channel channel, int uid) { - Channel channel_ = channelGroup.find(channel.id()); - if (channel_ == null) { - channelGroup.add(channel); - } + public synchronized void addChannel(Channel channel, String uid) { - // redis添加对应用户和channelId之前的关系 - Integer userId = channelIdUid.get(channel.id().asLongText()); - channelIdUid.put(channel.id().asLongText(), userId); + channel.attr(CHANNEL_ATTR_KEY).set(uid); + Channel channel_ = channelMap.get(channel.id().asLongText()); + if (channel_ == null) { + channelMap.put(channel.id().asLongText(), channel); + } + channelIdUid.put(uid, channel.id().asLongText()); } /** @@ -62,17 +53,36 @@ * * @param channel */ - public void removeChannel(Channel channel) { - Channel channel_ = channelGroup.find(channel.id()); + public synchronized void removeChannel(Channel channel) { + Channel channel_ = channelMap.get(channel.id().asLongText()); if (channel_ != null) { - channelGroup.remove(channel_); + channelMap.remove(channel.id().asLongText()); } - Integer userId = channelIdUid.get(channel.id().asLongText()); + String userId = channel.attr(CHANNEL_ATTR_KEY).get(); if (userId != null) { - channelIdUid.remove(channel.id().asLongText()); + channelIdUid.remove(userId); } } + /** + * 获取Channel + * + * @return + */ + /** + * 根据用户id获取该用户的通道 + * + * @param userId + * @return + */ + public synchronized Channel getChannelByUserId(String userId) { + String channelIdStr = channelIdUid.get(userId); + if (ObjectUtil.isNotEmpty(channelIdStr)) { + return channelMap.get(channelIdStr); + } + return null; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index 4f1136b..d560517 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -2,6 +2,7 @@ import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.HsRequest; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; @@ -34,9 +35,9 @@ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") @PostMapping("/control") @ResponseBody - public ResponseDataDTO control(String command,Long detectorId) { + public ResponseDataDTO control(String command, Long detectorId) { //toDo:需要加返回值 - neutronOptService.control(command,detectorId); + neutronOptService.control(command, detectorId); return ResponseDataDTO.success(); } @@ -57,5 +58,18 @@ return ResponseDataDTO.success(iPsdService.dataList(taskId)); } + @ApiOperation("主界面HS显示,需传探测器detectorId,type值为1:启动,0:停止") + @PostMapping("/hsList") + @ResponseBody + public ResponseDataDTO hsList(HsRequest request) { + + return ResponseDataDTO.success(neutronOptService.hsList(request.getDetectorId(), + request.getType(), + request.getX1(), + request.getX2(), + request.getX3(), + request.getX4())); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml index 5ac549c..236aa30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml @@ -31,7 +31,7 @@ FROM detector_info di WHERE di.robot_id = #{robotId}) AND dp.CREATE_TIME >= #{startTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 ORDER BY dp.CREATE_TIME ASC LIMIT 13 @@ -50,7 +50,7 @@ and dp.CREATE_TIME #{endTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 GROUP BY dp.CREATE_TIME ORDER BY dp.CREATE_TIME ASC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java new file mode 100644 index 0000000..4b42612 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * psd报警DTO + */ +@Data +public class HsDTO { + + @ApiModelProperty(value = "psd横坐标值(道数)") + private Integer psdX; + @ApiModelProperty(value = "psd纵坐标值") + private Integer psdY; + @ApiModelProperty(value = "psd1横坐标值(道数)") + private Integer psdX1; + @ApiModelProperty(value = "psd1纵坐标值") + private Integer psdY1; + @ApiModelProperty(value = "mca横坐标值(道数)") + private Integer mcaX; + @ApiModelProperty(value = "mca纵坐标值") + private Integer mcaY; + @ApiModelProperty(value = "mca1横坐标值(道数)") + private Integer mcaX1; + @ApiModelProperty(value = "mca1纵坐标值") + private Integer mcaY1; +// @ApiModelProperty(value = "时间值") +// private String timeCount; + + public HsDTO() { + } + + public HsDTO(int psdX, int psdY, int mcaX, int mcaY) { + this.psdX = psdX; + this.psdY = psdY; + this.mcaX = mcaX; + this.mcaY = mcaY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java new file mode 100644 index 0000000..2f83779 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Hs请求参数Request + */ +@Data +public class HsRequest { + + @ApiModelProperty(value = "探测器Id") + Long detectorId; + @ApiModelProperty(value = "type值为1:启动,0:停止") + String type; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标开始值") + int x1; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标截止值") + int x2; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标开始值") + int x3; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标截止值") + int x4; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java index e54ac10..540ba70 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java @@ -44,6 +44,10 @@ private String qshort; @TableField("PSD") private String psd; + @TableField("PSDX") + private String psdx; + @TableField("MCAX") + private String mcax; @TableField("IP_PORT") private String ipPort; /** @@ -61,8 +65,9 @@ public Psd() { } - public Psd(Long detectorId, String gateOffet, String baseLine, String shortGate, String longGate, String qlong, String qshort, String createTime) { - this.detectorId = detectorId; + public Psd(String gateOffet, String baseLine, String shortGate, + String longGate, String qlong, String qshort, + String createTime) { this.gateOffet = gateOffet; this.baseLine = baseLine; this.shortGate = shortGate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java index ef4fc59..a65e5b0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java @@ -61,8 +61,7 @@ public Vol() { } - public Vol(Long detectorId, String volData6, String createTime) { - this.detectorId = detectorId; + public Vol( String volData6, String createTime) { this.volData6 = volData6; this.createTime = createTime; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java index 34d7056..277ccc2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.neutron.service; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import java.util.List; @@ -25,7 +26,7 @@ * No.3 解析 * 设备会在tcp上 上报数据,读取后进行解析 */ - void analysis(String deviceIpPort,String msg); + void analysis(String deviceIpPort,String msg,Long uid); /** * No.4 退高压,停止工作 @@ -41,4 +42,6 @@ List alarmList(Long taskId); + boolean hsList(Long detectorId, String type,int x1, int x2, int x3, int x4); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java index 321336b..462f31a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java @@ -21,4 +21,6 @@ List dataList(Long taskId); + List hsList(Long detectorId,String type); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java index c15e68c..9e0e888 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java @@ -37,7 +37,7 @@ try { for (int i = 1; i <= codeArr.length / 3; i++) { - nettyClient.send(codeArr[i * 3 - 1]); + nettyClient.send(config.getDetectorId(),codeArr[i * 3 - 1]); Thread.sleep(500); } } catch (InterruptedException e) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java index 7171d3b..9f7768a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java @@ -2,7 +2,9 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.neutron.dto.HsDTO; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; import com.casic.missiles.modular.neutron.service.IDetectorLogService; @@ -13,12 +15,14 @@ import com.casic.missiles.netty.InstructCode; import com.casic.missiles.netty.NettyClient; import com.casic.missiles.common.WebSocket; +import com.sun.javafx.util.Utils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -42,7 +46,7 @@ try { for (int i = 1; i <= InstructCode.InitCodeArr.length / 3; i++) { - nettyClient.send(InstructCode.InitCodeArr[i * 3 - 1]); + nettyClient.send(detectorId, InstructCode.InitCodeArr[i * 3 - 1]); Thread.sleep(500); } } catch (InterruptedException e) { @@ -52,26 +56,30 @@ @Override public void pressurize(Long detectorId) { - if (nettyClient.send(InstructCode.DAC_UP)) { + if (nettyClient.send(detectorId, InstructCode.DAC_UP)) { iLogService.addLog(detectorId, "6", "start"); } } @Override @Async("syncExecutorPool") - public void analysis(String deviceIpPort, String msg) { + public void analysis(String deviceIpPort, String msg, Long uid) { Map resultMap = CacheUtils.processData(msg); List psdList = (List) resultMap.get("psd"); List volList = (List) resultMap.get("vol"); if (volList != null && volList.size() > 0) { volList.forEach(vol -> { + JSONObject headerJson = new JSONObject(); + headerJson.put("msgKey", "detector_vol"); JSONObject jsonObject = new JSONObject(); jsonObject.put("deviceIp", deviceIpPort); jsonObject.put("vol", vol.getVolData6()); jsonObject.put("time", vol.getCreateTime()); - webSocket.sendAllMessage(jsonObject.toJSONString()); - log.info("推送电压数据"+jsonObject.toJSONString()); + headerJson.put("data", jsonObject); + webSocket.sendAllMessage(headerJson.toJSONString()); + log.info("推送电压数据" + headerJson.toJSONString()); vol.setIpPort(deviceIpPort.substring(1)); + vol.setDetectorId(uid); }); iVolService.saveBatch(volList); } @@ -85,15 +93,75 @@ Long Qshort = Math.abs(Long.valueOf(psd.getQshort(), 16) - Long.parseLong(psd.getBaseLine(), 16) * Long.parseLong(psd.getShortGate(), 16)); Double psdRate = (Qlong - Qshort) * 1.000 / Qlong; psd.setPsd(String.format("%.2f", psdRate)); + psd.setDetectorId(uid); + //设置psdx值 toDo:4096、100000 需要自动取 + int psdx = (int) ((Qlong - Qshort) * 1.000 / Qlong * 4096); + int mcax = (int) ((Qlong) * 1.00000 / 100000 * 4096); + psd.setPsdx(psdx + ""); + psd.setMcax(mcax + ""); + //根据是否启动,向前端推送hs曲线数值 + if (hsFlag) { + HsDTO hsDTO = new HsDTO(psdx, 1, mcax, 1); + if (psdx < 0 || psdx > 4096) { + hsDTO.setPsdX(null); + hsDTO.setPsdY(null); + } + if (mcax < 0 || mcax > 4096) { + hsDTO.setMcaX(null); + hsDTO.setMcaY(null); + } + //psd数据叠加到mca曲线上 + if (psdx >= x3_3 && psdx <= x4_4) { + hsDTO.setMcaX1(mcax); + hsDTO.setMcaY1(1); + } + //mca数据叠加到psd曲线上 + if (mcax >= x1_1 && mcax <= x2_2) { + if (psdx > 0) { + hsDTO.setPsdX1(psdx); + hsDTO.setPsdY1(1); + } + } + JSONObject headJson = new JSONObject(); + headJson.put("msgKey", "detector_hs"); + headJson.put("data", hsDTO); + webSocket.sendAllMessage(headJson.toJSONString()); + log.info("推送HS数据" + headJson.toJSONString()); + } } }); iPsdService.saveBatch(psdList); } } + + private volatile boolean hsFlag = false; + private volatile int x1_1 = 0; + private volatile int x2_2 = 0; + private volatile int x3_3 = 0; + private volatile int x4_4 = 0; +// private volatile List hsDTOList = new ArrayList<>() ; + + @Override + public boolean hsList(Long detectorId, String type, int x1, int x2, int x3, int x4) { + x1_1 = x1; + x2_2 = x2; + x3_3 = x3; + x4_4 = x4; + switch (type) { + case "1": + hsFlag = true; + break; + case "0": + hsFlag = false; + break; + } + return true; + } + @Override public void depress(Long detectorId) { - if (nettyClient.send(InstructCode.DAC_DOWN)) { + if (nettyClient.send(detectorId, InstructCode.DAC_DOWN)) { iLogService.addLog(detectorId, "6", "stop"); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java index 8a20e31..f1adc1e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java @@ -58,7 +58,7 @@ long countX = DateUtil.between(DateUtil.parseDateTime(last.getTimeCount()), DateUtil.parseDateTime(startTime), DateUnit.SECOND, true); for (int i = 0; i <= countX / 5; i++) { if (i == 0) { - psdDataDTOS.add(new PsdDataDTO("0", "0")); + psdDataDTOS.add(new PsdDataDTO("0", "0")); continue; } int countY = 0; @@ -74,7 +74,7 @@ } } } - psdDataDTO.setValueCount((int) Math.ceil(countY / 5) + ""); + psdDataDTO.setValueCount(String.format("%.2f",countY*1.00 / 5)); psdDataDTOS.add(psdDataDTO); } } @@ -105,10 +105,14 @@ trajectoryInfo.getPostionY() + "", alarmTime)); return psdAlarmDTOList; - } } } return psdAlarmDTOList; } + + @Override + public List hsList(Long detectorId,String type) { + return null; + } } diff --git a/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java b/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java index 8b9aaf2..7531a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java @@ -58,14 +58,6 @@ } if (ObjectUtil.isNotEmpty(msgs)) { CacheUtils.VOL_MAP.clear(); - //继续拆包处理 -// String msgLast = ""; -// if (msgs.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) != -1) { -// if (msgs.length() < (msgs.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) + 24 + InstructCode.DAC_DATA_LENGTH)) { -// msgLast = msgs.substring(msgs.indexOf(msgs.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH))); -// CacheUtils.VOL_MAP.put(keyInts.get(keyInts.size() - 1), msgLast); -// } -// } } } @@ -83,17 +75,6 @@ } if (ObjectUtil.isNotEmpty(msgs)) { CacheUtils.PSD_MAP.clear(); - //继续拆包处理 -// String msgLast = ""; -// if (msgs.indexOf(InstructCode.PSD1_HEAD) != -1) { -// if (msgs.length() >= 24) { -// int totalLength = Integer.parseInt(ByteUtil.reverseHex(msgs.substring(msgs.indexOf(InstructCode.PSD1_HEAD) + 16, 24)), 16); -// if (msgs.length() < totalLength * 2) { -// msgLast = msgs.substring(msgs.indexOf(InstructCode.PSD1_HEAD)); -// CacheUtils.PSD_MAP.put(keyInts.get(keyInts.size() - 1), msgLast); -// } -// } -// } } } return msgs; @@ -133,12 +114,12 @@ for (int i = 0; i < (msg.length() - (msg.indexOf(InstructCode.PSD1_HEAD) + 24)) / 64; i++) { String msgi = msg.substring((msg.indexOf(InstructCode.PSD1_HEAD) + 24) + i * 64, (msg.indexOf(InstructCode.PSD1_HEAD) + 24) + (i + 1) * 64); if (msgi.indexOf(InstructCode.PSD2_HEAD) == 0) { - String gateOff = msgi.substring(16, 20); - String baseline = msgi.substring(20, 24); - String shortGate = msgi.substring(24, 28); - String longGate = msgi.substring(28, 32); - String qlong = msgi.substring(48, 56); - String qshort = msgi.substring(56, 64); + String gateOff = ByteUtil.reverseHex(msgi.substring(16, 20)); + String baseline = ByteUtil.reverseHex(msgi.substring(20, 24)); + String shortGate = ByteUtil.reverseHex(msgi.substring(24, 28)); + String longGate = ByteUtil.reverseHex(msgi.substring(28, 32)); + String qlong = ByteUtil.reverseHex(msgi.substring(48, 56)); + String qshort = ByteUtil.reverseHex(msgi.substring(56, 64)); log.info("gateOff--->" + gateOff + "baseline--->" + baseline + "shortGate--->" + shortGate + @@ -146,7 +127,7 @@ "qlong--->" + qlong + "qshort--->" + qshort); - psdList.add(new Psd(1L, gateOff, baseline, shortGate, longGate, qlong, qshort, DateUtil.formatDateTime(new Date()))); + psdList.add(new Psd(gateOff, baseline, shortGate, longGate, qlong, qshort, DateUtil.formatDateTime(new Date()))); } } } else { @@ -168,23 +149,23 @@ int totalLength = Integer.parseInt(ByteUtil.reverseHex(str.substring(str.indexOf(InstructCode.PSD1_HEAD) + 16, str.indexOf(InstructCode.PSD1_HEAD) + 24)), 16); if (str.length() >= totalLength * 2) { + PSD_FLAG = false; for (int i = 0; i < (str.length() - (str.indexOf(InstructCode.PSD1_HEAD) + 24)) / 64; i++) { String msgi = str.substring((str.indexOf(InstructCode.PSD1_HEAD) + 24) + i * 64, (str.indexOf(InstructCode.PSD1_HEAD) + 24) + (i + 1) * 64); if (msgi.indexOf(InstructCode.PSD2_HEAD) == 0) { - String gateOff = msgi.substring(16, 20); - String baseline = msgi.substring(20, 24); - String shortGate = msgi.substring(24, 28); - String longGate = msgi.substring(28, 32); - String qlong = msgi.substring(48, 56); - String qshort = msgi.substring(56, 64); - //toDo:算法计算 + String gateOff = ByteUtil.reverseHex(msgi.substring(16, 20)); + String baseline = ByteUtil.reverseHex(msgi.substring(20, 24)); + String shortGate = ByteUtil.reverseHex(msgi.substring(24, 28)); + String longGate = ByteUtil.reverseHex(msgi.substring(28, 32)); + String qlong = ByteUtil.reverseHex(msgi.substring(48, 56)); + String qshort = ByteUtil.reverseHex(msgi.substring(56, 64)); log.info("分包:gateOff--->" + gateOff + "baseline--->" + baseline + "shortGate--->" + shortGate + "longGate--->" + longGate + "qlong--->" + qlong + "qshort--->" + qshort); - psdList.add(new Psd(1L, gateOff, baseline, shortGate, longGate, qlong, qshort, DateUtil.formatDateTime(new Date()))); + psdList.add(new Psd(gateOff, baseline, shortGate, longGate, qlong, qshort, DateUtil.formatDateTime(new Date()))); } } } @@ -211,7 +192,7 @@ //本设备只用到第6通道 String vol6 = volArr[5]; log.info("第6通道电压值-------->" + vol6); - volList.add(new Vol(1L, Long.parseLong(vol6,16)+"", DateUtil.formatDateTime(new Date()))); + volList.add(new Vol(Long.parseLong(vol6,16)+"", DateUtil.formatDateTime(new Date()))); } else { //分包处理,先放到缓存 VOL_FLAG = true; @@ -222,15 +203,15 @@ VOL_I++; CacheUtils.VOL_MAP.put(VOL_I, msg); String str = startVolMapCache(); - if (ObjectUtil.isNotEmpty(str) && + VOL_FLAG = false; + if (ObjectUtil.isNotEmpty(str) &&str.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) != -1&& str.length() >= (str.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) + 24 + InstructCode.DAC_DATA_LENGTH)) { - VOL_FLAG = false; str = str.substring(str.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) + 24); String[] volArr = InstructCode.getVolArr(str); //本设备只用到第6通道 String vol6 = volArr[5]; log.info("分包第6通道电压值-------->" + vol6); - volList.add(new Vol(1L, Long.parseLong(vol6,16)+"", DateUtil.formatDateTime(new Date()))); + volList.add(new Vol(Long.parseLong(vol6,16)+"", DateUtil.formatDateTime(new Date()))); } } return volList; diff --git a/casic-server/src/main/java/com/casic/missiles/netty/ChannelCache.java b/casic-server/src/main/java/com/casic/missiles/netty/ChannelCache.java index 24ec5a5..d58645a 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/ChannelCache.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/ChannelCache.java @@ -1,44 +1,36 @@ package com.casic.missiles.netty; +import cn.hutool.core.util.ObjectUtil; import io.netty.channel.Channel; -import io.netty.channel.group.ChannelGroup; -import io.netty.channel.group.DefaultChannelGroup; -import io.netty.util.concurrent.GlobalEventExecutor; -import org.springframework.context.annotation.Configuration; +import io.netty.util.AttributeKey; +import org.springframework.stereotype.Component; import java.util.concurrent.ConcurrentHashMap; -@Configuration +@Component public class ChannelCache { - // 存储所有Channel - private ChannelGroup channelGroup = new DefaultChannelGroup("channelGroups", GlobalEventExecutor.INSTANCE); - // 存储Channel.id().asLongText()和用户id对应关系 - private ConcurrentHashMap channelIdUid = new ConcurrentHashMap(); + // 存储用户id和Channel.id().asLongText()对应关系 + private static final ConcurrentHashMap channelMap = new ConcurrentHashMap(); - public ChannelGroup getChannelGroup() { - return channelGroup; - } + // 存储用户id和Channel.id().asLongText()对应关系 + private static final ConcurrentHashMap channelIdUid = new ConcurrentHashMap(); - public ConcurrentHashMap getChannelIdUid() { + private static final AttributeKey CHANNEL_ATTR_KEY = AttributeKey.valueOf("user"); + + + public ConcurrentHashMap getChannelIdUid() { return channelIdUid; } - /** * 获取Channel * * @return */ - public Channel getChannel(Channel channel) { - Channel channel_ = channelGroup.find(channel.id()); - if (channel_ != null) { - return channel_; - } - return null; - } + /** * 添加Channel到ChannelGroup @@ -46,15 +38,14 @@ * @param uid * @param channel */ - public void addChannel(Channel channel, int uid) { - Channel channel_ = channelGroup.find(channel.id()); - if (channel_ == null) { - channelGroup.add(channel); - } + public synchronized void addChannel(Channel channel, String uid) { - // redis添加对应用户和channelId之前的关系 - Integer userId = channelIdUid.get(channel.id().asLongText()); - channelIdUid.put(channel.id().asLongText(), userId); + channel.attr(CHANNEL_ATTR_KEY).set(uid); + Channel channel_ = channelMap.get(channel.id().asLongText()); + if (channel_ == null) { + channelMap.put(channel.id().asLongText(), channel); + } + channelIdUid.put(uid, channel.id().asLongText()); } /** @@ -62,17 +53,36 @@ * * @param channel */ - public void removeChannel(Channel channel) { - Channel channel_ = channelGroup.find(channel.id()); + public synchronized void removeChannel(Channel channel) { + Channel channel_ = channelMap.get(channel.id().asLongText()); if (channel_ != null) { - channelGroup.remove(channel_); + channelMap.remove(channel.id().asLongText()); } - Integer userId = channelIdUid.get(channel.id().asLongText()); + String userId = channel.attr(CHANNEL_ATTR_KEY).get(); if (userId != null) { - channelIdUid.remove(channel.id().asLongText()); + channelIdUid.remove(userId); } } + /** + * 获取Channel + * + * @return + */ + /** + * 根据用户id获取该用户的通道 + * + * @param userId + * @return + */ + public synchronized Channel getChannelByUserId(String userId) { + String channelIdStr = channelIdUid.get(userId); + if (ObjectUtil.isNotEmpty(channelIdStr)) { + return channelMap.get(channelIdStr); + } + return null; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java b/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java index b91ef75..5fdb5b1 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java @@ -1,5 +1,8 @@ package com.casic.missiles.netty; +import com.casic.missiles.modular.neutron.service.INeutronOptService; +import com.casic.missiles.modular.robot.model.DetectorInfo; +import com.casic.missiles.modular.robot.service.IDetectorInfoService; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.Unpooled; import io.netty.channel.*; @@ -13,6 +16,7 @@ import javax.annotation.PreDestroy; import javax.annotation.Resource; import java.nio.charset.StandardCharsets; +import java.util.List; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.TimeUnit; @@ -20,18 +24,20 @@ @Component public class NettyClient { -// static final int SIZE = Integer.parseInt(System.getProperty("size", "256")); - private final EventLoopGroup group = new NioEventLoopGroup(); private ChannelFuture mChannelFuture = null; private final ThreadLocal mChannel = new ThreadLocal<>(); -// private final ThreadLocalMap threadLocalMap = new ThreadLocalMap; -// ThreadLocalMap + // @Resource +// private NettyClientHandler nettyClientHandler; @Resource - private NettyClientHandler nettyClientHandler; + private IDetectorInfoService iDetectorInfoService; + @Resource + private ChannelCache channelCache; + @Resource + private INeutronOptService neutronOptService; - public void startClient(String host, int port) { + public void startClient(String host, int port, Long userId) { // Configure the client. try { Bootstrap b = new Bootstrap(); @@ -44,23 +50,23 @@ public void initChannel(SocketChannel ch) throws Exception { ChannelPipeline p = ch.pipeline(); p.addLast(new HjtDecoder()); -// p.addLast(new NettyClientHandler(NettyClient.this)); - p.addLast(nettyClientHandler); + p.addLast(new NettyClientHandler(userId,channelCache,neutronOptService)); +// p.addLast(nettyClientHandler); } }); - mChannelFuture = b.connect(host, port).addListener(new ChannelFutureListener(){ + mChannelFuture = b.connect(host, port).addListener(new ChannelFutureListener() { @Override - public void operationComplete(ChannelFuture future){ + public void operationComplete(ChannelFuture future) { if (future.isSuccess()) { - log.info("探测器{}--连接成功!!", host); + log.info("探测器{}:{}--连接成功!!", host, port); } else { - log.error("探测器{}--连接失败!!", host); + log.error("探测器{}:{}--连接失败!!", host, port); future.channel().eventLoop().schedule(new Runnable() { @Override public void run() { - log.info("探测器{}--重新连接!!", host); - startClient(host, port); + log.info("探测器{}:{}--重新连接!!", host, port); + startClient(host, port, userId); } }, 10, TimeUnit.SECONDS); } @@ -76,7 +82,7 @@ * * @param data 文本数据 */ - public boolean send(String data) { + public boolean send1(String data) { try { if (mChannel.get() == null) { mChannel.set(mChannelFuture.channel()); @@ -89,12 +95,35 @@ return false; } + //发送数据 + public boolean send(Long uid, String data) { + try { + Channel channel = channelCache.getChannelByUserId(uid + ""); + if (channel != null) { + channel.writeAndFlush(Unpooled.copiedBuffer(data.getBytes(StandardCharsets.UTF_8))); + return true; + } else { + log.error("探测器id--->{}--未连接,请检查设备", uid); + } + + } catch (Exception e) { + log.error(this.getClass().getName().concat(".send has error"), e); + } + return false; + } + // 客户端启动,并连上服务器端 @PostConstruct public void init() { - System.out.println("开始连接了------>"); - ForkJoinPool.commonPool().submit(() -> startClient("192.168.1.50", 52002)); -// ForkJoinPool.commonPool().submit(() -> startClient("127.0.0.1", 52002)); + System.out.println("中子源探测器开始连接了------>"); + List detectorInfoList = iDetectorInfoService.list(); + if (null != detectorInfoList && detectorInfoList.size() > 0) { + detectorInfoList.forEach(detectorInfo -> { + ForkJoinPool.commonPool().submit(() -> startClient(detectorInfo.getDetectorIp(), + detectorInfo.getDetectorPort(), detectorInfo.getId())); + }); + } +// ForkJoinPool.commonPool().submit(() -> startClient("192.168.1.50", 52002)); } @PreDestroy diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java index 4f1136b..d560517 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/controller/NeutronController.java @@ -2,6 +2,7 @@ import com.casic.missiles.model.response.dto.ResponseDataDTO; +import com.casic.missiles.modular.neutron.dto.HsRequest; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.service.INeutronOptService; @@ -34,9 +35,9 @@ @ApiOperation("控制指令类型(start-加压开始工作,stop-退高压,停止工作") @PostMapping("/control") @ResponseBody - public ResponseDataDTO control(String command,Long detectorId) { + public ResponseDataDTO control(String command, Long detectorId) { //toDo:需要加返回值 - neutronOptService.control(command,detectorId); + neutronOptService.control(command, detectorId); return ResponseDataDTO.success(); } @@ -57,5 +58,18 @@ return ResponseDataDTO.success(iPsdService.dataList(taskId)); } + @ApiOperation("主界面HS显示,需传探测器detectorId,type值为1:启动,0:停止") + @PostMapping("/hsList") + @ResponseBody + public ResponseDataDTO hsList(HsRequest request) { + + return ResponseDataDTO.success(neutronOptService.hsList(request.getDetectorId(), + request.getType(), + request.getX1(), + request.getX2(), + request.getX3(), + request.getX4())); + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml index 5ac549c..236aa30 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dao/mapping/PsdMapper.xml @@ -31,7 +31,7 @@ FROM detector_info di WHERE di.robot_id = #{robotId}) AND dp.CREATE_TIME >= #{startTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 ORDER BY dp.CREATE_TIME ASC LIMIT 13 @@ -50,7 +50,7 @@ and dp.CREATE_TIME #{endTime} - AND dp.PSD > 0.18 + AND dp.PSD > 0 GROUP BY dp.CREATE_TIME ORDER BY dp.CREATE_TIME ASC diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java new file mode 100644 index 0000000..4b42612 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsDTO.java @@ -0,0 +1,40 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * psd报警DTO + */ +@Data +public class HsDTO { + + @ApiModelProperty(value = "psd横坐标值(道数)") + private Integer psdX; + @ApiModelProperty(value = "psd纵坐标值") + private Integer psdY; + @ApiModelProperty(value = "psd1横坐标值(道数)") + private Integer psdX1; + @ApiModelProperty(value = "psd1纵坐标值") + private Integer psdY1; + @ApiModelProperty(value = "mca横坐标值(道数)") + private Integer mcaX; + @ApiModelProperty(value = "mca纵坐标值") + private Integer mcaY; + @ApiModelProperty(value = "mca1横坐标值(道数)") + private Integer mcaX1; + @ApiModelProperty(value = "mca1纵坐标值") + private Integer mcaY1; +// @ApiModelProperty(value = "时间值") +// private String timeCount; + + public HsDTO() { + } + + public HsDTO(int psdX, int psdY, int mcaX, int mcaY) { + this.psdX = psdX; + this.psdY = psdY; + this.mcaX = mcaX; + this.mcaY = mcaY; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java new file mode 100644 index 0000000..2f83779 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/dto/HsRequest.java @@ -0,0 +1,25 @@ +package com.casic.missiles.modular.neutron.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * Hs请求参数Request + */ +@Data +public class HsRequest { + + @ApiModelProperty(value = "探测器Id") + Long detectorId; + @ApiModelProperty(value = "type值为1:启动,0:停止") + String type; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标开始值") + int x1; + @ApiModelProperty(value = "mca映射到psd曲线上的横坐标截止值") + int x2; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标开始值") + int x3; + @ApiModelProperty(value = "psd映射到mca曲线上的横坐标截止值") + int x4; + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java index e54ac10..540ba70 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Psd.java @@ -44,6 +44,10 @@ private String qshort; @TableField("PSD") private String psd; + @TableField("PSDX") + private String psdx; + @TableField("MCAX") + private String mcax; @TableField("IP_PORT") private String ipPort; /** @@ -61,8 +65,9 @@ public Psd() { } - public Psd(Long detectorId, String gateOffet, String baseLine, String shortGate, String longGate, String qlong, String qshort, String createTime) { - this.detectorId = detectorId; + public Psd(String gateOffet, String baseLine, String shortGate, + String longGate, String qlong, String qshort, + String createTime) { this.gateOffet = gateOffet; this.baseLine = baseLine; this.shortGate = shortGate; diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java index ef4fc59..a65e5b0 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/model/Vol.java @@ -61,8 +61,7 @@ public Vol() { } - public Vol(Long detectorId, String volData6, String createTime) { - this.detectorId = detectorId; + public Vol( String volData6, String createTime) { this.volData6 = volData6; this.createTime = createTime; } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java index 34d7056..277ccc2 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/INeutronOptService.java @@ -1,6 +1,7 @@ package com.casic.missiles.modular.neutron.service; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import java.util.List; @@ -25,7 +26,7 @@ * No.3 解析 * 设备会在tcp上 上报数据,读取后进行解析 */ - void analysis(String deviceIpPort,String msg); + void analysis(String deviceIpPort,String msg,Long uid); /** * No.4 退高压,停止工作 @@ -41,4 +42,6 @@ List alarmList(Long taskId); + boolean hsList(Long detectorId, String type,int x1, int x2, int x3, int x4); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java index 321336b..462f31a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/IPsdService.java @@ -21,4 +21,6 @@ List dataList(Long taskId); + List hsList(Long detectorId,String type); + } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java index c15e68c..9e0e888 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/DetectorConfigServiceImpl.java @@ -37,7 +37,7 @@ try { for (int i = 1; i <= codeArr.length / 3; i++) { - nettyClient.send(codeArr[i * 3 - 1]); + nettyClient.send(config.getDetectorId(),codeArr[i * 3 - 1]); Thread.sleep(500); } } catch (InterruptedException e) { diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java index 7171d3b..9f7768a 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/NeutronOptServiceImpl.java @@ -2,7 +2,9 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.casic.missiles.modular.neutron.dto.HsDTO; import com.casic.missiles.modular.neutron.dto.PsdAlarmDTO; +import com.casic.missiles.modular.neutron.dto.PsdDataDTO; import com.casic.missiles.modular.neutron.model.Psd; import com.casic.missiles.modular.neutron.model.Vol; import com.casic.missiles.modular.neutron.service.IDetectorLogService; @@ -13,12 +15,14 @@ import com.casic.missiles.netty.InstructCode; import com.casic.missiles.netty.NettyClient; import com.casic.missiles.common.WebSocket; +import com.sun.javafx.util.Utils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -42,7 +46,7 @@ try { for (int i = 1; i <= InstructCode.InitCodeArr.length / 3; i++) { - nettyClient.send(InstructCode.InitCodeArr[i * 3 - 1]); + nettyClient.send(detectorId, InstructCode.InitCodeArr[i * 3 - 1]); Thread.sleep(500); } } catch (InterruptedException e) { @@ -52,26 +56,30 @@ @Override public void pressurize(Long detectorId) { - if (nettyClient.send(InstructCode.DAC_UP)) { + if (nettyClient.send(detectorId, InstructCode.DAC_UP)) { iLogService.addLog(detectorId, "6", "start"); } } @Override @Async("syncExecutorPool") - public void analysis(String deviceIpPort, String msg) { + public void analysis(String deviceIpPort, String msg, Long uid) { Map resultMap = CacheUtils.processData(msg); List psdList = (List) resultMap.get("psd"); List volList = (List) resultMap.get("vol"); if (volList != null && volList.size() > 0) { volList.forEach(vol -> { + JSONObject headerJson = new JSONObject(); + headerJson.put("msgKey", "detector_vol"); JSONObject jsonObject = new JSONObject(); jsonObject.put("deviceIp", deviceIpPort); jsonObject.put("vol", vol.getVolData6()); jsonObject.put("time", vol.getCreateTime()); - webSocket.sendAllMessage(jsonObject.toJSONString()); - log.info("推送电压数据"+jsonObject.toJSONString()); + headerJson.put("data", jsonObject); + webSocket.sendAllMessage(headerJson.toJSONString()); + log.info("推送电压数据" + headerJson.toJSONString()); vol.setIpPort(deviceIpPort.substring(1)); + vol.setDetectorId(uid); }); iVolService.saveBatch(volList); } @@ -85,15 +93,75 @@ Long Qshort = Math.abs(Long.valueOf(psd.getQshort(), 16) - Long.parseLong(psd.getBaseLine(), 16) * Long.parseLong(psd.getShortGate(), 16)); Double psdRate = (Qlong - Qshort) * 1.000 / Qlong; psd.setPsd(String.format("%.2f", psdRate)); + psd.setDetectorId(uid); + //设置psdx值 toDo:4096、100000 需要自动取 + int psdx = (int) ((Qlong - Qshort) * 1.000 / Qlong * 4096); + int mcax = (int) ((Qlong) * 1.00000 / 100000 * 4096); + psd.setPsdx(psdx + ""); + psd.setMcax(mcax + ""); + //根据是否启动,向前端推送hs曲线数值 + if (hsFlag) { + HsDTO hsDTO = new HsDTO(psdx, 1, mcax, 1); + if (psdx < 0 || psdx > 4096) { + hsDTO.setPsdX(null); + hsDTO.setPsdY(null); + } + if (mcax < 0 || mcax > 4096) { + hsDTO.setMcaX(null); + hsDTO.setMcaY(null); + } + //psd数据叠加到mca曲线上 + if (psdx >= x3_3 && psdx <= x4_4) { + hsDTO.setMcaX1(mcax); + hsDTO.setMcaY1(1); + } + //mca数据叠加到psd曲线上 + if (mcax >= x1_1 && mcax <= x2_2) { + if (psdx > 0) { + hsDTO.setPsdX1(psdx); + hsDTO.setPsdY1(1); + } + } + JSONObject headJson = new JSONObject(); + headJson.put("msgKey", "detector_hs"); + headJson.put("data", hsDTO); + webSocket.sendAllMessage(headJson.toJSONString()); + log.info("推送HS数据" + headJson.toJSONString()); + } } }); iPsdService.saveBatch(psdList); } } + + private volatile boolean hsFlag = false; + private volatile int x1_1 = 0; + private volatile int x2_2 = 0; + private volatile int x3_3 = 0; + private volatile int x4_4 = 0; +// private volatile List hsDTOList = new ArrayList<>() ; + + @Override + public boolean hsList(Long detectorId, String type, int x1, int x2, int x3, int x4) { + x1_1 = x1; + x2_2 = x2; + x3_3 = x3; + x4_4 = x4; + switch (type) { + case "1": + hsFlag = true; + break; + case "0": + hsFlag = false; + break; + } + return true; + } + @Override public void depress(Long detectorId) { - if (nettyClient.send(InstructCode.DAC_DOWN)) { + if (nettyClient.send(detectorId, InstructCode.DAC_DOWN)) { iLogService.addLog(detectorId, "6", "stop"); } } diff --git a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java index 8a20e31..f1adc1e 100644 --- a/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java +++ b/casic-server/src/main/java/com/casic/missiles/modular/neutron/service/impl/PsdServiceImpl.java @@ -58,7 +58,7 @@ long countX = DateUtil.between(DateUtil.parseDateTime(last.getTimeCount()), DateUtil.parseDateTime(startTime), DateUnit.SECOND, true); for (int i = 0; i <= countX / 5; i++) { if (i == 0) { - psdDataDTOS.add(new PsdDataDTO("0", "0")); + psdDataDTOS.add(new PsdDataDTO("0", "0")); continue; } int countY = 0; @@ -74,7 +74,7 @@ } } } - psdDataDTO.setValueCount((int) Math.ceil(countY / 5) + ""); + psdDataDTO.setValueCount(String.format("%.2f",countY*1.00 / 5)); psdDataDTOS.add(psdDataDTO); } } @@ -105,10 +105,14 @@ trajectoryInfo.getPostionY() + "", alarmTime)); return psdAlarmDTOList; - } } } return psdAlarmDTOList; } + + @Override + public List hsList(Long detectorId,String type) { + return null; + } } diff --git a/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java b/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java index 8b9aaf2..7531a59 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/CacheUtils.java @@ -58,14 +58,6 @@ } if (ObjectUtil.isNotEmpty(msgs)) { CacheUtils.VOL_MAP.clear(); - //继续拆包处理 -// String msgLast = ""; -// if (msgs.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) != -1) { -// if (msgs.length() < (msgs.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) + 24 + InstructCode.DAC_DATA_LENGTH)) { -// msgLast = msgs.substring(msgs.indexOf(msgs.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH))); -// CacheUtils.VOL_MAP.put(keyInts.get(keyInts.size() - 1), msgLast); -// } -// } } } @@ -83,17 +75,6 @@ } if (ObjectUtil.isNotEmpty(msgs)) { CacheUtils.PSD_MAP.clear(); - //继续拆包处理 -// String msgLast = ""; -// if (msgs.indexOf(InstructCode.PSD1_HEAD) != -1) { -// if (msgs.length() >= 24) { -// int totalLength = Integer.parseInt(ByteUtil.reverseHex(msgs.substring(msgs.indexOf(InstructCode.PSD1_HEAD) + 16, 24)), 16); -// if (msgs.length() < totalLength * 2) { -// msgLast = msgs.substring(msgs.indexOf(InstructCode.PSD1_HEAD)); -// CacheUtils.PSD_MAP.put(keyInts.get(keyInts.size() - 1), msgLast); -// } -// } -// } } } return msgs; @@ -133,12 +114,12 @@ for (int i = 0; i < (msg.length() - (msg.indexOf(InstructCode.PSD1_HEAD) + 24)) / 64; i++) { String msgi = msg.substring((msg.indexOf(InstructCode.PSD1_HEAD) + 24) + i * 64, (msg.indexOf(InstructCode.PSD1_HEAD) + 24) + (i + 1) * 64); if (msgi.indexOf(InstructCode.PSD2_HEAD) == 0) { - String gateOff = msgi.substring(16, 20); - String baseline = msgi.substring(20, 24); - String shortGate = msgi.substring(24, 28); - String longGate = msgi.substring(28, 32); - String qlong = msgi.substring(48, 56); - String qshort = msgi.substring(56, 64); + String gateOff = ByteUtil.reverseHex(msgi.substring(16, 20)); + String baseline = ByteUtil.reverseHex(msgi.substring(20, 24)); + String shortGate = ByteUtil.reverseHex(msgi.substring(24, 28)); + String longGate = ByteUtil.reverseHex(msgi.substring(28, 32)); + String qlong = ByteUtil.reverseHex(msgi.substring(48, 56)); + String qshort = ByteUtil.reverseHex(msgi.substring(56, 64)); log.info("gateOff--->" + gateOff + "baseline--->" + baseline + "shortGate--->" + shortGate + @@ -146,7 +127,7 @@ "qlong--->" + qlong + "qshort--->" + qshort); - psdList.add(new Psd(1L, gateOff, baseline, shortGate, longGate, qlong, qshort, DateUtil.formatDateTime(new Date()))); + psdList.add(new Psd(gateOff, baseline, shortGate, longGate, qlong, qshort, DateUtil.formatDateTime(new Date()))); } } } else { @@ -168,23 +149,23 @@ int totalLength = Integer.parseInt(ByteUtil.reverseHex(str.substring(str.indexOf(InstructCode.PSD1_HEAD) + 16, str.indexOf(InstructCode.PSD1_HEAD) + 24)), 16); if (str.length() >= totalLength * 2) { + PSD_FLAG = false; for (int i = 0; i < (str.length() - (str.indexOf(InstructCode.PSD1_HEAD) + 24)) / 64; i++) { String msgi = str.substring((str.indexOf(InstructCode.PSD1_HEAD) + 24) + i * 64, (str.indexOf(InstructCode.PSD1_HEAD) + 24) + (i + 1) * 64); if (msgi.indexOf(InstructCode.PSD2_HEAD) == 0) { - String gateOff = msgi.substring(16, 20); - String baseline = msgi.substring(20, 24); - String shortGate = msgi.substring(24, 28); - String longGate = msgi.substring(28, 32); - String qlong = msgi.substring(48, 56); - String qshort = msgi.substring(56, 64); - //toDo:算法计算 + String gateOff = ByteUtil.reverseHex(msgi.substring(16, 20)); + String baseline = ByteUtil.reverseHex(msgi.substring(20, 24)); + String shortGate = ByteUtil.reverseHex(msgi.substring(24, 28)); + String longGate = ByteUtil.reverseHex(msgi.substring(28, 32)); + String qlong = ByteUtil.reverseHex(msgi.substring(48, 56)); + String qshort = ByteUtil.reverseHex(msgi.substring(56, 64)); log.info("分包:gateOff--->" + gateOff + "baseline--->" + baseline + "shortGate--->" + shortGate + "longGate--->" + longGate + "qlong--->" + qlong + "qshort--->" + qshort); - psdList.add(new Psd(1L, gateOff, baseline, shortGate, longGate, qlong, qshort, DateUtil.formatDateTime(new Date()))); + psdList.add(new Psd(gateOff, baseline, shortGate, longGate, qlong, qshort, DateUtil.formatDateTime(new Date()))); } } } @@ -211,7 +192,7 @@ //本设备只用到第6通道 String vol6 = volArr[5]; log.info("第6通道电压值-------->" + vol6); - volList.add(new Vol(1L, Long.parseLong(vol6,16)+"", DateUtil.formatDateTime(new Date()))); + volList.add(new Vol(Long.parseLong(vol6,16)+"", DateUtil.formatDateTime(new Date()))); } else { //分包处理,先放到缓存 VOL_FLAG = true; @@ -222,15 +203,15 @@ VOL_I++; CacheUtils.VOL_MAP.put(VOL_I, msg); String str = startVolMapCache(); - if (ObjectUtil.isNotEmpty(str) && + VOL_FLAG = false; + if (ObjectUtil.isNotEmpty(str) &&str.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) != -1&& str.length() >= (str.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) + 24 + InstructCode.DAC_DATA_LENGTH)) { - VOL_FLAG = false; str = str.substring(str.indexOf(InstructCode.DAC_HEAD + InstructCode.DAC_HEAD_LENGTH) + 24); String[] volArr = InstructCode.getVolArr(str); //本设备只用到第6通道 String vol6 = volArr[5]; log.info("分包第6通道电压值-------->" + vol6); - volList.add(new Vol(1L, Long.parseLong(vol6,16)+"", DateUtil.formatDateTime(new Date()))); + volList.add(new Vol(Long.parseLong(vol6,16)+"", DateUtil.formatDateTime(new Date()))); } } return volList; diff --git a/casic-server/src/main/java/com/casic/missiles/netty/ChannelCache.java b/casic-server/src/main/java/com/casic/missiles/netty/ChannelCache.java index 24ec5a5..d58645a 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/ChannelCache.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/ChannelCache.java @@ -1,44 +1,36 @@ package com.casic.missiles.netty; +import cn.hutool.core.util.ObjectUtil; import io.netty.channel.Channel; -import io.netty.channel.group.ChannelGroup; -import io.netty.channel.group.DefaultChannelGroup; -import io.netty.util.concurrent.GlobalEventExecutor; -import org.springframework.context.annotation.Configuration; +import io.netty.util.AttributeKey; +import org.springframework.stereotype.Component; import java.util.concurrent.ConcurrentHashMap; -@Configuration +@Component public class ChannelCache { - // 存储所有Channel - private ChannelGroup channelGroup = new DefaultChannelGroup("channelGroups", GlobalEventExecutor.INSTANCE); - // 存储Channel.id().asLongText()和用户id对应关系 - private ConcurrentHashMap channelIdUid = new ConcurrentHashMap(); + // 存储用户id和Channel.id().asLongText()对应关系 + private static final ConcurrentHashMap channelMap = new ConcurrentHashMap(); - public ChannelGroup getChannelGroup() { - return channelGroup; - } + // 存储用户id和Channel.id().asLongText()对应关系 + private static final ConcurrentHashMap channelIdUid = new ConcurrentHashMap(); - public ConcurrentHashMap getChannelIdUid() { + private static final AttributeKey CHANNEL_ATTR_KEY = AttributeKey.valueOf("user"); + + + public ConcurrentHashMap getChannelIdUid() { return channelIdUid; } - /** * 获取Channel * * @return */ - public Channel getChannel(Channel channel) { - Channel channel_ = channelGroup.find(channel.id()); - if (channel_ != null) { - return channel_; - } - return null; - } + /** * 添加Channel到ChannelGroup @@ -46,15 +38,14 @@ * @param uid * @param channel */ - public void addChannel(Channel channel, int uid) { - Channel channel_ = channelGroup.find(channel.id()); - if (channel_ == null) { - channelGroup.add(channel); - } + public synchronized void addChannel(Channel channel, String uid) { - // redis添加对应用户和channelId之前的关系 - Integer userId = channelIdUid.get(channel.id().asLongText()); - channelIdUid.put(channel.id().asLongText(), userId); + channel.attr(CHANNEL_ATTR_KEY).set(uid); + Channel channel_ = channelMap.get(channel.id().asLongText()); + if (channel_ == null) { + channelMap.put(channel.id().asLongText(), channel); + } + channelIdUid.put(uid, channel.id().asLongText()); } /** @@ -62,17 +53,36 @@ * * @param channel */ - public void removeChannel(Channel channel) { - Channel channel_ = channelGroup.find(channel.id()); + public synchronized void removeChannel(Channel channel) { + Channel channel_ = channelMap.get(channel.id().asLongText()); if (channel_ != null) { - channelGroup.remove(channel_); + channelMap.remove(channel.id().asLongText()); } - Integer userId = channelIdUid.get(channel.id().asLongText()); + String userId = channel.attr(CHANNEL_ATTR_KEY).get(); if (userId != null) { - channelIdUid.remove(channel.id().asLongText()); + channelIdUid.remove(userId); } } + /** + * 获取Channel + * + * @return + */ + /** + * 根据用户id获取该用户的通道 + * + * @param userId + * @return + */ + public synchronized Channel getChannelByUserId(String userId) { + String channelIdStr = channelIdUid.get(userId); + if (ObjectUtil.isNotEmpty(channelIdStr)) { + return channelMap.get(channelIdStr); + } + return null; + } + } diff --git a/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java b/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java index b91ef75..5fdb5b1 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/NettyClient.java @@ -1,5 +1,8 @@ package com.casic.missiles.netty; +import com.casic.missiles.modular.neutron.service.INeutronOptService; +import com.casic.missiles.modular.robot.model.DetectorInfo; +import com.casic.missiles.modular.robot.service.IDetectorInfoService; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.Unpooled; import io.netty.channel.*; @@ -13,6 +16,7 @@ import javax.annotation.PreDestroy; import javax.annotation.Resource; import java.nio.charset.StandardCharsets; +import java.util.List; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.TimeUnit; @@ -20,18 +24,20 @@ @Component public class NettyClient { -// static final int SIZE = Integer.parseInt(System.getProperty("size", "256")); - private final EventLoopGroup group = new NioEventLoopGroup(); private ChannelFuture mChannelFuture = null; private final ThreadLocal mChannel = new ThreadLocal<>(); -// private final ThreadLocalMap threadLocalMap = new ThreadLocalMap; -// ThreadLocalMap + // @Resource +// private NettyClientHandler nettyClientHandler; @Resource - private NettyClientHandler nettyClientHandler; + private IDetectorInfoService iDetectorInfoService; + @Resource + private ChannelCache channelCache; + @Resource + private INeutronOptService neutronOptService; - public void startClient(String host, int port) { + public void startClient(String host, int port, Long userId) { // Configure the client. try { Bootstrap b = new Bootstrap(); @@ -44,23 +50,23 @@ public void initChannel(SocketChannel ch) throws Exception { ChannelPipeline p = ch.pipeline(); p.addLast(new HjtDecoder()); -// p.addLast(new NettyClientHandler(NettyClient.this)); - p.addLast(nettyClientHandler); + p.addLast(new NettyClientHandler(userId,channelCache,neutronOptService)); +// p.addLast(nettyClientHandler); } }); - mChannelFuture = b.connect(host, port).addListener(new ChannelFutureListener(){ + mChannelFuture = b.connect(host, port).addListener(new ChannelFutureListener() { @Override - public void operationComplete(ChannelFuture future){ + public void operationComplete(ChannelFuture future) { if (future.isSuccess()) { - log.info("探测器{}--连接成功!!", host); + log.info("探测器{}:{}--连接成功!!", host, port); } else { - log.error("探测器{}--连接失败!!", host); + log.error("探测器{}:{}--连接失败!!", host, port); future.channel().eventLoop().schedule(new Runnable() { @Override public void run() { - log.info("探测器{}--重新连接!!", host); - startClient(host, port); + log.info("探测器{}:{}--重新连接!!", host, port); + startClient(host, port, userId); } }, 10, TimeUnit.SECONDS); } @@ -76,7 +82,7 @@ * * @param data 文本数据 */ - public boolean send(String data) { + public boolean send1(String data) { try { if (mChannel.get() == null) { mChannel.set(mChannelFuture.channel()); @@ -89,12 +95,35 @@ return false; } + //发送数据 + public boolean send(Long uid, String data) { + try { + Channel channel = channelCache.getChannelByUserId(uid + ""); + if (channel != null) { + channel.writeAndFlush(Unpooled.copiedBuffer(data.getBytes(StandardCharsets.UTF_8))); + return true; + } else { + log.error("探测器id--->{}--未连接,请检查设备", uid); + } + + } catch (Exception e) { + log.error(this.getClass().getName().concat(".send has error"), e); + } + return false; + } + // 客户端启动,并连上服务器端 @PostConstruct public void init() { - System.out.println("开始连接了------>"); - ForkJoinPool.commonPool().submit(() -> startClient("192.168.1.50", 52002)); -// ForkJoinPool.commonPool().submit(() -> startClient("127.0.0.1", 52002)); + System.out.println("中子源探测器开始连接了------>"); + List detectorInfoList = iDetectorInfoService.list(); + if (null != detectorInfoList && detectorInfoList.size() > 0) { + detectorInfoList.forEach(detectorInfo -> { + ForkJoinPool.commonPool().submit(() -> startClient(detectorInfo.getDetectorIp(), + detectorInfo.getDetectorPort(), detectorInfo.getId())); + }); + } +// ForkJoinPool.commonPool().submit(() -> startClient("192.168.1.50", 52002)); } @PreDestroy diff --git a/casic-server/src/main/java/com/casic/missiles/netty/NettyClientHandler.java b/casic-server/src/main/java/com/casic/missiles/netty/NettyClientHandler.java index 0e9d152..c786117 100644 --- a/casic-server/src/main/java/com/casic/missiles/netty/NettyClientHandler.java +++ b/casic-server/src/main/java/com/casic/missiles/netty/NettyClientHandler.java @@ -14,22 +14,37 @@ @Slf4j public class NettyClientHandler extends ChannelInboundHandlerAdapter { -// private NettyClient nettyClient; -// -// public NettyClientHandler(NettyClient nettyClient) { -// this.nettyClient = nettyClient; -// } - @Autowired + private Long userId; + private ChannelCache channelCache; private INeutronOptService neutronOptService; + + public NettyClientHandler(Long userId, ChannelCache channelCache, INeutronOptService neutronOptService) { + this.userId = userId; + this.channelCache = channelCache; + this.neutronOptService = neutronOptService; + } + + public NettyClientHandler() { + } + + + + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + + channelCache.addChannel(ctx.channel(),userId+""); + } + // 服务器端读取到 客户端发送过来的数据,然后通过 Channel 回写数据 @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { + log.info(String.format("客户端读取到从服务器端:%s 发送过来的数据:%s", ctx.channel().remoteAddress(), msg.toString())); //解析数据 try { - neutronOptService.analysis(ctx.channel().remoteAddress().toString(),msg.toString()); + neutronOptService.analysis(ctx.channel().remoteAddress().toString(),msg.toString(),userId); }catch (Exception e){ e.printStackTrace(); } @@ -42,9 +57,12 @@ ctx.close(); } -// @Override -// public void channelInactive(ChannelHandlerContext ctx) throws Exception { -// super.channelInactive(ctx); + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + super.channelInactive(ctx); + channelCache.removeChannel(ctx.channel()); // nettyClient.startClient("192.168.1.50", 52002); -// } + } + + }