package com.dy.pipIrrWechat.intake; 
 | 
  
 | 
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.webUtil.BaseResponse; 
 | 
import com.dy.common.webUtil.BaseResponseUtils; 
 | 
import com.dy.common.webUtil.QueryResultVo; 
 | 
import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper; 
 | 
import com.dy.pipIrrGlobal.daoRm.RmOpenCloseValveHistoryMapper; 
 | 
import com.dy.pipIrrGlobal.pojoPr.PrIntake; 
 | 
import com.dy.pipIrrGlobal.voPr.VoOnLineIntake; 
 | 
import com.dy.pipIrrGlobal.voRm.VoOpenClostWechat; 
 | 
import com.dy.pipIrrWechat.intake.qo.OnLineIntakesQO; 
 | 
import com.dy.pipIrrWechat.intake.qo.QoOpenClose; 
 | 
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.List; 
 | 
import java.util.Map; 
 | 
  
 | 
/** 
 | 
 * @author ZhuBaoMin 
 | 
 * @date 2024-06-20 8:37 
 | 
 * @LastEditTime 2024-06-20 8:37 
 | 
 * @Description 
 | 
 */ 
 | 
  
 | 
@Slf4j 
 | 
@Service 
 | 
public class IntakeSv { 
 | 
    @Autowired 
 | 
    private PrIntakeMapper prIntakeMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private RestTemplate restTemplate; 
 | 
  
 | 
    @Autowired 
 | 
    private RmOpenCloseValveHistoryMapper rmOpenCloseValveHistoryMapper; 
 | 
  
