Browse Source

Merge remote-tracking branch 'origin/master'

zhongwei
Jone 7 months ago
parent
commit
d11ee8c62c
  1. 16
      hzims-service-api/big-model-api/src/main/java/com/hnac/hzims/bigmodel/interactive/vo/FaultSelectionVO.java
  2. 5
      hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/interactive/constants/FuncRouteEnum.java
  3. 4
      hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/interactive/controller/InteractiveController.java
  4. 2
      hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/interactive/service/IInteractiveService.java
  5. 44
      hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/interactive/service/impl/ExtraResolveStrategyService.java
  6. 11
      hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/interactive/service/impl/InteractiveServiceImpl.java
  7. 7
      hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/interactive/service/impl/JumpRouteJoinStrategy.java
  8. 5
      hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/schedule/InteractiveSchedule.java
  9. 19
      hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/websocket/handler/InteractiveHandler.java

16
hzims-service-api/big-model-api/src/main/java/com/hnac/hzims/bigmodel/interactive/vo/FaultSelectionVO.java

@ -0,0 +1,16 @@
package com.hnac.hzims.bigmodel.interactive.vo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* @Author: huangxing
* @Date: 2024/05/16 15:10
*/
@Data
@EqualsAndHashCode
public class FaultSelectionVO extends SelectionVO implements Serializable {
}

5
hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/interactive/constants/FuncRouteEnum.java

