基于SSM和微信小程序的校园二手商城源码

19年毕业时做的一个基于SSM框架+微信小程序的校园二手商城系统,工作以后一直没抽出时间来整理一下,现在有时间了,专门写一篇文章汇总整理一下。

首先介绍一下用到的技术:

前台:微信小程序

后台:采用Spring+SpringMVC+Mybatis框架进行开发,使用Spring的拦截器功能进行未登录拦截,或其他信息拦截,极大提高了系统被攻击的危险系数,保证了系统的安全性。
开发工具:Eclipse
数据库:采用MySQL,只有超级管理员以及指定了操作权限的用户才有权限进行表的数据操作,保证了数据存储的安全性。

服务器:该系统部署在腾讯云服务器上,由腾讯云提供的服务器和数据库环境可以增强系统的稳定性。服务器采用Tomcat9,通过配置部署描述器(web.xml)来对某些内容进行访问控制,只有通过身份验证的用户才能查看想要访问的servlet资源。

正式演示我是用的腾讯云试用30天,前期开发的话使用本地Tomcat服务器完全够用。

介绍一下核心功能:

我给我的校园二手商城系统起名叫“小二郎”,取的二手商品的“二”字,图标如下:

【图标】

系统的总体结构设计如下:
在这里插入图片描述
截图了系统的几个核心界面:

1.“信息统计”

统计最近一周的用户新增和商品增减情况,采用百度Echarts插件来实现。主要包括新增用户数量统计,统计每日新增登录系统的人数;商品出售发布数量统计,统计每日用户发布二手商品数量;商品求购发布数量统计,统计每日二手商品求购数量;商品成交数量统计,统计每日商品交易成功数量。以上这几种数量统计我采用折线图的方式进行展示,直观清晰,可以直观的反映出用户增加以及商品增减数量的变化情况。
在这里插入图片描述

2.“用户信息管理”

在这里插入图片描述

3.“出售商品信息管理”

在这里插入图片描述

4.“违规投诉管理”

违规投诉管理界面,主要负责展示用户提交的违规投诉信息。主要包括商品编号,投诉用户,违规用户,违规次数,投诉理由,投诉状态等。还可以查看违规用户查看违规商品,确认违规后点击“确认违规”按钮,则后台自动记录用户违规次数,累计达到三次进行账户冻结操作,若无违规现象点击“无违规”按钮。
在这里插入图片描述

5.“订单管理”

在这里插入图片描述

6.“个人资料编辑”

在这里插入图片描述

7.“出售商品编辑”

在这里插入图片描述

8.小程序端“商品列表”

在这里插入图片描述

9.小程序端“我买到的”

微信小程序端的我买到的界面,主要负责展示用户购买的二手商品的订单信息,并且可以动态展示订单的状态信息。
在这里插入图片描述

10.小程序端“商品出售发布”

在这里插入图片描述
项目文件夹:
后端,微信端,数据库(有11个表~)
在这里插入图片描述

//获取用户信息
     app.requestFun(
       app.globalData.apiConfig.getUserInfoById,
       'GET',
       {
         'id': userInfo.mid
       },
       function (res) {
         if (!that.data.isPullDownRefresh) {
           //初步加载
           wx.hideLoading();
         } else {
           //下拉刷新
           that.setData({
             'isPullDownRefresh': false
           })
           wx.hideNavigationBarLoading() //完成停止加载
           wx.stopPullDownRefresh() //停止下拉刷新
         }
         if (res.statusCode == 200) {
           wx.hideLoading();
           if (res.data.code == 1) {
             res.data.data.avatarUrl = res.data.data.headimg;
             var imgArr = [];
             if (res.data.data.idCardImg!=null){
               for (var i = 0; i < res.data.data.idCardImg.split(",").length; i++) {
                 imgArr.push(
                   res.data.data.idCardImg.split(",")[i]
                 )
               }
             }
             if (res.data.data.status == '1011'){//已认证
               that.setData({
                 closeStyle:'display:none'
               })
             }
             that.setData({
               userInfo: res.data.data,
               photos: imgArr
             })
           }
         }
       }
     )
