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 ; 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |