package com.dy.rtuMw.server.rtuData.dbSv; import com.dy.common.util.NumUtil; import com.dy.pipIrrGlobal.daoPr.PrControllerMapper; import com.dy.pipIrrGlobal.daoPr.PrControllerTrampMapper; import com.dy.pipIrrGlobal.daoRm.*; import com.dy.pipIrrGlobal.daoSe.SeClientCardMapper; import com.dy.pipIrrGlobal.daoSe.SeVirtualCardMapper; import com.dy.pipIrrGlobal.pojoPr.PrController; import com.dy.pipIrrGlobal.pojoPr.PrControllerTramp; import com.dy.pipIrrGlobal.pojoRm.*; import com.dy.pipIrrGlobal.pojoSe.SeClient; import com.dy.pipIrrGlobal.voSe.VoCardInfo1; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; import java.util.Map; /** * @Author liurunyu * @Date 2024/1/13 10:57 * @LastEditTime 2024/1/13 10:57 * @Description */ @Service() public class DbSv { @Autowired private SeClientCardMapper seClientCardDao;//农户水卡DAO @Autowired private SeVirtualCardMapper seVirtualCardDao ;//虚拟卡相关DAO @Autowired private PrControllerTrampMapper prControllerTrampMapperDao;//流浪控制器DAO @Autowired private PrControllerMapper prControllerMapperDao ;//控制器DAO @Autowired private RmAlarmStateLastMapper rmAlarmStateLastMapperDao ;//控制器最新报警和状态DAO @Autowired private RmAlarmStateHistoryMapper rmAlarmStateHistoryMapperDao ;//控制器历史报警和状态DAO @Autowired private RmOpenCloseValveLastMapper rmOpenCloseValveLastMapperDao ;//控制器最新开关阀上报数据DAO @Autowired private RmOpenCloseValveHistoryMapper rmOpenCloseValveHistoryMapperDao ;//控制器历史开关阀上报数据DAO @Autowired private RmWorkReportLastMapper rmWorkReportLastMapperDao ;//控制器最新工作报数据DAO @Autowired private RmWorkReportHistoryMapper rmWorkReportHistoryMapperDao ;//控制器历史工作报数据DAO @Autowired private RmIntakeAmountDayLastMapper rmIntakeAmountDayLastMapperDao ;//取水口取水统计最新数据DAO @Autowired private RmIntakeAmountDayMapper rmIntakeAmountDayMapperDao ;//取水口取水和漏损统计DAO @Autowired private RmClientAmountDayLastMapper rmClientAmountDayLastMapperDao ;//农户日用水量统计最新数据DAO @Autowired private RmClientAmountDayMapper rmClientAmountDayMapperDao ;//农户日用水量统计数据DAO @Autowired private RmLossDayLastMapper rmLossLastMapperDao ;//控制器漏损水量统计最新数据DAO @Autowired private RmLossDayMapper rmLossHistoryMapperDao ;//控制器漏损水量统计历史数据DAO @Autowired private RmCommandHistoryMapper rmCommandHistoryDao ;//远程命令日志相关 @Autowired private RmTimingReportHistoryMapper rmTimingReportHistoryDao; // 定点上报历史数据DAO @Autowired private RmTimingReportLastMapper rmTimingReportLastDao; // 定点上报最新数据DAO @Autowired private RmOnHourReportHistoryMapper rmOnHourReportHistoryDao; // 定点上报历史数据DAO @Autowired private RmOnHourReportLastMapper rmOnHourReportLastDao; // 定点上报最新数据DAO //@Autowired //@Lazy //private DbSv sv ; ///////////////////////////////////////////////// // // 基础功能 // //////////////////////////////////////////////// /** * 通过物理IC地址及卡号得到农户id和姓名 * @param icCardAddr * @param icCardNo * @return */ public SeClient getClientIdAndNameByCardAddrAndCardNo(String icCardAddr, String icCardNo){ SeClient vo = null ; if(NumUtil.isPlusIntNumber(icCardNo)){ Long icCardNoLong = Long.parseLong(icCardNo) ; Map map = seClientCardDao.getClientIdAndNameByCardAddrAndCardNo(icCardAddr, icCardNoLong) ; if(map != null && map.size() > 0) { vo = new SeClient() ; vo.setId(Long.parseLong(map.get("clientId").toString())); vo.setName(map.get("clientName").toString()); } } return vo ; } /** * 通过虚拟IC卡号得到农户id和姓名 * @param icCardNo * @return */ public SeClient getClientIdAndNameByVsCardNo(String icCardNo){ SeClient vo = null ; if(NumUtil.isPlusIntNumber(icCardNo)){ Long icCardNoLong = Long.parseLong(icCardNo) ; Map map = seVirtualCardDao.getClientIdAndNameByVsCardNo(icCardNoLong) ; if(map != null && map.size() > 0) { vo = new SeClient() ; vo.setId(Long.parseLong(map.get("clientId").toString())); vo.setName(map.get("clientName").toString()); } } return vo ; } /** * 通过控制器地址从数据库表中查询控制器 * @param rtuAddr 控制器地址 * @return 控制器 */ public PrController getControllersByRtuAddrAndIntakeNotNull(String rtuAddr){ List list = this.prControllerMapperDao.getControllersByRtuAddrAndIntakeNotNull(rtuAddr) ; if(list != null && list.size() > 0){ return list.get(0) ; } return null ; } /** * 通过控制器地址从数据库表中查询流浪控制器 * @param rtuAddr 控制器地址 * @return 流浪控制器 */ public PrControllerTramp getPrControllerTrampByRtuAddr(String rtuAddr){ List list = this.prControllerTrampMapperDao.getPrControllerTrampByRtuAddr(rtuAddr) ; if(list != null && list.size() > 0){ return list.get(0) ; } return null ; } /** * 保存流浪控制器 * @param po */ @Transactional(rollbackFor = Exception.class) public void savePrConctrollerTramp(PrControllerTramp po){ if(po.getOrgTag().trim().length() > 2) { po.setOrgTag("DY"); } this.prControllerTrampMapperDao.insert(po) ; } /** * 保存流浪控制器 * @param po */ @Transactional(rollbackFor = Exception.class) public void updatePrConctrollerTramp(PrControllerTramp po){ this.prControllerTrampMapperDao.updateByPrimaryKey(po) ; } ///////////////////////////////////////////////// // // 报警及状态功能 // //////////////////////////////////////////////// /** * 得到控制器报警与状态最新记录 * @param intakeId * @return */ public RmAlarmStateLast getRmAlarmStateLast(Long intakeId){ List list = rmAlarmStateLastMapperDao.selectByIntakeId(intakeId) ; if(list != null && list.size() > 0){ return list.get(0) ; } return null ; } /** * 保存控制器报警与状态最新记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void saveRmAlarmStateLast(RmAlarmStateLast po){ this.rmAlarmStateLastMapperDao.insert(po) ; } /** * 保存控制器报警与状态最新记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void updateRmAlarmStateLast(RmAlarmStateLast po){ this.rmAlarmStateLastMapperDao.updateByPrimaryKey(po) ; } /** * 保存控制器报警与状态历史记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void saveRmAlarmStateHistory(RmAlarmStateHistory po){ this.rmAlarmStateHistoryMapperDao.insert(po) ; } /** * 变更虚拟卡占用状态 * @param intakeId */ @Transactional(rollbackFor = Exception.class) public void updateVirCardNoUseState(Long intakeId, Date now){ this.seVirtualCardDao.updateVcCardNoUseStateByIntakeId(intakeId, now) ; } ///////////////////////////////////////////////// // // 定点报数据功能(只在王江海的协议有此数据) // //////////////////////////////////////////////// /** * 保存控制器定点上报历史数据 * @param po */ @Transactional(rollbackFor = Exception.class) public void saveRmTimingReportHistory(RmTimingReportHistory po){ this.rmTimingReportHistoryDao.insert(po); } /** * 根据阀控器地址获取定点上报最新数据 * @param intakeId * @return */ @Transactional(rollbackFor = Exception.class) public RmTimingReportLast getRmTimingReportLast(Long intakeId) { List list = this.rmTimingReportLastDao.getRmTimingReportLast(intakeId) ; if(list != null && list.size() > 0){ return list.get(0) ; } return null ; } /** * 保存控制器定点上报最新数据 * @param po */ @Transactional(rollbackFor = Exception.class) public void saveRmTimingReportLast(RmTimingReportLast po) { this.rmTimingReportLastDao.insert(po); } /** * 保存控制器定点上报罪行数据 * @param po */ @Transactional(rollbackFor = Exception.class) public void updateRmTimingReportLast(RmTimingReportLast po) { this.rmTimingReportLastDao.updateByPrimaryKey(po); } ///////////////////////////////////////////////// // // 定点上报实时数据功能(只在靳总的协议有此数据) // //////////////////////////////////////////////// /** * 保存控制器定点上报历史数据 * @param po */ @Transactional(rollbackFor = Exception.class) public void saveRmOnHourReportHistory(RmOnHourReportHistory po){ this.rmOnHourReportHistoryDao.insert(po); } /** * 根据阀控器地址获取定点上报最新数据 * @param intakeId * @return */ @Transactional(rollbackFor = Exception.class) public RmOnHourReportLast getRmOnHourReportLast(Long intakeId) { List list = this.rmOnHourReportLastDao.getRmOnHourReportLast(intakeId) ; if(list != null && list.size() > 0){ return list.get(0) ; } return null ; } /** * 保存控制器定点上报最新数据 * @param po */ @Transactional(rollbackFor = Exception.class) public void saveRmOnHourReportLast(RmOnHourReportLast po) { this.rmOnHourReportLastDao.insert(po); } /** * 保存控制器定点上报罪行数据 * @param po */ @Transactional(rollbackFor = Exception.class) public void updateRmOnHourReportLast(RmOnHourReportLast po) { this.rmOnHourReportLastDao.updateByPrimaryKey(po); } ///////////////////////////////////////////////// // // 开关阀上报数据功能 // //////////////////////////////////////////////// /** * 得到控制器开关阀上报数据最新记录 * @param intakeId * @return */ public RmOpenCloseValveLast getRmOpenCloseValveLast(Long intakeId){ List list = rmOpenCloseValveLastMapperDao.selectByIntakeId(intakeId) ; if(list != null && list.size() > 0){ return list.get(0) ; } return null ; } /** * 保存控制器开关阀上报数据最新记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void saveRmOpenCloseValveLast(RmOpenCloseValveLast po){ this.rmOpenCloseValveLastMapperDao.insert(po) ; } /** * 保存控制器开关阀上报数据最新记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void updateRmOpenCloseValveLast(RmOpenCloseValveLast po){ this.rmOpenCloseValveLastMapperDao.updateByPrimaryKey(po) ; } /** * 得到控制器开关阀上报数据历史数据中的最新记录 * @param id * @return */ public RmOpenCloseValveHistory getRmOpenCloseValveHistory(Long id){ return rmOpenCloseValveHistoryMapperDao.selectByPrimaryKey(id) ; } /** * 保存控制器开关阀上报数据历史记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void saveRmOpenCloseValveHistory(RmOpenCloseValveHistory po){ this.rmOpenCloseValveHistoryMapperDao.insert(po) ; } /** * 保存控制器开关阀上报数据历史记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void updateRmOpenCloseValveHistory(RmOpenCloseValveHistory po){ this.rmOpenCloseValveHistoryMapperDao.updateByPrimaryKey(po) ; } ///////////////////////////////////////////////// // // 工作报数据功能 // //////////////////////////////////////////////// /** * 得到控制器上报数据最新记录 * @param intakeId * @return */ public RmWorkReportLast getRmWorkReportLast(Long intakeId){ List list = rmWorkReportLastMapperDao.selectByIntakeId(intakeId) ; if(list != null && list.size() > 0){ return list.get(0) ; } return null ; } /** * 保存控制器上报数据最新记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void saveRmWorkReportLast(RmWorkReportLast po){ this.rmWorkReportLastMapperDao.insert(po) ; } /** * 保存控制器上报数据最新记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void updateRmWorkReportLast(RmWorkReportLast po){ this.rmWorkReportLastMapperDao.updateByPrimaryKey(po) ; } /** * 保存控制器上报数据历史记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void saveRmWorkReportHistory(RmWorkReportHistory po){ this.rmWorkReportHistoryMapperDao.insert(po) ; } ///////////////////////////////////////////////// // // 取水口日取水量统计功能 // //////////////////////////////////////////////// /** * 得到最新记录 * @param intakeId * @return */ public RmIntakeAmountDayLast getRmIntakeAmountLast(Long intakeId){ List list = rmIntakeAmountDayLastMapperDao.selectByIntakeId(intakeId) ; if(list != null && list.size() > 0){ return list.get(0) ; } return null ; } /** * 保存最新记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void saveRmIntakeAmountLast(RmIntakeAmountDayLast po){ this.rmIntakeAmountDayLastMapperDao.insert(po) ; } /** * 保存记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void saveRmIntakeAmountDay(RmIntakeAmountDay po){ this.rmIntakeAmountDayMapperDao.insert(po) ; } /** * 保存最新记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void updateRmIntakeAmountLast(RmIntakeAmountDayLast po){ this.rmIntakeAmountDayLastMapperDao.updateByPrimaryKey(po) ; } /** * 保存历史记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void updateRmIntakeAmountDay(RmIntakeAmountDay po){ this.rmIntakeAmountDayMapperDao.updateByPrimaryKey(po) ; } /** * 得到符合条件的历史记录 * @param id * @return */ public RmIntakeAmountDay getRmIntakeAmountDay(Long id){ return rmIntakeAmountDayMapperDao.selectByPrimaryKey(id) ; } ///////////////////////////////////////////////// // // 农户日用水量及花费统计功能 // //////////////////////////////////////////////// /** * 得到最新记录 * @param clientId * @return */ public RmClientAmountDayLast getRmClientAmountLast(Long clientId){ List list = rmClientAmountDayLastMapperDao.selectByClientId(clientId) ; if(list != null && list.size() > 0){ return list.get(0) ; } return null ; } /** * 保存最新记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void saveRmClientAmountLast(RmClientAmountDayLast po){ this.rmClientAmountDayLastMapperDao.insert(po) ; } /** * 保存记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void saveRmClientAmountDay(RmClientAmountDay po){ this.rmClientAmountDayMapperDao.insert(po) ; } /** * 更新最新记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void updateRmClientAmountLast(RmClientAmountDayLast po){ this.rmClientAmountDayLastMapperDao.updateByPrimaryKey(po) ; } /** * 更新记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void updateRmClientAmountDay(RmClientAmountDay po){ this.rmClientAmountDayMapperDao.updateByPrimaryKey(po) ; } /** * 得到符合条件的历史记录 * @param id * @return */ public RmClientAmountDay getRmClientAmountDay(Long id){ return rmClientAmountDayMapperDao.selectByPrimaryKey(id) ; } /** * 得到符合条件的历史记录 * @param clientId * @param dt * @return */ public RmClientAmountDay getRmClientAmountByClientAndDate(Long clientId, Date dt){ List list = rmClientAmountDayMapperDao.selectByClientAndDate(clientId, dt) ; if(list != null && list.size() > 0){ return list.get(0) ; } return null ; } ///////////////////////////////////////////////// // // 漏损水量统计功能 // //////////////////////////////////////////////// /** * 得到控制器漏损水量统计最新记录 * @param intakeId * @return */ public RmLossDayLast getRmLossLast(Long intakeId){ List list = rmLossLastMapperDao.selectByIntakeId(intakeId) ; if(list != null && list.size() > 0){ return list.get(0) ; } return null ; } /** * 保存控制器漏损水量统计最新记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void saveRmLossLast(RmLossDayLast po){ this.rmLossLastMapperDao.insert(po) ; } /** * 保存控制器漏损水量统计最新记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void saveRmLossHistory(RmLossDay po){ this.rmLossHistoryMapperDao.insert(po) ; } /** * 保存控制器漏损水量统计最新记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void updateRmLossLast(RmLossDayLast po){ this.rmLossLastMapperDao.updateByPrimaryKey(po) ; } /** * 保存控制器漏损水量统计最新记录 * @param po */ @Transactional(rollbackFor = Exception.class) public void updateRmLossHistory(RmLossDay po){ this.rmLossHistoryMapperDao.updateByPrimaryKey(po) ; } /** * 得到控制器漏损水量统计历史记录中的最新记录 * @param id * @return */ public RmLossDay getRmLossHistory(Long id){ return rmLossHistoryMapperDao.selectByPrimaryKey(id) ; } /** * 得到控制器漏损水量统计最新记录 * @param dt * @return */ public RmLossDayLast getRmLossLastByDate(Date dt){ List list = rmLossLastMapperDao.selectByDate(dt) ; if(list != null && list.size() > 0){ return list.get(0) ; } return null ; } /** * 得到控制器漏损水量统计历史记录中的某日记录 * @param dt * @return */ public RmLossDay getRmLossHistoryByDate(Date dt){ List list = rmLossHistoryMapperDao.selectByDate(dt) ; if(list != null && list.size() > 0){ return list.get(0) ; } return null ; } ////////////////////////////////////////////////////// // // IC卡相关 // ////////////////////////////////////////////////////// /** * 得到农户卡 * @param cardAddr * @param cardNo * @return */ public VoCardInfo1 getIcCard(String cardAddr, String cardNo){ if(NumUtil.isPlusIntNumber(cardNo)){ Long icCardNoLong = Long.parseLong(cardNo) ; List list = seClientCardDao.getCardsByAddrAndNum(cardAddr, icCardNoLong) ; if(list != null && list.size() > 0){ return list.get(0) ; } } return null ; } /** * 得到农户虚拟卡 * @param cardNo * @return */ public VoCardInfo1 getVirIcCard(String cardNo){ if(NumUtil.isPlusIntNumber(cardNo)){ Long icCardNoLong = Long.parseLong(cardNo) ; List list = seVirtualCardDao.getCardsByNum(icCardNoLong) ; if(list != null && list.size() > 0){ return list.get(0) ; } } return null ; } /** * 更新实体卡剩余金额 * @param id * @param remainMoney */ @Transactional(rollbackFor = Exception.class) public void updateIcCardRemainMoney(Long id , Double remainMoney){ seClientCardDao.updateMoney(id,remainMoney); } /** * 更新虚拟卡剩余金额 * @param id * @param remainMoney */ @Transactional(rollbackFor = Exception.class) public void updateVirIcCardRemainMoney(Long id , Double remainMoney){ seVirtualCardDao.updateMoney(id,remainMoney); } ////////////////////////////////////////////////////// // // 命令日志相关 // ////////////////////////////////////////////////////// public RmCommandHistory getCommandLog(String commandId){ return rmCommandHistoryDao.selectByPrimaryKey(Long.parseLong(commandId)) ; } @Transactional(rollbackFor = Exception.class) public void updateCommandLog(RmCommandHistory po){ rmCommandHistoryDao.updateByPrimaryKey(po) ; } }