package com.dy.pipIrrProject.intake; 
 | 
  
 | 
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.PrDivideMapper; 
 | 
import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper; 
 | 
import com.dy.pipIrrGlobal.pojoPr.PrIntake; 
 | 
import com.dy.pipIrrGlobal.voPr.VoIntake; 
 | 
import com.dy.pipIrrGlobal.voPr.VoOnLineIntake; 
 | 
import com.dy.pipIrrProject.intake.qo.OnLineIntakesQO; 
 | 
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.transaction.annotation.Transactional; 
 | 
import org.springframework.web.client.RestTemplate; 
 | 
import org.springframework.web.util.UriComponentsBuilder; 
 | 
  
 | 
import java.util.*; 
 | 
  
 | 
/** 
 | 
 * @author wuzeyu 
 | 
 * @date 2023/12/26 11:12 
 | 
 * @LastEditTime 2023/12/26 11:12 
 | 
 * @Description 取水口服务类 
 | 
 */ 
 | 
  
 | 
@Slf4j 
 | 
@Service 
 | 
public class IntakeSv { 
 | 
    @Autowired 
 | 
    private PrIntakeMapper prIntakeMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private PrDivideMapper prDivideMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private RestTemplate restTemplate; 
 | 
  
 | 
    protected static String mwUrlSendCom = "http://127.0.0.1:8070/rtuMw/com/send" ; 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 添加取水口 
 | 
     * 
 | 
     * @param po 
 | 
     * @return 
 | 
     */ 
 | 
    @Transactional 
 | 
    Integer addIntake(PrIntake po) { 
 | 
        Long villageId = Optional.ofNullable(po.getVillageId()).orElse(0L); 
 | 
  
 | 
        if (villageId != 0){ 
 | 
            if (po.getTownId() == null || po.getTownId() == 0) { 
 | 
                Long townId = getSupperByVillageId(po.getVillageId()); 
 | 
                po.setTownId(townId); 
 | 
            } 
 | 
            if (po.getCountyId() == null || po.getCountyId() == 0) { 
 | 
                Long countyId = getSupperByVillageId(getSupperByVillageId(po.getVillageId())); 
 | 
                po.setCountyId(countyId); 
 | 
            } 
 | 
        } 
 | 
        if (po.getBlockId() == null || po.getBlockId() == 0) { 
 | 
            Long blockId = prDivideMapper.getBlockIdById(po.getDivideId()); 
 | 
            po.setBlockId(blockId); 
 | 
        } 
 | 
        return prIntakeMapper.insertSelective(po); 
 | 
    } 
 | 
  
