package com.dy.pipIrrRemote.common; 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.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.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.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.List; import java.util.Map; /** * @author ZhuBaoMin * @date 2024-05-21 17:14 * @LastEditTime 2024-05-21 17:14 * @Description 命令日志服务类 */ @Slf4j @Service @RequiredArgsConstructor public class CommandSv extends ComSupport { private final RmCommandHistoryMapper rmCommandHistoryMapper; private final SeVirtualCardMapper seVirtualCardMapper; private final PrIntakeMapper prIntakeMapper; private final PrWaterPriceMapper prWaterPriceMapper; private final PrIntakeVcMapper prIntakeVcMapper; private final SeClientCardMapper seClientCardMapper; private RmOpenCloseValveLastMapper rmOpenCloseValveLastMapper; /** * pro_mw:属性 * tag从控制器中获取 * key_mw:url的key */ 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 Long insert(RmCommandHistory po) { rmCommandHistoryMapper.insert(po); return po.getComId(); } /** * 修改命令日志信息 * @param po 命令日志对象 * @return 影响记录数量 */ public Integer update(RmCommandHistory po) { return rmCommandHistoryMapper.updateByPrimaryKeySelective(po); } /** * 根据操作员ID获取未关阀记录(包含在线情况) * @param operator * @return */ public List getUnclosedValves(Long operator) { 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"); if(attachment != null) { attachment.forEach((key, value) -> { JSONObject jsonObject = new JSONObject(); jsonObject.put("rtuAddr", key); jsonObject.put("isOnLine", value); jsonArray.add(jsonObject); }); } //System.out.println(jsonArray); } /** * 获取未关阀的RTU地址和虚拟卡编号对数组 * 遍历数组获取最后命令日志ID集合 */ List 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 res = rmCommandHistoryMapper.getUnclosedValves(jsonArray.toJSONString(), comIds); if(res != null) { return res; } } return new ArrayList<>(); } /** * 为指定(阀控器地址、水卡编号、无关阀记录)开关阀最新记录添加关阀时间,使之不在未关阀记录中显示 * @param rtuAddr * @param icCardNo * @return */ 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"); if(attachment != null) { attachment.forEach((key, value) -> { JSONObject jsonObject = new JSONObject(); jsonObject.put("rtuAddr", key); jsonObject.put("isOnLine", value); jsonArray.add(jsonObject); }); } // 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> getCommandHistories(QoCommand query) { // 完善查询起止时间 query.completionTime(); Map params = (Map) PojoUtils.generalize(query); Long itemTotal = rmCommandHistoryMapper.getCommandHistoriesCount(params); QueryResultVo> rsVo = new QueryResultVo<>() ; rsVo.pageSize = query.pageSize ; rsVo.pageCurr = query.pageCurr ; rsVo.calculateAndSet(itemTotal, params); rsVo.obj = rmCommandHistoryMapper.getCommandHistories(params); return rsVo ; } }