 | 
    //protected static String mwUrlSendCom = "http://127.0.0.1:8070/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"; 
 | 
    @Autowired 
 | 
    public IntakeSv(Environment env) { 
 | 
        this.env = env; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据取水口编号获取取水口对象 
 | 
     * @return 
 | 
     */ 
 | 
    public VoOnLineIntake selectOneIntake(OnLineIntakesQO qo) { 
 | 
        //Command com = new Command() ; 
 | 
        //com.id = Command.defaultId; 
 | 
        //com.code = "LCD0001"; 
 | 
        //com.type = "innerCommand"; 
 | 
        //comSendUrl = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw); 
 | 
        // 
 | 
        //JSONObject response = (JSONObject) JSON.toJSON(sendCom2Mw(com)); 
 | 
        // 
 | 
        //JSONArray jsonArray = new JSONArray(); 
 | 
        //if(response != null && response.getString("code").equals("0001")) { 
 | 
        //    JSONObject attachment = response.getJSONObject("content").getJSONObject("attachment"); 
 | 
        //    if(attachment != null) { 
 | 
        //        attachment.forEach((key, value) -> { 
 | 
        //            JSONObject jsonObject = new JSONObject(); 
 | 
        //            jsonObject.put("rtuAddr", key); 
 | 
        //            jsonObject.put("isOnLine", value); 
 | 
        //            jsonArray.add(jsonObject); 
 | 
        //        }); 
 | 
        //    } 
 | 
        //} 
 | 
        //qo.setOnLineMap(jsonArray.toJSONString()); 
 | 
  
 | 
        // 如果 intakeNum 不为空,则转为小写再写入qo对象 
 | 
        String intakeNum = qo.getIntakeNum(); 
 | 
        if(intakeNum != null) { 
 | 
            qo.setIntakeNum(intakeNum.toLowerCase()); 
 | 
        } 
 | 
  
 | 
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ; 
 | 
        return prIntakeMapper.getIntakeByName(params); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取取水口列表(在线和不在线) 
 | 
     * @return 
 | 
     */ 
 | 
    public QueryResultVo<List<VoOnLineIntake>> selectAllIntakes(OnLineIntakesQO qo) { 
 | 
        //Command com = new Command() ; 
 | 
        //com.id = Command.defaultId; 
 | 
        //com.code = "LCD0001"; 
 | 
        //com.type = "innerCommand"; 
 | 
        //comSendUrl = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw); 
 | 
        // 
 | 
        //JSONObject response = (JSONObject) JSON.toJSON(sendCom2Mw(com)); 
 | 
        // 
 | 
        //JSONArray jsonArray = new JSONArray(); 
 | 
        //if(response != null && response.getString("code").equals("0001")) { 
 | 
        //    JSONObject attachment = response.getJSONObject("content").getJSONObject("attachment"); 
 | 
        //    if(attachment != null) { 
 | 
        //        attachment.forEach((key, value) -> { 
 | 
        //            JSONObject jsonObject = new JSONObject(); 
 | 
        //            jsonObject.put("rtuAddr", key); 
 | 
        //            jsonObject.put("isOnLine", value); 
 | 
        //            jsonArray.add(jsonObject); 
 | 
        //        }); 
 | 
        //    } 
 | 
        //} 
 | 
        //qo.setOnLineMap(jsonArray.toJSONString()); 
 | 
  
 | 
        // 如果 intakeNum 不为空,则转为小写再写入qo对象 
 | 
        String intakeNum = qo.getIntakeNum(); 
 | 
        if(intakeNum != null) { 
 | 
            qo.setIntakeNum(intakeNum.toLowerCase()); 
 | 
        } 
 | 
  
 | 
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(qo) ; 
 | 
        Long itemTotal = prIntakeMapper.getOnLineIntakesCount(params); 
 | 
  
 | 
        QueryResultVo<List<VoOnLineIntake>> rsVo = new QueryResultVo<>() ; 
 | 
        rsVo.pageSize = qo.pageSize ; 
 | 
        rsVo.pageCurr = qo.pageCurr ; 
 | 
        rsVo.calculateAndSet(itemTotal, params); 
 | 
        rsVo.obj = prIntakeMapper.getOnLineIntakes(params); 
 | 
        return rsVo; 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据操作员获取常用取水口 
 | 
     * @param operatorId 
 | 
     * @return 
 | 
     */ 
 | 
    public List<VoOnLineIntake> getUsedIntakes(Long operatorId) { 
 | 
        Command com = new Command() ; 
 | 
        com.id = Command.defaultId; 
 | 
        com.code = "LCD0001"; 
 | 
        com.type = "innerCommand"; 
 | 
        comSendUrl = env.getProperty(pro_mw + "." + DataSourceContext.get() + "." + key_mw); 
 | 
  
 | 
        JSONObject response = (JSONObject) JSON.toJSON(sendCom2Mw(com)); 
 | 
        //String response_Str = "{\"code\": \"0001\",\"content\": {\"attachment\": {\"530115059980\": true,\"620201000030\": true},\"code\": \"LCD0001\",\"id\": \"999999999\",\"param\": {\"message\": \"查询所有RTU在线情况结果\",\"success\": true},\"protocol\": \"\",\"rtuAddr\": \"\",\"rtuResultSendWebUrl\": \"\",\"type\": \"resultCommand\"},\"msg\": \"请求成功\",\"success\": true}"; 
 | 
        //JSONObject response = JSON.parseObject(response_Str); 
 | 
        //String test = response.toJSONString(); 
 | 
  
 | 
        JSONArray jsonArray = new JSONArray(); 
 | 
        if(response != null && response.getString("code").equals("0001")) { 
 | 
            JSONObject attachment = response.getJSONObject("content").getJSONObject("attachment"); 
 | 
            if(attachment != null) { 
 | 
                attachment.forEach((key, value) -> { 
 | 
                    JSONObject jsonObject = new JSONObject(); 
 | 
                    jsonObject.put("rtuAddr", key); 
 | 
                    jsonObject.put("isOnLine", value); 
 | 
                    jsonArray.add(jsonObject); 
 | 
  
 | 
                }); 
 | 
            } 
 | 
  
 | 
            System.out.println(jsonArray.toJSONString()); 
 | 
            //return prIntakeMapper.getUsedIntakes(jsonArray.toJSONString(), operatorId); 
 | 
        //} else { 
 | 
        //    return new ArrayList<>(); 
 | 
        } 
 | 
  
 | 
        return prIntakeMapper.getUsedIntakes(jsonArray.toJSONString(), operatorId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 发送命令 
 | 
     * @return 
 | 
     */ 
 | 
    protected BaseResponse sendCom2Mw(Command com){ 
 | 
        String url = UriComponentsBuilder.fromUriString(comSendUrl) 
 | 
                .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(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取物理卡开关阀记录,微信小程序使用 
 | 
     * @param queryVo 
 | 
     * @return 
 | 
     */ 
 | 
    public QueryResultVo<List<VoOpenClostWechat>> getCardOpenClose(QoOpenClose queryVo) { 
 | 
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); 
 | 
  
 | 
        Long itemTotal = rmOpenCloseValveHistoryMapper.getCardOpenCloseCount(params); 
 | 
  
 | 
        QueryResultVo<List<VoOpenClostWechat>> rsVo = new QueryResultVo<>(); 
 | 
        rsVo.pageSize = queryVo.pageSize; 
 | 
        rsVo.pageCurr = queryVo.pageCurr; 
 | 
  
 | 
        rsVo.calculateAndSet(itemTotal, params); 
 | 
        rsVo.obj = rmOpenCloseValveHistoryMapper.getCardOpenClose(params); 
 | 
        return rsVo; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取虚拟卡开关阀记录,微信小程序使用 
 | 
     * @param queryVo 
 | 
     * @return 
 | 
     */ 
 | 
    public QueryResultVo<List<VoOpenClostWechat>> getVcCardOpenClose(QoOpenClose queryVo) { 
 | 
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); 
 | 
  
 | 
        Long itemTotal = rmOpenCloseValveHistoryMapper.getVcCardOpenCloseCount(params); 
 | 
  
 | 
        QueryResultVo<List<VoOpenClostWechat>> rsVo = new QueryResultVo<>(); 
 | 
        rsVo.pageSize = queryVo.pageSize; 
 | 
        rsVo.pageCurr = queryVo.pageCurr; 
 | 
  
 | 
        rsVo.calculateAndSet(itemTotal, params); 
 | 
        rsVo.obj = rmOpenCloseValveHistoryMapper.getVcCardOpenClose(params); 
 | 
        return rsVo; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 得到所有取水口 
 | 
     * 
 | 
     * @return 所有取水口集合 
 | 
     */ 
 | 
    public QueryResultVo<List<PrIntake>> selectAll() { 
 | 
        QueryResultVo<List<PrIntake>> rsVo = new QueryResultVo<>(); 
 | 
        rsVo.obj = this.prIntakeMapper.selectAll(); 
 | 
        return rsVo; 
 | 
    } 
 | 
} 
 |