 | 
    public Long getSupperByVillageId(long vaId) { 
 | 
        return prIntakeMapper.getSupperByVillageId(vaId); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 保存修改实体 
 | 
     * 
 | 
     * @param po 实体 
 | 
     * @return 数量 
 | 
     */ 
 | 
  
 | 
    public int update(PrIntake po) { 
 | 
        if (po.getTownId() == null || po.getTownId() == 0) { 
 | 
            Long townId = getSupperByVillageId(po.getVillageId()); 
 | 
            po.setTownId(townId); 
 | 
        } 
 | 
        if (po.getCountyId() == null || po.getCountyId() == 0) { 
 | 
            Long countyId = getSupperByVillageId(getSupperByVillageId(po.getVillageId())); 
 | 
            po.setCountyId(countyId); 
 | 
        } 
 | 
        return this.prIntakeMapper.updateByPrimaryKeySelective(po); 
 | 
//        return this.prIntakeMapper.updateByPrimaryKey(po); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据指定条件获取取水口记录 
 | 
     * 
 | 
     * @param queryVo 查询视图 
 | 
     * @return 取水口记录列表 
 | 
     */ 
 | 
    public QueryResultVo<List<VoIntake>> getIntakes(QueryVo queryVo) { 
 | 
//        String isBinded = queryVo.getIsBinded(); 
 | 
// 
 | 
//        if(isBinded == null || isBinded.length() <= 0) { 
 | 
// 
 | 
//        } 
 | 
  
 | 
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); 
 | 
        Long itemTotal = prIntakeMapper.getRecordCount(params); 
 | 
  
 | 
        QueryResultVo<List<VoIntake>> rsVo = new QueryResultVo<>(); 
 | 
        rsVo.pageSize = queryVo.pageSize; 
 | 
        rsVo.pageCurr = queryVo.pageCurr; 
 | 
        rsVo.calculateAndSet(itemTotal, params); 
 | 
        rsVo.obj = prIntakeMapper.getIntakes(params); 
 | 
        return rsVo; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据指定条件导出取水口列表 
 | 
     * 
 | 
     * @param queryVo 
 | 
     * @return 
 | 
     */ 
 | 
    public List<VoIntake> exportIntakes(QueryVo queryVo) { 
 | 
        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo); 
 | 
        List<VoIntake> rsVo = prIntakeMapper.getIntakes(params); 
 | 
        return rsVo; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 得到所有取水口 
 | 
     * 
 | 
     * @return 所有取水口集合 
 | 
     */ 
 | 
    public QueryResultVo<List<PrIntake>> selectAll() { 
 | 
        QueryResultVo<List<PrIntake>> rsVo = new QueryResultVo<>(); 
 | 
        rsVo.obj = this.prIntakeMapper.selectAll(); 
 | 
        return rsVo; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 得到一个取水口 
 | 
     * 
 | 
     * @param id 取水口ID 
 | 
     * @return 取水口实体 
 | 
     */ 
 | 
    public PrIntake selectById(Long id) { 
 | 
        return this.prIntakeMapper.selectByPrimaryKey(id); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 逻辑删除实体 
 | 
     * 
 | 
     * @param id 实体ID 
 | 
     * @return 数量 
 | 
     */ 
 | 
    @Transactional 
 | 
    public int delete(Long id) { 
 | 
        return this.prIntakeMapper.deleteLogicById(id); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据取水口编号获取未删除的取水口数量 
 | 
     * 
 | 
     * @param intakeId 
 | 
     * @return 
 | 
     */ 
 | 
    public Integer getRecordCountOfIntake(Long intakeId) { 
 | 
        return prIntakeMapper.getRecordCountOfIntake(intakeId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据村Id获取全部地址 
 | 
     * 
 | 
     * @param villageId 村Id 
 | 
     * @return address  全部五级地址 
 | 
     */ 
 | 
    public String getAddressByVillageId(long villageId) { 
 | 
        return prIntakeMapper.getAddressByVillageId(villageId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据区域Id获取区域等级 
 | 
     * 
 | 
     * @param regionId 区域Id 
 | 
     * @return Level  区域等级 
 | 
     */ 
 | 
    public int getLevelByRegionId(long regionId) { 
 | 
        return prIntakeMapper.getLevelByRegionId(regionId); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取取水口列表 
 | 
     * @return 
 | 
     */ 
 | 
    public QueryResultVo<List<VoOnLineIntake>> selectOnLineIntakes(OnLineIntakesQO qo) { 
 | 
        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); 
 | 
            } 
 | 
  
 | 
            qo.setOnLineMap(jsonArray.toJSONString()); 
 | 
            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; 
 | 
        } else { 
 | 
            QueryResultVo<List<VoOnLineIntake>> rsVo = new QueryResultVo<>(); 
 | 
            return rsVo; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据操作员获取常用取水口 
 | 
     * @param operator 
 | 
     * @return 
 | 
     */ 
 | 
    public List<VoOnLineIntake> getUsedIntakes(Long operator) { 
 | 
        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); 
 | 
            } 
 | 
            return prIntakeMapper.getUsedIntakes(jsonArray.toJSONString(), operator); 
 | 
        } else { 
 | 
            return new ArrayList<>(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 发送命令 
 | 
     * @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(); 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 取水口名称换取水口ID,验证是否重复名称使用 
 | 
     * @param intakeName 
 | 
     * @return 
 | 
     */ 
 | 
    public List<Long> getIntakeIdsByName(String intakeName) { 
 | 
        return prIntakeMapper.getIntakeIdsByName(intakeName); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 取水口名称换取水口ID,验证是否重复名称使用 
 | 
     * @param intakeName 
 | 
     * @return 
 | 
     */ 
 | 
    public List<Long> getIntakeIdByNameExcludeId(Long id, String intakeName) { 
 | 
        return prIntakeMapper.getIntakeIdByNameExcludeId(id, intakeName); 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |