如何集成邮件、短信、EasyPOI、Echarts

邮箱

         以QQ邮箱为例:(实际以自己的业务需求为准)

> 1.登录QQ邮箱获取到授权码

        设置 - 账户

> 2.在项目中导入email依赖

<!--对邮件的支持jar-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

> 3.在yml中配置邮箱

spring:
  mail:
    host: smtp.qq.com   # 设置邮箱主机(服务商),这里使用QQ邮件服务器
    username: (发件人邮箱)  # 设置用户名 - 发送方
    password: ********   # 设置密码,该处的密码是QQ邮箱开启SMTP的授权码而非QQ密码
    properties:
      mail:
        smtp:
          auth: true  # 必须进行授权认证,它的目的就是阻止他人任意乱发邮件
          starttls: #SMTP加密方式:连接到一个TLS保护连接
            enable: true
            required: true

> 4.邮件工具类

public class EmailUtil {
    private static final String FROM = "*********@qq.com";

    private static final JavaMailSender javaMailSender = SpringUtil.getBean(JavaMailSender.class);

    private EmailUtil() {
    }

    public static MimeMessageHelper getHelper(){
        try {
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
            helper.setFrom(FROM);
            return helper;
        } catch (MessagingException e) {
            throw new GlobalException(GlobalExceptionEnum.ERROR);
        }
    }

    public static void send(MimeMessageHelper helper) {
        javaMailSender.send(helper.getMimeMessage());
    }
}

> 5.发送邮件

// 发邮件
MimeMessageHelper helper = EmailUtil.getHelper();
helper.setTo(employee.getEmail());
helper.setSubject("*******");
helper.setText("<h1>*********************</h1><a href='#'>点击该链接</a>", true);
// 发送邮件
EmailUtil.send(helper);

短信

        以有免费使用次数的中国网建为例:(实际以自己的业务需求为准)

> 1.去中国网建注册帐号

> 2.设置签名

> 3.获取密钥

> 4.拷贝依赖到项目中

<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>

> 5.短信工具类

public class SendMsgUtil {

    public static void sendMsg(String phone,String text){
        try {
            HttpClient client = new HttpClient();
            PostMethod post = new PostMethod("https://utf8api.smschinese.cn/");
            post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");//在头文件中设置转码
            NameValuePair[] data ={ new NameValuePair("Uid", "****"),new NameValuePair("Key", "密钥"),new NameValuePair("smsMob",phone),new NameValuePair("smsText",text)};
            post.setRequestBody(data);

            client.executeMethod(post);
            Header[] headers = post.getResponseHeaders();
            int statusCode = post.getStatusCode();
            System.out.println("statusCode:"+statusCode); //HTTP状态码
            for(Header h : headers){
                System.out.println(h.toString());
            }
            String result = new String(post.getResponseBodyAsString().getBytes("utf-8"));
            System.out.println(result);  //打印返回消息状态
            post.releaseConnection();
        } catch (IOException e) {
            throw new GlobalException(GlobalExceptionEnum.MESSAGE_SEND_ERROR);
        }

    }

}

> 6.使用

// text为信息内容
SendMessageUtil.sendMsg(text);

 EasyPOI

         可以导入导出的东西

                1.word 2.excel 3.ppt 4.pdf 等等

EasyPoi是基于Poi封装的操作文件的框架,操作非常简单,由工具类和注解组成

> 1.导入依赖

<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-base</artifactId>
    <version>4.2.0</version>
</dependency>

<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-web</artifactId>
    <version>4.2.0</version>
</dependency>

<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-annotation</artifactId>
    <version>4.2.0</version>
</dependency>

> 2.工具类

public class ExcelUtils{

