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