2021与蓝度共同重构项目,服务端
liuhaonan
2022-04-01 8235bb3cebd773ba6fe29719cba7706858bbc2ee
订单
已修改10个文件
已添加3个文件
已删除5个文件
已重命名6个文件
615 ■■■■■ 文件已修改
dao/pom.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/bo/LightReportDataBo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/LightReportData.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/SingleLampData.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/domain/SingleLampFault.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/java/com/sandu/ximon/dao/mapper/SingleLampDataMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/src/main/resources/mapper/SingleLampDataMapper.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/C3mOrderController.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LightController.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquerydto/WxOrderDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquerydto/amount.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquerydto/goods_detail.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquerydto/payer.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquerydto/promotion_detail.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquerydto/scene_info.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/pay/OrderStatusEnums.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/pay/PayCallBackController.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/pay/wx/WxFastPayService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/security/LocalDateStringConverter.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3mOrderService.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightReportDataService.java 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ximon-admin/src/main/java/com/sandu/ximon/admin/service/SingleLampDataService.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dao/pom.xml
@@ -19,6 +19,10 @@
            <groupId>com.sandu.ximon</groupId>
            <artifactId>sandu-common</artifactId>
        </dependency>
    </dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
        </dependency>
    </dependencies>
</project>
dao/src/main/java/com/sandu/ximon/dao/bo/LightReportDataBo.java
@@ -1,5 +1,6 @@
package com.sandu.ximon.dao.bo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.sandu.ximon.dao.domain.LightReportData;
import lombok.Data;
@@ -10,5 +11,6 @@
@Data
public class LightReportDataBo extends LightReportData {
    @ExcelProperty("灯杆名称")
    private String poleName;
}
dao/src/main/java/com/sandu/ximon/dao/domain/LightReportData.java
@@ -1,11 +1,15 @@
package com.sandu.ximon.dao.domain;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import javafx.util.converter.LocalDateStringConverter;
import lombok.Data;
/**
@@ -19,83 +23,101 @@
     * 
     */
    @TableId(type = IdType.AUTO)
    @ExcelProperty("id")
    private Long lightReportDataId;
    /**
     * è®¾å¤‡mac
     */
    @ExcelProperty("设备mac")
    private String deviceCode;
    /**
     * å¸‚电电压
     */
    @ExcelProperty("市电电压")
    private Double voltage;
    /**
     * å¸‚电电流
     */
    @ExcelProperty("市电电流")
    private Double electricCurrent;
    /**
     * è®¾å¤‡æ¸©åº¦
     */
    @ExcelProperty("设备温度")
    private Double deviceTemperature;
    /**
     * åŠŸçŽ‡å› ç´ 
     */
    @ExcelProperty("功率因素")
    private Double powerFactor;
    /**
     * æœ‰åŠŸåŠŸçŽ‡
     */
    @ExcelProperty("有功功率")
    private Double activePower;
    /**
     * æ— åŠŸåŠŸçŽ‡
     */
    @ExcelProperty("无功功率")
    private Double reactivePower;
    /**
     * ç¯1亮度百分比,0-100
     */
    @ExcelProperty("灯1亮度百分比,0-100")
    private Integer lightPercent;
    /**
     * ç¯2亮度百分比
     */
    @ExcelProperty("灯2亮度百分比")
    private Integer light2Percent;
    /**
     * æœ€è¿‘一次亮灯时间
     */
    @ExcelProperty("最近一次亮灯时间")
    private Long recentlyLightSec;
    /**
     * æ€»äº®ç¯æ—¶é—´
     */
    @ExcelProperty("总亮灯时间")
    private Long totalLightSec;
    /**
     * æœ€è¿‘一次用电量
     */
    @ExcelProperty("最近一次用电量")
    private Double recentlyUsingPower;
    /**
     * æ€»ç”¨ç”µé‡
     */
    @ExcelProperty("总用电量")
    private Double totalUsingPower;
    /**
     * åˆ›å»ºæ—¶é—´
     */
