| | |
| | | package com.sandu.ximon.admin.manager.iot.amqp; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.sandu.ximon.admin.manager.iot.amqp.processor.AirDataProcessor; |
| | | import com.sandu.ximon.admin.manager.iot.amqp.processor.LightDataProcessor; |
| | | import com.sandu.ximon.admin.manager.iot.amqp.processor.PoleMonitorDataProcessor; |
| | | import com.sandu.ximon.admin.manager.iot.amqp.processor.c3ChargingProcessor; |
| | | import com.sandu.ximon.admin.manager.iot.frame.inner.report.*; |
| | | import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5AtmosphereHeartbeatReportInnerFrame; |
| | | import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5C3CommonReportInnerFrame; |
| | | import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5C3ErrorCodeReportInnerFrame; |
| | | import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5C3HeartbeatReportInnerFrame; |
| | | import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame; |
| | | import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonReportMessage; |
| | | import com.sandu.ximon.admin.manager.iot.rrpc.enums.A5OrderEnum; |
| | | import com.sandu.ximon.admin.manager.iot.rrpc.enums.C3ChargingEnum; |
| | | import com.sandu.ximon.admin.manager.iot.rrpc.enums.C3mRedisConstant; |
| | | import com.sandu.ximon.admin.manager.iot.rrpc.util.FrameUtils; |
| | | import com.sandu.ximon.admin.service.C3ChargingService; |
| | | import com.sandu.ximon.admin.service.C3mOrderService; |
| | | import com.sandu.ximon.admin.service.PoleBindingService; |
| | | import com.sandu.ximon.admin.service.PoleService; |
| | | import com.sandu.ximon.admin.utils.LogUtils; |
| | | import com.sandu.ximon.admin.utils.RedisUtils; |
| | | import com.sandu.ximon.admin.vo.C3mOrderVO; |
| | | import com.sandu.ximon.dao.domain.C3mCharging; |
| | | import com.sandu.ximon.dao.domain.C3mOrder; |
| | | import com.sandu.ximon.dao.domain.PoleBinding; |
| | | import com.sandu.ximon.dao.enums.OrderStatus; |
| | | import com.sandu.ximon.dao.enums.OrderType; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | |
| | | import javax.jms.Message; |
| | | import javax.jms.MessageListener; |
| | | import java.util.Date; |
| | | import java.util.Map; |
| | | import java.util.concurrent.*; |
| | | import java.util.concurrent.atomic.AtomicInteger; |
| | |
| | | */ |
| | | @Slf4j |
| | | public class AmqpMessageListener implements MessageListener { |
| | | |
| | | @Autowired |
| | | private C3ChargingService c3ChargingService; |
| | | @Autowired |
| | | private PoleBindingService bindingService; |
| | | @Autowired |
| | | private PoleService poleService; |
| | | @Autowired |
| | | private C3mOrderService orderService; |
| | | |
| | | |
| | | protected final static ExecutorService EXECUTOR_SERVICE = new ThreadPoolExecutor( |
| | | Runtime.getRuntime().availableProcessors(), |
| | |
| | | c3ChargingProcessor.c3ChargingProcessorgetInstance().process(productKey, deviceName, frame); |
| | | |
| | | } else if (C3ChargingEnum.QR_CODE_REQUEST.getCode().equals(functionCode)) { |
| | | // ç½é¡µæä½äºç»´ç 请æ±(41) |
| | | A5C3CommonReportInnerFrame codeRequestFrame = new A5C3CommonReportInnerFrame().transformFrame(frame.getPayload()); |
| | | log.info("C3å
çµæ¡©ä¸æ¥å¤ç_codeRequestFrame"); |
| | | log.info(codeRequestFrame.toString()); |
| | | } else if (C3ChargingEnum.HEART_BEAT.getCode().equals(functionCode)) { |
| | | //å¿è·³å
|
| | | // å¿è·³å
䏿¥(42) è¥äºåéæ å¿è·³å
æ°æ®ï¼åå¤æç¦»çº¿ |
| | | c3ChargingProcessor.c3ChargingProcessorgetInstance().process(productKey, deviceName, frame); |
| | | } else if (C3ChargingEnum.CHARGE_COMPLETE.getCode().equals(functionCode)) { |
| | | A5C3CommonReportInnerFrame completeRequestFrame = new A5C3CommonReportInnerFrame().transformFrame(frame.getPayload()); |
| | | log.info("C3å
çµæ¡©ä¸æ¥å¤ç_completeRequestFrame"); |
| | | log.info(completeRequestFrame.toString()); |
| | | // å
çµç»æä¸æ¥(43) |
| | | /** |
| | | * 读åå¿è·³å
ï¼å¤æå©ä½éé¢åå·²å
çµéï¼ç»è®¡å°ç¼å䏿£å¨è¿è¡ç订åã |
| | | */ |
| | | A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage aPackage = c3ChargingService.ReadTheHeartbeatPackage(completeRequestFrame.getDestinationAddress()); |
| | | if (aPackage == null) { |
| | | LogUtils.error("{ å
çµæ¡©(" + completeRequestFrame.getDestinationAddress() + ")å
çµç»æä¸æ¥è¯»åå¿è·³å
失败ï¼è¯·æ£æ¥å
çµæ¡©æ¯å¦åºç°æ
é! }"); |
| | | return; |
| | | } |
| | | refund(aPackage); |
| | | |
| | | } else if (C3ChargingEnum.CHARGE_STOP.getCode().equals(functionCode)) { |
| | | A5C3CommonReportInnerFrame stopRequestFrame = new A5C3CommonReportInnerFrame().transformFrame(frame.getPayload()); |
| | | log.info("C3å
çµæ¡©ä¸æ¥å¤ç_stopRequestFrame"); |
| | | log.info(stopRequestFrame.toString()); |
| | | A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage aPackage = c3ChargingService.ReadTheHeartbeatPackage(stopRequestFrame.getDestinationAddress()); |
| | | if (aPackage == null) { |
| | | LogUtils.error("{ å
çµæ¡©(" + stopRequestFrame.getDestinationAddress() + ")å
çµç»æä¸æ¥è¯»åå¿è·³å
失败ï¼è¯·æ£æ¥å
çµæ¡©æ¯å¦åºç°æ
é! }"); |
| | | return; |
| | | } |
| | | refund(aPackage); |
| | | |
| | | } else if (C3ChargingEnum.ERROR_CODE.getCode().equals(functionCode)) { |
| | | A5C3ErrorCodeReportInnerFrame errorCodeRequestFrame = new A5C3ErrorCodeReportInnerFrame().transformFrame(frame.getPayload()); |
| | | log.info("C3å
çµæ¡©ä¸æ¥å¤ç_errorCodeRequestFrame"); |
| | | log.info(errorCodeRequestFrame.toString()); |
| | | |
| | | A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage aPackage = c3ChargingService.ReadTheHeartbeatPackage(errorCodeRequestFrame.getDestinationAddress()); |
| | | if (aPackage == null) { |
| | | LogUtils.error("{ å
çµæ¡©(" + errorCodeRequestFrame.getDestinationAddress() + ")å
çµç»æä¸æ¥è¯»åå¿è·³å
失败ï¼è¯·æ£æ¥å
çµæ¡©æ¯å¦åºç°æ
é! }"); |
| | | return; |
| | | } |
| | | refund(aPackage); |
| | | } |
| | | } |
| | | |
| | |
| | | A5AtmosphereHeartbeatReportInnerFrame transformFrame = new A5AtmosphereHeartbeatReportInnerFrame().transformFrame(frame.getPayload()); |
| | | log.info("大æ°å¿è·³ä¸æ¥"); |
| | | log.info(transformFrame.toString()); |
| | | |
| | | } |
| | | |
| | | |
| | | private void refund(A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage aPackage) { |
| | | // private void refund(A5C3CommonReportInnerFrame completeRequestFrame,String code){ |
| | | /** |
| | | * 读åå¿è·³å
ï¼å¤æå©ä½éé¢åå·²å
çµéï¼ç»è®¡å°ç¼å䏿£å¨è¿è¡ç订åã |
| | | */ |
| | | String c3Mac = aPackage.getC3Mac(); |
| | | // è·åå¿è·³å
ä¸çå©ä½éé¢åå·²å
çµéï¼ä¸ç¼å䏿£å¨è¿è¡ç订åè¿è¡å¯¹æ¯ |
| | | String chargingOrderJson = RedisUtils.getBean().get(C3mRedisConstant.C3_CHARGING_ORDER.getCode() + c3Mac); |
| | | if (chargingOrderJson.isEmpty() || null == chargingOrderJson) { |
| | | C3mCharging c3m = c3ChargingService.getOne(Wrappers.lambdaQuery(C3mCharging.class).eq(C3mCharging::getC3Mac, c3Mac)); |
| | | PoleBinding binding = bindingService.getOne(Wrappers.lambdaQuery(PoleBinding.class) |
| | | .eq(PoleBinding::getDeviceCode,aPackage.getC3Mac()) |
| | | .eq(PoleBinding::getDeviceType, 2)); |
| | | // çæè®¢åï¼å¹¶å è½½å°redisç¼åï¼è®¾ç½®è¶
æ¶æ¶é´ä¸º5åé |
| | | C3mOrder order = new C3mOrderVO().generateOrder(binding.getPoleId() == null ? 0L : binding.getPoleId() |
| | | , c3m.getPoleDevicesCode(), c3m.getC3Mac(), OrderType.ERROR, Double.valueOf(aPackage.getRemainingAmount()), |
| | | Integer.parseInt(new java.text.DecimalFormat("0").format(aPackage.getReservedCapacity())) |
| | | ); |
| | | order.setActualChargingCapacity(Double.valueOf(aPackage.getChargedCapacity())); |
| | | order.setOrderStatus(OrderStatus.REFUNDING.getStatus()); |
| | | order.setRefundAmount(Double.valueOf(aPackage.getRemainingAmount())); |
| | | orderService.save(order); |
| | | String s = c3ChargingService.finishCharging(c3Mac); |
| | | // if(C3ChargingEnum.CHARGE_COMPLETE.getCode().equals(code)){ |
| | | // |
| | | // } |
| | | //æ¯å¦éè¦åºålogç±»å å¾
å® |
| | | LogUtils.error("{ å
çµæ¡©(" + c3Mac + ")ä¸å卿£å¨è¿è¡ç订åï¼è¯·æ£æ¥å
çµæ¡©æ¯å¦åºç°æ
é!ç»æè®¢å,ç»æä¸º" + s + "}"); |
| | | } else { |
| | | C3mOrder c3mOrderEntity = JSON.parseObject(chargingOrderJson, C3mOrder.class); |
| | | // 设置已å
çµéï¼è®¢åç¶æï¼é款éé¢ï¼è®¢å鿬¾æ¶é´æ³ï¼è®¢å鿬¾è¯´æï¼ç»æå
çµæ¶é´æ³ï¼ |
| | | c3mOrderEntity.setActualChargingCapacity(Double.valueOf(aPackage.getChargedCapacity())); |
| | | c3mOrderEntity.setOrderStatus(OrderStatus.REFUNDING.getStatus()); |
| | | c3mOrderEntity.setRefundAmount(Double.valueOf(aPackage.getRemainingAmount())); |
| | | // è·åå©ä½éé¢è¿è¡é款ï¼å¹¶åå
¥å½åæ£å¨è¿è¡ç订å |
| | | boolean b = orderService.orderRefund(c3mOrderEntity.getOutTradeNo(), c3mOrderEntity.getRefundAmount()); |
| | | c3mOrderEntity.setRefundTimestamp(new Date().getTime()); |
| | | if (b) { |
| | | c3mOrderEntity.setOrderStatus(OrderStatus.REFUND.getStatus()); |
| | | c3mOrderEntity.setRefundMsg("å
çµç»æ,订å鿬¾æå"); |
| | | } else { |
| | | c3mOrderEntity.setOrderStatus(OrderStatus.REFUND_FAILED.getStatus()); |
| | | c3mOrderEntity.setRefundMsg( |
| | | "å
çµç»æ,订å鿬¾å¤±è´¥,请è¿è¡æå¨é款(订åå·(" + |
| | | c3mOrderEntity.getOutTradeNo() + "),æ»éé¢(" + |
| | | c3mOrderEntity.getTotalAmount() + ",鿬¾éé¢(" + |
| | | aPackage.getRemainingAmount() + "))" |
| | | ); |
| | | } |
| | | c3mOrderEntity.setStopChargingTimestamp(new Date().getTime()); |
| | | orderService.updateById(c3mOrderEntity); |
| | | // æ¸
é¤ç¼å䏿£å¨è¿è¡ä¸ç订å |
| | | b = RedisUtils.getBean().delete(C3mRedisConstant.C3_CHARGING_ORDER.getCode() + c3mOrderEntity.getC3Mac()); |
| | | if (!b) { |
| | | try { |
| | | Thread.sleep(2000); |
| | | } catch (InterruptedException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | RedisUtils.getBean().delete(C3mRedisConstant.C3_CHARGING_ORDER.getCode() + c3mOrderEntity.getC3Mac()); |
| | | } |
| | | // åéç»æè®¢å |
| | | String s = c3ChargingService.finishCharging(c3Mac); |
| | | LogUtils.error("{ å
çµæ¡©(" + c3Mac + ")ä¸å卿£å¨è¿è¡ç订åï¼è¯·æ£æ¥å
çµæ¡©æ¯å¦åºç°æ
é!ç»æè®¢å,ç»æä¸º" + s + "}"); |
| | | } |
| | | |
| | | } |
| | | } |