Pu Zhibing
2024-09-24 49cfd390f78cda9292a8accc9dd0eb2815d7b226
Merge remote-tracking branch 'origin/master'
6个文件已修改
274 ■■■■ 已修改文件
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/pom.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TAdvertisingServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java
@@ -42,6 +42,7 @@
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
 * <p>
@@ -76,10 +77,19 @@
        List<Integer> integers = new ArrayList<>();
        integers.add(1);
        integers.add(2);
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        QueryWrapper<TAppCoupon> wrapper = new QueryWrapper<>();
        wrapper.eq("coupon_id",dto.getCouponId());
        wrapper.in("ways_to_obtain",integers);
        if (StringUtils.hasLength(dto.getPhone())){
            List<Long> collect = tAppUserMapper.selectList(new QueryWrapper<TAppUser>().like("phone", dto.getPhone())).stream()
                    .map(TAppUser::getId).collect(Collectors.toList());
            if(collect.isEmpty()){
                collect.add(-1L);
            }
            wrapper.in("id",collect);
        }
        if (dto.getStatus()!=null){
            wrapper.eq("status",dto.getStatus());
        }
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java
@@ -113,16 +113,15 @@
    /**
     * 创建设备
     * @param productId 产品ID
     * @param nodeId 设备标识码  通常使用IMEI、MAC地址或Serial No作为node_id
     * @param deviceId 设备ID 使用设备标识码
     * @param nodeId 设备标识码  设备编号
     * @param deviceName 设备名称
     * @param description 设备描述
     * @return AddDeviceResponse
     */
    public AddDeviceResponse addDeviceRequest(String productId,String nodeId,String deviceId,String deviceName,String description) {
    public AddDeviceResponse addDeviceRequest(String productId,String nodeId,String deviceName,String description) {
        AddDeviceRequest request = new AddDeviceRequest();
        AddDevice body = new AddDevice();
        body.withDeviceId(deviceId);
        body.withDeviceId(nodeId);
        body.withNodeId(nodeId);
        body.withDeviceName(deviceName);
        body.withProductId(productId);
ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
@@ -16,13 +16,12 @@
import com.ruoyi.integration.iotda.utils.tools.StrategyUtil;
import com.ruoyi.integration.rocket.model.*;
import com.ruoyi.integration.rocket.produce.EnhanceProduce;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.producer.SendResult;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.math.BigDecimal;
@@ -36,6 +35,7 @@
 */
@Slf4j
@RestController
@RequestMapping("/iot")
public class IotMessageListener {
    @Autowired
@@ -266,60 +266,97 @@
        return AjaxResult.success();
    }
    @PostMapping(value = "/message/sendMessage")
    public R sendMessage() {
    @ApiOperation(value = "运营平台远程控制启机",tags = {"硬件接口"})
    @GetMapping(value = "/platformStartCharging")
    public R platformStartCharging(String orderNum,String deviceId,Long orderId,BigDecimal money) {
        // 运营平台远程控制启机
//        PlatformStartCharging platformStartCharging = new PlatformStartCharging();
//        platformStartCharging.setTransaction_serial_number("4200002375202409185150427245");
//        platformStartCharging.setCharging_pile_code("3401231001200202");
//        platformStartCharging.setCharging_gun_code("1");
//        platformStartCharging.setCard_number("1833063878153543681");
//        platformStartCharging.setAccount_balance(new BigDecimal(50));
//        String message = iotMessageProduce.sendMessage(platformStartCharging.getCharging_pile_code(), ServiceIdMenu.PLATFORM_START_CHARGING.getKey(), messageUtil.platformStartCharging(platformStartCharging));
        PlatformStartCharging platformStartCharging = new PlatformStartCharging();
        platformStartCharging.setTransaction_serial_number(orderNum);
        platformStartCharging.setCharging_pile_code(deviceId);
        platformStartCharging.setCharging_gun_code("1");
        platformStartCharging.setCard_number(orderId.toString());
        platformStartCharging.setAccount_balance(money);
        String message = iotMessageProduce.sendMessage(platformStartCharging.getCharging_pile_code(), ServiceIdMenu.PLATFORM_START_CHARGING.getKey(), messageUtil.platformStartCharging(platformStartCharging));
        return R.ok(message);
    }
    @ApiOperation(value = "运营平台远程停机",tags = {"硬件接口"})
    @GetMapping(value = "/platformStopCharging")
    public R platformStopCharging(String deviceId) {
        // 运营平台远程停机
//        PlatformStopCharging platformStopCharging = new PlatformStopCharging();
//        platformStopCharging.setCharging_pile_code("3401231001200202");
//        platformStopCharging.setCharging_gun_code("1");
//        String message = iotMessageProduce.sendMessage(platformStopCharging.getCharging_pile_code(), ServiceIdMenu.PLATFORM_STOP_CHARGING.getKey(),messageUtil.platformStopCharging(platformStopCharging));
        PlatformStopCharging platformStopCharging = new PlatformStopCharging();
        platformStopCharging.setCharging_pile_code(deviceId);
        platformStopCharging.setCharging_gun_code("1");
        String message = iotMessageProduce.sendMessage(platformStopCharging.getCharging_pile_code(), ServiceIdMenu.PLATFORM_STOP_CHARGING.getKey(),messageUtil.platformStopCharging(platformStopCharging));
        return R.ok(message);
    }
    @ApiOperation(value = "修改余额",tags = {"硬件接口"})
    @GetMapping(value = "/updateBalance")
    public R updateBalance(String deviceId,Long orderId) {
        // 修改余额
//        UpdateBalance updateBalance = new UpdateBalance();
//        updateBalance.setCharging_pile_code("3401231001200202");
//        updateBalance.setCharging_gun_code("1");
//        updateBalance.setPhysical_card_number("1833063878153543681");
//        updateBalance.setAccount_balance(new BigDecimal(20));
//        String message = iotMessageProduce.sendMessage(updateBalance.getCharging_pile_code(), ServiceIdMenu.UPDATE_BALANCE.getKey(),messageUtil.updateBalance(updateBalance));
        UpdateBalance updateBalance = new UpdateBalance();
        updateBalance.setCharging_pile_code(deviceId);
        updateBalance.setCharging_gun_code("1");
        updateBalance.setPhysical_card_number(orderId.toString());
        updateBalance.setAccount_balance(new BigDecimal(20));
        String message = iotMessageProduce.sendMessage(updateBalance.getCharging_pile_code(), ServiceIdMenu.UPDATE_BALANCE.getKey(),messageUtil.updateBalance(updateBalance));
        return R.ok(message);
    }
    @ApiOperation(value = "充电桩工作参数设置",tags = {"硬件接口"})
    @GetMapping(value = "/workingParameterSetting")
    public R workingParameterSetting(String deviceId) {
        // 充电桩工作参数设置
//        WorkingParameterSetting workingParameterSetting = new WorkingParameterSetting();
//        workingParameterSetting.setCharging_pile_code("3401231001200202");
//        workingParameterSetting.setAllow_work(0);
//        workingParameterSetting.setMaximum_output_power(220);
//        String message = iotMessageProduce.sendMessage(workingParameterSetting.getCharging_pile_code(), ServiceIdMenu.WORKING_PARAMETER_SETTING.getKey(),messageUtil.workingParameterSetting(workingParameterSetting));
        WorkingParameterSetting workingParameterSetting = new WorkingParameterSetting();
        workingParameterSetting.setCharging_pile_code(deviceId);
        workingParameterSetting.setAllow_work(0);
        workingParameterSetting.setMaximum_output_power(220);
        String message = iotMessageProduce.sendMessage(workingParameterSetting.getCharging_pile_code(), ServiceIdMenu.WORKING_PARAMETER_SETTING.getKey(),messageUtil.workingParameterSetting(workingParameterSetting));
        return R.ok(message);
    }
    @ApiOperation(value = "对时设置",tags = {"硬件接口"})
    @GetMapping(value = "/timingSetting")
    public R timingSetting(String deviceId) {
        // 对时设置
//        TimingSetting timingSetting = new TimingSetting();
//        timingSetting.setCharging_pile_code("3401231001200202");
//        System.err.println(CP56Time2aConverter.convertToCP56Time2a(new Date()));
//        timingSetting.setCurrent_time(CP56Time2aConverter.convertToCP56Time2a(new Date()));
//        String message = iotMessageProduce.sendMessage(timingSetting.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING.getKey(),messageUtil.timingSetting(timingSetting));
        TimingSetting timingSetting = new TimingSetting();
        timingSetting.setCharging_pile_code(deviceId);
        timingSetting.setCurrent_time(CP56Time2aConverter.convertToCP56Time2a(new Date()));
        String message = iotMessageProduce.sendMessage(timingSetting.getCharging_pile_code(), ServiceIdMenu.TIMING_SETTING.getKey(),messageUtil.timingSetting(timingSetting));
        return R.ok(message);
    }
    @ApiOperation(value = "计费模型设置",tags = {"硬件接口"})
    @GetMapping(value = "/setupBillingModel")
    public R setupBillingModel(String deviceId) {
        // TODO 罗  计费模型设置
//        SetupBillingModel setupBillingModel = new SetupBillingModel();
//        // 计费模型
//        List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode("3401231001200202").getData();
//        Map<Integer, TAccountingStrategyDetail> strategyPrice = StrategyUtil.getStrategyPrice(accountingStrategyDetails);
//        // 价格设置
//        AcquisitionBillingModeReply acquisitionBillingModeReply = new AcquisitionBillingModeReply();
//        StrategyUtil.setStrategyPrice(strategyPrice,acquisitionBillingModeReply);
//        // 时段设置
//        StrategyUtil.setTime(accountingStrategyDetails,acquisitionBillingModeReply);
//        TAccountingStrategyDetail accountingStrategyDetail = accountingStrategyDetailClient.getDetailByCode("3401231001200202").getData();
//        acquisitionBillingModeReply.setBilling_model_code(accountingStrategyDetail.getId().toString());
//        acquisitionBillingModeReply.setCharging_pile_code("3401231001200202");
//        acquisitionBillingModeReply.setLoss_ratio(BigDecimal.ZERO);
//        BeanUtils.copyProperties(acquisitionBillingModeReply,setupBillingModel);
//        System.err.println(setupBillingModel);
//        String message = iotMessageProduce.sendMessage(setupBillingModel.getCharging_pile_code(), ServiceIdMenu.SETUP_BILLING_MODEL.getKey(),messageUtil.setupBillingModel(setupBillingModel));
        SetupBillingModel setupBillingModel = new SetupBillingModel();
        // 计费模型
        List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode(deviceId).getData();
        Map<Integer, TAccountingStrategyDetail> strategyPrice = StrategyUtil.getStrategyPrice(accountingStrategyDetails);
        // 价格设置
        AcquisitionBillingModeReply acquisitionBillingModeReply = new AcquisitionBillingModeReply();
        StrategyUtil.setStrategyPrice(strategyPrice,acquisitionBillingModeReply);
        // 时段设置
        StrategyUtil.setTime(accountingStrategyDetails,acquisitionBillingModeReply);
        TAccountingStrategyDetail accountingStrategyDetail = accountingStrategyDetailClient.getDetailByCode(deviceId).getData();
        acquisitionBillingModeReply.setBilling_model_code(accountingStrategyDetail.getId().toString());
        acquisitionBillingModeReply.setCharging_pile_code(deviceId);
        acquisitionBillingModeReply.setLoss_ratio(BigDecimal.ZERO);
        BeanUtils.copyProperties(acquisitionBillingModeReply,setupBillingModel);
        System.err.println(setupBillingModel);
        String message = iotMessageProduce.sendMessage(setupBillingModel.getCharging_pile_code(), ServiceIdMenu.SETUP_BILLING_MODEL.getKey(),messageUtil.setupBillingModel(setupBillingModel));
        return R.ok(message);
    }
    @ApiOperation(value = "远程重启",tags = {"硬件接口"})
    @PostMapping(value = "/platformRestart")
    public R platformRestart(String deviceId) {
        // 远程重启
        PlatformRestart platformRestart = new PlatformRestart();
        platformRestart.setCharging_pile_code("3401231001200202");
        platformRestart.setCharging_pile_code(deviceId);
        platformRestart.setOperate(2);
        String message = iotMessageProduce.sendMessage(platformRestart.getCharging_pile_code(), ServiceIdMenu.PLATFORM_RESTART.getKey(),messageUtil.platformRestart(platformRestart));
        return R.ok(message);
ruoyi-service/ruoyi-order/pom.xml
@@ -15,6 +15,17 @@
    </description>
    <dependencies>
        <!--网易邮件-->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>javax.mail-api</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>jakarta.mail</artifactId>
            <version>1.6.5</version>
        </dependency>
        <!-- ruoyi-modules-other-api -->
        <dependency>
            <groupId>com.ruoyi</groupId>
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java
@@ -20,18 +20,22 @@
import com.ruoyi.order.service.TOrderInvoiceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.annotation.Resource;
import javax.mail.*;
import javax.mail.internet.*;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.*;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 * <p>
@@ -72,6 +76,100 @@
        TOrderInvoice orderInvoice = orderInvoiceService.getById(id);
        orderInvoice.setInvoiceUrl(invoiceUrl);
        orderInvoiceService.updateById(orderInvoice);
        // 发送邮箱
        // 收件人电子邮箱,TODO 换成自己的收件箱
        String to = orderInvoice.getMailbox();
        // 发件人电子邮箱,TODO 换成自己的发件箱
        String from = "13281306557@163.com";
        // 指定发送邮件的主机为
        String host = "smtp.163.com";
        // 获取系统属性
        Properties properties = new Properties();
        // 设置邮件服务器
        properties.setProperty("mail.smtp.host", host);
        // 邮件发送协议
        properties.setProperty("mail.transport.protocol", "smtp");
        //是否启用调试模式(启用调试模式可打印客户端与服务器交互过程时一问一答的响应消息)
        properties.setProperty("mail.debug","true");
        properties.setProperty("mail.smtp.auth", "true");
        // 获取默认session对象
        Session session = Session.getDefaultInstance(properties,new Authenticator(){
            @Override
            public PasswordAuthentication getPasswordAuthentication()
            {
                //发件人邮件用户名、授权码,换成自己的发件箱及授权码
                return new PasswordAuthentication("13281306557@163.com", "NUSdxDQqadYvVek2");
            }
        });
        try{
            // 创建默认的 MimeMessage 对象
            MimeMessage message = new MimeMessage(session);
            // Set From,设置发件人
            InternetAddress fromMail = new InternetAddress(from);
            //设置发件人名称,TODO 换成自己的发件箱
            fromMail.setPersonal(MimeUtility.encodeText("明星电力<13281306557@163.com>"));
            message.setFrom(fromMail);
            // Set To: 设置收件人
            InternetAddress toMail = new InternetAddress(to);
            // TODO 换成自己的收件箱
            InternetAddress toMail2 = new InternetAddress(to);
            //发多个邮箱
            Address[] allRecipients = {toMail, toMail2};
            message.setRecipients(Message.RecipientType.TO, allRecipients);
            // Set Subject: 邮件主体
            message.setSubject("明星电力");
            // 设置消息体
            message.setSentDate(new Date());
            // 指定为混合关系
            MimeMultipart msgMultipart = new MimeMultipart("mixed");
            message.setContent(msgMultipart);
            // 邮件信息组装
            //组装的顺序非常重要,一定要先组装文本域,再组装文件
            MimeBodyPart htmlPart = new MimeBodyPart();
            // 组装内容
            htmlPart.setContent("This is message content", "text/html;charset=UTF-8");
            msgMultipart.addBodyPart(htmlPart);
            // 组装附件
            MimeBodyPart filePart = new MimeBodyPart();
            String imageUrl = invoiceUrl;
            try {
                // 下载数据
                URL url = new URL(imageUrl);
                InputStream inputStream = url.openStream();
                byte[] imageBytes = IOUtils.toByteArray(inputStream);
                // 创建临时文件
                File tempFile = File.createTempFile("tempImage", ".png");
                try (FileOutputStream fos = new FileOutputStream(tempFile)) {
                    fos.write(imageBytes);
                }
                // 创建 FileDataSource
                FileDataSource fileDataSource = new FileDataSource(tempFile);
                System.out.println("FileDataSource created: " + fileDataSource.getName());
                // 如果需要,可以使用 DataHandler 进行进一步处理
                DataHandler dh = new DataHandler(fileDataSource);
                // 清理:删除临时文件(如果不再需要)
                tempFile.deleteOnExit(); // 可根据需要保留或删除
                filePart.setDataHandler(dh);
                // 附件区别内嵌内容的一个特点是有文件名,为防止中文乱码要编码
                filePart.setFileName(MimeUtility.encodeText(dh.getName()));
                msgMultipart.addBodyPart(filePart);
                message.saveChanges();
                //发送
                //Transport.send(message, message.getAllRecipients());
                Transport.send(message);
                System.out.println("发送成功");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }catch (MessagingException | UnsupportedEncodingException mex) {
            mex.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return AjaxResult.success();
    }
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TAdvertisingServiceImpl.java
@@ -37,6 +37,11 @@
            } else {
                tAdvertising.setStartState(2);
            }
            if (tAdvertising.getStatus() == 0 ){
                // 未上架
                tAdvertising.setStartState(3);
            }
        }
        pageInfo.setRecords(list);
        return pageInfo;