//    @ExcelProperty(value = "创建时间",converter = LocalDateStringConverter.class)
    private LocalDateTime createTime;
    /**
     * 
     */
    @ExcelProperty("更新时间")
    private LocalDateTime updateTime;
    @TableField(exist = false)
    @ExcelIgnore
    private static final long serialVersionUID = 1L;
}
dao/src/main/java/com/sandu/ximon/dao/domain/SingleLampData.java
ÎļþÒÑɾ³ý
dao/src/main/java/com/sandu/ximon/dao/domain/SingleLampFault.java
ÎļþÒÑɾ³ý
dao/src/main/java/com/sandu/ximon/dao/mapper/SingleLampDataMapper.java
ÎļþÒÑɾ³ý
dao/src/main/resources/mapper/SingleLampDataMapper.xml
ÎļþÒÑɾ³ý
pom.xml
@@ -110,6 +110,23 @@
                <artifactId>jfinal-utils</artifactId>
                <version>0.2</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>easyexcel</artifactId>
                <version>2.2.10</version>
            </dependency>
            <!--xls-->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.17</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.17</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
ximon-admin/pom.xml
@@ -62,6 +62,11 @@
            <artifactId>jfinal-utils</artifactId>
            <version>0.2</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.10</version>
        </dependency>
        <!--阿里云物联网 -->
    </dependencies>
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/C3mOrderController.java
@@ -205,17 +205,17 @@
            throw new BusinessException("请输入正确的订单id");
        }
        C3mOrder order = c3mOrderService.getById(param.getOrderId());
        if((OrderType.ALIPAY.getCode()).equals(order.getOrderType())){
            return ResponseUtil.success(AliPayUtils.alipayQuery(order.getOutTradeNo(),param.getPoleId()));
        }else if((OrderType.WXPAY.getCode()).equals(order.getOrderType())){
        if (order == null) {
            throw new BusinessException("订单不存在");
        }
        if ((OrderType.ALIPAY.getCode()).equals(order.getOrderType())) {
            return ResponseUtil.success(AliPayUtils.alipayQuery(order.getOutTradeNo(), param.getPoleId()));
        } else if ((OrderType.WXPAY.getCode()).equals(order.getOrderType())) {
            return ResponseUtil.success(wxPayService.WxOrderQuery(param.getPoleId(), order.getOutTradeNo()));
        } else {
            return ResponseUtil.success("支付方式异常");
        }
        return ResponseUtil.success(null);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/controller/LightController.java
@@ -58,15 +58,30 @@
    @GetMapping("/report/list")
    public ResponseVO<Object> listReportData(BaseConditionVO conditionVO, @RequestParam(required = false) String keyword, @RequestParam(required = false) String deviceCode) {
        List<LightReportDataBo> list = lightReportDataService.listReportData(conditionVO.getPageNo(), conditionVO.getPageSize(), keyword, deviceCode);
        return ResponseUtil.successPage(list);
        return ResponseUtil.success(list);
    }
    /**
     * å¯¼å‡ºExcel
     * @param conditionVO
     * @param keyword
     * @param deviceCode
     * @return
     */
    @GetMapping("/report/exportList")
    public ResponseVO<Object> exportList(BaseConditionVO conditionVO, @RequestParam(required = false) String keyword, @RequestParam(required = false) String deviceCode) {
        String url = lightReportDataService.exportList(conditionVO.getPageNo(), conditionVO.getPageSize(), keyword, deviceCode);
        return ResponseUtil.success(url);
    }
    @GetMapping("/error/list")
    public ResponseVO<Object> listReportError(BaseConditionVO conditionVO, @RequestParam(required = false) String keyword) {
        List<LightReportErrorBo> list = lightReportErrorService.listReportError(conditionVO.getPageNo(), conditionVO.getPageSize(), keyword);
        return ResponseUtil.successPage(list);
        return ResponseUtil.success(list);
    }
    // äº®åº¦æŽ§åˆ¶
    @PostMapping("/control")
    public ResponseVO<Object> controlBrightness(@RequestBody @Validated List<LightControlParam> paramList) {
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquerydto/WxOrderDto.java
ÎļþÃû´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquery/WxOrderDto.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.sandu.ximon.admin.dto.wxquery;
package com.sandu.ximon.admin.dto.wxquerydto;
import lombok.Data;
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquerydto/amount.java
ÎļþÃû´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquery/amount.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.sandu.ximon.admin.dto.wxquery;
package com.sandu.ximon.admin.dto.wxquerydto;
import lombok.Data;
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquerydto/goods_detail.java
ÎļþÃû´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquery/goods_detail.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.sandu.ximon.admin.dto.wxquery;
package com.sandu.ximon.admin.dto.wxquerydto;
import lombok.Data;
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquerydto/payer.java
ÎļþÃû´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquery/payer.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.sandu.ximon.admin.dto.wxquery;
package com.sandu.ximon.admin.dto.wxquerydto;
import lombok.Data;
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquerydto/promotion_detail.java
ÎļþÃû´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquery/promotion_detail.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.sandu.ximon.admin.dto.wxquery;
package com.sandu.ximon.admin.dto.wxquerydto;
import lombok.Data;
ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquerydto/scene_info.java
ÎļþÃû´Ó ximon-admin/src/main/java/com/sandu/ximon/admin/dto/wxquery/scene_info.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.sandu.ximon.admin.dto.wxquery;
package com.sandu.ximon.admin.dto.wxquerydto;
import lombok.Data;
ximon-admin/src/main/java/com/sandu/ximon/admin/pay/OrderStatusEnums.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.sandu.ximon.admin.pay;
public enum OrderStatusEnums {
    /**
     * è®¢å•状态,// æœªæ”¯ä»˜(0),已支付(1),已退款(2),退款中(3),退款失败(4),订单完成(5)
     */
    UNPAID(0, "未付款"),
    PAID(1, "已付款"),
    REFUNDED(2, "已退款"),
    REFUNDING(3, "退款中"),
    REFUND_FAILUE(4, "退款失败"),
    FINISH(5,"订单完成")
    ;
    private final Integer code;
    private final String message;
    public static String getValue(Integer code) {
        for (OrderStatusEnums ut : OrderStatusEnums.values()) {
            if (ut.getCode().equals(code)) {
                return ut.message;
            }
        }
        return null;
    }
    OrderStatusEnums(Integer code, String message) {
        this.code = code;
        this.message = message;
    }
    public Integer getCode() {
        return code;
    }
    public String getMessage() {
        return message;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/pay/PayCallBackController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,117 @@
package com.sandu.ximon.admin.pay;
import com.alipay.api.AlipayApiException;
import com.alipay.api.internal.util.AlipaySignature;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
import com.sandu.common.security.annotation.AnonymousAccess;
import com.sandu.ximon.admin.pay.alipay.UsrAlipayConfigService;
import com.sandu.ximon.admin.service.C3mOrderService;
import com.sandu.ximon.dao.domain.AliConfigEntity;
import com.sandu.ximon.dao.domain.C3mOrder;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@RestController
@AllArgsConstructor
@RequestMapping("/callback/pay")
@Slf4j
public class PayCallBackController {
    private final C3mOrderService userOrderService;
    private final UsrAlipayConfigService alipayConfigService;
   // private final UserPayRecordService userPayRecordService;
    /**
     * å¾®ä¿¡æ”¯ä»˜å›žè°ƒ
     *
     * @param xmlData
     * @return
     */
    @AnonymousAccess
    @RequestMapping("wechatCallback")
    public Object wechatNotify(@RequestBody String xmlData) {
        return userOrderService.payWechatNotify(xmlData);
    }
    /**
     * æ”¯ä»˜å®æ”¯ä»˜å›žè°ƒ
     *
     * @return
     */
    @AnonymousAccess
    @RequestMapping("alipayCallback")
    public Object alipayCallback(HttpServletRequest request) {
        log.info("这里是支付宝回调");
        //获取支付宝POST过来反馈信息
        Map<String, String> params = new HashMap<String, String>();
        Map requestParams = request.getParameterMap();
        for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
            String name = (String) iter.next();
            String[] values = (String[]) requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
            }
            //乱码解决,这段代码在出现乱码时使用。
            //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
            params.put(name, valueStr);
        }
        log.info(params.toString());
        String orderSn = params.get("out_trade_no");
        C3mOrder userOrder = userOrderService.getByOrderSn(orderSn);
//        Long poleId = userOrder.getPoleId();
        AliConfigEntity aliConfig = alipayConfigService.getConfigByPoleId(userOrder.getPoleId());
        //切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
        //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
        boolean flag = false;
        try {
            flag = AlipaySignature.rsaCheckV1(params, aliConfig.getPublicKey(), "UTF-8", "RSA2");
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        if (flag) {
            if (!"TRADE_SUCCESS".equals(params.get("trade_status"))) {
                return "success";
            }
            if (userOrder == null) {
                return "订单不存在";
            }
            // æ£€æŸ¥è¿™ä¸ªè®¢å•是否已经处理过
            if (!OrderStatusEnums.UNPAID.getCode().equals(userOrder.getOrderStatus())) {
                return WxPayNotifyResponse.success("订单已经处理成功!");
            }
            String transactionId = params.get("out_trade_no");
            C3mOrder update = new C3mOrder();
            update.setOrderId(userOrder.getOrderId());
            update.setOutTradeNo(transactionId);
            update.setPayTimestamp(new Date().getTime());
            update.setOrderStatus(OrderStatusEnums.PAID.getCode());
            if (!userOrderService.updateById(update)) {
                return WxPayNotifyResponse.fail("更新数据已失效");
            }
//            UserPayRecord userPayRecord = new UserPayRecord();
//            userPayRecord.setOrderId(userOrder.getId());
//            userPayRecord.setPayAmount(userOrder.getTotalPrice());
//            userPayRecord.setPayDate(userOrder.getPayTime());
//            userPayRecord.setPayType(PayTypeEnums.ALIPAY.getCode());
//            userPayRecord.setUserId(userOrder.getUserId());
//            userPayRecordService.save(userPayRecord);
            return "success";
        }
        return null;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/pay/wx/WxFastPayService.java
@@ -15,8 +15,7 @@
import com.github.binarywang.wxpay.service.WxPayService;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.util.IpUtil;
import com.sandu.ximon.admin.dto.YSY_AccessTokenDto;
import com.sandu.ximon.admin.dto.wxquery.WxOrderDto;
import com.sandu.ximon.admin.dto.wxquerydto.WxOrderDto;
import com.sandu.ximon.admin.pay.wxpay.UsrWxPayConfigService;
import com.sandu.ximon.dao.domain.WxConfigEntity;
import lombok.AllArgsConstructor;
@@ -128,15 +127,18 @@
     * @param outTradeNo
     * @return
     */
    private Object WxOrderQuery(Long poleId,String outTradeNo){
    public boolean WxOrderQuery(Long poleId,String outTradeNo){
        WxConfigEntity wxConfig = wxPayConfigService.getConfigByPoleId(poleId);
        if(wxConfig==null){
            throw new BusinessException("获取微信支付配置失败");
        }
        String s = HttpUtil.get(WECHAT_ORDER_QUETY_URL + outTradeNo + WECHAT_ORDER_QUETY + wxConfig.getMchId());//WxOrderDto
        WxOrderDto wxOrderDto = JSON.parseObject(s, WxOrderDto.class);
        if(("SUCCESS").equals(wxOrderDto.getTrade_state())){
            return true;
        }
        return  wxOrderDto.getTrade_state();
        return  false;
    }
    /**
@@ -162,7 +164,7 @@
        return sign;
    }
    public WxPayOrderNotifyResult parseOrderNotifyResult(WxPayService wxPayService, String xmlData) {
    public WxPayOrderNotifyResult parseOrderNotifyResult(String xmlData) {
        try {
            return wxPayService.parseOrderNotifyResult(xmlData);
        } catch (WxPayException e) {
@@ -171,7 +173,7 @@
        }
    }
    public WxPayRefundNotifyResult parseRefundNotifyResult(WxPayService wxPayService, String xmlData) {
    public WxPayRefundNotifyResult parseRefundNotifyResult( String xmlData) {
        try {
            return wxPayService.parseRefundNotifyResult(xmlData);
        } catch (WxPayException e) {
@@ -189,7 +191,7 @@
     * @param callbackUrl
     * @return
     */
    public boolean refundOrder(WxPayService wxPayService, String orderId, String refundSn, Integer refundFee, String callbackUrl) {
    public boolean refundOrder( String orderId, String refundSn, Integer refundFee, String callbackUrl) {
        WxPayRefundRequest refundRequest = new WxPayRefundRequest();
        refundRequest.setOutTradeNo(orderId);
        refundRequest.setOutRefundNo(refundSn);
@@ -214,7 +216,7 @@
    /**
     * ç”ŸæˆäºŒç»´ç ä»˜æ¬¾
     */
    public String generateQRCodePay(WxPayService wxPayService, String body,
    public String generateQRCodePay( String body,
                                    String orderId, int totalFee, String callbackUrl) {
        WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = new WxPayUnifiedOrderRequest();
        wxPayUnifiedOrderRequest.setBody(body);
ximon-admin/src/main/java/com/sandu/ximon/admin/security/LocalDateStringConverter.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
package com.sandu.ximon.admin.security;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
 * è‡ªå®šä¹‰LocalDateStringConverter
 * ç”¨äºŽè§£å†³ä½¿ç”¨easyexcel导出表格时候,默认不支持LocalDateTime日期格式
 *
 * åœ¨éœ€è¦çš„属性上添加注解 @ExcelProperty(value = "入职时间", converter = LocalDateStringConverter.class)
 */
public class LocalDateStringConverter implements Converter<LocalDateTime> {
    @Override
    public Class supportJavaTypeKey() {
        return LocalDateTime.class;
    }
    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }
    @Override
    public LocalDateTime convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        return LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }
    @Override
    public CellData convertToExcelData(LocalDateTime localDateTime, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String format = formatter.format(localDateTime);
        return new CellData(format);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/C3mOrderService.java
@@ -1,9 +1,14 @@
package com.sandu.ximon.admin.service;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
import com.sandu.common.execption.BusinessException;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.ximon.admin.config.C3mRedisConfig;
import com.sandu.ximon.admin.pay.OrderStatusEnums;
import com.sandu.ximon.admin.pay.wx.WxFastPayService;
import com.sandu.ximon.admin.security.SecurityUtils;
import com.sandu.ximon.admin.security.order.OrderQueryListener;
@@ -21,7 +26,9 @@
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/**
 * @Author liuhaonan
@@ -133,8 +140,50 @@
        );
        //  æŽ¨é€åˆ°è‡ªåŠ¨æŸ¥è¯¢æ¨¡å—ï¼Œè¿›è¡Œæ‰«æå¯åŠ¨
        orderQueryListener.startScan(OrderScanType.C3M.getType());
        if(b){
            save(c3mOrderEntity);
        }
        return b ? c3mOrderEntity : null;
    }
    /**
     * å¾®ä¿¡æ”¯ä»˜å›žè°ƒ
     */
    public Object payWechatNotify(String xmlData) {
        WxPayOrderNotifyResult wxPayOrderNotifyResult = fastPayService.parseOrderNotifyResult(xmlData);
        String orderSn = wxPayOrderNotifyResult.getOutTradeNo();
        String transactionId = wxPayOrderNotifyResult.getOutTradeNo();
        C3mOrder userOrder = getByOrderSn(orderSn);
        if (userOrder == null) {
            return WxPayNotifyResponse.fail("订单不存在 sn=" + orderSn);
        }
        // æ£€æŸ¥è¿™ä¸ªè®¢å•是否已经处理过
        if (!OrderStatusEnums.UNPAID.getCode().equals(userOrder.getOrderStatus())) {
            return WxPayNotifyResponse.success("订单已经处理成功!");
        }
        userOrder.setOutTradeNo(transactionId);
        userOrder.setPayTimestamp(new Date().getTime());
        userOrder.setOrderStatus(OrderStatusEnums.PAID.getCode());
        if (!updateById(userOrder)) {
            return WxPayNotifyResponse.fail("更新数据已失效");
        }
//        UserPayRecord userPayRecord = new UserPayRecord();
//        userPayRecord.setOrderId(userOrder.getId());
//        userPayRecord.setPayAmount(userOrder.getTotalPrice());
//        userPayRecord.setPayType(PayTypeEnums.WECHAT.getCode());
//        userPayRecord.setPayDate(userOrder.getPayTime());
//        userPayRecord.setUserId(userOrder.getUserId());
//        userPayRecordService.save(userPayRecord);
        return WxPayNotifyResponse.success("更新数据成功");
    }
    public C3mOrder getByOrderSn(String orderSn) {
        LambdaQueryWrapper<C3mOrder> wrapper = Wrappers.lambdaQuery(C3mOrder.class).eq(C3mOrder::getOutTradeNo, orderSn).last("limit 1");
        return getOne(wrapper);
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/LightReportDataService.java
@@ -1,16 +1,25 @@
package com.sandu.ximon.admin.service;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.RandomUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.github.pagehelper.PageHelper;
import com.sandu.common.file.config.FileProperties;
import com.sandu.common.service.impl.BaseServiceImpl;
import com.sandu.ximon.admin.dto.LightDataDto;
import com.sandu.common.util.ResUtils;
import com.sandu.ximon.admin.manager.iot.frame.inner.report.A5LightHeartbeatReportInnerFrame;
import com.sandu.ximon.dao.bo.LightBo;
import com.sandu.ximon.dao.bo.LightReportDataBo;
import com.sandu.ximon.dao.domain.LightReportData;
import com.sandu.ximon.dao.mapper.LightReportDataMapper;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.beans.BeanUtils;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import java.io.File;
import java.util.List;
/**
@@ -19,8 +28,10 @@
 * ç¯ä¸ŠæŠ¥æ•°æ® service
 */
@Service
@AllArgsConstructor
public class LightReportDataService extends BaseServiceImpl<LightReportDataMapper, LightReportData> {
    private final FileProperties properties;
    /**
     * ä¿å­˜ä¸ŠæŠ¥çš„灯心跳数据
@@ -37,6 +48,7 @@
    /**
     * èŽ·å–æŒ‡å®šè®¾å¤‡ç æœ€æ–°çš„ä¸€å¤©ä¸ŠæŠ¥æ•°æ®
     *
     * @param deviceCodeList è®¾å¤‡ç åˆ—表
     * @return ä¸ŠæŠ¥æ•°æ®
     */
@@ -46,11 +58,34 @@
    /**
     * èŽ·å–ä¸ŠæŠ¥æ•°æ®
     * @param keyword å…³é”®è¯
     *
     * @param keyword    å…³é”®è¯
     * @param deviceCode è®¾å¤‡ç 
     */
    public List<LightReportDataBo> listReportData(int pageNo, int pageSize, String keyword, String deviceCode) {
        PageHelper.startPage(pageNo,pageSize);
        return baseMapper.listReportData(keyword,deviceCode);
        PageHelper.startPage(pageNo, pageSize);
        return baseMapper.listReportData(keyword, deviceCode);
    }
    @SneakyThrows
    public String exportList(int pageNo, int pageSize, String keyword, String deviceCode) {
        PageHelper.startPage(pageNo, pageSize);
        List<LightReportDataBo> list = baseMapper.listReportData(keyword, deviceCode);
        File file = new File(properties.getUploadRootPath() + "export" + File.separator + RandomUtil.randomString(12) + ".xlsx");
//        File file = new File(properties.getUploadRootPath() + "export" + File.separator + RandomUtil.randomString(12) + ".xlsx");
//        ClassPathResource cpr = new ClassPathResource("public/exportOrder.xlsx");
//        FileUtil.mkParentDirs(file);
//
//        ExcelWriter excelWriter = EasyExcel.write(file).withTemplate(cpr.getInputStream()).build();
//        WriteSheet writeSheet = EasyExcel.writerSheet().build();
//        excelWriter.fill(list, writeSheet);
//        excelWriter.finish();
        EasyExcel.write(file, LightReportDataBo.class).sheet("模板").doWrite(list);
        String url = file.getPath().replace(properties.getUploadRootPath(), "");
       return ResUtils.addPrefix(url);
       // return list;
    }
}
ximon-admin/src/main/java/com/sandu/ximon/admin/service/SingleLampDataService.java
ÎļþÒÑɾ³ý