package com.dy.rtuMw.server.rtuData.p206V2; import com.dy.common.mw.protocol.Data; import com.dy.common.mw.protocol.p206V2.DataV2; import com.dy.common.mw.protocol.p206V2.upVos.DataCd83CloseVo; import com.dy.common.mw.protocol.p206V2.upVos.DataCd83OpenVo; import com.dy.common.mw.protocol.p206V2.upVos.DataCd84Vo; import com.dy.pipIrrGlobal.voSe.VoCardInfo1; import com.dy.rtuMw.server.rtuData.TaskSurpport; import com.dy.rtuMw.server.rtuData.dbSv.DbSv; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * @Author: liurunyu * @Date: 2024/8/7 17:05 * @Description 处理IC卡剩余金额 */ public class TkDealIcRemainMoneyV2 extends TaskSurpport { private static final Logger log = LogManager.getLogger(TkDealIcRemainMoneyV2.class.getName()); //类ID,一定与Tree.xml配置文件中配置一致 public static final String taskId = "TkDealIcRemainMoneyV2"; /** * 执行节点任务: 取水口日用水量和漏损量 * * @param data 需要处理的数据 */ @Override public void execute(Object data) { Data d = (Data) data; DataV2 dV2 = (DataV2) d.getSubData();//前面任务已经判断不为null Object cdObj = dV2.subData; if (cdObj != null && (cdObj instanceof DataCd84Vo || cdObj instanceof DataCd83OpenVo || cdObj instanceof DataCd83CloseVo)){ Object[] objs = this.getTaskResults(TkPreGenObjsV2.taskId) ; DbSv sv = (DbSv)objs[0] ; try{ UpDataVo vo = new UpDataVo() ; if(cdObj instanceof DataCd84Vo){ vo.valueFrom( (DataCd84Vo)cdObj, null, null); }else if(cdObj instanceof DataCd83OpenVo){ vo.valueFrom(null, (DataCd83OpenVo)cdObj,null); }else if(cdObj instanceof DataCd83CloseVo){ vo.valueFrom(null,null, (DataCd83CloseVo)cdObj); } this.doDeal(sv, dV2, vo); }catch (Exception e){ log.error("保存取水口日用水量和漏损量数据时发生异常", e); } } } /** * 业务处理 * @param sv 服务 * @param dV2 上报数据 * @param dataVo 上报数据对象 */ private void doDeal(DbSv sv, DataV2 dV2, UpDataVo dataVo) throws Exception { if(dataVo.icCardNo != null){ if(!dataVo.isVirIcCard){ //实体卡 if(dataVo.remainMoney != null){ VoCardInfo1 vo = sv.getIcCard(dataVo.icCardAddr, dataVo.icCardNo) ; if(vo != null && vo.id != null){ if(vo.money != null){ if(vo.money > dataVo.remainMoney){ //本地的剩余金额 大于 RTU上报的剩余金额 this.updateIcCardRemainMoney(sv, vo.id, dataVo.remainMoney); }else{ //本地的剩余金额 小于 RTU上报的剩余金额,说明当前上报可能是补报或其他原因造成的现象 //不做处理 } }else{ //这种情况一般不会存在,除非有什么误操作造成 this.updateIcCardRemainMoney(sv, vo.id, dataVo.remainMoney); } } } }else{ //虚拟卡 if(dataVo.remainMoney != null){ VoCardInfo1 vo = sv.getVirIcCard(dataVo.icCardNo) ; if(vo != null && vo.id != null){ if(vo.money != null){ if(vo.money > dataVo.remainMoney){ //本地的剩余金额 大于 RTU上报的剩余金额 this.updateVirIcCardRemainMoney(sv, vo.id, dataVo.remainMoney); }else{ //本地的剩余金额 小于 RTU上报的剩余金额,说明当前上报可能是补报或其他原因造成的现象 //不做处理 } }else{ //这种情况一般不会存在,除非有什么误操作造成 this.updateVirIcCardRemainMoney(sv, vo.id, dataVo.remainMoney); } } } } } } /** * 更新实体卡剩余金额 * @param id * @param remainMoney */ private void updateIcCardRemainMoney(DbSv sv, Long id , Double remainMoney){ sv.updateIcCardRemainMoney(id,remainMoney); } /** * 更新虚拟卡剩余金额 * @param id * @param remainMoney */ private void updateVirIcCardRemainMoney(DbSv sv, Long id , Double remainMoney){ sv.updateVirIcCardRemainMoney(id, remainMoney); } private class UpDataVo{ public Boolean isVirIcCard ;//是否为虚拟卡 public String icCardAddr ;//卡地址 public String icCardNo ;//卡编号 public Double remainMoney ; //剩余金额 public void valueFrom(DataCd84Vo vo84, DataCd83OpenVo vo83Op, DataCd83CloseVo vo83Cl){ if(this.isAll0(this.icCardAddr)){ this.isVirIcCard = true ; }else{ this.isVirIcCard = false ; } if(vo84 != null){ this.icCardAddr = vo84.cardAddr ; this.icCardNo = vo84.cardNo ; this.remainMoney = vo84.remainMoney ; }else if(vo83Op != null){ this.icCardAddr = vo83Op.icCardAddr ; this.icCardNo = vo83Op.icCardNo ; this.remainMoney = vo83Op.remainMoney ; }else if(vo83Cl != null){ this.icCardAddr = vo83Cl.icCardAddr ; this.icCardNo = vo83Cl.icCardNo ; this.remainMoney = vo83Cl.remainMoney ; } } private boolean isAll0(String s){ if(s != null && !s.trim().equals("")){ s = s.replaceAll("0", "") ; if(s.equals("")){ return true ; }else{ return false ; } } return false ; } } }