当前位置: 首页 > news >正文

网站排名方案建设银行官方网站 诚聘英才

网站排名方案,建设银行官方网站 诚聘英才,服务器上做网站,旅游网站开发参考文献目录 1.生成Excel表格 1.依赖设置 2.代码#xff1a; 2.邮件发送 1.邮件发送功能实现-带附件 2.踩过的坑 1.附件名中文乱码问题 3.参考文章#xff1a; 需求描述#xff1a;项目审批完毕后#xff0c;需要发送邮件通知相关人员#xff0c;并且要附带数据库表生成的…目录 1.生成Excel表格 1.依赖设置 2.代码 2.邮件发送 1.邮件发送功能实现-带附件 2.踩过的坑 1.附件名中文乱码问题 3.参考文章 需求描述项目审批完毕后需要发送邮件通知相关人员并且要附带数据库表生成的Excel表格这就要求不光是邮件发送功能还要临时生成Excel表格做为附件 1.生成Excel表格 使用huTool工具包的Excel表格生成功能 1.依赖设置 dependency     groupIdcn.hutool/groupId     artifactIdhutool-all/artifactId     version5.7.22/version /dependency dependency     groupIdorg.apache.poi/groupId     artifactIdpoi-ooxml/artifactId     version5.2.2/version /dependency Hutool-all中包含了Hutool的所有工具类由于需要生成Excel文件需要依赖poi 2.代码 Overridepublic void publish(xxxxxxPublishVo publishVo) {..................................................../*** 生成Excel表格*///在内存操作写到输出流中ExcelWriter writer ExcelUtil.getWriter(true);//自定义标题别名writer.addHeaderAlias(projectCode, xx编号);writer.addHeaderAlias(projectName, xx名称);writer.addHeaderAlias(targetType, xx类型);writer.addHeaderAlias(targetName, xx名称);writer.addHeaderAlias(targetForMp, xxxx目标);writer.addHeaderAlias(symbols, xx限制符);//获取数据QpmxxxxTargetMg query new QpmxxxxTargetMg();query.setProjectCode(publishVo.getProjectCode());ListxxxxxxListDTO data selectxxxxxxByCondition(query);//整理数据以便于生成Excel表格ListObject dataNew new ArrayList();SetString stageCollectSet new HashSet();for (xxxxxxListDTO target: data){ListxxxxxxTargetMgStage stageList target.getxxxxxxStageList();MapString, Object addProperties new HashMap();for (xxxxxxMgStage stage: stageList){if (!stageCollectSet.contains(stage)){stageCollectSet.add(stage.getStage());//给Excel增加列writer.addHeaderAlias(stage.getStage(), stage.getStage() 目标);}//为对象动态增加属性addProperties.put(stage.getStage(), stage.getStageTarget());}//生成新的包含了新增字段的对象Object targetNew ReflectUtil.getTarget(target, addProperties);dataNew.add(targetNew);}//只保留别名的数据writer.setOnlyAlias(true);writer.write(dataNew,true);ByteArrayOutputStream outputStream new ByteArrayOutputStream();// excel写入到输出流writer.flush(outputStream,true);........................................................................... 上述代码中调用了工具类ReflectUtil给对象动态增加属性。由于数据中有子类需要获取到子类中的某个字段并生成Excel表格所以Excel表格构造就需要对数据对象进行改造简单来说就是需要给对象动态增加新的属性(成员对象的属性)如下所示示例 把studentList里面的关键属性数据新增给Test类 示例不是很合适凑合着用吧 class Test {     private String class;     .............................................     private ListStudent studentList; } 工具类ReflectUtil用于给对象动态增加新的属性 import com.google.common.collect.Maps; import net.sf.cglib.beans.BeanGenerator; import net.sf.cglib.beans.BeanMap; import org.apache.commons.beanutils.PropertyUtilsBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map;/*** 为实体类动态增加属性用于生成Excel表格时的特殊情况例如表格中的列需要动态增加*/ public class ReflectUtil {static Logger logger LoggerFactory.getLogger(ReflectUtil.class);public static Object getTarget(Object dest, MapString, Object addProperties) {// get property mapPropertyUtilsBean propertyUtilsBean new PropertyUtilsBean();PropertyDescriptor[] descriptors propertyUtilsBean.getPropertyDescriptors(dest);MapString, Class propertyMap Maps.newHashMap();for (PropertyDescriptor d : descriptors) {if (!class.equalsIgnoreCase(d.getName())) {propertyMap.put(d.getName(), d.getPropertyType());}}// add extra propertiesfor (Map.EntryString, Object entry : addProperties.entrySet()) {propertyMap.put(entry.getKey(), entry.getValue().getClass());} // addProperties.forEach((k, v) - propertyMap.put(k, v.getClass()));// new dynamic beanDynamicBean dynamicBean new DynamicBean(dest.getClass(), propertyMap);// add old valuefor (Map.EntryString, Class entry : propertyMap.entrySet()) {try {// filter extra propertiesif (!addProperties.containsKey(entry.getKey())) {dynamicBean.setValue(entry.getKey(), propertyUtilsBean.getNestedProperty(dest, entry.getKey()));}} catch (Exception e) {logger.error(e.getMessage(), e);}};// add extra valuefor (Map.EntryString, Object entry : addProperties.entrySet()) {try {dynamicBean.setValue(entry.getKey(), entry.getValue());} catch (Exception e) {logger.error(e.getMessage(), e);}};Object target dynamicBean.beanMap;return target;}public static class DynamicBean {/*** 目标对象*/private Object target;/*** 属性集合*/private BeanMap beanMap;public DynamicBean(Class superclass, MapString, Class propertyMap) {this.target generateBean(superclass, propertyMap);this.beanMap BeanMap.create(this.target);}/*** bean 添加属性和值** param property* param value*/public void setValue(String property, Object value) {beanMap.put(property, value);}/*** 获取属性值** param property* return*/public Object getValue(String property) {return beanMap.get(property);}/*** 获取对象** return*/public Object getTarget() {return this.target;}/*** 根据属性生成对象** param superclass* param propertyMap* return*/private Object generateBean(Class superclass, MapString, Class propertyMap) {BeanGenerator generator new BeanGenerator();if (null ! superclass) {generator.setSuperclass(superclass);}BeanGenerator.addProperties(generator, propertyMap);return generator.create();}} } 至此我们就生成了Excel表格并且把数据写入到了输出流中。 下面我们需要从输出流中拿到Excel表格数据并做为邮件的附件发送出去。 2.邮件发送 1.邮件发送功能实现-带附件 Spring Email 抽象的核心是 JavaMailSender接口通过实现JavaMailSender接口把 Email 发送给邮件服务器由邮件服务器实现邮件发送的功能。 Spring 自带了一个 JavaMailSender的实现 JavaMailSenderImpl。SpringBoot 应用在发送 Email 之前我们需要在配置文件中对JavaMailSender进行属性配置这样就可以利用Springboot的自动装配机制将 JavaMailSenderImpl 装配为 Spring容器的一个 bean。 spring.mail.host: xxxxxxx.com # 设置端口 spring.mail.port: 25 # 设置用户名 spring.mail.username: xxxxxxxxxx # 设置密码该处的密码是QQ邮箱开启SMTP的授权码而非QQ密码 spring.mail.password: xxxxxxxxx # 设置是否需要认证如果为true,那么用户名和密码就必须的 # 如果设置false可以不设置用户名和密码当然也得看你的对接的平台是否支持无密码进行访问的。 spring.mail.properties.mail.smtp.auth: false # STARTTLS[1]  是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接TLS或SSL而不是另外使用一个端口作加密通信。 spring.mail.properties.mail.smtp.starttls.enable: true spring.mail.properties.mail.smtp.starttls.required: fasle spring.mail.properties.mail.imap.starttls.socketFactory.fallback: false spring.mail.properties.mail.smtp.starttls.socketFactory.class: com.ey.model.MailCommand 继上面完整的Excel生成代码现在继续写邮件发送代码 Autowiredprivate JavaMailSender springMailSender; Overridepublic void publish(xxxxxxPublishVo publishVo) {//........这里不再复制上面的代码只从Excel表格写入输出流开始.........// excel写入输出流writer.flush(outputStream,true);//邮件附件名称String fileName String.format(制定xx目标-%s.xlsx,UUID.randomUUID());//这个地方无需再配置springboot自动装配配置信息在nacos配置中心 // springMailSender.setDefaultEncoding(UTF-8); // springMailSender.setHost(mx.goertek.com); // springMailSender.setPort(25); // springMailSender.setProtocol(JavaMailSenderImpl.DEFAULT_PROTOCOL); // springMailSender.setUsername(tims.sysgoertek.com); // springMailSender.setPassword(Khkd0804); // Properties p new Properties(); // p.setProperty(mail.smtp.timeout, 25000); // p.setProperty(mail.smtp.auth, true); // p.setProperty(mail.smtp.socketFactory.class, javax.net.ssl.SSLSocketFactory); // springMailSender.setJavaMailProperties(p);MimeMessage mimeMessage springMailSender.createMimeMessage();System.getProperties().setProperty(mail.mime.splitlongparameters, false);MimeMessageHelper messageHelper null;try {messageHelper new MimeMessageHelper(mimeMessage, true, UTF-8);} catch (MessagingException e) {throw new RuntimeException(e);}try {LoginUser userInfo UserUtil.getCurrentUser(); // String currentUserEmail userInfo.getEmaila(); // messageHelper.setFrom(currentUserEmail);messageHelper.setFrom(mailUserName);//设置收件人String[] emailArr publishVo.getEmails().replaceAll(\\s, ).split(,);messageHelper.setTo(emailArr);//设置抄送人if (!StringUtils.isBlank(publishVo.getCcEmails())){String[] ccEmailArr publishVo.getCcEmails().replaceAll(\\s, ).split(,);messageHelper.setCc(ccEmailArr);}messageHelper.setSubject(项目- publishVo.getProjectName().concat(: 制定品质目标完毕));messageHelper.setText(项目- publishVo.getProjectName().concat(: 制定品质目标完毕));try {//messageHelper.addInline(doge.gif, new File(xx/xx/doge.gif));messageHelper.addAttachment(MimeUtility.encodeWord(fileName,utf-8,B), new ByteArrayResource(outputStream.toByteArray()));} catch (UnsupportedEncodingException e) {throw new RuntimeException(e);}springMailSender.send(mimeMessage);} catch (MessagingException e) {throw new RuntimeException(e);} 2.踩过的坑 上述邮件发送功能实现过程中踩过的坑 1.附件名中文乱码问题 附件的名字是中文发送成功后在邮件中的附件名字中文乱码怎样解决这个问题 1. 设置系统值 System.setProperty(mail.mime.splitlongparameters, false); 2. 这里在创建对象的时候定义编码格式(utf-8) MimeMessageHelper messageHelper new MimeMessageHelper(mes, true, utf-8); 3. 其次在添加附件的时候附件名是需要定义编码 messageHelper.addAttachment(MimeUtility.encodeWord(附件名,utf-8,B), 附件输入流)); 3.参考文章 使用hutool工具进行导入导出excel表格_hutool excel-CSDN博客 springboot实现excel生成并且通过邮件发送 - 哔哩哔哩
http://wiki.neutronadmin.com/news/36045/

