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