    /**
     * 导出工具类
     * @param list
     * @param title
     * @param sheetName
     * @param pojoClass
     * @param fileName
     * @param isCreateHeader
     * @param response
     */
    public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass,
                                   String fileName, boolean isCreateHeader, HttpServletResponse response){
        ExportParams exportParams = new ExportParams(title, sheetName);
        exportParams.setCreateHeadRows(isCreateHeader);
        defaultExport(list, pojoClass, fileName, response, exportParams);
    }

    /**
     * 导出工具类
     * @param list
     * @param title
     * @param sheetName
     * @param pojoClass
     * @param fileName
     * @param response
     */
    public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass,String fileName,
                                   HttpServletResponse response){
        defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName));
    }

    public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response){
        defaultExport(list, fileName, response);
    }

    private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName,
                                      HttpServletResponse response, ExportParams exportParams) {
        Workbook workbook = ExcelExportUtil.exportExcel(exportParams,pojoClass,list);
        if (workbook != null); downLoadExcel(fileName, response, workbook);
    }

    private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {
        try {
            response.setCharacterEncoding("UTF-8");
            response.setHeader("content-Type", "application/vnd.ms-excel");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
            workbook.write(response.getOutputStream());
        } catch (IOException e) {
            //throw new NormalException(e.getMessage());
        }
    }

    private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletResponse response) {
        Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF);
        if (workbook != null);
        downLoadExcel(fileName, response, workbook);
    }

    public static <T> List<T> importExcel(String filePath,Integer titleRows,Integer headerRows, Class<T> pojoClass){
        if (StringUtils.isBlank(filePath)){
            return null;
        }
        ImportParams params = new ImportParams();
        params.setTitleRows(titleRows);
        params.setHeadRows(headerRows);
        List<T> list = null;
        try {
            list = ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);
        }catch (NoSuchElementException e){
            //throw new NormalException("模板不能为空");
        } catch (Exception e) {
            e.printStackTrace();
            //throw new NormalException(e.getMessage());
        } return list;
    }

    public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass){
        if (file == null){ return null;
        }
        ImportParams params = new ImportParams();
        params.setTitleRows(titleRows);
        params.setHeadRows(headerRows);
        List<T> list = null;
        try {
            list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params);
        }catch (NoSuchElementException e){
            // throw new NormalException("excel文件不能为空");
        } catch (Exception e) {
            //throw new NormalException(e.getMessage());
            System.out.println(e.getMessage());
        }
        return list;
    }
}

> 3.编写导入导出接口 以店铺信息为例子

 @GetMapping("/export")
    public void export( HttpServletResponse response){
        List<Shop> shops = shopService.selectAll();
        //调用工具类导出excel
        //(List<?> list, String title, String sheetName, Class<?> pojoClass,String fileName, Boolean isCreateHeader,HttpServletResponse response)
        //导出的数据      标题            sheetName页名称    导出的类型          文件名                    是否创建头                           响应对象
        //文件名如果不写后缀默认是xls,可以写上xlsx就是指定的xlsx类型
        ExcelUtils.exportExcel(shops, "店铺信息", "店铺数据", Shop.class, "shop.xlsx",true, response);
    }
    /**
     * 文件上传 导入
     * @return
     *
     * MultipartFile:复杂文件对象,专门用来接收文件的对象
     * RESTFUL风格要接收复杂文件对象要加上一个注解:@RequestPart
     */
    @PostMapping("/importExcel")
    public void importExcel(@RequestPart("file") MultipartFile file){
        //String file = "F:\\文件名.xls";
        //解析excel,MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass
        //             文件对象             忽略标题行数        护理表头行数             生成的对象类型
        List<Shop> shops = ExcelUtils.importExcel(file,1,1,Shop.class);
        //保存到数据库中[提示:动态sql 批量插入]
        shopService.batchAdd(shops);
    }

> 4.前端准备按钮

<el-form-item>
          <!--v-perm="'menu:save'"-->
          <el-button type="primary" @click="exportShop">导出</el-button>
        </el-form-item>
          <el-form-item>
            <!-- 默认name="file" -->
            <el-upload class="upload-demo"
                       action="http://localhost:8080/shop/importExcel"
                       list-type="text">
              <el-button type="warning">点击导入</el-button>
            </el-upload>
        </el-form-item>

