package com.dy.pipIrrProject.controller; 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.QueryResultVo; import com.dy.pipIrrGlobal.daoPr.PrControllerMapper; import com.dy.pipIrrGlobal.daoPr.PrIntakeControllerMapper; import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper; import com.dy.pipIrrGlobal.pojoPr.PrController; import com.dy.pipIrrGlobal.pojoPr.PrIntakeController; import com.dy.pipIrrGlobal.voPr.VoController; 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.*; /** * @author ZhuBaoMin * @date 2023-12-29 10:06 * @LastEditTime 2023-12-29 10:06 * @Description */ @Slf4j @Service public class ControllerSv { @Autowired private PrControllerMapper prControllerMapper; @Autowired private PrIntakeMapper prIntakeMapper; @Autowired private PrIntakeControllerMapper prIntakeControllerMapper; @Autowired private RestTemplate restTemplate; // 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 ControllerSv(Environment env) { this.env = env; } /** * 根据指定获取控制器记录 * * @param queryVo * @return */ public QueryResultVo> getControllers(QueryVo queryVo) { 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)); if (response != null && response.getString("code").equals("0001")) { //JSONObject attachment = response.getJSONObject("content").getJSONObject("attachment").getJSONObject("onLineMap"); JSONObject attachment = response.getJSONObject("content").getJSONObject("attachment"); JSONArray jsonArray = new JSONArray(); if(attachment != null) { //HashMap onLineMap = JSON.parseObject(attachment.toJSONString(), HashMap.class); //for (Map.Entry entry : onLineMap.entrySet()) { // JSONObject jsonObject = new JSONObject(); // jsonObject.put("rtuAddr", entry.getKey()); // jsonObject.put("isOnLine", entry.getValue()); // jsonArray.add(jsonObject); //} attachment.forEach((key, value) -> { JSONObject jsonObject = new JSONObject(); jsonObject.put("rtuAddr", key); jsonObject.put("isOnLine", value); jsonArray.add(jsonObject); }); } queryVo.setOnLineMap(jsonArray.toJSONString()); Map params = (Map) PojoUtils.generalize(queryVo); Long itemTotal = prControllerMapper.getRecordCount(params); QueryResultVo> rsVo = new QueryResultVo<>(); rsVo.pageSize = queryVo.pageSize; rsVo.pageCurr = queryVo.pageCurr; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = prControllerMapper.getControllers(params); return rsVo; } else { QueryResultVo> rsVo = new QueryResultVo<>(); return rsVo; } } /** * 添加控制器 * * @param po * @return */ public Integer addController(PrController po) { int rows = prControllerMapper.insert(po); if (rows == 0) { return 0; } PrIntakeController addPrIntakeController = new PrIntakeController(); addPrIntakeController.setIntakeid(po.getIntakeId()); addPrIntakeController.setControllerid(po.getId()); addPrIntakeController.setOperatetype((byte) 1); addPrIntakeController.setOperator(po.getOperator()); addPrIntakeController.setOperatedt(po.getOperateDt()); addPrIntakeController.setRemarks("绑定"); int rec = prIntakeControllerMapper.insert(addPrIntakeController); if (rec == 0) { return 0; } return 1; } /** * 根据控制器地址获取控制器列表 * * @param rtuAddr * @return */ public List> getControllersByAddr(String rtuAddr) { return prControllerMapper.getControllersByAddr(rtuAddr); } /** * 根据控制器编号物理删除控制 * * @param controllerId * @return */ public Integer deleteControllerById(Long controllerId) { return prControllerMapper.deleteByPrimaryKey(controllerId); } /** * 根据指定条件导出控制器列表 * * @param queryVo * @return */ public List export(QueryVo queryVo) { Map params = (Map) PojoUtils.generalize(queryVo); List rsVo = new ArrayList<>(); rsVo = prControllerMapper.getControllers(params); return rsVo; } /** * 根据控制器编号获取未删除的控制器数量 * * @param controllerId * @return */ public Integer getRecordCountOfController(Long controllerId) { return prControllerMapper.getRecordCountOfController(controllerId); } /** * 根据控制器编号获取已绑定记录数 * * @param controllerId * @return */ public Integer getBindedCount(Long controllerId) { return prControllerMapper.getBindedCount(controllerId); } /** * 根据主键删除外键 * * @param controllerId * @return */ public Integer deleteIntakeId(Long controllerId) { return prControllerMapper.deleteIntakeId(controllerId); } /** * 获取未绑控制器的取水口列表 * * @return */ public JSONArray getNoBindingIntakes() { List> list = Optional.ofNullable(prIntakeMapper.getNoBindingIntakes()).orElse(new ArrayList<>()); JSONArray array = null; if (list.size() > 0) { array = JSONArray.parseArray(JSON.toJSONString(list)); } return array; } /** * 根据控制器编号物理删除控制 * 2024-6-7 * * @param controllerId * @return */ public Integer deleteControllerByIdTwo(Long controllerId) { return prControllerMapper.deleteByPrimaryKey(controllerId); } /** * 根据主键查询控制器列表 * 2024-6-7 * * @param controllerId * @return */ public PrController getByControllerId(Long controllerId) { return prControllerMapper.selectByPrimaryKey(controllerId); } /** * 发送命令 * * @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(); } return response.getBody(); } }