From e5e905eb8163d83b92564337e996e9e81000479f Mon Sep 17 00:00:00 2001
From: wangtianba <111@qq.com>
Date: Sun, 18 Sep 2022 17:47:48 +0800
Subject: [PATCH] =?UTF-8?q?=E5=BA=97=E9=93=BA=E5=85=A5=E9=A9=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 10 +++
.../cn/itsource/basic/FileController.java | 72 +++++++++++++++++++
.../cn/itsource/basic/util/EmailService.java | 32 +++++++++
.../org/controller/ShopController.java | 12 ++++
.../java/cn/itsource/org/domain/Shop.java | 8 ++-
.../itsource/org/mapper/EmployeeMapper.java | 20 ++++++
.../cn/itsource/org/mapper/ShopMapper.java | 2 +
.../org/service/IEmployeeService.java | 1 +
.../cn/itsource/org/service/IShopService.java | 2 +
.../org/service/impl/EmployeeServiceImpl.java | 5 ++
.../org/service/impl/ShopServiceImpl.java | 51 +++++++++++++
src/main/resources/application.yml | 11 +++
.../cn/itsource/org/mapper/ShopMapper.xml | 4 +-
src/test/java/cn/itsource/SendEmailTest.java | 38 ++++++++++
14 files changed, 265 insertions(+), 3 deletions(-)
create mode 100644 src/main/java/cn/itsource/basic/FileController.java
create mode 100644 src/main/java/cn/itsource/basic/util/EmailService.java
create mode 100644 src/test/java/cn/itsource/SendEmailTest.java
diff --git a/pom.xml b/pom.xml
index 5eb375c..d4fac28 100644
--- a/pom.xml
+++ b/pom.xml
@@ -96,5 +96,15 @@
hutool-all
5.8.6
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+ 3.15.0
+
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
\ No newline at end of file
diff --git a/src/main/java/cn/itsource/basic/FileController.java b/src/main/java/cn/itsource/basic/FileController.java
new file mode 100644
index 0000000..7b23ee3
--- /dev/null
+++ b/src/main/java/cn/itsource/basic/FileController.java
@@ -0,0 +1,72 @@
+package cn.itsource.basic;
+
+import cn.hutool.core.io.file.FileNameUtil;
+import cn.itsource.basic.util.AjaxResult;
+import com.aliyun.oss.ClientException;
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.OSSException;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+@RestController
+@RequestMapping("/file")
+public class FileController {
+
+ @RequestMapping("/ossUpload")
+ public AjaxResult ossFile(@RequestParam("file")MultipartFile file){
+
+ //1.调用
+ // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
+ String endpoint = "oss-cn-hangzhou.aliyuncs.com";
+ // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
+ String accessKeyId = "LTAI5tDQEeGzN1kiqVnTytfu";
+ String accessKeySecret = "PmlZCZAZXJU6bqIdeJySN9U0lQdnOx";
+ // 填写Bucket名称,例如examplebucket。
+ String bucketName = "java0605";
+ // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
+
+ // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
+
+ //1.随机名字 2.真实后缀
+ String originalFilename = file.getOriginalFilename();//index.png
+ String suffix = FileNameUtil.getSuffix(originalFilename);//png
+
+ //随机的名字和真实的后缀
+ String objectName = System.currentTimeMillis()+"."+suffix;
+
+
+ // 创建OSSClient实例。
+ OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
+
+ try {
+ InputStream inputStream = file.getInputStream();
+ // 创建PutObject请求。
+ ossClient.putObject(bucketName, objectName, inputStream);
+ //https://java0605.oss-cn-hangzhou.aliyuncs.com/1663485640398.png
+ String url = "https://"+bucketName+"."+endpoint+"/"+objectName;
+ return AjaxResult.createSuccess(url);
+ } catch (OSSException oe) {
+
+ } catch (ClientException ce) {
+
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ } finally {
+ if (ossClient != null) {
+ ossClient.shutdown();
+ }
+ }
+ return AjaxResult.createSuccess("");
+ }
+
+
+
+
+}
diff --git a/src/main/java/cn/itsource/basic/util/EmailService.java b/src/main/java/cn/itsource/basic/util/EmailService.java
new file mode 100644
index 0000000..bb2e809
--- /dev/null
+++ b/src/main/java/cn/itsource/basic/util/EmailService.java
@@ -0,0 +1,32 @@
+package cn.itsource.basic.util;
+
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.mail.SimpleMailMessage;
+import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+@Component //交给spring管理
+public class EmailService {
+ @Autowired
+ private JavaMailSender javaMailSender;
+
+ public void sendEMail(String title,String content,String... to) {
+ //核心对象
+ SimpleMailMessage mailMessage = new SimpleMailMessage();
+
+ //封装参数
+ mailMessage.setFrom("772593817@qq.com");
+ mailMessage.setText(content);
+ mailMessage.setSubject(title);
+ mailMessage.setTo(to);
+ //发送邮件
+ javaMailSender.send(mailMessage);
+ }
+}
+
\ No newline at end of file
diff --git a/src/main/java/cn/itsource/org/controller/ShopController.java b/src/main/java/cn/itsource/org/controller/ShopController.java
index 65f5ef9..cb40269 100644
--- a/src/main/java/cn/itsource/org/controller/ShopController.java
+++ b/src/main/java/cn/itsource/org/controller/ShopController.java
@@ -23,6 +23,18 @@ public class ShopController {
private IShopService shopService;
+
+ /**
+ * 店铺激活
+ */
+ @RequestMapping("/jihuo/{uuid}/{id}")
+ public AjaxResult jihuo(@PathVariable("uuid") String uuid,@PathVariable("id") Long id){
+
+ return shopService.active(uuid,id);
+
+ }
+
+
@PostMapping("/settlement")
@ApiOperation(value = "店铺入驻") //swagger API
public AjaxResult settlement(@Valid @RequestBody Shop shop){
diff --git a/src/main/java/cn/itsource/org/domain/Shop.java b/src/main/java/cn/itsource/org/domain/Shop.java
index 1c7d372..8cd5306 100644
--- a/src/main/java/cn/itsource/org/domain/Shop.java
+++ b/src/main/java/cn/itsource/org/domain/Shop.java
@@ -2,12 +2,18 @@ package cn.itsource.org.domain;
import cn.itsource.basic.domain.BaseDomain;
import cn.itsource.basic.util.PetConstant;
+import lombok.AllArgsConstructor;
import lombok.Data;
+import lombok.NoArgsConstructor;
+import javax.persistence.Table;
import java.util.Date;
//店铺
@Data
+@Table(name = "t_shop")
+@AllArgsConstructor
+@NoArgsConstructor
public class Shop extends BaseDomain {
//点名
private String name;
@@ -16,7 +22,7 @@ public class Shop extends BaseDomain {
//注册时间
private Date registerTime = new Date();
//状态
- private int state = PetConstant.Shop.STATE_WAIT_AUTID;
+ private Integer state = PetConstant.Shop.STATE_WAIT_AUTID;
//地址
private String address;
//店招
diff --git a/src/main/java/cn/itsource/org/mapper/EmployeeMapper.java b/src/main/java/cn/itsource/org/mapper/EmployeeMapper.java
index a3096e7..309fcef 100644
--- a/src/main/java/cn/itsource/org/mapper/EmployeeMapper.java
+++ b/src/main/java/cn/itsource/org/mapper/EmployeeMapper.java
@@ -2,6 +2,8 @@ package cn.itsource.org.mapper;
import cn.itsource.basic.basicmapper.BasicMapper;
import cn.itsource.org.domain.Employee;
+import org.apache.ibatis.annotations.Select;
+import tk.mybatis.mapper.entity.Example;
import java.util.List;
@@ -9,4 +11,22 @@ public interface EmployeeMapper extends BasicMapper {
//基础的crud全部由继承得到
List findManagers();
+
+ /*
+ 写法1
+ default Employee checkRepeatEmployee(Employee admin){
+ //拼接查询条件的
+ Example example = new Example(Employee.class);
+ example.or().orEqualTo("username",admin.getUsername());
+ example.or().orEqualTo("email",admin.getEmail());
+ example.or().orEqualTo("phone",admin.getPhone());
+
+ return this.selectOneByExample(example);
+ }*/
+
+ //写法2
+ @Select("select * from t_employee where username=#{username} or email = #{email} or phone = #{phone}")
+ Employee checkRepeatEmployee(Employee admin);
+
+ //写法3 xml里面写
}
diff --git a/src/main/java/cn/itsource/org/mapper/ShopMapper.java b/src/main/java/cn/itsource/org/mapper/ShopMapper.java
index 8f375ac..c038eaf 100644
--- a/src/main/java/cn/itsource/org/mapper/ShopMapper.java
+++ b/src/main/java/cn/itsource/org/mapper/ShopMapper.java
@@ -1,10 +1,12 @@
package cn.itsource.org.mapper;
import cn.itsource.basic.basicmapper.BasicMapper;
+import cn.itsource.org.domain.Employee;
import cn.itsource.org.domain.Shop;
public interface ShopMapper extends BasicMapper {
//基础的crud全部由继承得到
void insertShop(Shop shop);
+
}
diff --git a/src/main/java/cn/itsource/org/service/IEmployeeService.java b/src/main/java/cn/itsource/org/service/IEmployeeService.java
index bfd209b..239c86c 100644
--- a/src/main/java/cn/itsource/org/service/IEmployeeService.java
+++ b/src/main/java/cn/itsource/org/service/IEmployeeService.java
@@ -18,4 +18,5 @@ public interface IEmployeeService extends IBaseService {
List findManagers();
+ Employee checkRepeatEmployee(Employee admin);
}
diff --git a/src/main/java/cn/itsource/org/service/IShopService.java b/src/main/java/cn/itsource/org/service/IShopService.java
index 488d8d9..232c2b2 100644
--- a/src/main/java/cn/itsource/org/service/IShopService.java
+++ b/src/main/java/cn/itsource/org/service/IShopService.java
@@ -9,4 +9,6 @@ public interface IShopService extends IBaseService {
AjaxResult settlement(Shop shop);
+
+ AjaxResult active(String uuid,Long id);
}
diff --git a/src/main/java/cn/itsource/org/service/impl/EmployeeServiceImpl.java b/src/main/java/cn/itsource/org/service/impl/EmployeeServiceImpl.java
index c403768..564b21d 100644
--- a/src/main/java/cn/itsource/org/service/impl/EmployeeServiceImpl.java
+++ b/src/main/java/cn/itsource/org/service/impl/EmployeeServiceImpl.java
@@ -27,4 +27,9 @@ public class EmployeeServiceImpl extends BaseServiceImpl
return employeeMapper.findManagers();
}
+ @Override
+ public Employee checkRepeatEmployee(Employee admin) {
+ return employeeMapper.checkRepeatEmployee(admin);
+ }
+
}
diff --git a/src/main/java/cn/itsource/org/service/impl/ShopServiceImpl.java b/src/main/java/cn/itsource/org/service/impl/ShopServiceImpl.java
index 37b5d1a..52f2f42 100644
--- a/src/main/java/cn/itsource/org/service/impl/ShopServiceImpl.java
+++ b/src/main/java/cn/itsource/org/service/impl/ShopServiceImpl.java
@@ -5,6 +5,9 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.MD5;
import cn.itsource.basic.service.impl.BaseServiceImpl;
import cn.itsource.basic.util.AjaxResult;
+import cn.itsource.basic.util.EmailService;
+import cn.itsource.basic.util.PetConstant;
+import cn.itsource.basic.util.RedisService;
import cn.itsource.org.domain.Employee;
import cn.itsource.org.domain.Shop;
import cn.itsource.org.mapper.EmployeeMapper;
@@ -16,11 +19,13 @@ import cn.itsource.org.service.IShopService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import tk.mybatis.mapper.entity.Example;
import java.util.List;
@Service //spring管理
public class ShopServiceImpl extends BaseServiceImpl implements IShopService {
+
//基础的curd全部通过继承得到
//因为事务都是在service层操作的
@@ -28,6 +33,37 @@ public class ShopServiceImpl extends BaseServiceImpl implements
private IEmployeeService employeeService;
@Autowired
private ShopMapper shopMapper;
+ @Autowired
+ private EmailService emailService;
+ @Autowired
+ private RedisService redisService;
+
+
+ @Override
+ public AjaxResult active(String uuid,Long id) {
+ //0.如果已经激活过了,告诉他不用再激活了
+ Shop shop1 = shopMapper.selectByPrimaryKey(id);
+ if (shop1 != null && shop1.getState() == PetConstant.Shop.STATE_ACTIVE_SUCCESS){
+ throw new RuntimeException("不要重复激活");
+ }
+
+
+ //1.从redis里面通过uuid获取店铺id
+ String shopId = redisService.getKeyStringValue(uuid);
+ if (StrUtil.isBlank(shopId)){
+ throw new RuntimeException("激活时间已经过了,请联系管理员");
+ }
+
+ //2.激活
+ Shop shop = new Shop();
+ shop.setId(Long.valueOf(shopId));
+ shop.setState(PetConstant.Shop.STATE_ACTIVE_SUCCESS);
+ //修改状态
+ shopMapper.updateByPrimaryKeySelective(shop);
+
+ return AjaxResult.createSuccess("恭喜你,激活成功,可以登录系统了");
+ }
+
/**
* 店铺入驻
@@ -44,6 +80,12 @@ public class ShopServiceImpl extends BaseServiceImpl implements
if (!StrUtil.equals(admin.getPassword(),admin.getComfirmPassword())){
throw new RuntimeException("两次密码不一致");
}
+ //1.1判断用户名,手机号,邮箱全部都不能重复
+ Employee employee = employeeService.checkRepeatEmployee(admin);
+ if (employee != null){
+ throw new RuntimeException("请检查用户名,手机号,邮箱有可能有一个重复了");
+ }
+
//uuid生成盐值
/*String salt = IdUtil.fastSimpleUUID();
String pwd = MD5.create().setSalt(salt.getBytes()).digestHex(admin.getPassword());
@@ -65,10 +107,19 @@ public class ShopServiceImpl extends BaseServiceImpl implements
admin.setShopId(shop.getId());
employeeService.update(admin);
+
+ String uuid = IdUtil.fastSimpleUUID();
+ //5.发送邮件
+ emailService.sendEMail("宠物乐园激活",
+ "Congratulations,审核通过,请点击链接激活,http://localhost/shop/jihuo/"+uuid+"/"+shop.getId(),admin.getEmail());
+ //5.1redis存数据 key:uuid value:店铺id
+ redisService.setStringKeyAndValue(uuid,shop.getId(),1);
+
//直接返回成功,如果异常会走全局异常
return AjaxResult.createSuccess();
}
+
public static void main(String[] args) {
String s = MD5.create().setSalt("sdlkfjsdilkjfsdlk".getBytes()).digestHex("123456");
String s1 = MD5.create().setSalt("35e5490d775848ce9487d97a6e7af1da".getBytes()).digestHex("123");
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 8107b5b..9ecde64 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,6 +1,17 @@
server:
port: 80
spring:
+ mail:
+ host: smtp.qq.com # 设置邮箱主机(服务商),这里使用QQ邮件服务器
+ username: 772593817@qq.com # 设置用户名
+ password: nvzbbdzzvtthbfie # 设置密码,该处的密码是QQ邮箱开启SMTP的授权码而非QQ密码
+ properties:
+ mail:
+ smtp:
+ auth: true # 必须进行授权认证,它的目的就是阻止他人任意乱发邮件
+ starttls: #SMTP加密方式:连接到一个TLS保护连接
+ enable: true
+ required: true
redis:
host: localhost #连接redis的主机ip
port: 6379
diff --git a/src/main/resources/cn/itsource/org/mapper/ShopMapper.xml b/src/main/resources/cn/itsource/org/mapper/ShopMapper.xml
index 014e33a..9273265 100644
--- a/src/main/resources/cn/itsource/org/mapper/ShopMapper.xml
+++ b/src/main/resources/cn/itsource/org/mapper/ShopMapper.xml
@@ -5,8 +5,8 @@
- insert into t_shop (name, tel, register_time, address, logo, admin_id)
- values (#{name}, #{tel}, #{registerTime}, #{address}, #{logo}, #{admin.id})
+ insert into t_shop (name, tel, register_time, address,state, logo, admin_id)
+ values (#{name}, #{tel}, #{registerTime}, #{address},#{state}, #{logo}, #{admin.id})
diff --git a/src/test/java/cn/itsource/SendEmailTest.java b/src/test/java/cn/itsource/SendEmailTest.java
new file mode 100644
index 0000000..c53ed66
--- /dev/null
+++ b/src/test/java/cn/itsource/SendEmailTest.java
@@ -0,0 +1,38 @@
+package cn.itsource;
+
+import cn.itsource.basic.util.EmailService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.mail.SimpleMailMessage;
+import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = PetHomeApp.class)
+public class SendEmailTest {
+
+
+ @Autowired
+ private JavaMailSender javaMailSender;
+
+ @Autowired
+ private EmailService emailService;
+
+ @Test
+ public void testSendEMail() throws InterruptedException {
+
+ /* SimpleMailMessage mailMessage = new SimpleMailMessage();
+
+ mailMessage.setFrom("772593817@qq.com");
+ mailMessage.setText("今天又是充8w的一天");
+ mailMessage.setSubject("赛利亚");
+ mailMessage.setTo("772593817@qq.com");
+
+ javaMailSender.send(mailMessage);
+*/
+ //测试服务
+ emailService.sendEMail("充80w","冲再多都只是改了腾讯数据库","772593817@qq.com");
+ }
+}
--
Gitee