|  |  | 
 |  |  | import com.dy.pipIrrTerminal.card.qo.QoLostCards; | 
 |  |  | import com.dy.pipIrrTerminal.card.enums.CardStateENUM; | 
 |  |  | import com.dy.pipIrrTerminal.card.enums.LastOperateENUM; | 
 |  |  | import com.dy.pipIrrTerminal.card.enums.ManagementCardStateENUM; | 
 |  |  | import com.dy.pipIrrTerminal.card.enums.OperateTypeENUM; | 
 |  |  | import com.dy.pipIrrTerminal.card.enums.RechargeTypeENUM; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | 
 |  |  | import org.springframework.beans.factory.annotation.Value; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  | import org.springframework.transaction.annotation.Transactional; | 
 |  |  | import com.dy.common.util.IDLongGenerator; | 
 |  |  |  | 
 |  |  | import java.time.LocalDateTime; | 
 |  |  | import java.time.format.DateTimeFormatter; | 
 |  |  | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private SeManagementCardMapper seManagementCardMapper; | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private IDLongGenerator idLongGenerator; | 
 |  |  |  | 
 |  |  |     @Value("${project.projectNo}") | 
 |  |  |     private Integer projectNo; | 
 |  |  | 
 |  |  |         seCardOperate.setClientId(clientId); | 
 |  |  |         seCardOperate.setMoney(po.getBalance()); | 
 |  |  |         seCardOperate.setRefundAmount(po.getSupplementMoney()); | 
 |  |  |         seCardOperate.setOperateType(OperateTypeENUM.WRITE_BACK.getCode()); | 
 |  |  |         seCardOperate.setOperateType(OperateTypeENUM.SUPPLEMENT.getCode()); | 
 |  |  |         seCardOperate.setRemarks(po.getRemarks()); | 
 |  |  |         seCardOperate.setOperator(po.getOperator()); | 
 |  |  |         seCardOperate.setOperateDt(operateTime); | 
 |  |  | 
 |  |  |         Integer operateType = po.getOperateType(); | 
 |  |  |         String orderNumber = po.getOrderNumber(); | 
 |  |  |  | 
 |  |  |         // 先检查是否为管理卡 | 
 |  |  |         if (operateType.equals(OperateTypeENUM.MANAGEMENT_CARD_WRITE.getCode().intValue())) { | 
 |  |  |             // 管理类型卡写卡逻辑 | 
 |  |  |             return handleManagementCardWrite(cardAddr, orderNumber); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // 处理农户卡逻辑 | 
 |  |  |         Long cardId = seClientCardMapper.getCardIdByAddr(cardAddr); | 
 |  |  |         if (cardId == null || cardId.equals(0)) { | 
 |  |  |             map.put("msg", "您指定的水卡不存在"); | 
 |  |  |             return map; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         if (operateType == 1) { | 
 |  |  |         if (operateType.equals(OperateTypeENUM.ACTIVE.getCode().intValue())) { | 
 |  |  |             /** | 
 |  |  |              * 开卡操作执行通知 | 
 |  |  |              * 1.依据订单号将无效状态的操作记录改为有效 | 
 |  |  | 
 |  |  |                 turnRechargeHistoryValidByOrderNumber(orderNumber); | 
 |  |  |                 updateCard(cardId, orderNumber + "p"); | 
 |  |  |             } | 
 |  |  |         } else if (operateType == 2) { | 
 |  |  |         } else if (operateType.equals(OperateTypeENUM.RECHARGE.getCode().intValue())) { | 
 |  |  |             /** | 
 |  |  |              * 充值操作执行通知 | 
 |  |  |              * 1. 操作记录改为有效 | 
 |  |  | 
 |  |  |             turnOperateValidByOrderNumber(orderNumber + "p"); | 
 |  |  |             turnRechargeHistoryValidByOrderNumber(orderNumber); | 
 |  |  |             updateCard(cardId, orderNumber + "p"); | 
 |  |  |         } else if (operateType == 3) { | 
 |  |  |         } else if (operateType.equals(OperateTypeENUM.CANCEL.getCode().intValue())) { | 
 |  |  |             /** | 
 |  |  |              * 销卡操作执行通知 | 
 |  |  |              * 1. 操作记录改为有效 | 
 |  |  | 
 |  |  |                 return map; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         } else if (operateType == 4) { | 
 |  |  |         } else if (operateType.equals(OperateTypeENUM.REISSUE.getCode().intValue())) { | 
 |  |  |             /** | 
 |  |  |              * 补卡操作执行通知 | 
 |  |  |              * 1. 新水卡记录改为有效 | 
 |  |  | 
 |  |  |                 map.put("msg", "补卡回调失败"); | 
 |  |  |                 return map; | 
 |  |  |             } | 
 |  |  |         } else if (operateType == 5) { | 
 |  |  |         } else if (operateType.equals(OperateTypeENUM.REFUND.getCode().intValue())) { | 
 |  |  |             /** | 
 |  |  |              * 补扣操作执行通知 | 
 |  |  |              * 1. 操作记录改为有效 | 
 |  |  | 
 |  |  |                 map.put("msg", "补扣回调失败"); | 
 |  |  |                 return map; | 
 |  |  |             } | 
 |  |  |         } else if (operateType == 6) { | 
 |  |  |         } else if (operateType.equals(OperateTypeENUM.SUPPLEMENT.getCode().intValue())) { | 
 |  |  |             /** | 
 |  |  |              * 返还操作执行通知 | 
 |  |  |              * 1. 操作记录改为有效 | 
 |  |  | 
 |  |  |  | 
 |  |  |         map.put("success", true); | 
 |  |  |         map.put("msg", "操作成功"); | 
 |  |  |         return map; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 处理管理类型卡写卡回调 | 
 |  |  |      *  | 
 |  |  |      * @param cardAddr    卡地址 | 
 |  |  |      * @param orderNumber 订单号 | 
 |  |  |      * @return 处理结果 | 
 |  |  |      */ | 
 |  |  |     private Map<String, Object> handleManagementCardWrite(String cardAddr, String orderNumber) { | 
 |  |  |         Map<String, Object> map = new HashMap<>(); | 
 |  |  |         map.put("success", false); | 
 |  |  |         map.put("content", null); | 
 |  |  |  | 
 |  |  |         try { | 
 |  |  |             // 根据卡地址和订单号查找管理卡 | 
 |  |  |             SeManagementCard managementCard = seManagementCardMapper.selectOne( | 
 |  |  |                     com.baomidou.mybatisplus.core.toolkit.Wrappers.<SeManagementCard>lambdaQuery() | 
 |  |  |                             .eq(SeManagementCard::getCardAddr, cardAddr) | 
 |  |  |                             .eq(SeManagementCard::getOrderNo, orderNumber)); | 
 |  |  |  | 
 |  |  |             if (managementCard == null) { | 
 |  |  |                 map.put("msg", "未找到对应的管理卡记录"); | 
 |  |  |                 return map; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             // 更新管理卡状态为正常 | 
 |  |  |             managementCard.setState(ManagementCardStateENUM.NORMAL.getCode()); | 
 |  |  |  | 
 |  |  |             int updateResult = seManagementCardMapper.updateByPrimaryKeySelective(managementCard); | 
 |  |  |             if (updateResult > 0) { | 
 |  |  |                 map.put("success", true); | 
 |  |  |                 map.put("msg", "管理卡写卡完成,状态已更新为正常"); | 
 |  |  |             } else { | 
 |  |  |                 map.put("msg", "管理卡状态更新失败"); | 
 |  |  |             } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("处理管理卡写卡回调异常", e); | 
 |  |  |             map.put("msg", "处理管理卡写卡回调时发生异常:" + e.getMessage()); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return map; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |             // 参考termActiveCard逻辑:生成订单号 | 
 |  |  |             String orderNo = generateOrderNo(); | 
 |  |  |  | 
 |  |  |             // 参考termActiveCard逻辑:生成唯一ID,使用时间戳 | 
 |  |  |             Long id = System.currentTimeMillis(); | 
 |  |  |             // 使用IDLongGenerator生成唯一ID | 
 |  |  |             Long id = idLongGenerator.generate(); | 
 |  |  |             Date createTime = new Date(); | 
 |  |  |  | 
 |  |  |             // 构建管理卡对象 | 
 |  |  | 
 |  |  |                     .domain(dto.getDomain()) | 
 |  |  |                     .openClostTime(dto.getOpenClostTime()) | 
 |  |  |                     .remarks(dto.getRemarks()) | 
 |  |  |                     .state(ManagementCardStateENUM.UNWRITTEN.getCode()) // 默认状态为未写卡 | 
 |  |  |                     .build(); | 
 |  |  |  | 
 |  |  |             // 插入数据库 |