package com.dy.pipIrrProject.controller; 
 | 
  
 | 
import com.alibaba.fastjson2.JSON; 
 | 
import com.alibaba.fastjson2.JSONArray; 
 | 
import com.alibaba.fastjson2.JSONObject; 
 | 
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 com.dy.pipIrrGlobal.voPr.VoOnLineIntake; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.dubbo.common.utils.PojoUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
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"; 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 根据指定获取控制器记录 
 | 
     * 
 | 
     * @param queryVo 
 | 
     * @return 
 | 
     */ 
 | 
    public QueryResultVo<List<VoController>> getControllers(QueryVo queryVo) { 
 | 
  
 | 
        Command com = new Command(); 
 | 
        com.id = Command.defaultId; 
 | 
        com.code = "LCD0001"; 
 | 
        com.type = "innerCommand"; 
 | 
  
 | 
        JSONObject response = (JSONObject) JSON.toJSON(sendCom2Mw(com)); 
 | 
  
 | 
        if (response != null && response.getString("code").equals("0001")) { 
 | 
            JSONObject attachment = response.getJSONObject("content").getJSONObject("attachment").getJSONObject("onLineMap"); 
 | 
            HashMap<String, Boolean> onLineMap = JSON.parseObject(attachment.toJSONString(), HashMap.class); 
 | 
  
 | 
            JSONArray jsonArray = new JSONArray(); 
 | 
            for (Map.Entry<String, Boolean> entry : onLineMap.entrySet()) { 
 | 
                JSONObject jsonObject = new JSONObject(); 
 | 
                jsonObject.put("rtuAddr", entry.getKey()); 
 | 
                jsonObject.put("isOnLine", entry.getValue()); 
 | 
                jsonArray.add(jsonObject); 
 | 
            } 
 | 
            queryVo.setOnLineMap(jsonArray.toJSONString()); 
 | 
  
 | 
            Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); 
 | 
  
 | 
            Long itemTotal = prControllerMapper.getRecordCount(params); 
 | 
  
 | 
            QueryResultVo<List<VoController>> rsVo = new QueryResultVo<>(); 
 | 
            rsVo.pageSize = queryVo.pageSize; 
 | 
            rsVo.pageCurr = queryVo.pageCurr; 
 | 
  
 | 
            rsVo.calculateAndSet(itemTotal, params); 
 | 
            rsVo.obj = prControllerMapper.getControllers(params); 
 | 
            return rsVo; 
 | 
        } else { 
 | 
            QueryResultVo<List<VoController>> 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<Map<String, Object>> getControllersByAddr(String rtuAddr) { 
 | 
        return prControllerMapper.getControllersByAddr(rtuAddr); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据控制器编号物理删除控制 
 | 
     * 
 | 
     * @param controllerId 
 | 
     * @return 
 | 
     */ 
 | 
    public Integer deleteControllerById(Long controllerId) { 
 | 
        return prControllerMapper.deleteByPrimaryKey(controllerId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据指定条件导出控制器列表 
 | 
     * 
 | 
     * @param queryVo 
 | 
     * @return 
 | 
     */ 
 | 
    public List<VoController> export(QueryVo queryVo) { 
 | 
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); 
 | 
        List<VoController> 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<Map<String, Object>> 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(mwUrlSendCom) 
 | 
                .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(); 
 | 
        } 
 | 
        return response.getBody(); 
 | 
    } 
 | 
} 
 |