Java项目:springBoot+html智慧水产养殖系统

作者主页:源码空间站2022

 简介:Java领域优质创作者、Java项目、学习资料、技术互助

文末获取源码

智慧水产养殖系统

相关技术

> SpringBoot 及其相关技术栈的入门实践

- SpringBoot 2.0
- SpringSecurity
- MyBatis-Plus 2
- ActiveMQ
- 腾讯云短信和对象存储服务

起步

1. 执行 `sql/breed.sql` 文件初始化数据库
2. 修改 `application.properties` 配置信息:
1. `spring.datasource.username` 数据库用户名
2. `spring.datasource.password` 数据库密码
3. `logging.file` 日志输出路径,检查是否存在
4. `tencent.sms` 腾讯云短信相关配置
5. `cos` 腾讯云对象存储相关配置
6. `spring.activemq.broker-url` activemq 访问地址

3. 搭建 ActiveMQ 环境,[参考文章](https://blog.csdn.net/yuanlaijike/article/details/79950330)。

支持功能

1. 支持`用户名密码`和`短信验证码`两种登录逻辑
2. 支持头像上传,采用腾讯云对象存储。
3. 配合` SpringSecurity` 实现鉴权和角色控制。
4. 对于供应商用户,支持:
1. 对商品进行添加、上架、下架操作,商品描述支持富文本编辑。
2. 对买家订单进行查看。
3. 记录所有的买家客户信息,并统计总消费额。
5. 对于普通用户,支持:
1. 管理自己所有的塘口信息。
2. 将自己所有的设备动态添加到某一塘口上。
3. 设置支持远程开关操作。(使用 `ActiveMQ` 模拟实现)

默认账户

导入SQL后,默认提供以下账户:
- 用户名:wxs,密码:123,角色:供应商  验证码无需填写

- 用户名:jitwxs, 密码:123 角色:普通用户 验证码无需填写

运行截图 

代码相关

登录管理控制器

@RestController
public class LoginController {
    @Autowired
    private SysUserService userService;
    @Autowired
    private SysUserRoleService userRoleService;

    @Value("${session.key.verify.tel}")
    private String SESSION_KEY_VERIFY_TEL;
    @Value("${session.key.verify.code}")
    private String SESSION_KEY_VERIFY_CODE;
    @Value("${session.key.verify.date}")
    private String SESSION_KEY_VERIFY_DATE;
    @Value("${verify.wait-time}")
    private Long VERITY_WAIT_TIME;

    /* ------------------------以下是登陆相关------------------------ */
    /**
     * 登陆错误处理
     * @author jitwxs
     */
    @RequestMapping("/login/error")
    public Msg loginError(HttpServletRequest request) {
        AuthenticationException exception = (AuthenticationException) request.getSession().getAttribute("SPRING_SECURITY_LAST_EXCEPTION");

        return Msg.error(exception.getMessage(), exception.toString());
    }

    /**
     * 发送验证码
     * @author jitwxs
     */
    @GetMapping("/sendSms")
    public Msg sendSms(String tel, HttpServletRequest request) throws Exception {
        if (StringUtils.isBlank(tel)) {
            return Msg.error("号码错误");
        }

        HttpSession session = request.getSession();
        // 如果Session中验证信息非空,判断是否超过间隔时间
        Date lastDate = (Date) session.getAttribute(SESSION_KEY_VERIFY_DATE);
        if (lastDate != null) {
            long waitTime = (System.currentTimeMillis() - lastDate.getTime()) / 1000;
            if (waitTime < VERITY_WAIT_TIME) {
                return Msg.error("间隔时间过短");
            }
        }

        // 如果Session中验证信息为空,或符合间隔时间,则发送验证码
        String verifyCode = RandomUtils.number(6);
        Msg msg = SmsUtils.send(tel, verifyCode, (VERITY_WAIT_TIME / 60) + "");

        // 如果发送成功,将相关信息存入Session
        if (msg.getStatus()) {
            session.setAttribute(SESSION_KEY_VERIFY_TEL, tel);
            session.setAttribute(SESSION_KEY_VERIFY_CODE, verifyCode);
            session.setAttribute(SESSION_KEY_VERIFY_DATE, new Date());
        }

        return msg;
    }

    /**
     * 登陆验证
     * @author jitwxs
     */
    @PostMapping("/loginCheck")
    public Msg login(HttpServletRequest request, String loginName, String password, String code) {
        if (StringUtils.isBlank(loginName) || (StringUtils.isBlank(password) && StringUtils.isBlank(code))) {
            return Msg.error("参数错误");
        }

        // 规定loginName全数字且11位为手机登陆,否则为用户名登陆
        Msg msg = null;
        if (StringUtils.isNumeric(loginName) && loginName.length() == 11) {
            if (StringUtils.isNotBlank(password)) {
                msg = loginByTelAndPassword(loginName, password);
            } else if (StringUtils.isNotBlank(code)) {
                msg = loginByTelAndCode(loginName, code, request);
            }
        } else {
            msg = loginByUsernameAndPassword(loginName, password);
        }

        return msg;
    }

    /**
     * 手机+验证码登陆
     * @author jitwxs
     */
    private Msg loginByTelAndCode(String tel, String code, HttpServletRequest request) {
        HttpSession session = request.getSession();
        String sessionTel = (String) session.getAttribute(SESSION_KEY_VERIFY_TEL);
        String sessionCode = (String) session.getAttribute(SESSION_KEY_VERIFY_CODE);

        // 验证码登陆无需验证用户是否存在
        return SmsUtils.check(sessionTel, sessionCode,tel,code);
    }

    /**
     * 手机+密码登陆
     * @author jitwxs
     */
    private Msg loginByTelAndPassword(String tel, String password) {
        boolean b = userService.checkByTelAndPassword(tel, password);
        return b ? Msg.ok() : Msg.error("账户不存在或密码错误");
    }

    /**
     * 用户名+密码登陆
     * @author jitwxs
     * @since 2018/4/25 15:09
     */
    private Msg loginByUsernameAndPassword(String username, String password) {
        boolean b = userService.checkByUserAndPassword(username, password);
        return b ? Msg.ok() : Msg.error("账户不存在或密码错误");
    }

    /* ------------------------以下是注册相关------------------------ */

    /**
     * 注册验证
     * @author jitwxs
     */
    @PostMapping("/registerCheck")
    public Msg registerCheck(String regName, String verifyCode, HttpServletRequest request) {
        if(StringUtils.isBlank(regName) || StringUtils.isBlank(verifyCode)) {
            return Msg.error("参数错误");
        }

        HttpSession session = request.getSession();
        String code = (String) session.getAttribute("validateCode");
        // 忽略大小写
        code = code.toLowerCase();
        verifyCode = verifyCode.toLowerCase();
        if(StringUtils.isBlank(code) || !code.equals(verifyCode)) {
            return Msg.error("验证码错误");
        }

        if(userService.hasExistByUserName(regName)) {
            return Msg.error("用户名已被注册");
        }

        return Msg.ok();
    }

    /**
     * 注册
     * @author jitwxs
     */
    @PostMapping("/register")
    public Msg register(String username, String password) {
        if(StringUtils.isBlank(username) || StringUtils.isBlank(password)) {
            return Msg.error("参数错误");
        }

        // 再次验证,此处可省略
        if(userService.hasExistByUserName(username)) {
            return Msg.error("用户名已被注册");
        }

        SysUser user = new SysUser();
        user.setUsername(username);
        user.setPassword(PasswordUtils.encryptPassword(password));
        user.setCreateDate(new Date());
        userService.insert(user);

        // 新用户默认权限为普通用户
        SysUserRole userRole = new SysUserRole();
        userRole.setRoleId("ROLE_USER");
        userRole.setUserId(user.getId());
        userRoleService.insert(userRole);

        return Msg.ok();
    }

    /**
     * 判断用户名是否被注册
     * @author jitwxs
     */
    @PostMapping("/checkUsername")
    public Msg checkUsername(String username) {
        boolean b = userService.hasExistByUserName(username);
        return b ? Msg.error("用户名已经被注册") : Msg.ok();
    }

    /**
     * 判断手机号是否被注册
     * @author jitwxs
     * @since 2018/4/25 15:14
     */
    @PostMapping("/checkTel")
    public Msg checkTel(String tel) {
        boolean b = userService.hasExistByTel(tel);
        return b ? Msg.error("手机号已经被注册") : Msg.ok();
    }
}

 如果也想学习本系统,下面领取。回复:025springboot

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
课程介绍 仓库管理系统主要功能有采购入库,采购退货,销售出库,销售退货,仓库盘点,库存报表,Excel导入导出,按钮级权限控制及系统日志等功能,系统采用SpringBoot ,mybatis,easyui,ajax,mssql数据库等技术开发。提供所有源代码下载,系统功能完善,可直接运行。开发环境项目开发语言:SpringBoot ,mybatis,easyui,ajax,mssql数据库项目运行环境:jdk1.8及以上版本,tomcat8.0及以上版本,sql server2005及以上版本项目开发工具: 本项目开发工具是Intellij Idea课程目标掌握SpringBoot等技术,熟悉仓库管理系统主要功能,采购入库,采购退货,销售出库,销售退货,仓库盘点,系统报表,权限控制及日志等50多门JAVA系列全套课程,包括大一新生到大四毕业的所有JAVA系列技术专业课程,项目实战,商业项目等;基础课程:JAVA初级工程师: 1、计算机基础 2、HTML语言基础 3、C语言从入门到精通+贪吃蛇游戏 4、贪吃蛇游戏 5、SQL SERVER数据库基础 6、JAVA从入门到精通+推箱子游戏+QQ即时通讯软件 7、推箱子游戏; 8、仿QQ即时通讯软件;JAVA中级工程师: 9、SQLSERVER数据库高级 10、SQLSERVER从入门到精通(基础+高级) 11、JavaScript从入门到精通, 12、JSP从入门到精通+点餐系统, 13、JSP从入门到精通+在线视频学习教育平台, 14、JSP从入门到精通+大型电商平台; 15、XML从入门到精通, 16、数据结构(JAVA版),JAVA高级工程师: 17、Oracle数据库从入门到精通, 18、ajax+jquery从入门到精通, 19、EasyUI从入门到精通,SSH框架: 20、Struts2从入门到精通课程, 21、Hibernate从入门到精通课程, 22、Spring从入门到精通课程; 23、Echarts从入门到精通, 24、Excel基于POI的导入导出工作流框架: 25、Activiti流程框架从入门到精通 26、JBPM流程框架从入门到精通SSM框架: 27、MyBatis从入门到精通 28、Spring MVC从入门到精通 29、Spring Boot入门到精通 30、Spring Cloud入门到精通面试题: 31、职业生涯规划及面试题集锦商业项目: 32、微信公众号在线支付系统 33、微信生活缴费在线支付系统 34、支付宝生活缴费在线支付系统 35、在线考试系统 36、人脸识别智能考试系统(人工智能AI) 37、仓库管理及质量追溯系统 38、房屋出租管理系统APP(身份证识别) 39、手机订餐管理系统, 40、CRM客户关系管理系统 41、大型房地产CRM销售管理系统 42、CMPP2,CMPP3移动网关系统 43、仓库管理系统SpringBoot) 44、影院在线售票系统(仿猫眼电影)人工智能: 45、人脸识别在线考试系统 46、人脸识别系统项目实战 47、车牌识别停车场管理系统 48、身份证识别系统项目实战 49、营业执照识别系统项目实战 50、名片识别管理系统
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值