package com.dy.rtuMw.server.rtuData.p206V1_0_0; 
 | 
  
 | 
import com.dy.common.mw.protocol.Data; 
 | 
import com.dy.common.mw.protocol.p206V1_0_0.DataV1_0_1; 
 | 
import com.dy.common.mw.protocol.p206V1_0_0.upVos.DataCd83CloseVo; 
 | 
import com.dy.common.mw.protocol.p206V1_0_0.upVos.DataCd83OpenVo; 
 | 
import com.dy.common.mw.protocol.p206V1_0_0.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_0_1 dV1_0_1 = (DataV1_0_1) d.getSubData();//前面任务已经判断不为null 
 | 
        Object cdObj = dV1_0_1.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_0_1, vo); 
 | 
            }catch (Exception e){ 
 | 
                log.error("保存取水口日用水量和漏损量数据时发生异常", e); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 业务处理 
 | 
     * @param sv             服务 
 | 
     * @param dV1_0_1        上报数据 
 | 
     * @param dataVo         上报数据对象 
 | 
     */ 
 | 
    private void doDeal(DbSv sv, DataV1_0_1 dV1_0_1, 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(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 ; 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |