package com.dy.pipIrrIrrigate.irrigation; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.dy.common.multiDataSource.DataSourceContext; import com.dy.common.mw.protocol.Command; import com.dy.common.mw.protocol.CommandType; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import com.dy.pipIrrGlobal.daoIr.IrIrrigateGroupMapper; import com.dy.pipIrrGlobal.rtuMw.CodeLocal; import com.dy.pipIrrGlobal.voIr.VoGroupIntakes; import com.dy.pipIrrGlobal.voIr.VoIntake; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author ZhuBaoMin * @date 2025-07-02 11:08 * @LastEditTime 2025-07-02 11:08 * @Description */ @Slf4j @Service public class IrrigationSv { @Autowired private IrIrrigateGroupMapper irIrrigateGroupMapper; @Autowired private Environment env; @Autowired private RestTemplate restTemplate; private static final String pro_mw = "mw"; private String key_mw = "comSendUrl"; public Boolean getOnlineStatus(String rtuAdd) { Command com = new Command(); com.id = Command.defaultId; com.code = CodeLocal.onLinePart; com.type = CommandType.innerCommand; com.setRtuAddr(rtuAdd); com.setParam(rtuAdd); JSONObject response = (JSONObject) JSON.toJSON(sendCom2Mw(com)); if (response == null || !response.getString("code").equals("0001") || response.getJSONObject("content").getJSONObject("attachment").size() == 0) { return false; } if(response.getJSONObject("content").getJSONObject("attachment").getBoolean(rtuAdd)) { return true; } else { return false; } } public Boolean getOpenCloseStatus(String rtuAdd) { Command com = new Command(); com.id = Command.defaultId; com.code = CodeLocal.oneRtuStates; com.type = CommandType.innerCommand; com.setRtuAddr(rtuAdd); com.setParam(rtuAdd); JSONObject response = (JSONObject) JSON.toJSON(sendCom2Mw(com)); if (response == null || !response.getString("code").equals("0001") || response.getJSONObject("content").getJSONObject("attachment") == null) { return false; } // if(response.getJSONObject("content").getJSONObject("attachment").get("valveOpenTrueCloseFalse").equals("true")) { if(response.getJSONObject("content").getJSONObject("attachment").getBoolean("valveOpenTrueCloseFalse")) { return true; } else { return false; } } /** * 发送命令 * * @return */ protected BaseResponse sendCom2Mw(Command com) { String url = UriComponentsBuilder.fromUriString(env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw)) .build() .toUriString(); HttpHeaders headers = new HttpHeaders(); HttpEntity httpEntity = new HttpEntity<>(com, headers); ResponseEntity response = null; try { // 通过Post方式调用接口 response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, BaseResponse.class); } catch (Exception e) { e.printStackTrace(); } if(response == null) { return BaseResponseUtils.buildErrorMsg("中间件调用失败"); } return response.getBody(); } /** * 根据轮灌组ID获取轮灌组详情 * @param groupId * @return */ public Map getGroupDetails(Long groupId) { try { // 生成项目信息及轮灌组信息 VoGroupIntakes voGroupIntakes = new VoGroupIntakes(); String projectName = ""; String groupName = ""; List groupIntakes = irIrrigateGroupMapper.getGroupIntakes(groupId); if (groupIntakes == null) { Map map = new HashMap<>(); map.put("success", false); map.put("msg", "轮灌组不存在"); map.put("content", null); return map; } for(VoGroupIntakes groupIntake : groupIntakes) { projectName = projectName + groupIntake.getProjectName() + "、"; groupName = groupIntake.getGroupName(); } voGroupIntakes.setProjectName(projectName.substring(0, projectName.length() - 1)); voGroupIntakes.setGroupName(groupName); // 补全取水口信息(在线情况) List intakes = irIrrigateGroupMapper.getGroupIntakesList(groupId); if(intakes == null) { Map map = new HashMap<>(); map.put("success", false); map.put("msg", "该轮灌组未绑定取水口"); map.put("content", null); return map; } for (VoIntake intake : intakes) { Boolean isOnLine = getOnlineStatus(intake.getRtuAddr()); intake.setIsOnLine(isOnLine); Boolean isOpen = getOpenCloseStatus(intake.getRtuAddr()); intake.setIsOpen(isOpen); } voGroupIntakes.setIntakes(intakes); Map map = new HashMap<>(); map.put("success", true); map.put("msg", "获取轮灌组详情成功"); map.put("content", voGroupIntakes); return map; } catch (Exception e) { Map map = new HashMap<>(); map.put("success", false); map.put("msg", "获取轮灌组详情失败"); map.put("content", null); return map; } } }