• 基于移动品台的产品追溯系统设计与实现


    项目描述

    临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问题,今天给在家介绍一篇基于移动品台的产品追溯系统设计与实现。

    功能需求

    基于移动平台的产品追溯系统是一个基于Springboot的轻量级Web框架的系统。首先根据目前开发行内成熟、热门的技术分析确定开发需要使用的技术点;根据业务分析功能性和非功能点;根据系统设计对系统总体功能设计,包括模块划分,数据库设计原则以及表结构的建立分析;在技术实现上说明了功能详细设计与实现。
    首先要对移动平台的产品追溯系统的用户和管理员的相关功能有可了解和分析,明白用户通过互联网查看产品信息的流程以及系统后台对网站信息的基本管理流程;然后要充分调查并了解网上管理的流程,管理员对商品以及用户等信息的管理方式,记录、处理相关的数据。其次对开发移动平台系统所需掌握的开发工具进行分析和学习,并由一定程度的使用经验,以及全系统各个功能模块的详细设计。通过确定数据库的选择以及数据设计需要注意点和设计原则,选择MySQL数据库并设计好所使用的数据库表,完成本系统的设计;最后要进行系统的测试和维护,保证网红书屋能够正常运行。

    具备以下功能:

    基于移动平台的产品追溯系统开发分为用户、管理员两个个用户角色,移动端具体功能需求如下:
    1 用户登录注册
    用户在浏览器地址栏输入登录网站,进入登录页面,首页支持游客模式浏览,点击任意按钮是验证是否登录,用户必须先进行账号密码验证登录,输入账号密码点击登录请求后台,经过后端服务进行校验数据账号密码正确方可进行以下操作。

    2 产品追溯查询
    产品追溯查询功能就现在而言,对于很多信息系统都是一个非常火热的话题,根据产品名称查询产品列表,点击产品名称进入产品详情页返回展示给用户,根据该产品质量投诉规则展示产品质量预警提示。

    3 公众查询
    用户从菜单界面进入公众查询界面,因为涉及到根据产品唯一码或者扫码进行查询,本系统该模块主要通过实现,根据用户输入的商品条码,在产品中匹配相关的产品信息并返回展示给用户。

    4 用户反馈
    前端直接发请求,分页展示,必然有当前页数pageNumber参数.后端检测是否有人登录,根据当前登录人信息查询该用户的所有留言反馈信息。在历史反馈列表中倒叙展示,可以根据自己想法反馈信息。

    5 产品质量投诉
    用户在进入产品详情页,查看产品名称、类别、价格、详细介绍等。根据介绍信息对比自己购买产品情况,如果对质量有疑问可以通过质量投诉界面输入投诉原因,提交到后台管理员审核处理。

    6 用户管理
    用户所有登录的账号都必须是在管理员的管理下,不能随意登录系统,管理员设置用户账号以及权限等信息。管理员可以筛选查看并有删除、编辑修改信息以及重置密码操作。

    7产品信息管理
    管理员在产品信息管理界面输入产品信息进行模糊查询,展示在书库搜索页面,管理员可以点击操作按钮,可以选择删除、修改、发布,系统根据用户的投诉进行处理产品信息。

    8用户反馈管理
    用户在移动端对系统、产品的疑问或者体验进行留言反馈,系统管理员在用户反馈管理界面查询用户反馈信息,根据反馈情况进行有针对性的回复。

    系统设计

    在这里插入图片描述

    在这里插入图片描述

    部分效果图

    前端界面:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

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

    后端功能截图
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

    在这里插入图片描述

    系统业务概述

    通过我们在学校的学习中,软件开发所选择的技术都是在学校所学过的。在本产品追溯自助服务平台系统中前端使用到了JQuery+CSS样式和基本框架技术,Jquery是对JavaScript分装的一种事件动态脚本,也就是给前端页面添加动作效果,响应请求后台的操作。同时也是一种广泛用于移动端开发的脚本语言,项目的后台采用行业内常用Springboot框架,利用java的面向对象思想和跨平台特性开发,处理网购业务数据。MySQL 具有关系型的数据库,学生开发基本都采用MySQL数据库,因为他是开源免费的,网站的部分数据需要持久化,项目连接数据库通过配置文件配置数据源信息,实现数据库连接池进行操作数据库,利用数据库的特性对用户信息以及其他业务数据保存。

    部分代码
    
        /**
         * 跳转到产品列表
         * @return
         */
        @RequestMapping(value = "/ProductPage")
        public String toplpPage() {
            return "demo/system/productList";
        }
    
        /**
         * 跳转到产品详情页
         * @return
         */
        @RequestMapping(value = "/productInfo")
        public String productInfo(@RequestParam(value = "id", required = false)Integer id,
                               Model model) {
            if (!IsObjectNullUtils.is(id)){
                XydJProduct xydJProduct = productService.selectByKeyJiGou(id);
                model.addAttribute("xydpd", xydJProduct);
            }
            return "demo/system/productAdd";
        }
    
        //添加或者修改产品信息
        @RequestMapping(value = "/addproduct")
        @ResponseBody
        public Map addContact(@RequestParam(required = false,value = "name" )String name,
                              @RequestParam(required = false,value = "id" )Integer id,
                              @RequestParam(required = false,value = "manufacturers" )String manufacturers,
                              @RequestParam(required = false,value = "type" )String type,
                              @RequestParam(required = false,value = "kcun" )Integer kcun,
                              @RequestParam(required = false,value = "createTime" )String createTime,
                              @RequestParam(required = false,value = "sales" )Integer sales,
                              @RequestParam(required = false,value = "sfsect" )String sfsect,
                              @RequestParam(required = false,value = "addr" )String addr,
                              @RequestParam(required = false,value = "bracode" )String bracode,
                              @RequestParam(required = false,value = "context" )String context,
                              HttpServletRequest request){
            Map<String, Object> result = new HashMap<>();
            XydJProduct xydJigou = new XydJProduct();
            xydJigou.setName(name);
            xydJigou.setManufacturers(manufacturers);
            xydJigou.setType(type);
            xydJigou.setKcun(kcun);
            xydJigou.setCreateTime(createTime);
            xydJigou.setSales(sales);
            xydJigou.setContext(sfsect);
            xydJigou.setAddr(addr);
            xydJigou.setBracode(bracode);
            xydJigou.setStates("0");
            int a = 0;
            if (!IsObjectNullUtils.is(id)){  //如果id不为空则为更新操作
                xydJigou.setId(id);
                a = productService.updateJiGouByKey(xydJigou);
            }else {
                a = productService.insetJiGou(xydJigou);
            }
            if (a > 0){
                result.put("code", 200);
                result.put("msg","操作成功");
            }else {
                result.put("code", 202);
                result.put("msg","操作失败,请检验产品信息是否正确!");
            }
            return result;
        }
    
        /**
         * 获取产品列表
         * @return
         */
        @RequestMapping(value = "/getproductList.ajax")
        @ResponseBody
        public DataTableReturnData getplpList(@RequestParam Map<String, String> params) {
    
            DataTableReturnData<XydJProduct> dataTableReturnData = new DataTableReturnData();
            int pageNum = getPageNum(params.get("start"), params.get("length"));
            int pageSize=getPageSize(params.get("length"));
            GenericQueryParam queryParam = new GenericQueryParam(pageNum, pageSize);
            if (!IsObjectNullUtils.is(params.get("name"))) {
                queryParam.fill("name", params.get("name"));
            }
            queryParam.fill("states",  "1");
            int count = productService.selectjiGouCount(queryParam);
            List<XydJProduct> xydJigouList = productService.selectByParamjiGouList(queryParam);
            dataTableReturnData.setData(xydJigouList);
            dataTableReturnData.setDraw(getDraw(params.get("draw")));
            dataTableReturnData.setMsg("查询成功");
            dataTableReturnData.setStatus(ResultStant.RESULT_CODE_SUCCESS);
            dataTableReturnData.setRecordsFiltered(count);
            dataTableReturnData.setRecordsTotal(count);
            return dataTableReturnData;
        }
    
        /**
         * 删除产品
         * @return
         */
        @RequestMapping(value = "/updateProduct")
        @ResponseBody
        public Map updateXX(@RequestParam(value = "id")Integer id) {
            Map<String, Object> map = new HashMap<>();
            if (productService.deleteJgByKey(id) > 0){
                map.put("code", 200);
                map.put("msg", "操作成功!");
            }else {
                map.put("code", 202);
                map.put("msg", "操作失败,请刷新重试!");
            }
            return map;
        }
    
    
        /**
         * 跳转到产品发布列表
         * @return
         */
        @RequestMapping(value = "/produRelPage")
        public String jguserPage() {
            return "demo/system/productReleaseList";
        }
    
    
    
        /**
         * 获取产品发布
         * @return
         */
        @RequestMapping(value = "/getProductReleaseList.ajax")
        @ResponseBody
        public DataTableReturnData getProductReleaseList(@RequestParam Map<String, String> params) {
    
            DataTableReturnData<Map<String, Object>> dataTableReturnData = new DataTableReturnData();
            int pageNum = getPageNum(params.get("start"), params.get("length"));
            int pageSize=getPageSize(params.get("length"));
            GenericQueryParam queryParam = new GenericQueryParam(pageNum, pageSize);
            if (!IsObjectNullUtils.is(params.get("name"))) {
                queryParam.fill("name", params.get("name"));
            }
            queryParam.fill("states",  "1");
            int count = productService.selectjReleaseCount(queryParam);
            List<Map<String, Object>> xydJigouList = productService.selectByParamjReleaseList(queryParam);
            dataTableReturnData.setData(xydJigouList);
            dataTableReturnData.setDraw(getDraw(params.get("draw")));
            dataTableReturnData.setMsg("查询成功");
            dataTableReturnData.setStatus(ResultStant.RESULT_CODE_SUCCESS);
            dataTableReturnData.setRecordsFiltered(count);
            dataTableReturnData.setRecordsTotal(count);
            return dataTableReturnData;
        }
    
    
        /**
         * 跳转到发布页
         * @return
         */
        @RequestMapping(value = "/toReleaseInfo")
        public String toReleaseInfo(@RequestParam(value = "id", required = false)Integer id,
                                  Model model) {
            if (!IsObjectNullUtils.is(id)){
    
                model.addAttribute("prodid", id);
            }
            return "demo/system/releaseAdd";
        }
    
        //添加产品发布信息
        @RequestMapping(value = "/addRelease")
        @ResponseBody
        public Map addRelease(@RequestParam(required = false,value = "prodid" )Integer prodid,
                              @RequestParam(required = false,value = "id" )Integer id,
                              @RequestParam(required = false,value = "title" )String title,
                              @RequestParam(required = false,value = "type" )String type,
                              @RequestParam(required = false,value = "context" )String context,
                              HttpServletRequest request){
            Map<String, Object> result = new HashMap<>();
            XydRelease xydRelease = new XydRelease();
            xydRelease.setProductid(prodid);
            xydRelease.setId(id);
            xydRelease.setTitle(title);
            xydRelease.setType(type);
            xydRelease.setContext(context);
            xydRelease.setCreate_time(new Date());
            xydRelease.setStates("1");
            int a = 0;
            if (!IsObjectNullUtils.is(id)){  //如果id不为空则为更新操作
                xydRelease.setId(id);
                a = productService.updateReleaseByKey(xydRelease);
            }else {
                a = productService.insetRelease(xydRelease);
            }
            if (a > 0){
                result.put("code", 200);
                result.put("msg","操作成功");
            }else {
                result.put("code", 202);
                result.put("msg","操作失败,请检验发布信息是否正确!");
            }
            return result;
        }
    
    
        //暂停发布操作
        @RequestMapping(value = "/zantRelease")
        @ResponseBody
        public Map zantRelease(
                              @RequestParam(required = false,value = "id" )Integer id
                              ){
            Map<String, Object> result = new HashMap<>();
            XydRelease xydRelease = new XydRelease();
            xydRelease.setId(id);
            xydRelease.setCreate_time(new Date());
            xydRelease.setStates("2");
            int a = productService.updateReleaseByKey(xydRelease);
            if (a > 0){
                result.put("code", 200);
                result.put("msg","操作成功");
            }else {
                result.put("code", 202);
                result.put("msg","操作失败,请刷新重试!");
            }
            return result;
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225

    系统部署

    系统开发后,在生产环境配置项目运行环境,具体步骤如下:
    安装linux或者windows10操作系统;
    安装JDK1.8并配置环境变量;
    安装MySQL5.7版本以上版本数据库,创建数据库并执行脚本创建表;
    在IDEA中编辑进行打包;
    下载并配置Tomcat8.0服务器,配置系统服务,上传项目打包文件

    本项目用到的技术和框架

    (1)开发工具:ideal、tomcat
    (2)使用的语言:Java、JSP、Javascript、html、CSS
    (3)操作系统:windows操作系统
    (4)数据库:Mysql

    本项目中的关键点

    此系统的开发采用java语言开发,基于B/S结构,这些开发环境使系统更加完善。使用到的工具和技术都是开源免费的。

    环境工具

    开发工具 Eclipse/IDEA
    语言 JDK1.8 、jsp、Springboot 、mybatis
    硬件:笔记本电脑;
    软件:Tomcat8.0 Web服务器、Navicat数据库客户端、MySQL;
    操作系统:Windows 10;
    其它软件:截图工具、常用浏览器;
    源码获取点这里

  • 相关阅读:
    【Jetson】Jetson TX2 ubuntu18.04安装PyTorch
    es6 Set和Map方法
    EFLAGS寄存器与JCC指令
    31、Java高级特性——Math类、Random类、String类、StringBuffer类、StringBuilder类
    LaTeX 调整行距、列宽,以及表格的整体大小和字体大小
    通过VS下载的NuGet包,如何修改其下载存放路径?
    String类及相应的字符串操作方法
    plc简单问题求看看对不对
    uniapp解决iOS切换语言——原生导航栏buttons文字不生效
    树的引进以及二叉树的基础讲解——【数据结构】
  • 原文地址:https://blog.csdn.net/mxg74110/article/details/127937768