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.BaseResponseUtils; 
 | 
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.ArrayList; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
import java.util.Optional; 
 | 
  
 | 
/** 
 | 
 * @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<List<VoController>> 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"); 
 | 
  
 | 
            JSONArray jsonArray = new JSONArray(); 
 | 
            if(attachment != null) { 
 | 
                attachment.forEach((key, value) -> { 
 | 
                    JSONObject jsonObject = new JSONObject(); 
 | 
                    jsonObject.put("rtuAddr", key); 
 | 
                    jsonObject.put("isOnLine", value); 
 | 
                    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(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(); 
 | 
    } 
 | 
} 
 |