2021与蓝度共同重构项目,服务端
liuhaonan
2022-06-29 55e219a5802ab479b9a1c60b2130382a1318ba76
充电桩
已修改9个文件
118 ■■■■ 文件已修改
dao/src/main/java/com/sandu/ximon/dao/bo/C3mOrderBo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/C3mOrder.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/C3mOrderMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/C3mOrderController.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/param/PayParam.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/pay/wx/WxFastPayService.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3mOrderService.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/bo/C3mOrderBo.java
@@ -99,4 +99,5 @@
    private Integer changingStates;
}
dao/src/main/java/com/sandu/ximon/dao/domain/C3mOrder.java
@@ -128,6 +128,12 @@
     */
    private Integer changingStates;
    /**
     * udid
     */
    private String c3Udid;
    /**
     * 用户标识
     */
dao/src/main/resources/mapper/C3mOrderMapper.xml
@@ -28,6 +28,7 @@
        <result property="poleName" column="pole_name" jdbcType="VARCHAR"/>
        <result property="changingStates" column="changing_states" jdbcType="INTEGER"/>
        <result property="userCode" column="user_code" jdbcType="VARCHAR"/>
        <result property="c3Udid" column="c3_udid" jdbcType="VARCHAR"/>
    </resultMap>
    <sql id="Base_Column_List">
