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