@ -12,12 +12,13 @@ import java.util.Optional;
*/ */
@AllArgsConstructor @AllArgsConstructor
public enum FuncRouteEnum { public enum FuncRouteEnum {
OPEN_SCADA("open_scada","打开实时画面"), OPEN_CANVAS("open_canvas","打开实时画面"),
OPEN_VIDEO("open_video","打开视频监控"), OPEN_VIDEO("open_video","打开视频监控"),
DIAGNOSE("diagnose","智能诊断"), DIAGNOSE("diagnose","智能诊断"),
CHOOSE_STATION("choose_station","选择站点"), CHOOSE_STATION("choose_station","选择站点"),
CHOOSE_VIDEO("choose_video","选择视频"), CHOOSE_VIDEO("choose_video","选择视频"),
CHOOSE_CANVAS("choose_canvas","选择画面"), CHOOSE_CANVAS("choose_canvas","选择画面"),
CHOOSE_FAULT("choose_fault","选择故障"),
; ;
@Getter @Getter
private String funcCode; private String funcCode;
@ -26,7 +27,7 @@ public enum FuncRouteEnum {
public static FuncRouteEnum getEnumByFuncCode(String funcCode) { public static FuncRouteEnum getEnumByFuncCode(String funcCode) {
Optional<FuncRouteEnum> FuncRoute = Arrays.stream(FuncRouteEnum.class.getEnumConstants()).filter(e -> funcCode.equals(e.getFuncCode())).findFirst(); Optional<FuncRouteEnum> FuncRoute = Arrays.stream(FuncRouteEnum.class.getEnumConstants()).filter(e -> funcCode.equals(e.getFuncCode())).findFirst();
return FuncRoute.get(); return FuncRoute.orElse(null);
} }
} }

4
hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/interactive/controller/InteractiveController.java

@ -48,8 +48,8 @@ public class InteractiveController {
@RequestMapping(value = "/authentication",method = {RequestMethod.GET,RequestMethod.POST}) @RequestMapping(value = "/authentication",method = {RequestMethod.GET,RequestMethod.POST})
public R authentication(@RequestParam(required = false) @ApiParam("站点编号") String stationId, public R authentication(@RequestParam(required = false) @ApiParam("站点编号") String stationId,
@RequestParam @ApiParam("用户ID") String userId, @RequestParam @ApiParam("用户ID") String userId,
@RequestParam(required = false) @ApiParam("菜单ID") String funcCode) { @RequestParam(required = false) @ApiParam("菜单ID") String func) {
return R.status(interactiveService.authentication(stationId,userId,funcCode)); return R.status(interactiveService.authentication(stationId,userId,func));
} }
@ApiOperation("获取问答sessionId") @ApiOperation("获取问答sessionId")

2
hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/interactive/service/IInteractiveService.java

@ -30,7 +30,7 @@ public interface IInteractiveService {
List<AnswerVO> getAnswerBySessionIds(String sessionIds); List<AnswerVO> getAnswerBySessionIds(String sessionIds);
Boolean authentication(String stationId, String userId, String funcCode); Boolean authentication(String stationId, String userId, String func);
Boolean removeSessionId(String sessionId); Boolean removeSessionId(String sessionId);
} }

44
hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/interactive/service/impl/ExtraResolveStrategyService.java

@ -5,10 +5,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.hnac.hzims.bigmodel.interactive.constants.FuncRouteEnum; import com.hnac.hzims.bigmodel.interactive.constants.FuncRouteEnum;
import com.hnac.hzims.bigmodel.interactive.constants.FunctionConstants; import com.hnac.hzims.bigmodel.interactive.constants.FunctionConstants;
import com.hnac.hzims.bigmodel.interactive.vo.ScadaSelectionVO; import com.hnac.hzims.bigmodel.interactive.vo.*;
import com.hnac.hzims.bigmodel.interactive.vo.StationSelectionVO;
import com.hnac.hzims.bigmodel.interactive.vo.ExtraVO;
import com.hnac.hzims.bigmodel.interactive.vo.VideoSelectionVO;
import com.hnac.hzims.operational.station.entity.StationEntity; import com.hnac.hzims.operational.station.entity.StationEntity;
import com.hnac.hzims.operational.station.entity.StationVideoTypeEntity; import com.hnac.hzims.operational.station.entity.StationVideoTypeEntity;
import com.hnac.hzims.operational.station.feign.IStationClient; import com.hnac.hzims.operational.station.feign.IStationClient;
@ -50,22 +47,39 @@ public class ExtraResolveStrategyService {
if(StringUtil.isNotBlank(functionCode)) { if(StringUtil.isNotBlank(functionCode)) {
XxlJobLogger.log("函数编号为:" + functionCode); XxlJobLogger.log("函数编号为:" + functionCode);
FuncRouteEnum funcRouteEnum = FuncRouteEnum.getEnumByFuncCode(functionCode); FuncRouteEnum funcRouteEnum = FuncRouteEnum.getEnumByFuncCode(functionCode);
switch (funcRouteEnum) { if(Func.isNotEmpty(funcRouteEnum)) {
case DIAGNOSE: switch (funcRouteEnum) {
return this.resolveDiagnose(extra); case DIAGNOSE:
case CHOOSE_STATION: return this.resolveDiagnose(extra);
return this.resolveChooseStation(extra); case CHOOSE_STATION:
case CHOOSE_VIDEO: return this.resolveChooseStation(extra);
return this.resolveChooseVideo(extra); case CHOOSE_VIDEO:
case CHOOSE_CANVAS: return this.resolveChooseVideo(extra);
return this.resolveChooseScada(extra); case CHOOSE_CANVAS:
default: return this.resolveChooseScada(extra);
break; case CHOOSE_FAULT:
return this.resolveChooseFault(extra);
default:
break;
}
} }
} }
return JSONObject.parseObject(JSON.toJSONString(extra),ExtraVO.class); return JSONObject.parseObject(JSON.toJSONString(extra),ExtraVO.class);
} }
private ExtraVO resolveChooseFault(Map<String,Object> extra) {
ExtraVO result = new ExtraVO();
JSONObject data = JSONObject.parseObject(JSON.toJSONString(extra.get("data")));
if(data.containsKey("faults")) {
List<FaultSelectionVO> faults = JSONArray.parseArray(JSON.toJSONString(data.get("faults")), FaultSelectionVO.class);
result.setSelection(faults);
}
result.setFuncCode(FuncRouteEnum.CHOOSE_FAULT.getFuncCode());
result.setSpecial(true);
result.setType(FunctionConstants.TypeEnum.CHOOSE.getType());
return result;
}
private ExtraVO resolveDiagnose(Map<String,Object> extra) { private ExtraVO resolveDiagnose(Map<String,Object> extra) {
ExtraVO result = new ExtraVO(); ExtraVO result = new ExtraVO();
JSONObject data = JSONObject.parseObject(JSON.toJSONString(extra.get("data"))); JSONObject data = JSONObject.parseObject(JSON.toJSONString(extra.get("data")));

11
hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/interactive/service/impl/InteractiveServiceImpl.java

@ -73,6 +73,9 @@ public class InteractiveServiceImpl implements IInteractiveService {
logger.info("interactive:resolve","开始解析大模型函数,函数内容为:" + JSON.toJSONString(req)); logger.info("interactive:resolve","开始解析大模型函数,函数内容为:" + JSON.toJSONString(req));
FunctionEntity function = functionService.getFunctionByCode(req.getFunctionName()); FunctionEntity function = functionService.getFunctionByCode(req.getFunctionName());
TypeEnum typeEnum = TypeEnum.getTypeEnumByType(function.getType()); TypeEnum typeEnum = TypeEnum.getTypeEnumByType(function.getType());
if(Func.isEmpty(typeEnum)) {
throw new ServiceException("函数解析失败!");
}
switch (typeEnum) { switch (typeEnum) {
// 页面跳转 // 页面跳转
case JUMP: case JUMP:
@ -194,7 +197,7 @@ public class InteractiveServiceImpl implements IInteractiveService {
} }
@Override @Override
public Boolean authentication(String stationId, String userId, String funcCode) { public Boolean authentication(String stationId, String userId, String func) {
// 站点鉴权 // 站点鉴权
if(StringUtil.isNotBlank(stationId)) { if(StringUtil.isNotBlank(stationId)) {
List<String> stations = this.getStationPermissionsById(userId).stream().map(DeptStationDTO::getStationId) List<String> stations = this.getStationPermissionsById(userId).stream().map(DeptStationDTO::getStationId)
@ -204,9 +207,9 @@ public class InteractiveServiceImpl implements IInteractiveService {
}); });
} }
// 菜单鉴权 // 菜单鉴权
if(StringUtil.isNotBlank(funcCode) && StringUtil.isNotBlank(userId)) { if(StringUtil.isNotBlank(func) && StringUtil.isNotBlank(userId)) {
FunctionEntity function = functionService.getFunctionByCode(funcCode); FunctionEntity function = functionService.getFunctionByCode(func);
if(Func.isNotEmpty(function.getRoute()) && StringUtil.isNotBlank(function.getRoute())) { if(Func.isNotEmpty(function) && Func.isNotEmpty(function.getRoute()) && StringUtil.isNotBlank(function.getRoute())) {
R<Boolean> authenticationR = userClient.permissionMenuById(Long.valueOf(userId), function.getRoute()); R<Boolean> authenticationR = userClient.permissionMenuById(Long.valueOf(userId), function.getRoute());
Assert.isTrue(authenticationR.isSuccess() && authenticationR.getData(), () -> { Assert.isTrue(authenticationR.isSuccess() && authenticationR.getData(), () -> {
throw new ServiceException("人员菜单鉴权失败!"); throw new ServiceException("人员菜单鉴权失败!");

7
hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/interactive/service/impl/JumpRouteJoinStrategy.java

@ -40,7 +40,7 @@ public class JumpRouteJoinStrategy {
FuncRouteEnum routeEnum = FuncRouteEnum.getEnumByFuncCode(function.getCode()); FuncRouteEnum routeEnum = FuncRouteEnum.getEnumByFuncCode(function.getCode());
if(Func.isNotEmpty(routeEnum)) { if(Func.isNotEmpty(routeEnum)) {
switch(routeEnum) { switch(routeEnum) {
case OPEN_SCADA: case OPEN_CANVAS:
return this.getScadaExtra(args,function); return this.getScadaExtra(args,function);
default: default:
break; break;
@ -53,13 +53,16 @@ public class JumpRouteJoinStrategy {
// 跳转页面逻辑 // 跳转页面逻辑
ExtraVO extraVO = new ExtraVO(); ExtraVO extraVO = new ExtraVO();
extraVO.setImmediatelyJump(true); extraVO.setImmediatelyJump(true);
extraVO.setFuncCode(FuncRouteEnum.OPEN_SCADA.getFuncCode()); extraVO.setFuncCode(FuncRouteEnum.OPEN_CANVAS.getFuncCode());
Map<String, String> params = this.scadaResolve(args); Map<String, String> params = this.scadaResolve(args);
// 根据hz3000画面版本获取path // 根据hz3000画面版本获取path
Integer picResource = Integer.valueOf(params.get("picResource")); Integer picResource = Integer.valueOf(params.get("picResource"));
JSONObject pathObject = JSONObject.parseObject(function.getPath()); JSONObject pathObject = JSONObject.parseObject(function.getPath());
R<StationEntity> stationR = stationClient.getStationByCode(params.get("projectId")); R<StationEntity> stationR = stationClient.getStationByCode(params.get("projectId"));
extraVO.setLabel(Optional.ofNullable(stationR).filter(r -> r.isSuccess()).map(R::getData).map(StationEntity::getName).orElse("") + "_" + params.get("name")); extraVO.setLabel(Optional.ofNullable(stationR).filter(r -> r.isSuccess()).map(R::getData).map(StationEntity::getName).orElse("") + "_" + params.get("name"));
Map<String,Object> extraParams = new HashMap<>(1);
extraParams.put("picResource",picResource);
extraVO.setParams(extraParams);
// 云组态 // 云组态
if(picResource == 0) { if(picResource == 0) {
String scada = pathObject.getString("scada"); String scada = pathObject.getString("scada");

5
hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/schedule/InteractiveSchedule.java

@ -193,9 +193,8 @@ public class InteractiveSchedule {
return ReturnT.SUCCESS; return ReturnT.SUCCESS;
} }
//@XxlJob(SYNCHRONOUS_FAULT_INSTRUCT) String params @XxlJob(SYNCHRONOUS_FAULT_INSTRUCT)
@Scheduled(cron = "0/10 * * * * ?") public ReturnT synchronousFaultInstruct(String params) {
public ReturnT synchronousFaultInstruct() {
Map<String,Object> request = new HashMap<>(2); Map<String,Object> request = new HashMap<>(2);
// 获取站点列表 // 获取站点列表
R<List<StationEntity>> stationsR = stationClient.list(new StationEntity()); R<List<StationEntity>> stationsR = stationClient.list(new StationEntity());

19
hzims-service/hzims-big-model/src/main/java/com/hnac/hzims/bigmodel/websocket/handler/InteractiveHandler.java

@ -90,6 +90,9 @@ public class InteractiveHandler extends TextWebSocketHandler {
case CHOOSE_CANVAS: case CHOOSE_CANVAS:
this.handleScadaChoose(messageContext,sessionId); this.handleScadaChoose(messageContext,sessionId);
break; break;
case CHOOSE_FAULT:
this.handleFaultChoose(messageContext,sessionId);
break;
default: default:
break; break;
} }
@ -147,7 +150,7 @@ public class InteractiveHandler extends TextWebSocketHandler {
Map<String,String> param = new HashMap<>(1); Map<String,String> param = new HashMap<>(1);
param.put("canvas_id",selection.getId()); param.put("canvas_id",selection.getId());
IFunctionService functionService = SpringUtil.getBean(IFunctionService.class); IFunctionService functionService = SpringUtil.getBean(IFunctionService.class);
FunctionEntity function = functionService.getFunctionByCode("open_scada"); FunctionEntity function = functionService.getFunctionByCode(FuncRouteEnum.OPEN_CANVAS.getFuncCode());
ExtraVO scadaExtra = strategy.getScadaExtra(param, function); ExtraVO scadaExtra = strategy.getScadaExtra(param, function);
AnswerVO answerVO = new AnswerVO(); AnswerVO answerVO = new AnswerVO();
answerVO.setSessionId(sessionId); answerVO.setSessionId(sessionId);
@ -168,4 +171,18 @@ public class InteractiveHandler extends TextWebSocketHandler {
wsService.sendMessage(sessionId,textMessage); wsService.sendMessage(sessionId,textMessage);
} }
} }
private void handleFaultChoose(JSONObject messageContext,String sessionId) {
IInteractiveService interactiveService = SpringUtil.getBean(IInteractiveService.class);
String userId = messageContext.getString("userId");
String funcCode = messageContext.getString("funcCode");
FaultSelectionVO selectionVO = messageContext.getObject("selection",FaultSelectionVO.class);
JSONObject data = new JSONObject();
data.put("id",selectionVO.getId());
data.put("name",selectionVO.getName());
Map<String, Object> extra = new HashMap<>(2);
extra.put("func",funcCode);
extra.put("data",data);
interactiveService.specialAsk(sessionId,userId,extra);
}
} }

Loading…
Cancel
Save