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.VoAllIntake; 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 QueryResultVo> selectSomeIntakes(OnLineIntakesQO qo) { // 如果 intakeNum 不为空,则转为小写再写入qo对象 String intakeNum = qo.getIntakeNum(); if(intakeNum != null) { qo.setIntakeNum(intakeNum.toLowerCase()); } Map params = (Map) PojoUtils.generalize(qo) ; Long itemTotal = prIntakeMapper.getSomeIntakesCount4Wx(params); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = qo.pageSize ; rsVo.pageCurr = qo.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = prIntakeMapper.getSomeIntakes4Wx(params); return rsVo; } /** * 根据取水口编号获取取水口对象 * @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 params = (Map) PojoUtils.generalize(qo) ; return prIntakeMapper.getIntakeByName(params); } /** * 获取取水口列表(在线和不在线) * @return */ public QueryResultVo> 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 params = (Map) PojoUtils.generalize(qo) ; Long itemTotal = prIntakeMapper.getOnLineIntakesCount(params); QueryResultVo> 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 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 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(); } /** * 获取物理卡开关阀记录,微信小程序使用 * @param queryVo * @return */ public QueryResultVo> getCardOpenClose(QoOpenClose queryVo) { Map params = (Map) PojoUtils.generalize(queryVo); Long itemTotal = rmOpenCloseValveHistoryMapper.getCardOpenCloseCount(params); QueryResultVo> 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> getVcCardOpenClose(QoOpenClose queryVo) { Map params = (Map) PojoUtils.generalize(queryVo); Long itemTotal = rmOpenCloseValveHistoryMapper.getVcCardOpenCloseCount(params); QueryResultVo> 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> selectAll() { QueryResultVo> rsVo = new QueryResultVo<>(); rsVo.obj = this.prIntakeMapper.selectAll(); return rsVo; } }