package com.dy.pipIrrWechat.irrigation; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONArray; 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.BaseResponseUtils; import com.dy.pipIrrGlobal.rtuMw.Web2RtuMw; import com.dy.common.webUtil.BaseResponse; import com.dy.pipIrrGlobal.daoIr.IrIrrigateGroupMapper; import com.dy.pipIrrGlobal.daoIr.IrProjectMapper; import com.dy.pipIrrGlobal.rtuMw.CodeLocal; import com.dy.pipIrrGlobal.voIr.VoGroupIntakes; import com.dy.pipIrrGlobal.voIr.VoGroupSimple; import com.dy.pipIrrGlobal.voIr.VoIntake; import com.dy.pipIrrGlobal.voIr.VoProjectSimple; import com.dy.pipIrrWechat.irrigation.qo.QoGroup; import com.dy.pipIrrWechat.irrigation.qo.QoProject; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.common.utils.PojoUtils; 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-02-20 8:59 * @LastEditTime 2025-02-20 8:59 * @Description */ @Slf4j @Service public class IrrigationSv { @Autowired private IrProjectMapper irProjectMapper; @Autowired private IrIrrigateGroupMapper irIrrigateGroupMapper; @Autowired private Environment env; @Autowired private RestTemplate restTemplate; private static final String pro_mw = "mw"; private static final String pro_url = "url"; protected static final String ContextComSend = "/rtuMw/com/send"; protected String comSendUrl; /** * pro_mw:属性 * tag从控制器中获取 * key_mw:url的key */ //private Environment env = null; //private String pro_mw = "mw"; private String key_mw = "comSendUrl"; /** * 根据指定条件获取项目记录(精简) * @param queryVo * @return */ public List getSimpleProjects(QoProject queryVo) { Map params = (Map) PojoUtils.generalize(queryVo); return irProjectMapper.getSimpleProjects(params); } /** * 根据指定条件获取轮灌组列表 * @param queryVo * @return */ public List getSimpleGroups(QoGroup queryVo) { Map params = (Map) PojoUtils.generalize(queryVo); //Long itemTotal = irIrrigateGroupMapper.getSimpleGroupCount(params); //QueryResultVo> rsVo = new QueryResultVo<>(); //rsVo.calculateAndSet(itemTotal, params); //rsVo.obj = irIrrigateGroupMapper.getSimpleGroups(params); //return rsVo; return irIrrigateGroupMapper.getSimpleGroups(params); } /** * 根据轮灌组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) { intake.setIsOnLine(getRtuStatus(intake.getRtuAddr())); } 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; } } /** * 获取rtu在线情况 * @param rtuAdd * @return */ public Boolean getRtuStatus(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; } } /** * 发送命令 * * @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(); } }