| package com.dy.rtuMw.server.rtuData.p206V202404; | 
|   | 
| import com.dy.common.mw.protocol.Data; | 
| import com.dy.common.mw.protocol.p206V202404.DataV202404; | 
| import com.dy.common.mw.protocol.p206V202404.upVos.DataCd85Vo; | 
| import com.dy.common.mw.protocol.p206V202404.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: 2025/5/14 10:30 | 
|  * @Description 处理IC卡剩余金额 | 
|  */ | 
| public class TkDealIcRemainMoneyV202404   extends TaskSurpport { | 
|   | 
|     private static final Logger log = LogManager.getLogger(TkDealIcRemainMoneyV202404.class.getName()); | 
|   | 
|     //类ID,一定与Tree.xml配置文件中配置一致 | 
|     public static final String taskId = "TkDealIcRemainMoneyV202404"; | 
|   | 
|     /** | 
|      * 执行节点任务: 取水口日用水量和漏损量 | 
|      * | 
|      * @param data 需要处理的数据 | 
|      */ | 
|     @Override | 
|     public void execute(Object data) { | 
|         Data d = (Data) data; | 
|         DataV202404 dV1 = (DataV202404) d.getSubData();//前面任务已经判断不为null | 
|         Object cdObj = dV1.subData; | 
|         if (cdObj != null && (cdObj instanceof DataCd84Vo | 
|                 || cdObj instanceof DataCd85Vo)){ | 
|             Object[] objs = this.getTaskResults(TkPreGenObjsV202404.taskId) ; | 
|             DbSv sv = (DbSv)objs[0] ; | 
|             try{ | 
|                 TkDealIcRemainMoneyV202404.UpDataVo vo = new TkDealIcRemainMoneyV202404.UpDataVo() ; | 
|                 if(cdObj instanceof DataCd84Vo){ | 
|                     vo.valueFrom( (DataCd84Vo)cdObj, null); | 
|                 }else if(cdObj instanceof DataCd85Vo){ | 
|                     vo.valueFrom(null,  (DataCd85Vo)cdObj); | 
|                 } | 
|                 this.doDeal(sv, dV1, vo); | 
|             }catch (Exception e){ | 
|                 log.error("保存取水口日用水量和漏损量数据时发生异常", e); | 
|             } | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * 业务处理 | 
|      * @param sv             服务 | 
|      * @param dV1        上报数据 | 
|      * @param dataVo         上报数据对象 | 
|      */ | 
|     private void doDeal(DbSv sv, DataV202404 dV1, TkDealIcRemainMoneyV202404.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, DataCd85Vo vo85){ | 
|             if(vo84 != null){ | 
|                 if(this.isAll0(vo84.icCardAddr)){ | 
|                     this.isVirIcCard = true ; | 
|                 }else{ | 
|                     this.isVirIcCard = false ; | 
|                 } | 
|                 this.icCardAddr = vo84.icCardAddr ; | 
|                 this.icCardNo = vo84.icCardNo ; | 
|                 this.remainMoney = vo84.moneyRemainUser ; | 
|             }else if(vo85 != null){ | 
|                 if(this.isAll0(vo85.icCardAddr)){ | 
|                     this.isVirIcCard = true ; | 
|                 }else{ | 
|                     this.isVirIcCard = false ; | 
|                 } | 
|                 this.icCardAddr = vo85.icCardAddr ; | 
|                 this.icCardNo = vo85.icCardNo ; | 
|                 this.remainMoney = vo85.moneyRemain ; | 
|             } | 
|         } | 
|   | 
|         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 ; | 
|         } | 
|     } | 
|   | 
|   | 
| } |