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