From 3da521b9e0a86dd9cc0bb28b2dfa0e7084ffc00f Mon Sep 17 00:00:00 2001 From: whycxzp <perryhsu@163.com> Date: 星期四, 20 五月 2021 17:21:12 +0800 Subject: [PATCH] 更新试验接口 --- src/main/java/com/whyc/service/ExperimentService.java | 149 +++++++++++++++++++++--- src/main/java/com/whyc/pojo/Experiment.java | 2 src/main/java/com/whyc/controller/ExperimentController.java | 29 ++++ src/main/java/com/whyc/ws/DeviceWebSocket.java | 2 src/main/java/com/whyc/mapper/ExperimentPointMapper.java | 5 src/main/java/com/whyc/ws/ExperimentSocket.java | 146 ++++++++++++++++++++++++ 6 files changed, 308 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/whyc/controller/ExperimentController.java b/src/main/java/com/whyc/controller/ExperimentController.java index cf30f9b..b50c568 100644 --- a/src/main/java/com/whyc/controller/ExperimentController.java +++ b/src/main/java/com/whyc/controller/ExperimentController.java @@ -21,6 +21,12 @@ @Autowired private ExperimentService service; + @GetMapping("exist") + @ApiOperation(value = "鏌ヨ鏄惁褰撳墠鏈夎瘯楠�",notes = "濡傛灉鏈�,code=1,杩斿洖璇曢獙鐨勫熀纭�鏁版嵁;濡傛灉娌℃湁,code=-1") + public Response exist(){ + return service.exist(); + } + @GetMapping("experimentId") @ApiOperation(value = "鏌ヨ褰撳墠璇曢獙缂栧彿",notes = "浼犲叆鐨則ype閫夋嫨鍏朵竴:" + "缁曠粍:rz,\n" + @@ -57,7 +63,30 @@ return service.checkPrecondition(type); } + /** + * 寮�濮嬭瘯楠�,璇锋眰鎺ュ彛1,鑾峰彇璇曢獙娴嬭瘯鐐� + */ + @GetMapping("point") + @ApiOperation(value = "鏌ヨ娴嬭瘯鐐瑰垪琛�") + public Response getPoint(@RequestParam String experimentId){ + return service.getPoint(experimentId); + } + /** + * 寮�濮嬭瘯楠�,妫�鏌ヤ腑缃潯浠� + * @return + */ + @GetMapping("checkPreconditionStep1") + @ApiOperation(value = "姝ラ1,妫�鏌ュ崌娓╂儏鍐�") + public Response checkPreconditionStep1(@RequestParam String experimentId){ + return service.checkPreconditionStep1(experimentId); + } + + @PostMapping("startExperimentPoint") + @ApiOperation(value = "鍚姩娴嬭瘯鐐�") + public Response StartExperimentPoint(@RequestBody ExperimentPoint point){ + return service.startExperimentPoint(point); + } /*======History======*/ diff --git a/src/main/java/com/whyc/mapper/ExperimentPointMapper.java b/src/main/java/com/whyc/mapper/ExperimentPointMapper.java index 540785f..9adfd56 100644 --- a/src/main/java/com/whyc/mapper/ExperimentPointMapper.java +++ b/src/main/java/com/whyc/mapper/ExperimentPointMapper.java @@ -1,6 +1,11 @@ package com.whyc.mapper; import com.whyc.pojo.ExperimentPoint; +import org.apache.ibatis.annotations.Update; + +import java.util.Date; public interface ExperimentPointMapper extends CustomMapper<ExperimentPoint>{ + @Update("update `db_3.5mw_web`.tb_experiment_point set end_time = #{date} where id = #{id}") + Integer updateEndTime(Integer id, Date date); } diff --git a/src/main/java/com/whyc/pojo/Experiment.java b/src/main/java/com/whyc/pojo/Experiment.java index 999a181..e0b1ba4 100644 --- a/src/main/java/com/whyc/pojo/Experiment.java +++ b/src/main/java/com/whyc/pojo/Experiment.java @@ -47,7 +47,7 @@ @ApiModelProperty("鍒涘缓鏃堕棿") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai") private Date createTime; - @ApiModelProperty("鐘舵��:0-鍙栨秷,1-杩涜涓�,2-瀹屾垚") + @ApiModelProperty("鐘舵��:-1-鍙栨秷,0-鏈紑濮�,1-杩涜涓�,2-瀹屾垚") private Integer status; @ApiModelProperty("鍩虹鏁版嵁") @TableField(exist = false) diff --git a/src/main/java/com/whyc/service/ExperimentService.java b/src/main/java/com/whyc/service/ExperimentService.java index 6380c93..8b18163 100644 --- a/src/main/java/com/whyc/service/ExperimentService.java +++ b/src/main/java/com/whyc/service/ExperimentService.java @@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; -import com.whyc.constant.ExperimentType; import com.whyc.dto.ExperimentConditionDTO; import com.whyc.dto.Response; import com.whyc.mapper.*; @@ -18,8 +17,13 @@ import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; + +import static java.lang.Thread.sleep; @Service public class ExperimentService { @@ -34,6 +38,17 @@ private ExperimentPreconditionMapper preconditionMapper; @Resource private CommonMapper commonMapper; + + public Response exist() { + QueryWrapper<Experiment> wrapper = Wrappers.query(); + wrapper.eq("status",1); + List<Experiment> experiments = mapper.selectList(wrapper); + //涓嶅瓨鍦ㄨ瘯楠� + if (experiments.isEmpty()){ + return new Response().set(-1,"鏆傛棤璇曢獙"); + } + return new Response().set(1,experiments); + } /** * 缁曠粍:rz, @@ -80,8 +95,8 @@ public Response addKZ(Experiment experiment) { //鎻掑叆experiment鏁版嵁 experiment.setCreateTime(new Date()); - //鏂板鍒濆鍖栫姸鎬佷负1,姝e湪杩涜 - experiment.setStatus(1); + //鏂板鍒濆鍖栫姸鎬佷负0鏈紑濮�,姝e湪杩涜 + experiment.setStatus(0); mapper.insert(experiment); //鎻掑叆experiment_base_data鏁版嵁 @@ -97,32 +112,13 @@ return new Response().setMsg(1,"鏂板鎴愬姛"); } - /*======History======*/ - - public Response<PageInfo<Experiment>> getPage(Integer pageNum, Integer pageSize, ExperimentConditionDTO condition) { - PageHelper.startPage(pageNum,pageSize); - List<Experiment> experimentList = mapper.getPage(condition); - //鏌ヨ缁撴灉鐨刣uration鏄垎閽�,杞崲涓� x鏃秞鍒嗘牸寮� - experimentList.stream().forEach(experiment -> { - int duration = Integer.parseInt(experiment.getDuration()); - //鑾峰彇鏃� - int hour = duration/60; - //鑾峰彇鍒� - int minute = duration%60; - experiment.setDuration(hour+"灏忔椂"+minute+"鍒�"); - }); - - PageInfo<Experiment> pageInfo = new PageInfo<>(experimentList); - return new Response<PageInfo<Experiment>>().set(1,pageInfo); - } - /** * 妫�鏌ュ墠缃潯浠� * @param type * @return */ public Response checkPrecondition(String type) { - AtomicReference<Integer> code = new AtomicReference<>(1); + AtomicReference<Integer> code = new AtomicReference<>(1); //2绉嶆柟寮� //m1 QueryWrapper<ExperimentPrecondition> wrapper = Wrappers.query(); @@ -145,4 +141,111 @@ }); return new Response().set(code.get(),preconditions); } + + /** + * 妫�鏌ヤ腑缃潯浠�-褰撳墠鍔熺巼鍜屽綋鍓嶅畾瀛愭俯搴�,濡傛灉绗﹀悎鏍囧噯,杩斿洖褰撳墠鍊� + */ + public Response checkPreconditionStep1(String type){ + QueryWrapper<ExperimentPrecondition> wrapper = Wrappers.query(); + wrapper.eq("type",type+"_1"); + List<ExperimentPrecondition> preconditions = preconditionMapper.selectList(wrapper); + + //鑾峰彇鍒版潯浠舵暟閲� + int conditionNum = preconditions.size(); + AtomicReference<Integer> passNum = new AtomicReference(0); + while (conditionNum!=passNum.get()) { + //閲嶇疆涓�0 + passNum.set(0); + preconditions.stream().forEach(precondition -> { + //鑾峰彇瀵瑰簲鐨勫�� + Object preconditionActualValue = commonMapper.getPreconditionStatus(precondition); + //閲囩敤娴偣杩涜鏁板�煎姣� + Float actualValue = (Float) preconditionActualValue; + Float defaultValue = Float.parseFloat(precondition.getValue()); + + if (defaultValue.equals(actualValue)) { + //鏉′欢杈炬垚,杈炬垚鏁颁笂+1 + passNum.set(passNum.get()+1); + //璁板綍褰撳墠鍊� + precondition.setActualValue(actualValue.toString()); + } + }); + } + return new Response().set(1,preconditions); + } + + /** + * 寮�濮嬭瘯楠�,鏇存柊 璇曢獙鐘舵�佸拰鍚姩璇曢獙鏃堕棿 + */ + public Response updateStatus(String experimentId){ + Experiment<Object, Object> experiment = new Experiment<>(); + experiment.setId(experimentId); + experiment.setStatus(1); + experiment.setStartTime(new Date()); + mapper.updateById(experiment); + return new Response().set(1,"鐘舵�佹洿鏂版垚鍔�"); + } + + /** + * 鑾峰彇娴嬭瘯鐐� + */ + public Response<List<ExperimentPoint>> getPoint(String experimentId){ + QueryWrapper<ExperimentPoint> wrapper = Wrappers.query(); + wrapper.eq("experiment_id",experimentId); + List<ExperimentPoint> experimentPoints = pointMapper.selectList(wrapper); + return new Response<List<ExperimentPoint>>().set(1,experimentPoints); + } + + /** + * 鏇存柊娴嬭瘯鐐圭殑寮�濮嬫椂闂村拰鐘舵�� + */ + public Response updatePointStatus(ExperimentPoint experimentPoint){ + pointMapper.update(experimentPoint,null); + return new Response().set(1,"鐘舵�佹洿鏂版垚鍔�"); + } + + /** + * 鍚姩娴嬭瘯鐐�,骞跺湪娴嬭瘯鏃堕暱杩囧悗,杩斿洖娴嬭瘯缁撴灉 + * @return + */ + public Response startExperimentPoint(ExperimentPoint point){ + //鏇存柊娴嬭瘯鏃堕棿鍜屾祴璇曠偣鐘舵�� + point.setStartTime(new Date()); + point.setStatus(1); + pointMapper.update(point,null); + //绛夊緟duration鏃堕棿 + Integer duration = point.getDuration(); + Integer durationSecond = duration*60; + try { + sleep(durationSecond); + } catch (InterruptedException e) { + e.printStackTrace(); + } + pointMapper.updateEndTime(point.getId(),new Date()); + //杩斿洖杩欐鏃堕棿鐨勬祴璇曠粨鏋� + Map<String,String> resMap = new HashMap<>(); + int value = (int) (100 + Math.random() * 10); + resMap.put("骞冲潎鍔熺巼",value+"kW"); + return new Response().set(1,resMap); + } + + /*======History======*/ + + public Response<PageInfo<Experiment>> getPage(Integer pageNum, Integer pageSize, ExperimentConditionDTO condition) { + PageHelper.startPage(pageNum,pageSize); + List<Experiment> experimentList = mapper.getPage(condition); + //鏌ヨ缁撴灉鐨刣uration鏄垎閽�,杞崲涓� x鏃秞鍒嗘牸寮� + experimentList.stream().forEach(experiment -> { + int duration = Integer.parseInt(experiment.getDuration()); + //鑾峰彇鏃� + int hour = duration/60; + //鑾峰彇鍒� + int minute = duration%60; + experiment.setDuration(hour+"灏忔椂"+minute+"鍒�"); + }); + + PageInfo<Experiment> pageInfo = new PageInfo<>(experimentList); + return new Response<PageInfo<Experiment>>().set(1,pageInfo); + } + } diff --git a/src/main/java/com/whyc/ws/DeviceWebSocket.java b/src/main/java/com/whyc/ws/DeviceWebSocket.java index 894172a..475eee5 100644 --- a/src/main/java/com/whyc/ws/DeviceWebSocket.java +++ b/src/main/java/com/whyc/ws/DeviceWebSocket.java @@ -32,7 +32,7 @@ @OnOpen public void onOpen(Session session) { - log.warn("socket浼氳瘽寮�鍚簡:{}",session); + log.warn("DeviceWebSocket浼氳瘽寮�鍚簡:{}",session); this.session = session; //this.deviceId = deviceId; if(session!=null) { diff --git a/src/main/java/com/whyc/ws/ExperimentSocket.java b/src/main/java/com/whyc/ws/ExperimentSocket.java new file mode 100644 index 0000000..db26523 --- /dev/null +++ b/src/main/java/com/whyc/ws/ExperimentSocket.java @@ -0,0 +1,146 @@ +package com.whyc.ws; + +import com.whyc.dto.Response; +import com.whyc.pojo.ExperimentPoint; +import com.whyc.service.DeviceService; +import com.whyc.service.ExperimentService; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.websocket.*; +import javax.websocket.server.PathParam; +import javax.websocket.server.ServerEndpoint; +import java.io.IOException; +import java.util.Date; +import java.util.List; + +import static java.lang.Thread.sleep; + +@ServerEndpoint(value = "/experiment/{experimentId}", encoders = WebSocketEncoder.class) +@Component +@Api(tags = "璁惧ws") +@Slf4j +public class ExperimentSocket { + + private Session session; + + private volatile Thread thread; + + private static ExperimentService service; + + @Autowired + public void setService(ExperimentService service) { + this.service = service; + } + + /** + * 鐐瑰嚮寮�濮嬭瘯楠�,寮�鍚痺ebSocket,浼犲叆璇曢獙id,鏇存柊璇曢獙鐘舵�� + * + * @param session + * @param experimentId + */ + @OnOpen + public void onOpen(Session session, @PathParam("experimentId") String experimentId) { + log.warn("ExperimentSocket浼氳瘽寮�鍚簡:{}", session); + this.session = session; + if (session.isOpen()) { + //session.getBasicRemote().sendObject(service.updateStatus(experimentId)); + service.updateStatus(experimentId); + sendMessage(experimentId); + + } + } + + @OnMessage + public void onMessage(String message) { + try { + this.sendMessage(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 鍔ㄦ�佽繑鍥炴楠ゅ拰鎵ц淇℃伅 + * @param experimentId + */ + private void sendMessage(String experimentId) { + String type = experimentId.split("_")[0].toLowerCase(); + try { + //妫�鏌ユ楠�1,灞炰簬姝e紡瀹為獙鍓嶇殑鐜绋冲畾鎬ф牎楠� + session.getBasicRemote().sendObject(service.checkPreconditionStep1(type)); + + //姝e紡娴嬭瘯鐐圭殑鏁版嵁杩斿洖 + //1.杩斿洖鏁翠綋璇曢獙鐐� + Response pointResponse = service.getPoint(experimentId); + List<ExperimentPoint> experimentPoints = (List<ExperimentPoint>) pointResponse.getData(); + experimentPoints.stream().forEach(experimentPoint -> { + //鍚姩绗竴涓祴璇曠偣,杩斿洖鏁翠綋鐘舵�� + experimentPoint.setStatus(1); + experimentPoint.setStartTime(new Date()); + service.updatePointStatus(experimentPoint); + try { + session.getBasicRemote().sendObject(experimentPoints); + } catch (IOException | EncodeException e) { + e.printStackTrace(); + } + try { + //绛夊緟涓�涓祴璇曟椂闂� + sleep(experimentPoint.getDuration()); + //鏇存柊绗竴涓祴璇曠偣鐨勬儏鍐�,鑾峰彇鏁翠釜鏃堕棿鐨勬儏鍐� + + } catch (InterruptedException e) { + e.printStackTrace(); + } + + }); + + } catch (IOException | EncodeException e) { + e.printStackTrace(); + } + if(session!=null) { + thread = new Thread("Thread_device") { + public void run() { + while (!thread.isInterrupted()) { + + if (session.isOpen()) { + //session.getBasicRemote().sendObject(service.getStatus()); + try { + session.getBasicRemote().sendObject("yeah!"); + } catch (IOException | EncodeException e) { + e.printStackTrace(); + } + } + try { + sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + } + } + }; + thread.start(); + } + } + + @OnClose + public void onClose() { + if (thread != null && thread.isAlive()) { + thread.interrupt(); + } + log.warn("webSocket浼氳瘽鍏抽棴浜�:{}", session); + + } + + @OnError + public void onError(Throwable error) { + error.printStackTrace(); + if (thread != null && thread.isAlive()) { + thread.interrupt(); + } + } + +} -- Gitblit v1.9.1