ximon-admin/pom.xml
@@ -89,6 +89,11 @@
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-miniapp</artifactId>
            <version>4.1.0</version>
        </dependency>
    </dependencies>
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/C3mOrderController.java
@@ -16,6 +16,7 @@
import com.sandu.ximon.dao.domain.C3mOrder;
import com.sandu.ximon.dao.enums.OrderType;
import lombok.AllArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
@@ -60,9 +61,15 @@
     * @return
     */
    @PostMapping("/advancePay")
    public ResponseVO<Object> advancePayOrder(@RequestBody PayParam param) {
        if (param.getTotalAmount() < 0) {
            throw new BusinessException("金额必须大于0");
    public ResponseVO<Object> advancePayOrder(@RequestBody PayParam param) throws WxErrorException {
        if (param.getWxCode().isEmpty()) {
            throw new BusinessException("微信code不能为空");
        }
        if (param.getPoleId() == null || param.getSubscribeChargingCapacity() == null) {
            throw new BusinessException("充电桩id或充电容量不能为空");
        }
        if (param.getSubscribeChargingCapacity() < 1) {
            throw new BusinessException("充电容量不能小于1Kw/h");
        }
        //  C3充电桩实体
        C3mCharging c3m = c3mService.getC3mByPoleId(param.getPoleId());
@@ -73,8 +80,9 @@
        BigDecimal TotalAmount = c3mChargingChargeService.getCostByC3id(c3m.getC3Id(), param.getSubscribeChargingCapacity());
        //转换为double类型
        double totalAmount = TotalAmount.doubleValue();
        //生成订单
        C3mOrder c3mOrderEntity = c3mOrderService.advancePayOrder(param.getPoleId(), c3m, "wxpay"
                , totalAmount, param.getSubscribeChargingCapacity());
                , totalAmount, param.getSubscribeChargingCapacity(), param.getWxCode());
        if (null == c3mOrderEntity) {
            throw new BusinessException("该充电桩正被使用!");
        }
@@ -82,7 +90,8 @@
        param.setOutTradeNo(c3mOrderEntity.getOutTradeNo());
        param.setTotalAmount(c3mOrderEntity.getTotalAmount());
        String s = WxFastPayService.parseWxAmount(param.getTotalAmount().toString());
        SortedMap<Object, Object> result = wxPayService.miniAppPay("扫码充电支付(C3充电桩)", param.getOutTradeNo(), Integer.valueOf(s), param.getPoleId());
        //生成微信预付订单
        SortedMap<Object, Object> result = wxPayService.miniAppPay("扫码充电支付(C3充电桩)", param.getOutTradeNo(), Integer.valueOf(s), param.getPoleId(), param.getWxCode());
        return ResponseUtil.success(result);
    }
@@ -121,4 +130,15 @@
        return ResponseUtil.successPage(list);
    }
    /**
     * 获取wx的openid
     */
    @PostMapping("/getWxOpenId")
    public ResponseVO<Object> getWxOpenId(@RequestBody PayParam param) throws WxErrorException {
        if (param.getWxCode() == null || param.getPoleId() == null || param.getWxCode().isEmpty()) {
            throw new BusinessException("参数不能为空");
        }
        return ResponseUtil.success(wxPayService.getOpenId(param.getPoleId(), param.getWxCode()));
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/param/PayParam.java
@@ -21,7 +21,7 @@
    /**
     * 用户标识
     */
    private  String user_code;
    private  String wxCode;
    /**
     * 微信支付金额
ximon-admin/src/main/java/com/sandu/ximon/admin/pay/wx/WxFastPayService.java
@@ -1,7 +1,10 @@
package com.sandu.ximon.admin.pay.wx;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import cn.dreampie.encription.EncriptionKit;
import cn.hutool.core.codec.Base64;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
@@ -20,6 +23,7 @@
import com.sandu.ximon.dao.domain.WxConfigEntity;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -44,7 +48,6 @@
    public static final String WECHAT_ORDER_QUETY = "?mchid=";
    private final UsrWxPayConfigService wxPayConfigService;
    /**
@@ -201,26 +204,33 @@
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public SortedMap<Object, Object> miniAppPay(String body,
                                                String orderId, int totalFee, Long poleId) {
        WxConfigEntity wxConfig = wxPayConfigService.getConfigByPoleId(poleId);
        wxConfig.setMchId(wxConfig.getMchId().trim());
    public SortedMap<Object, Object> miniAppPay(String body, String orderId, int totalFee, Long poleId, String wxCode) throws WxErrorException {
//        WxConfigEntity wxConfig = wxPayConfigService.getConfigByPoleId(poleId);
        WxConfigEntity wxConfig = new WxConfigEntity();
        wxConfig.setAppid("wx3d7b3ba37fee07de");
        wxConfig.setMchId("1536603671");
        wxConfig.setPrivateKey("0yec5jkwqy4muv5313yn520rdq5cfmqu");
//        wxConfig.setMchId(wxConfig.getMchId().trim());
        //设置微信支付参数
        WxPayConfig payConfig = new WxPayConfig();
        payConfig.setAppId(StringUtils.trimToNull(wxConfig.getAppid()));
        payConfig.setMchId(StringUtils.trimToNull(wxConfig.getMchId()));
        payConfig.setMchKey(StringUtils.trimToNull(wxConfig.getPrivateKey()));
        payConfig.setAppId(StringUtils.trimToNull("wx3d7b3ba37fee07de"));
        payConfig.setMchId(StringUtils.trimToNull("1536603671"));
        payConfig.setMchKey(StringUtils.trimToNull("0yec5jkwqy4muv5313yn520rdq5cfmqu"));
        payConfig.setSubAppId(StringUtils.trimToNull(null));
        payConfig.setSubMchId(StringUtils.trimToNull(null));
        payConfig.setKeyPath(StringUtils.trimToNull(null));
        wxPayService.setConfig(payConfig);
        WxMaJscode2SessionResult sessionInfo = this.getWxMaService(wxConfig).getUserService().getSessionInfo(wxCode);
        //设置微信同一订单请求
        WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = new WxPayUnifiedOrderRequest();
        wxPayUnifiedOrderRequest.setBody(body);
        wxPayUnifiedOrderRequest.setOutTradeNo(orderId);
        wxPayUnifiedOrderRequest.setTotalFee(totalFee);
//        wxPayUnifiedOrderRequest.setOpenid("otiM54x_hc_5gbhMY5aZxo7UByNo");
        wxPayUnifiedOrderRequest.setOpenid(sessionInfo.getOpenid());
        wxPayUnifiedOrderRequest.setSignType(WxPayConstants.SignType.MD5);
@@ -259,4 +269,30 @@
        }
    }
    public WxMaService getWxMaService(WxConfigEntity wxConfig) {
        if (wxConfig == null) {
            throw new BusinessException("找不到微信配置");
        }
        WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
        config.setAppid(wxConfig.getAppid());
        config.setSecret("05edea692eb1b70670ec9ac6e9c62a84");
        WxMaService service = new WxMaServiceImpl();
        service.setWxMaConfig(config);
        return service;
    }
    public String getOpenId(Long poleId, String wxCode) throws WxErrorException {
//        WxConfigEntity wxConfig = wxPayConfigService.getConfigByPoleId(poleId);
        WxConfigEntity wxConfig = new WxConfigEntity();
        wxConfig.setAppid("wx3d7b3ba37fee07de");
        wxConfig.setMchId("1536603671");
        wxConfig.setPrivateKey("0yec5jkwqy4muv5313yn520rdq5cfmqu");
        if (wxConfig == null) {
            throw new BusinessException("找不到微信配置");
        }
        WxMaJscode2SessionResult sessionInfo = this.getWxMaService(wxConfig).getUserService().getSessionInfo(wxCode);
        return sessionInfo.getOpenid();
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3mOrderService.java
@@ -26,7 +26,6 @@
import com.sandu.ximon.dao.mapper.C3mOrderMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
@@ -134,7 +133,7 @@
     * @return
     */
    public C3mOrder advancePayOrder(Long streetlightId, C3mCharging c3m, String orderType, Double totalAmount,
                                    Integer subscribeChargingCapacity) {
                                    Integer subscribeChargingCapacity, String wxCode) {
        //  判断该充电桩是否存在正在进行中的订单
        String chargingJson = redisUtils.get(C3mRedisConstant.C3_CHARGING_ORDER.getCode() + c3m.getC3Mac());
@@ -168,6 +167,7 @@
        c3mOrderEntity.setPoleName(pole.getPoleName());
        c3mOrderEntity.setC3Mac(c3m.getC3Mac());
        c3mOrderEntity.setOrderStatus(0);
        c3mOrderEntity.setUserCode(wxCode);
        //  推送到自动查询模块,进行扫描启动
@@ -221,6 +221,14 @@
    }
    /**
     * 根据灯杆id获取最近一条订单
     */
    public C3mOrder getLastOrderByPoleId(Long poleId) {
        LambdaQueryWrapper<C3mOrder> wrapper = Wrappers.lambdaQuery(C3mOrder.class).eq(C3mOrder::getPoleId, poleId).last("limit 1");
        return getOne(wrapper);
    }
    /**
     * 订单列表
     *
     * @param baseConditionVO
@@ -232,4 +240,7 @@
        List<C3mOrderBo> list = baseMapper.orderList(userId);
        return list;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightService.java
@@ -73,7 +73,7 @@
        Boolean hasKey = redisService.hasKey(LightKey.REPORT_MAC.key(deviceName));
        if (!hasKey) {
            int count = count(Wrappers.lambdaQuery(Light.class).eq(Light::getDeviceCode, deviceName));
            log.info("redis查不到路灯数据{}={}", count, deviceName);
            log.info("redis查不到路灯数据 数量:{}={}", count, deviceName);
            // 当前路灯表没有录入设备吗
            if (count == 0) {
                Light light = new Light();