目录
- 店铺入驻
- 课堂笔记
- data
- 表结构
- 自定义业务异常
- impl
- 图片上传-fastdfs
- 应用背景
- 概念理论
- 入门案例
- 项目使用
- 1.导包
- 2.添加配置文件
- 3.导入工具类
- 4.写接口将工具类暴露给前端使用
- 5.前端部分
- 审核邮件通知
- 1.导入jar包
- 2.配置
- 3.发送邮件
- 邮件激活登录账号
店铺入驻
到平台来注册店铺信息
课堂笔记
1.为什么要店铺入驻?
节约平台成本
合作共赢、避免了无畏的竞争
2.入驻的方式---到我平台上注册账号
自己来申请
平台拓展市场(平台员工帮它申请)
3.入驻的详细流程
A 在入驻页面填写信息
店铺信息
店铺管理员的账号信息
(支付相关的信息)
B 点击入驻(后端生成店铺信息和管理员信息)
C 有了管理员信息,店铺管理员就可以登录到我后端平台,查看自己待提交的店铺入驻信息
D 店铺管理员提交审核-->平台小妹来审核店铺入驻信息
E 审核通过、或者驳回 发送邮件或者短信通知店铺人员
4.写shop的后端
表&domain -》query -》 mapper (xml) ->service->测试--》controller
5.店铺入驻实现细节
1.在登录页面准备一个店铺入驻按钮,跳转到入驻页面
2.准备入驻页面 拷贝课件(html、css、js);配置路由
3.写后台逻辑-对应入驻页面的入驻按钮
controller
需要接收前端数据
还要封装返回service的报错信息(自定义异常)
service
a 检查注册用户是否已经存在。如果存在,抛出业务异常,提示已经注册,直接登录
b 先保存部门管理员(employee),需要返回主键
c 保存店铺(需要设置店铺管理员),需要返回主键
d 修改员工信息-->设置shopId
mapper.xml
data
shop: {
name: '',
tel: '',
address: '',
logo:'',
username:'',
tel:'',
phone:'',
email:'',
password:'',
comfirmPassword:''
},
表结构
自定义业务异常
//自定义业务异常
public class BusinessException extends RuntimeException {
public BusinessException(String message) {
super(message);
}
public BusinessException() {
super();
}
}
impl
@Override
public void settledIn(Shop shop) {
Employee admin = shop.getAdmin();
//1.先校验有没有被注册过 通过username phone email
Employee employee = employeeMapper.loadByUser(admin.getUsername());
//如果有,提示:你已经入驻过了,请直接登录,{如果忘记密码,请找回密码}
if(employee != null){
throw new BusinessException("你已经入驻过了,请直接登录,{如果忘记密码,请找回密码}");
}
//2.先保存员工数据 保存之后返回自增id
employeeMapper.save(admin);
//3.保存门店数据--》管理员--->返回店铺自增id
shop.setAdmin(admin);//设置店铺管理员
shopMapper.save(shop);
//4.修改管理员门店id
admin.setShop_id(shop.getId());
employeeMapper.update(admin);
}
图片上传-fastdfs
应用背景
概念理论
见文档
入门案例
见文档
项目使用
1.导包
<dependency>
<groupId>cn.bestwu</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27</version>
</dependency>
2.添加配置文件
fdfs_client.conf
tracker_server=115.159.217.249:22122
3.导入工具类
FastDfsUtil,见文档
4.写接口将工具类暴露给前端使用
FastDfsController(上传和删除)
package cn.ming.basic.collection;
import cn.ming.basic.util.AjaxResult;
import cn.ming.basic.util.FastDfsUtil;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
/**
* 上传文件统一接口
* 上传接口
* 删除接口
* 修改 = 删除 +上传
*/
@RestController
@RequestMapping("/fastDfs")
public class FastDfsController {
/**
* 上传接口
* @param file 使用@RequestPart 申明,可以直接完成空校验
*/
@PostMapping
public AjaxResult upload(@RequestPart(value = "file", required = true)
MultipartFile file){
try {
//获取扩展名
String filename = file.getOriginalFilename();
String extName = filename.substring(filename.lastIndexOf(".")+1);
System.out.println(extName);
String path = FastDfsUtil.upload(file.getBytes(), extName);
return AjaxResult.me().setResultObj(path);
} catch (IOException e) {
e.printStackTrace();
return AjaxResult.me().setMessage("上传失败!"+e.getMessage());
}
}
/**
* 删除接口
* @param path 使用@RequestPart 申明,可以直接完成空校验
*/
@DeleteMapping
public AjaxResult del(@RequestParam(required = true,value = "path") String path){
try {
String pathTmp = path.substring(1); // goup1/xxxxx/yyyy
String groupName = pathTmp.substring(0, pathTmp.indexOf("/")); //goup1
String remotePath = pathTmp.substring(pathTmp.indexOf("/")+1);// /xxxxx/yyyy
System.out.println(groupName);
System.out.println(remotePath);
FastDfsUtil.delete(groupName, remotePath);
return AjaxResult.me();
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.me().setMessage("删除失败!"+e.getMessage());
}
}
}
5.前端部分
element copy上传标签,两个方法,一个回调函数
<el-form-item prop="logo" label="店铺Logo">
<el-upload
class="upload-demo"
action="http://localhost:8080/fastDfs"
:on-preview="handlePreview"
:on-remove="handleRemove"
:on-success="handleSuccess"
:file-list="fileList"
list-type="picture">
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
</el-upload>
</el-form-item>
审核邮件通知
1.导入jar包
<!--对邮件的支持jar-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.配置
直接yml里添加配置或者application.Properties配置都可以
# 设置邮箱主机(服务商)
spring.mail.host=smtp.qq.com
# 设置用户名
spring.mail.username=64009120@qq.com
# 设置密码,该处的密码是QQ邮箱开启SMTP的授权码而非QQ密码
spring.mail.password=qzbxiwjfrweecacf
# 必须进行授权认证,它的目的就是阻止他人任意乱发邮件
spring.mail.properties.mail.smtp.auth=true
#SMTP加密方式:连接到一个TLS保护连接
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
# mail在spring层级之下
mail:
host: smtp.qq.com
username: 513585429@qq.com
password: pbnfuokppoxxbijd # 授权码
3.发送邮件
发送简单邮件(不带附件)和复杂邮件(带图片或压缩文件等附件)
@RunWith(SpringRunner.class)
@SpringBootTest(classes = PetApp.class)
public class JavaMailTest {
@Autowired
private JavaMailSender javaMailSender;
@Test
public void testSimple(){
SimpleMailMessage mailMessage = new SimpleMailMessage();
//设置发送人
mailMessage.setFrom("513585429@qq.com");
//邮件主题
mailMessage.setSubject("新型冠状病毒防护指南");
//邮件内容
mailMessage.setText("好好在家待着.....");
//收件人
mailMessage.setTo("2094701189@qq.com");
javaMailSender.send(mailMessage);
}
@Test
public void test2() throws Exception{
//创建复杂邮件对象
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
//发送复杂邮件的工具类
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true,"utf-8");
helper.setFrom("513585429@qq.com");
helper.setSubject("新型冠状病毒防护指南");
http://img30.360buyimg.com/popWaterMark/jfs/t1/67988/7/14094/232759/5db64acfE6ab2b09e/38b5cb3dc38b4b1f.jpg"
helper.setText("<h1>新型冠状病毒防护守则</h1>"+
"<img src='https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0708%2Fe6d4a2a3j00rxh3oa000oc000hs00bvm.jpg&thumbnail=660x2147483647&quality=80&type=jpg' />",true);
//添加附件
helper.addAttachment("100002.jpg",new File("D:\\文件存储\\5.图片\\头像\\100002.jpg"));
// helper.addAttachment("压缩文件", new File("C:\\Users\\hm\\Desktop\\20191010\\2020-02-05-智能商贸-DAY4\\resources\\resources.zip"));
//收件人
helper.setTo("2094701189@qq.com");
javaMailSender.send(mimeMessage);
}
}