2021与蓝度共同重构项目,服务端
liuhaonan
2022-08-26 7d6e1271ecd1b386c409c910df866aa8cccb46c2
ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3mOrderService.java
@@ -71,18 +71,18 @@
     * @param outTradeNo
     * @return
     */
    public boolean orderRefund(String outTradeNo, Double amt) {
    public boolean orderRefund(String outTradeNo) {
        Long userId = SecurityUtils.getUserId();
        String username = SecurityUtils.getUsername();
        C3mOrder orderByOutTradeNo = c3mOrderMapper.getOrderByOutTradeNo(outTradeNo);
        Double refundAmount = orderByOutTradeNo.getSurplusAmount();
        if (orderByOutTradeNo.getTotalAmount() < refundAmount) {
            throw new BusinessException("退款金额错误,不能大于付款金额");
        }
        if (orderByOutTradeNo == null) {
            throw new BusinessException("未找到订单");
        } else {
            orderByOutTradeNo.setRefundAmount(refundAmount);
            if (orderByOutTradeNo.getTotalAmount() < orderByOutTradeNo.getRefundAmount()) {
                throw new BusinessException("退款金额错误,不能大于付款金额");
            }
            orderByOutTradeNo.setRefundAmount(orderByOutTradeNo.getSurplusAmount());
            return c3mOrderRefund(orderByOutTradeNo, "充电桩退款", userId, username);
        }
@@ -110,12 +110,7 @@
                    C3mOrder.getRefundAmount());
        } else if (C3mOrder.getOrderType().equals(OrderType.WXPAY.getCode())) {
            //  进行微信退款
            b = fastPayService.refund(
                    C3mOrder.getTotalAmount(),
                    C3mOrder.getRefundAmount(),
                    C3mOrder.getOutTradeNo(),
                    C3mOrder.getPoleId()
            );
            b = fastPayService.refund(C3mOrder);
        }
        C3mOrder.setRefundTimestamp(System.currentTimeMillis());
        C3mOrder.setRefundMsg(msg);
@@ -154,7 +149,7 @@
                                    Integer subscribeChargingCapacity, String wxCode) {
        //查询充电桩是否存在正在进行中的订单
        C3mOrder c3mOrder = getOne(Wrappers.lambdaQuery(C3mOrder.class)
                .eq(C3mOrder::getC3Udid, c3m.getMcuUdid()).last("limit 1"));
                .eq(C3mOrder::getC3Udid, c3m.getMcuUdid()).eq(C3mOrder::getC3Mac, c3m.getC3Mac()).last("limit 1"));
        //充电桩正在充电中
        if (c3mOrder != null && c3mOrder.getChargingStates() != null && c3mOrder.getChargingStates() == 0) {
@@ -189,7 +184,8 @@
        c3mOrderEntity.setOrderStatus(0);
        c3mOrderEntity.setUserCode(wxCode);
        c3mOrderEntity.setC3Udid(c3m.getMcuUdid());
        c3mOrderEntity.setRefundAmount(totalAmount);
        c3mOrderEntity.setSurplusAmount(totalAmount);
        if (save(c3mOrderEntity)) {
@@ -260,6 +256,7 @@
        }
        //开启充电成功后,更新订单状态为充电中
        userOrder.setChargingStates(0);
        userOrder.setStartChargingTimestamp(System.currentTimeMillis());
        log.error("[-----------------微信支付回调结束-----------------]");
        if (!updateById(userOrder)) {
            return WxPayNotifyResponse.fail("更新数据已失效");
@@ -365,25 +362,38 @@
        remove(Wrappers.lambdaQuery(C3mOrder.class).lt(C3mOrder::getCreateTimestamp, timeMinus10).eq(C3mOrder::getOrderStatus, 0));
    }
    /**
     * 恢复继续充电
     *
     * @param c3Mac
     * @param mcuUdid
     */
    public void recoverContinueCharing(String c3Mac, String mcuUdid) {
        C3mOrder c3mOrder = getOne(Wrappers.lambdaQuery(C3mOrder.class).
                eq(C3mOrder::getC3Mac, c3Mac).eq(C3mOrder::getC3Udid, mcuUdid).eq(C3mOrder::getChargingStates, 0).last("limit 1"));
        if (c3mOrder != null) {
            c3mOrder.setActualChargingCapacity(c3mOrder.getActualChargingCapacityHide());
            c3mOrder.setActualChargingCapacityHide(0.00);
            //再次充电电量
            double electricity = c3mOrder.getSubscribeChargingCapacity() - c3mOrder.getActualChargingCapacity();
            Integer chargingCapacity = Integer.valueOf(String.valueOf(Math.floor(electricity)));
            //再次充电金额
            double chargeAmount = c3mOrder.getSurplusAmount();
            SpringContextHolder.getBean(C3ChargingService.class).startCharging(c3Mac, chargingCapacity, chargeAmount);
    /**
     * 充电桩故障情况下,结果故障前正在进行中的订单
     *
     * @param dataPackage
     */
    public void stopCharingOrder(String c3Mac, A5C3HeartbeatReportInnerFrame.HeartBeatDataPackage dataPackage) {
        if (c3Mac.isEmpty() || c3Mac == null || dataPackage == null) {
            return;
        }
        //获取正在进行中的订单
        C3mOrder c3mOrder = getOne(Wrappers.lambdaQuery(C3mOrder.class)
                .eq(C3mOrder::getC3Mac, c3Mac).eq(C3mOrder::getChargingStates, 0)
                .eq(C3mOrder::getOrderStatus, OrderStatus.PAYED.getStatus()).last("limit 1"));
        //订单未结束,但是充电桩为空闲状态(即充电桩断电/故障情况)  结束该订单
        if ("1".equals(dataPackage.getStatusBit()) && c3mOrder != null) {
            //设置订单为已完成
            c3mOrder.setOrderStatus(OrderStatus.COMPLETE.getStatus());
            //设置充电状态为已结束
            c3mOrder.setChargingStates(1);
            //设置充电电量
            c3mOrder.setActualChargingCapacity(Double.parseDouble(dataPackage.getChargedCapacity()));
            //设置退款金额
            c3mOrder.setRefundAmount(Double.parseDouble(dataPackage.getRemainingAmount()));
            //设置剩余金额
            c3mOrder.setSurplusAmount(Double.parseDouble(dataPackage.getRemainingAmount()));
            //结束充电(订单)时间
            c3mOrder.setStopChargingTimestamp(System.currentTimeMillis());
            //充电时长
            c3mOrder.setAlreadyChargingTime(dataPackage.getAlreadyChargingTime());
            updateById(c3mOrder);
        }
    }