> 5.实体类上加注解  以店铺信息实体类为例

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Shop extends BaseDomain {
    // 店铺名称
    @NotBlank(message = "请输入店铺名称")
    @Excel(name = "店铺名称",orderNum = "1",width = 30)
    private String name;
    // 店铺座机
    @NotBlank(message = "请输入店铺座机号")
    @Pattern(regexp = "[0-9]*", message = "请输入正确的座机号")
    @Excel(name = "店铺电话",orderNum = "2",width = 50)
    private String tel;
    // 入驻时间
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT + 8")
    @Excel(name = "入驻时间",orderNum = "3",width = 50,exportFormat="yyyy-MM-dd")
    private Date registerTime = new Date();
    // 店铺状态
    //店铺状态:待审核【1】 ,审核通过,待激活【2】,激活成功【3】,审核失败->驳回【4】
    @Excel(name = "店铺状态",orderNum = "4",width = 20, replace = {"待审核_1","待激活_2","激活成功_3","驳回_4",})
    private Integer state;
    // 店铺地址
    @Excel(name = "店铺地址",orderNum = "5",width = 50)
    @NotBlank(message = "请输入店铺地址")
    private String address;
    // 店铺logo
    private String logo;
    // 店铺管理员id
    private Long adminId;
    // 管理员对象
    private Employee employee;


}

Echarts

 1.什么是Echarts:

         就是一个根据数据生成图形报表的工具,在企业中通常用来展示数据,便于快速分析以及报告

> 2.使用  以店铺信息为例

        > 1.去echarts官网找到你要使用的图形,此处以柱状图为例 

        > 2.HTML代码和JS代码

drawColumnChart() {
      this.$http.get("/echarts/column").then(res => {
        let columns = res.data;
        this.chartColumn = echarts.init(document.getElementById('chartColumn'));
        //将状态的1234 - 转成待审核,待激活,激活成功,驳回
        for (let i = 0; i < columns.ydata.length; i++) {
          if (columns.ydata[i] == 1) {
            columns.ydata.splice(i, 1, "待审核"); //替换 i表示下标 1 表示从下标往后替换多少个
          }
          if (columns.ydata[i] == 2) {
            columns.ydata.splice(i, 1, "待激活");
          }
          if (columns.ydata[i] == 3) {
            columns.ydata.splice(i, 1, "激活成功");
          }
          if (columns.ydata[i] == 4) {
            columns.ydata.splice(i, 1, "驳回");
          }
        }
        this.chartColumn.setOption({
          title: {text: '店铺状态比例'},
          tooltip: {},
          xAxis: {
            data: columns.ydata
          },
          yAxis: {},
          series: [{
            name: '个数',
            type: 'bar',
            data: columns.xdata
          }]
        });
      }).catch(res => {
      })

    },

> 3.页面加载的时候发送请求,把数据填充到JS中,此处要注意图形的JS代码一定要在获取数据的Axios请求的.then回调中执行

 Controller层:

@GetMapping("/column")
    public ShopColumnVo column() {
        return shopService.getColumn();
    }

  Service层:

 /**
     * 查询店铺柱状图数据
     */
    @Override
    public ShopColumnVo getColumn() {
        // 1.查询柱状图数据
        List<ShopColumnBo> shopColumnBos = shopMapper.getShopColumns();
        // 以店铺状态信息为x轴
        List<Integer> xData = shopColumnBos.stream().map(ShopColumnBo::getState).collect(Collectors.toList());
        // 该状态信息的店铺数量为y轴
        List<Integer> yData = shopColumnBos.stream().map(ShopColumnBo::getCount).collect(Collectors.toList());
        return new ShopColumnVo(xData, yData);
    }

 SQL语句:

<!--查询柱状图所需的数据-->
    <select id="getShopColumns" resultType="com.ljy.org.domain.bo.ShopColumnBo">
        select state,count(state) count
        from t_shop group by state;
    </select>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值