| | |
| | | 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.QueryResultVo; |
| | | import com.dy.pipIrrGlobal.daoPr.PrControllerMapper; |
| | | import com.dy.pipIrrGlobal.command.ComSupport; |
| | | import com.dy.pipIrrGlobal.daoPr.PrIntakeMapper; |
| | | import com.dy.pipIrrGlobal.daoPr.PrIntakeVcMapper; |
| | | import com.dy.pipIrrGlobal.daoPr.PrWaterPriceMapper; |
| | | import com.dy.pipIrrGlobal.daoRm.RmCommandHistoryMapper; |
| | | import com.dy.pipIrrGlobal.daoRm.RmOpenCloseValveLastMapper; |
| | | import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper; |
| | | import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper; |
| | | import com.dy.pipIrrGlobal.pojoRm.RmCommandHistory; |
| | | import com.dy.pipIrrGlobal.voPr.VoOnLineIntake; |
| | | import com.dy.pipIrrGlobal.pojoSe.SeClientCard; |
| | | import com.dy.pipIrrGlobal.voRm.VoCommand; |
| | | import com.dy.pipIrrGlobal.voRm.VoRtuAndVc; |
| | | import com.dy.pipIrrGlobal.voRm.VoUnclosedParam; |
| | | import com.dy.pipIrrGlobal.voRm.VoUnclosedValve; |
| | | import com.dy.pipIrrRemote.common.qo.OnLineIntakesQO; |
| | | import com.dy.pipIrrGlobal.voSe.VoVirtualCard; |
| | | import com.dy.pipIrrRemote.common.qo.QoCommand; |
| | | import lombok.RequiredArgsConstructor; |
| | | 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.stereotype.Service; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | |
| | | @RequiredArgsConstructor |
| | | public class CommandSv extends ComSupport { |
| | | private final RmCommandHistoryMapper rmCommandHistoryMapper; |
| | | private final PrControllerMapper prControllerMapper; |
| | | private final SeVirtualCardMapper seVirtualCardMapper; |
| | | private final PrIntakeMapper prIntakeMapper; |
| | | private final PrWaterPriceMapper prWaterPriceMapper; |
| | | private final PrIntakeVcMapper prIntakeVcMapper; |
| | | private final SeClientCardMapper seClientCardMapper; |
| | | private RmOpenCloseValveLastMapper rmOpenCloseValveLastMapper; |
| | | |
| | | /** |
| | | * 根据取水口ID获取阀控器地址 |
| | | * @param intakeId 取水口ID |
| | | * @return 阀控器地址 |
| | | * pro_mw:属性 |
| | | * tag从控制器中获取 |
| | | * key_mw:url的key |
| | | */ |
| | | public String getRtuAddrByIntakeId(Long intakeId) { |
| | | return prControllerMapper.getRtuAddrByIntakeId(intakeId); |
| | | private Environment env = null; |
| | | private String pro_mw = "mw"; |
| | | private String key_mw = "comSendUrl"; |
| | | @Autowired |
| | | public CommandSv(RmCommandHistoryMapper rmCommandHistoryMapper,RmOpenCloseValveLastMapper rmOpenCloseValveLastMapper, SeVirtualCardMapper seVirtualCardMapper, PrIntakeMapper prIntakeMapper, PrWaterPriceMapper prWaterPriceMapper, PrIntakeVcMapper prIntakeVcMapper, SeClientCardMapper seClientCardMapper, Environment env) { |
| | | this.rmCommandHistoryMapper = rmCommandHistoryMapper; |
| | | this.rmOpenCloseValveLastMapper = rmOpenCloseValveLastMapper; |
| | | this.seVirtualCardMapper = seVirtualCardMapper; |
| | | this.prIntakeMapper = prIntakeMapper; |
| | | this.prWaterPriceMapper = prWaterPriceMapper; |
| | | this.prIntakeVcMapper = prIntakeVcMapper; |
| | | this.seClientCardMapper = seClientCardMapper; |
| | | this.env = env; |
| | | } |
| | | |
| | | /** |
| | | * 虚拟卡ID换虚拟卡对象 |
| | | * @param vcId |
| | | * @return |
| | | */ |
| | | public VoVirtualCard getVcById(Long vcId) { |
| | | return seVirtualCardMapper.getVcById(vcId); |
| | | } |
| | | |
| | | /** |
| | | * 获取水价 |
| | | * @return |
| | | */ |
| | | public Double getPrice() { |
| | | return prWaterPriceMapper.getPrice(); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param po 命令日志对象 |
| | | * @return 字符串类型的主键 |
| | | */ |
| | | public String insert(RmCommandHistory po) { |
| | | public Long insert(RmCommandHistory po) { |
| | | rmCommandHistoryMapper.insert(po); |
| | | return (po.getId()).toString(); |
| | | return po.getComId(); |
| | | } |
| | | |
| | | /** |
| | |
| | | return rmCommandHistoryMapper.updateByPrimaryKeySelective(po); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 根据操作员ID获取未关阀记录 |
| | | * 根据操作员ID获取未关阀记录(包含在线情况) |
| | | * @param operator |
| | | * @return |
| | | */ |
| | | public List<VoUnclosedValve> getUnclosedValves(Long operator) { |
| | | return rmCommandHistoryMapper.getUnclosedValves(operator); |
| | | } |
| | | |
| | | /** |
| | | * 获取取水口列表 |
| | | * @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)); |
| | | |
| | | JSONArray jsonArray = new JSONArray(); |
| | | 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); |
| | | JSONObject attachment = response.getJSONObject("content").getJSONObject("attachment"); |
| | | if(attachment != null) { |
| | | attachment.forEach((key, value) -> { |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("rtuAddr", key); |
| | | jsonObject.put("isOnLine", value); |
| | | 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; |
| | | //System.out.println(jsonArray); |
| | | } |
| | | |
| | | /** |
| | | * 获取未关阀的RTU地址和虚拟卡编号对数组 |
| | | * 遍历数组获取最后命令日志ID集合 |
| | | */ |
| | | List<VoRtuAndVc> rtus = rmCommandHistoryMapper.getUnclosedRtus(operator); |
| | | String comIds = ""; |
| | | if(rtus != null && rtus.size() > 0) { |
| | | for (int i = 0; i < rtus.size(); i++) { |
| | | Long comId = rmCommandHistoryMapper.getLastComId(rtus.get(i).getRtuAddr(), rtus.get(i).getVcNum()); |
| | | if(comId > 0) { |
| | | comIds = comIds + "\"" + comId + "\","; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if(comIds.length() > 0) { |
| | | comIds = comIds.substring(0, comIds.length()-1); |
| | | List<VoUnclosedValve> res = rmCommandHistoryMapper.getUnclosedValves(jsonArray.toJSONString(), comIds); |
| | | if(res != null) { |
| | | return res; |
| | | } |
| | | } |
| | | return new ArrayList<>(); |
| | | } |
| | | |
| | | /** |
| | | * 根据操作员获取常用取水口 |
| | | * @param operator |
| | | * 为指定(阀控器地址、水卡编号、无关阀记录)开关阀最新记录添加关阀时间,使之不在未关阀记录中显示 |
| | | * @param rtuAddr |
| | | * @param icCardNo |
| | | * @return |
| | | */ |
| | | public List<VoOnLineIntake> getUsedIntakes(Long operator) { |
| | | public Integer addClostTime(String rtuAddr, String icCardNo) { |
| | | return rmOpenCloseValveLastMapper.addCloseTime(rtuAddr, icCardNo); |
| | | } |
| | | |
| | | /** |
| | | * 修改命令日志记录,回调报错时将命令记录的执行结果改为失败 |
| | | * @param po |
| | | * @return |
| | | */ |
| | | public Integer updateCommandResult(RmCommandHistory po) { |
| | | return rmCommandHistoryMapper.updateByPrimaryKeySelective(po); |
| | | } |
| | | |
| | | /** |
| | | * 根据取水口ID获取与之绑定虚拟卡ID |
| | | * @param intakeId |
| | | * @return |
| | | */ |
| | | public Long getVcIdByIntakeId(Long intakeId) { |
| | | return prIntakeVcMapper.getVcIdByIntakeId(intakeId); |
| | | } |
| | | |
| | | /** |
| | | * 根据取水口ID获取该取水口未关阀参数,平台选择取水口关阀使用 |
| | | * @param intakeId |
| | | * @return |
| | | */ |
| | | public VoUnclosedParam getUncloseParam(Long intakeId) { |
| | | 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)); |
| | | |
| | | JSONArray jsonArray = new JSONArray(); |
| | | 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); |
| | | JSONObject attachment = response.getJSONObject("content").getJSONObject("attachment"); |
| | | if(attachment != null) { |
| | | attachment.forEach((key, value) -> { |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject.put("rtuAddr", key); |
| | | jsonObject.put("isOnLine", value); |
| | | jsonArray.add(jsonObject); |
| | | }); |
| | | } |
| | | return prIntakeMapper.getUsedIntakes(jsonArray.toJSONString(), operator); |
| | | } else { |
| | | return new ArrayList<>(); |
| | | System.out.println(jsonArray); |
| | | //} else { |
| | | // VoUnclosedParam voUnclosedParam = new VoUnclosedParam(); |
| | | // return voUnclosedParam; |
| | | } |
| | | return rmCommandHistoryMapper.getUncloseParam(jsonArray.toJSONString(), intakeId); |
| | | } |
| | | |
| | | /** |
| | | * 根据水卡编号获取水卡对象,远程充值使用 |
| | | * @param cardId |
| | | * @return |
| | | */ |
| | | public SeClientCard geClientCardByCardId(Long cardId) { |
| | | return seClientCardMapper.selectByPrimaryKey(cardId); |
| | | } |
| | | |
| | | /** |
| | | * 根据指定条件获取命令日志历史记录 |
| | | * @param query |
| | | * @return |
| | | */ |
| | | public QueryResultVo<List<VoCommand>> getCommandHistories(QoCommand query) { |
| | | // 完善查询起止时间 |
| | | query.completionTime(); |
| | | |
| | | Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(query); |
| | | |
| | | Long itemTotal = rmCommandHistoryMapper.getCommandHistoriesCount(params); |
| | | |
| | | QueryResultVo<List<VoCommand>> rsVo = new QueryResultVo<>() ; |
| | | rsVo.pageSize = query.pageSize ; |
| | | rsVo.pageCurr = query.pageCurr ; |
| | | |
| | | rsVo.calculateAndSet(itemTotal, params); |
| | | rsVo.obj = rmCommandHistoryMapper.getCommandHistories(params); |
| | | return rsVo ; |
| | | } |
| | | } |