Advertisement

基于SpringBoot的社区物资交易互助平台

阅读量:

该项目基于SpringBoot开发了一个社区物资交易互助平台,默认分为管理员和用户两个角色。系统支持远程部署,并指出当前系统功能基本满足需求但存在页面多样性不足、安全性能有待优化等问题,并计划从界面设计、安全性优化及性能提升等方面进行改进。获取源码方式为扫码关注作者主页并联系指定邮箱即可获取完整源码包及相关文档资料。

文章目录

  • 项目介绍
  • 主要功能截图:
  • 部分代码展示
  • 设计总结
  • 项目获取方式

关注我,都给你

关注我,都给你

项目介绍

以Spring Boot为基础构建的社区物资交易互助平台是一个Java项目。

Eclipse与IDEA均能够正常运行。

推荐的环境配置包括Eclipse或IDEA配合 JDK 1.8及MySQL数据库使用Maven进行开发。

主要功能截图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

部分代码展示

该系统的核心业务逻辑由ClockInNewController负责管理。该控制器接受并处理登录用户的各项数据查询请求。具体操作包括:首先解析Cookie中的各项信息参数;然后依据这些参数在数据库中进行相关数据检索。

复制代码
    @RequestMapping("/queryClockInAll2")
    public JsonObject queryClockInAll2(Clockinnew clockinnew, HttpServletRequest request,
                                       @RequestParam(defaultValue = "1") Integer pageNum,
                                       @RequestParam(defaultValue = "15") Integer pageSize
                                      ){
        //获取当前得登录用户
        Userinfo userinfo= (Userinfo) request.getSession().getAttribute("user");
        String username=userinfo.getUsername();
    
        //根据username获取登录账号得业主id
        Owner owner=ownerService.queryOwnerByName(username);
        clockinnew.setOwnerId(owner.getId());
        PageInfo<Clockinnew> pageInfo= clockinnewService.queryClockInAll(pageNum,pageSize,clockinnew);
        return new JsonObject(0,"ok",pageInfo.getTotal(),pageInfo.getList());
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手

核心接口,封装具体方法,方便对象的注入

复制代码
    package com.yx.service;
    
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.baomidou.mybatisplus.extension.service.IService;
    import com.github.pagehelper.PageInfo;
    import com.yx.model.Clockinnew;
    
    import java.util.Date;
    
    /** * <p>
     *  服务类
     * </p>
     * * @author yx
     * @since 2021-04-27
     */
    public interface IClockInNewService extends IService<Clockinnew> {
    
    PageInfo<Clockinnew> queryClockInAll(int pageNum, int pageSize, Clockinnew clockinnew);
    
    /** * 查询分页数据
     * * @param page      页码
     * @param pageCount 每页条数
     * @return IPage<Clockinnew>
     */
    IPage<Clockinnew> findListByPage(Integer page, Integer pageCount);
    
    /** * 添加
     * * @param clockinnew 
     * @return int
     */
    int add(Clockinnew clockinnew);
    
    /** * 删除
     * * @param id 主键
     * @return int
     */
    int delete(Long id);
    
    /** * 修改
     * * @param clockinnew 
     * @return int
     */
    int updateData(Clockinnew clockinnew);
    
    /** * id查询数据
     * * @param id id
     * @return Clockinnew
     */
    Clockinnew findById(Long id);
    
    Date queryCountByOwnId(Integer ownerId);
    }
    
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手

本节将就登录接口进行详细讲解。从controller层开始,我们将重点介绍其核心功能实现细节。涉及登录功能时,离不开session机制,需要从session中获取用户信息并判断其是否处于有效登录状态。为了确保安全性,我们采用md5算法对密码进行加密处理,并将固定盐值存储在数据库中,从而有效提升系统安全性。

复制代码
    @RequestMapping(value="/login",method= RequestMethod.POST)
    public String login(Model model, String name, String password){//throws ParseException
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken(name,password);
        try {
            subject.login(token);
            User us = userService.getByName(name);
            String lastLoginTime = "";
            if(us!=null){
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                //上次时间
                Date time = us.getLasttime();
                lastLoginTime = sdf.format(time);
                //新时间
                String format = sdf.format(new Date());
                //string转date  不处理时间格式会不理想
                ParsePosition pos = new ParsePosition(0);
                Date strtodate = sdf.parse(format, pos);
                us.setLasttime(strtodate);
                userService.update(us);
            }
            if (us.getStatus()==1){
                Session session=subject.getSession();
                session.setAttribute("subject", subject);
                session.setAttribute("lastLoginTime",lastLoginTime);
                return "redirect:index";
            }else {
                model.addAttribute("error", "账号已被停用!");
                return "/login";
            }
    
        } catch (AuthenticationException e) {
            model.addAttribute("error", "验证失败!");
            return "/login";
        }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手

接下来是impl实现类,在获取到相关参数后会依据获取的参数执行条件查询操作。通常不会将具体的查询语句直接注入到impl类中,而是会将这些逻辑预先定义好后保存于封装好的mapper对象的XML配置文件中,随后由系统自动生成对应的SQL语句块。其中真正执行查询操作的是嵌入式SQL语句块,而这些逻辑会在impl实现类中通过动态加载或静态绑定的方式完成注入过程。

复制代码
    @Override
    public User getByName(String name) {
        UserExample example = new UserExample();
        example.createCriteria().andNameEqualTo(name);
        List<User> users = userMapper.selectByExample(example);
        if (users.isEmpty()) return null;
        return users.get(0);
    }
    
    
      
      
      
      
      
      
      
      
    
    AI助手

UserMapper.java

复制代码
    package com.byh.biyesheji.dao;
    
    import com.byh.biyesheji.pojo.User;
    import com.byh.biyesheji.pojo.UserExample;
    
    import java.util.List;
    
    public interface UserMapper extends SysDao<User>{
    
    List<User> selectByExample(UserExample example);
    
    /** * 停用管理员账号
     * @param name
     */
    void enableStatus(String name);
    
    /** * 开启管理员账号
     * @param name
     */
    void stopStatus(String name);
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手

UserMapper.xml

复制代码
    <select id="selectByExample" resultMap="BaseResultMap" parameterType="com.byh.biyesheji.pojo.UserExample" >
    select
    <if test="distinct" >
      distinct
    </if>
    
    <include refid="Base_Column_List" />
    from user
    <if test="_parameter != null" >
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null" >
      order by ${orderByClause}
    </if>
      </select>
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手

设计总结

在参与校园点餐系统开发的过程中,我深刻认识到编写一个程序软件所经历的具体流程:当决定开发一个程序时,在开发期间必须先进行全面的功能需求调研(即对系统功能进行全面的需求调研),随后制定程序功能框架设计方案(即完成程序功能框架设计方案制定),接着是数据库实体关系图及数据表结构设计(即完成数据库实体与数据表设计阶段),随后是界面上的功能模块详细设计(即完成程序软件的功能详细界面实现阶段),最后是系统功能模块的功能测试方案制定(即完成程序的功能测试阶段)。尽管在整个项目实施过程中遇到了诸多技术难题和挑战性问题(即遇到了大大小小的困难),但在团队反复深入分析和完善优化过程中(即通过反复的分析、深入的思考和完善优化过程),我们借助多种相关文献资料所提供的方法论与解决思路(即借助各种相关文献资料提供的方法与解决思路),成功克服了所有面临的问题(即成功解决了所有面临的问题)。最终使所开发出的系统得以顺利运行(即最终使所开发出的系统得以正常运行)。尽管从功能性层面基本满足了用户的基本使用需求(即使 functionalities are basic sufficient to meet user operational needs),但该程序软件仍存在诸多不足之处(虽然该程序软件仍存在诸多不足之处)。因此,在下一个阶段需要重点改进以下几个方面:

  1. 在确保操作界面符合用户的基本使用需求的前提下,在界面多样化设计方面需要引入更多创新性的设计元素以提升用户体验。

(2)为了提升整体系统安全水平,程序软件的安全性工作不容忽视。具体包括:程序退出过程中的安全性、多线程处理能力以及相关的同步机制都需要进行相应的安全加固措施。
通过这些改进措施的应用,在实际运行中能够更好地模拟真实应用场景下的工作状态。

(3)为了优化程序的数据结构和代码逻辑,在确保程序运行稳定性的同时提升处理事务的速度,并减少处理时间的同时提高事务处理效率。此外还需要降低服务器资源占用比例以实现更高效的资源利用。平台开发不仅是一次专业技能展示的机会更是培养独立解决问题能力的过程通过理论知识与实践结合掌握系统设计方法最终实现系统更加人性化的目标并在设计环节追求更加严谨性。

获取源码联系:
大家点赞、收藏、关注、评论啦

项目获取方式

项目下载地址
请订阅精彩专栏:关注下方链接
Java精品项目100套

全部评论 (0)

还没有任何评论哟~