相关文章:

  • 自适应手机网站模板我想做网站
  • 上海专业建站公工程招标
  • 济南做网站优化的公司erp外贸管理系统
  • 网站优化包括哪些做全景图的网站
  • 网站规划建设实训报告个人网站有什么内容
  • 网站网页设计成全视频免费观看在线看 综合 笔记 视频
  • 团购网站功能模块做代理
  • 触动网站建设wordpress检测登录ip
  • 做单页网站需要做什么开店怎么做会员系统
  • 亚马逊国际站官网电子商务平台怎么赚钱
  • 网站建设参考文献外文做一件代发哪个网站好
  • 公司网站建设多少钱网站开发方面的文献
  • 购物网站建设多少钱c 可以做网站
  • 正规设计兼职网站有哪些360官方下载官网
  • 威海网站建设公司排名给排水管道水压试验方案久久建筑网
  • .net网站开发教程网站开发一般用什么软件有哪些
  • 360上做网站杭州app建设
  • 个人网站建设存在哪些问题网站建设中如何设置外链接
  • 基于cms的企业网站建设最专业的企业营销型网站建设价格
  • 做网站分几个步骤成都网站建设备案
  • 做网站模板和服务器是一样的吗邢台建网站的公司
  • 网站查询备案信息济南的网站制作公司
  • 网站建设 招聘需求精品网站建设平台
  • 郑州网站app建设邮件服务商
  • 城市网站改版建设ajax做网站
  • 宣传电脑的网站开发企业vi设计一整套
  • 网站之前没备案中国城乡建设部网站证书查询
  • 石景山网站建设推广WordPress多页悬浮菜单
  • 有哪些专业做饰品的网站appapp 制作公司
  • 网站优化技术北京网站设计浩森宇特