Jelajahi Sumber

vms contorl history save

shjung 3 tahun lalu
induk
melakukan
edf1e39628

+ 20 - 0
src/main/java/com/its/api/its/controller/vms/VmsControlController.java

@@ -60,6 +60,26 @@ public class VmsControlController {
         return this.service.controlParam(id, req);
     }
 
+    @ApiOperation(value = "VMS 제어기 전광판 ON-OFF 시각 설정", response = VmsControlDto.VmsControlRes.class)
+    @PostMapping(value = "/on-off-time/{id}", produces = {"application/json; charset=utf8"})
+    public VmsControlDto.VmsControlRes controlOnOffTime(
+            @ApiParam(name = "id", value = "제어기번호", example = "10021", required = true)
+            @PathVariable("id") Long id,
+            @ApiParam(name = "req", value = "VMS 제어기 전광판 ON-OFF 시각 설정 정보", example = "[ADMIN]", required = true)
+            @RequestBody @Valid final VmsControlDto.VmsControlOnOffTimeReq req) {
+        return this.service.controlOnOffTime(id, req);
+    }
+
+    @ApiOperation(value = "VMS 제어기 운영모드 설정", response = VmsControlDto.VmsControlRes.class)
+    @PostMapping(value = "/opr-mode/{id}", produces = {"application/json; charset=utf8"})
+    public VmsControlDto.VmsControlRes controlOprMode(
+            @ApiParam(name = "id", value = "제어기번호", example = "10021", required = true)
+            @PathVariable("id") Long id,
+            @ApiParam(name = "req", value = "VMS 제어기 운영모드 설정 정보(A:자동, F:고정, B:기본)", example = "[A]", required = true)
+            @RequestBody @Valid final VmsControlDto.VmsControlOprModeReq req) {
+        return this.service.controlOprMode(id, req);
+    }
+
     @ApiOperation(value = "VMS 이미지 심볼 재로딩 요청", response = VmsControlDto.VmsControlRes.class)
     @PostMapping(value = "/notify/image-symbol", produces = {"application/json; charset=utf8"})
     public VmsControlDto.VmsControlRes controlNotifyImageSymbol() {

+ 11 - 0
src/main/java/com/its/api/its/model/dto/vms/TbVmsCtrlHsDto.java

@@ -1,6 +1,7 @@
 package com.its.api.its.model.dto.vms;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.its.api.its.model.entity.vms.TbVmsCtrlHs;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Builder;
@@ -51,4 +52,14 @@ public class TbVmsCtrlHsDto implements Serializable {
     @JsonProperty("vms_nm")
     private String vmsNm;
 
+    public TbVmsCtrlHs toEntity() {
+        return TbVmsCtrlHs.builder()
+                .ctlDt(this.ctlDt)
+                .vmsCtlrNmbr(this.vmsCtlrNmbr)
+                .ctlType(this.ctlType)
+                .ctlVal(this.ctlVal)
+                .ctlResult(this.ctlResult)
+                .userId(this.userId)
+                .build();
+    }
 }

+ 53 - 0
src/main/java/com/its/api/its/model/dto/vms/VmsControlDto.java

@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Size;
 import java.io.Serializable;
 
 /**
@@ -116,4 +118,55 @@ public class VmsControlDto implements Serializable {
         }
     }
 
+    @ApiModel("VmsControlOnOffTimeReq(VMS 제어기 전광판 ON-OFF 시각 설정 정보)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class VmsControlOnOffTimeReq {
+
+        @ApiModelProperty("로그인 사용자 ID")
+        @JsonProperty("user_id")
+        private String userId;
+
+        @ApiModelProperty("ON 시각")
+        @JsonProperty("on_time")
+        private String onTime;
+
+        @ApiModelProperty("OFF 시각")
+        @JsonProperty("off_time")
+        private String offTime;
+
+        @Builder
+        public VmsControlOnOffTimeReq(String user_id, String on_time, String off_time) {
+            this.userId = user_id;
+            this.onTime = on_time;
+            this.offTime = off_time;
+        }
+    }
+
+    @ApiModel("VmsControlOprModeReq(VMS 제어기 운영모드 설정 정보)")
+    @Getter
+    @Setter
+    @ToString
+    @NoArgsConstructor(access = AccessLevel.PROTECTED)
+    public static class VmsControlOprModeReq {
+
+        @ApiModelProperty("로그인 사용자 ID")
+        @JsonProperty("user_id")
+        private String userId;
+
+        @ApiModelProperty("운영모드(A:자동, F:고정, B:기본)")
+        @JsonProperty("opr_mode")
+        @Size(min=1, max=1)
+        @Pattern(regexp = "[AFB]")
+        private String oprMode;
+
+        @Builder
+        public VmsControlOprModeReq(String user_id, String opr_mode) {
+            this.userId = user_id;
+            this.oprMode = opr_mode;
+        }
+    }
+
 }

+ 32 - 0
src/main/java/com/its/api/its/repository/vms/TbVmsCtlrRepository.java

@@ -42,4 +42,36 @@ public interface TbVmsCtlrRepository extends JpaRepository<TbVmsCtlr, Long>, Jpa
             nativeQuery = true)
     Integer updatePanlOnOffTime(@Param("onTime") String onTime, @Param("offTime") String offTime);
 
+    @Transactional
+    @Modifying
+    @Query(value =
+            "UPDATE TB_VMS_CTLR              " +
+            "   SET PANL_ON_TIME  = :onTime, " +
+            "       PANL_OFF_TIME = :offTime " +
+            " WHERE VMS_CTLR_NMBR = :id      ",
+            nativeQuery = true)
+    void updateOnOffTime(@Param("id") Long id, @Param("onTime") String onTime, @Param("offTime") String offTime);
+
+    @Transactional
+    @Modifying
+    @Query(value =
+            "UPDATE TB_VMS_CTLR                                  " +
+                    "   SET VMS_PHSE_CHNG_CYCL    = :schMsgTime, " +
+                    "       VMS_CMNC_ERR_BASS_VAL = :moduleTemp, " +
+                    "       FAN_MTNS_TMPR         = :fanTemp,    " +
+                    "       HETR_MTNS_TMPR        = :heaterTemp, " +
+                    "       VMS_MODL_ERR_RATE     = :moduleFail  " +
+                    " WHERE VMS_CTLR_NMBR = :id                  ",
+            nativeQuery = true)
+    void updateParam(@Param("id") Long id, @Param("schMsgTime") Integer schMsgTime, @Param("moduleTemp") Integer moduleTemp, @Param("fanTemp") Integer fanTemp, @Param("heaterTemp") Integer heaterTemp, @Param("moduleFail") Integer moduleFail);
+
+    @Transactional
+    @Modifying
+    @Query(value =
+            "UPDATE TB_VMS_CTLR              " +
+            "   SET OPER_MODE     = :oprMode " +
+            " WHERE VMS_CTLR_NMBR = :id      ",
+            nativeQuery = true)
+    void updateOprMode(@Param("id") Long id, @Param("oprMode") String oprMode);
+
 }

+ 28 - 0
src/main/java/com/its/api/its/repository/vms/TbVmsCtrlHsRepository.java

@@ -4,9 +4,11 @@ import com.its.api.its.model.entity.vms.TbVmsCtrlHs;
 import com.its.api.its.model.entity.vms.TbVmsCtrlHsKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -16,4 +18,30 @@ public interface TbVmsCtrlHsRepository extends JpaRepository<TbVmsCtrlHs, TbVmsC
     @Query("select p from TbVmsCtrlHs p inner join fetch p.vms where p.ctlDt between :fromDt and :toDt and p.vmsCtlrNmbr in :ids")
     List<TbVmsCtrlHs> findAllByDateRange(@Param("fromDt") String fromDt, @Param("toDt") String toDt, @Param("ids") List<Long> ids);
 
+    @Transactional
+    @Modifying
+    @Query(value =
+            "INSERT INTO TB_VMS_CTL_HS(                 " +
+            "                          CTL_DT,          " +
+            "                          VMS_CTLR_NMBR,   " +
+            "                          CTL_TYPE,        " +
+            "                          CTL_VAL,         " +
+            "                          CTL_RESULT,      " +
+            "                          USER_ID          " +
+            "                         )                 " +
+            "                   VALUES(                 " +
+            "                          :CTL_DT,         " +
+            "                          :VMS_CTLR_NMBR,  " +
+            "                          :CTL_TYPE,       " +
+            "                          :CTL_VAL,        " +
+            "                          :CTL_RESULT,     " +
+            "                          :USER_ID         " +
+            "                         )                 ",
+            nativeQuery = true)
+    void insertHs(@Param("CTL_DT") String CTL_DT,
+                  @Param("VMS_CTLR_NMBR") Long VMS_CTLR_NMBR,
+                  @Param("CTL_TYPE") String CTL_TYPE,
+                  @Param("CTL_VAL") String CTL_VAL,
+                  @Param("CTL_RESULT") Integer CTL_RESULT,
+                  @Param("USER_ID") String USER_ID);
 }

+ 119 - 1
src/main/java/com/its/api/its/service/vms/VmsControlService.java

@@ -1,13 +1,18 @@
 package com.its.api.its.service.vms;
 
+import com.its.api.its.model.dto.vms.TbVmsCtrlHsDto;
 import com.its.api.its.model.dto.vms.VmsControlDto;
 import com.its.api.its.repository.vms.TbVmsCtlrRepository;
+import com.its.api.its.repository.vms.TbVmsCtrlHsRepository;
 import com.its.api.xnetudp.protocol.CENTER_COMM_DEFINE;
 import com.its.api.xnetudp.service.VmsServerRequestSender;
+import com.its.utils.ItsUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import javax.transaction.Transactional;
+
 @Slf4j
 @RequiredArgsConstructor
 @Service
@@ -15,6 +20,21 @@ public class VmsControlService {
 
     private final VmsServerRequestSender vmsServerRequestSender;
     private final TbVmsCtlrRepository repo;
+    private final TbVmsCtrlHsRepository repoCtrlHs;
+
+    /**
+     * VMS 제어 이력 저장
+     * @param dto
+     */
+    @Transactional
+    public void saveCtrlHs(TbVmsCtrlHsDto dto) {
+        try {
+            //TbVmsCtrlHs entity = dto.toEntity();
+            this.repoCtrlHs.insertHs(dto.getCtlDt(), dto.getVmsCtlrNmbr(), dto.getCtlType(), dto.getCtlVal(), dto.getCtlResult(), dto.getUserId());
+        } catch (Exception e) {
+            log.error("{}", e.getMessage());
+        }
+    }
 
     /**
      * VMS 제어기 리셋
@@ -25,6 +45,14 @@ public class VmsControlService {
     public VmsControlDto.VmsControlRes controlReset(Long id, VmsControlDto.VmsControlReq req) {
         log.error("controlReset: {}, {}", id, req);
         boolean isSendMsg = this.vmsServerRequestSender.requestReset(id, req);
+        saveCtrlHs(TbVmsCtrlHsDto.builder()
+                .ctlDt(ItsUtils.getSysTime())
+                .vmsCtlrNmbr(id)
+                .ctlType("V03")
+                .ctlVal("Reset")
+                .ctlResult(isSendMsg ? 1 : 0)
+                .userId(req.getUserId())
+                .build());
         if (isSendMsg) {
             return new VmsControlDto.VmsControlRes(0, "success");
         }
@@ -39,6 +67,14 @@ public class VmsControlService {
      */
     public VmsControlDto.VmsControlRes controlPower(Long id, VmsControlDto.VmsControlReq req) {
         boolean isSendMsg = this.vmsServerRequestSender.requestPowerControl(id, req);
+        saveCtrlHs(TbVmsCtrlHsDto.builder()
+                .ctlDt(ItsUtils.getSysTime())
+                .vmsCtlrNmbr(id)
+                .ctlType(req.getValue() == 0 ? "V01" : "V02")
+                .ctlVal(req.getValue() == 0 ? "On" : "Off")
+                .ctlResult(isSendMsg ? 1 : 0)
+                .userId(req.getUserId())
+                .build());
         if (isSendMsg) {
             return new VmsControlDto.VmsControlRes(0, "success");
         }
@@ -53,6 +89,14 @@ public class VmsControlService {
      */
     public VmsControlDto.VmsControlRes controlLuminance(Long id, VmsControlDto.VmsControlReq req) {
         boolean isSendMsg = this.vmsServerRequestSender.controlLuminance(id, req);
+        saveCtrlHs(TbVmsCtrlHsDto.builder()
+                .ctlDt(ItsUtils.getSysTime())
+                .vmsCtlrNmbr(id)
+                .ctlType("V07")
+                .ctlVal(String.valueOf(req.getValue()))
+                .ctlResult(isSendMsg ? 1 : 0)
+                .userId(req.getUserId())
+                .build());
         if (isSendMsg) {
             return new VmsControlDto.VmsControlRes(0, "success");
         }
@@ -65,14 +109,89 @@ public class VmsControlService {
      * @param req
      * @return
      */
+    @Transactional
     public VmsControlDto.VmsControlRes controlParam(Long id, VmsControlDto.VmsControlParamReq req) {
+        try {
+            this.repo.updateParam(id, req.getSchMsgTime(), req.getModuleTemp(), req.getFanTemp(), req.getHeaterTemp(), req.getModuleFail());
+        } catch (Exception e) {
+            log.error("{}", e.getMessage());
+            return new VmsControlDto.VmsControlRes(9, "VMS 서버로 제어 명령 전송 중 알수 없는 오류가 발생 하였습니다.");
+        }
+
         boolean isSendMsg = this.vmsServerRequestSender.controlParam(id, req);
+        saveCtrlHs(TbVmsCtrlHsDto.builder()
+                .ctlDt(ItsUtils.getSysTime())
+                .vmsCtlrNmbr(id)
+                .ctlType("V04")
+                .ctlVal(String.format("%d.%d,%d,%d,%d,%d,%d", req.getSchMsgTime(), req.getModuleTemp(), req.getFanTemp(), req.getHeaterTemp(), req.getModuleFail(), req.getRetryCount(), req.getTimeOut()))
+                .ctlResult(isSendMsg ? 1 : 0)
+                .userId(req.getUserId())
+                .build());
+        if (isSendMsg) {
+            return new VmsControlDto.VmsControlRes(0, "success");
+        }
+        return new VmsControlDto.VmsControlRes(9, "VMS 서버로 제어 명령 전송 중 알수 없는 오류가 발생 하였습니다.");
+    }
+
+    /**
+     * VMS 전광판 ON/OFF 시각 설정
+     * @param id
+     * @param req
+     * @return
+     */
+    @Transactional
+    public VmsControlDto.VmsControlRes controlOnOffTime(Long id, VmsControlDto.VmsControlOnOffTimeReq req) {
+        try {
+            this.repo.updateOnOffTime(id, req.getOnTime(), req.getOffTime());
+        } catch (Exception e) {
+            log.error("{}", e.getMessage());
+            return new VmsControlDto.VmsControlRes(9, "VMS 서버로 제어 명령 전송 중 알수 없는 오류가 발생 하였습니다.");
+        }
+
+        boolean isSendMsg = this.vmsServerRequestSender.controlOnOffTime(id, req);
+        saveCtrlHs(TbVmsCtrlHsDto.builder()
+                .ctlDt(ItsUtils.getSysTime())
+                .vmsCtlrNmbr(id)
+                .ctlType("V05")
+                .ctlVal(String.format("%s %s", req.getOnTime(), req.getOffTime()))
+                .ctlResult(isSendMsg ? 1 : 0)
+                .userId(req.getUserId())
+                .build());
         if (isSendMsg) {
             return new VmsControlDto.VmsControlRes(0, "success");
         }
         return new VmsControlDto.VmsControlRes(9, "VMS 서버로 제어 명령 전송 중 알수 없는 오류가 발생 하였습니다.");
     }
 
+    /**
+     * VMS 제어기 운영모드 설정
+     * @param id
+     * @param req
+     * @return
+     */
+    @Transactional
+    public VmsControlDto.VmsControlRes controlOprMode(Long id, VmsControlDto.VmsControlOprModeReq req) {
+        try {
+            this.repo.updateOprMode(id, req.getOprMode());
+        } catch (Exception e) {
+            log.error("{}", e.getMessage());
+            return new VmsControlDto.VmsControlRes(9, "VMS 서버로 제어 명령 전송 중 알수 없는 오류가 발생 하였습니다.");
+        }
+
+        boolean isSendMsg = this.vmsServerRequestSender.controlOprMode(id, req);
+        saveCtrlHs(TbVmsCtrlHsDto.builder()
+                .ctlDt(ItsUtils.getSysTime())
+                .vmsCtlrNmbr(id)
+                .ctlType("V06")
+                .ctlVal(req.getOprMode())
+                .ctlResult(isSendMsg ? 1 : 0)
+                .userId(req.getUserId())
+                .build());
+        if (isSendMsg) {
+            return new VmsControlDto.VmsControlRes(0, "success");
+        }
+        return new VmsControlDto.VmsControlRes(9, "VMS 서버로 제어 명령 전송 중 알수 없는 오류가 발생 하였습니다.");
+    }
 
     /**
      * VMS 제어기 이미지 심볼 리로드
@@ -121,5 +240,4 @@ public class VmsControlService {
         }
         return new VmsControlDto.VmsControlRes(9, "VMS 서버로 제어 명령 전송 중 알수 없는 오류가 발생 하였습니다.");
     }
-
 }

+ 1 - 1
src/main/java/com/its/api/xnettcp/client/NettyTcpClientVds.java

@@ -80,7 +80,7 @@ public class NettyTcpClientVds implements Callable<Object> {
             // 종료에 대한 리스너 추가
             @Override
             public void operationComplete(ChannelFuture future) throws Exception {
-                log.error("Channel closed, {}", future.toString());
+                log.error("operationComplete: channelClosed, {}", future.toString());
                 channelClosed(future.channel());
             }
         });

+ 2 - 1
src/main/java/com/its/api/xnetudp/protocol/CENTER_COMM_DEFINE.java

@@ -71,7 +71,8 @@ public class CENTER_COMM_DEFINE {
 	public static final int INT_OP_VMS_PARA_SET2            = 0x26;        /* VMS 통신 서버, VMS 환경설정정보 전송(For Pasig) */
 	//public static final int INT_OP_VMS_RESET                = 0x27;        /* VMS 통신 서버, VMS 제어기 리셋 전송 */
 	public static final int INT_OP_VMS_RESET                = 0x09;        /* VMS 통신 서버, VMS 제어기 리셋 전송 */
-	public static final int INT_OP_VMS_MODE                 = 0x28;        /* VMS 통신 서버, VMS 운영모드 변경 */
+	public static final int INT_OP_VMS_MODE                 = 0x0A;        /* VMS 통신 서버, VMS 운영모드 변경 */
+	//public static final int INT_OP_VMS_MODE                 = 0x28;        /* VMS 통신 서버, VMS 운영모드 변경 */
 	public static final int INT_OP_VMS_FORM_SAVE            = 0x0B;        /* VMS 통신 서버, 실시간 VMS 제공정보 저장 */
 	public static final int INT_OP_VMS_FORM_DOWNLOAD        = 0x0C;        /* VMS 통신 서버, 실시간 VMS 제공정보 다운로드 결과 저장 */
 	//public static final int INT_OP_VMS_FORM_DOWNLOAD        = 0x2A;        /* VMS 통신 서버, 실시간 VMS 제공정보 저장 */

+ 66 - 0
src/main/java/com/its/api/xnetudp/protocol/CENTER_VMS_REQ_OPER_MODE.java

@@ -0,0 +1,66 @@
+package com.its.api.xnetudp.protocol;
+
+import com.its.api.its.model.dto.vms.VmsControlDto;
+import com.its.utils.SysUtils;
+import org.apache.commons.lang.StringUtils;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+public class CENTER_VMS_REQ_OPER_MODE extends CENTER_VMS_REQ_COMMON {
+
+	private byte Mode;
+
+	public CENTER_VMS_REQ_OPER_MODE(Long id, VmsControlDto.VmsControlOprModeReq req) {
+		super(CENTER_COMM_DEFINE.INT_OP_VMS_MODE, 0x50, 0, id, req.getUserId(), null);
+		if (StringUtils.equals("F", req.getOprMode())) {
+			this.Mode = 'F';
+		}
+		else if (StringUtils.equals("B", req.getOprMode())) {
+			this.Mode = 'B';
+		}
+		else {
+			this.Mode = 'A';
+		}
+	}
+
+	@Override
+	public ByteBuffer getBuffer() {
+		int pktSize = CENTER_COMM_DEFINE.INT_VMS_MAX_DATETIME + CENTER_COMM_DEFINE.INT_VMS_MAX_ID + CENTER_COMM_DEFINE.INT_VMS_MAX_OPER_ID + 2 + 2;
+
+		setLength(pktSize);
+
+		ByteBuffer byteBuffer = ByteBuffer.allocate(CENTER_HEADER_SIZE + getLength());
+		byteBuffer.order(ByteOrder.BIG_ENDIAN);
+
+		byteBuffer.put(getSendId());
+		byteBuffer.put(getRecvId());
+		byteBuffer.put(getTotalFrame());
+		byteBuffer.put(getCurrentFrame());
+		byteBuffer.put(getReserved());
+		byteBuffer.put(getOpCode());
+		byteBuffer.putInt(getLength());
+		byteBuffer.put(getIntOpCode());
+		byteBuffer.put(getMsgSeq());
+
+		byte[] cmdTimeArr = new byte[CENTER_COMM_DEFINE.INT_VMS_MAX_DATETIME];
+		byte[] operIdArr = new byte[CENTER_COMM_DEFINE.INT_VMS_MAX_OPER_ID];
+
+		SysUtils.copyStringToByteArray(cmdTimeArr, cmdTimeArr.length, getCmdTime());
+		SysUtils.copyStringToByteArray(operIdArr, operIdArr.length, getOperId());
+
+		byteBuffer.put(cmdTimeArr);
+		byteBuffer.put(operIdArr);
+
+		byteBuffer.put((byte)1);
+
+		byte[] vmsIdArr = new byte[CENTER_COMM_DEFINE.INT_VMS_MAX_ID];
+		SysUtils.copyStringToByteArray(vmsIdArr, vmsIdArr.length, String.valueOf(getVmsCtlrNmbr()));
+		byteBuffer.put(vmsIdArr);
+		byteBuffer.put(this.Mode);
+
+		return byteBuffer;
+
+	}
+
+}

+ 23 - 0
src/main/java/com/its/api/xnetudp/service/VmsServerRequestSender.java

@@ -121,6 +121,29 @@ public class VmsServerRequestSender {
         return true;
     }
 
+    /**
+     * VMS 제어기 운영모드 변경
+     * @param id
+     * @param req
+     * @return
+     */
+    public boolean controlOprMode(Long id, VmsControlDto.VmsControlOprModeReq req) {
+        log.info("controlOprMode: {}, {}", id, req);
+        CENTER_VMS_REQ_OPER_MODE commMsg = new CENTER_VMS_REQ_OPER_MODE(id, req);
+        run(commMsg.getBuffer());
+        return true;
+    }
+
+    /**
+     * VMS 전광판 ON/OFF 시각 설정
+     * @param id
+     * @param req
+     * @return
+     */
+    public boolean controlOnOffTime(Long id, VmsControlDto.VmsControlOnOffTimeReq req) {
+        return true;
+    }
+
     /**
      * VMS 서버 Notify 요청
      * @param opCode