zhubaomin
6 天以前 346b480ab7848c742065e9bf989abaf43b515613
pipIrr-platform/pipIrr-web/pipIrr-web-wechat/src/main/java/com/dy/pipIrrWechat/irrigation/IrrigationSv.java
@@ -1,17 +1,38 @@
package com.dy.pipIrrWechat.irrigation;
import com.dy.common.webUtil.QueryResultVo;
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;
@@ -30,6 +51,27 @@
    @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";
    /**
     * 根据指定条件获取项目记录(精简)
@@ -58,4 +100,110 @@
        return irIrrigateGroupMapper.getSimpleGroups(params);
    }
    /**
     * 根据轮灌组ID获取轮灌组详情
     * @param groupId
     * @return
     */
    public Map getGroupDetails(Long groupId) {
        try {
            // 生成项目信息及轮灌组信息
            VoGroupIntakes voGroupIntakes = new VoGroupIntakes();
            String projectName = "";
            String groupName = "";
            List<VoGroupIntakes> 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<VoIntake> 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<Command> httpEntity = new HttpEntity<>(com, headers);
        ResponseEntity<BaseResponse> 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();
    }
}