package com.dy.pipIrrProject.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.QueryResultVo;
|
import com.dy.pipIrrGlobal.config.DingTalk;
|
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.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.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 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;
|
}
|
|
@Autowired
|
private DingTalk dingTalk;
|
|
public String sendMessage(String message) {
|
try {
|
dingTalk.sendMessage(message);
|
} catch (Exception e) {
|
return "发送失败";
|
}
|
return "发送成功";
|
}
|
|
/**
|
* 添加取水口
|
*
|
* @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";
|
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");
|
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(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();
|
}
|
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);
|
}
|
|
|
}
|