/**
    * 处理登录请求
    */
   @RequestMapping(value = "/getOpenid")
   @ResponseBody
   public Map getOpenid(String encryptedData, String iv, String code) {
       Map map = new HashMap();
       //登录凭证不能为空
       if (code == null || code.length() == 0) {
           map.put("code", 0);
           map.put("msg", "code 不能为空");
           return map;
       }

       //小程序唯一标识   (在微信小程序管理后台获取)
       String wxspAppid = appID;
       //小程序的 app secret (在微信小程序管理后台获取)
       String wxspSecret = appSecret;
       //授权(必填)
       String grant_type = "authorization_code";
       String grant_type2 = "client_credential";


        1、向微信服务器 使用登录凭证 code 获取 session_key 和 openid 
       //请求参数
       String params = "appid=" + wxspAppid + "&secret=" + wxspSecret + "&js_code=" + code + "&grant_type=" + grant_type;
       String params2 = "appid=" + wxspAppid + "&secret=" + wxspSecret + "&grant_type=" + grant_type2;
       //发送请求
       String sr = HttpRequest.sendGet("https://api.weixin.qq.com/sns/jscode2session", params);
       String sr2 = HttpRequest.sendGet("https://api.weixin.qq.com/cgi-bin/token", params2);
       //解析相应内容(转换成json对象)
       JSONObject json = JSONObject.fromObject(sr);
       JSONObject json2 = JSONObject.fromObject(sr2);
       //获取会话密钥(session_key)
       String session_key = json.get("session_key").toString();
       String access_token = json2.get("access_token").toString();
       //用户的唯一标识(openid)
       String openid = (String) json.get("openid");

        2、对encryptedData加密数据进行AES解密 
       try {
           String result = AesCbcUtil.decrypt(encryptedData, session_key, iv, "UTF-8");
           if (null != result && result.length() > 0) {
               map.put("code", 1);
               map.put("msg", "解密成功");

               JSONObject userInfoJSON = JSONObject.fromObject(result);
               User user = new User();
               user.setNickName((String)userInfoJSON.get("nickName"));
               user.setHeadimg((String)userInfoJSON.get("avatarUrl"));
               user.setOpenId((String) userInfoJSON.get("openId"));
               user.setGender((int)userInfoJSON.get("gender"));
               User user1=userService.selectUserByOpenId(user.getOpenId());
               if(user1!=null) {
               	userService.updateUserInfo(user);
               	user.setId(user1.getId());
               }else {
               	userService.addWXUserInfo(user);
               }
               
               Map userInfo = new HashMap();
               userInfo.put("openId", userInfoJSON.get("openId"));
               userInfo.put("nickName", userInfoJSON.get("nickName"));
               userInfo.put("gender", userInfoJSON.get("gender"));
               userInfo.put("city", userInfoJSON.get("city"));
               userInfo.put("province", userInfoJSON.get("province"));
               userInfo.put("country", userInfoJSON.get("country"));
               userInfo.put("avatarUrl", userInfoJSON.get("avatarUrl"));
               userInfo.put("unionId", userInfoJSON.get("unionId"));
               userInfo.put("accessToken",access_token);
               userInfo.put("id",user.getId());
               if(user1!=null) {
               	userInfo.put("qq",user1.getQq());
               	userInfo.put("email",user1.getEmail());
               	userInfo.put("phone",user1.getPhone());
               	userInfo.put("schoolId",user1.getSchoolId());
               	userInfo.put("schoolName",user1.getSchoolName());
               	userInfo.put("deptId",user1.getDeptId());
               	userInfo.put("deptName",user1.getDeptName());
               	userInfo.put("majorId",user1.getMajorId());
               	userInfo.put("majorName",user1.getMajorName());
               	userInfo.put("addr",user1.getAddr());
               	userInfo.put("remark",user1.getRemark());
               	userInfo.put("userName",user1.getUserName());
               	userInfo.put("idNum,",user1.getIdNum());
               	userInfo.put("status,",user1.getStatus());
               }
               map.put("userInfo", userInfo);
               return map;
           }
       } catch (Exception e) {
           e.printStackTrace();
       }
       map.put("code", 0);
       map.put("msg", "解密失败");
       return map;
   }
  • 8
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值