300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 【SSM】第三课 超市订单管理平台--供应商管理功能

【SSM】第三课 超市订单管理平台--供应商管理功能

时间:2023-05-31 12:33:49

相关推荐

【SSM】第三课 超市订单管理平台--供应商管理功能

概念

本文在上一文章之后完成供应商管理模块的实现。

需求分析

供应商管理:

1.如果是系统管理员,不具备操作供应商的功能

2.如果是经理,经理有权利去添加,删除,修改和查询供应商

3.如果是普通员工,查询供应商详情信息

功能实现

在home.jsp页面中,根据不同身份的员工登录之后,点击“供应商管理”按钮,触发一下JavaScript的点击事件:

function gysgl() {//先获得当前登录的用户的身份var input=document.getElementById("hidd");var i=input.value;switch (i) {case "2"://能和供应商直接对接的只能是经理身份//跳转至servlet--》调度业务逻辑层--》调度数据访问层--》数据库location.href="GetProviderList.do";break;case "3"://普通员工可以查看所有供应商信息,但不能添加,修改,删除供应商信息location.href="GetProviderList.do";break;default://如果不是经理,那么都不允许操作该功能alert("当前登录的员工不具备该功能的操作权限");break;}}

这里我们只允许普通员工和经理操作供应商信息,管理员不具备权限。

普通员工只能查看所有供应商信息

在控制层包中创建ProviderController类,并定义GetProviderList.do虚拟地址,接收访问请求:

package com.smbms.controller;import com.smbms.service.IProviderService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpSession;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;@Controllerpublic class ProviderController {@AutowiredIProviderService pService;List<Map<String, Object>> providers=null;//定义方法,用于根据用户的身份完成供应商管理功能@RequestMapping("/GetProviderList.do")public ModelAndView GetProviderList(HttpSession session){ModelAndView mav=new ModelAndView();//获得登录者的个人信息Map<String,Object> m= (Map<String, Object>) session.getAttribute("userInfo");int userRole= (int) m.get("userRole");providers = pService.getProviders();mav.addObject("providers",providers);if (userRole==2){//经理mav.setViewName("providerList");}else {//普通员工,只能查看供应商信息mav.setViewName("providerList2");}return mav;}}

在service层中创建IProviderService接口,定义获得所有供应商信息的方法:

package com.smbms.service;import java.util.List;import java.util.Map;public interface IProviderService {List<Map<String,Object>> getProviders();}

在service层中创建ProviderServiceImp类,实现该接口的未实现的方法:

package com.smbms.service;import com.smbms.dao.IProviderDao;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;import java.util.Map;@Service(value = "pService")public class ProviderServiceImp implements IProviderService {@AutowiredIProviderDao dao;@Overridepublic List<Map<String, Object>> getProviders() {return dao.getProviders();}}

在dao层中创建IProviderDao接口,编写sql语句完成查询供应商信息功能:

package com.smbms.dao;import org.apache.ibatis.annotations.*;import java.util.List;import java.util.Map;public interface IProviderDao {//查询所有的供应商信息@Select("select * from smbms_provider")List<Map<String,Object>> getProviders();}

查询后的数据返回控制层,由控制器将数据通过ModelAndView发送给providerList2.jsp页面进行展示:

<%@page import="java.util.List"%><%@ page import="java.util.Map" %><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>超市订单管理系统--供应商列表</title></head><body><div style="width: 1680px;height: 1000px;margin: auto;"><div style="width: 100%;height: 160px;background-color:skyblue;"><div style="width: 100%;height: 20px;"><div align="left" style="width: 20%;height: 100%;float: left;" >&nbsp;<a href="home.do" style="text-decoration: none;">返回首页</a></div><div align="right" style="width: 80%;height: 100%;float: right;"><a>欢迎,<span style="color: red;">${userInfo.userName}</span></a>&nbsp;&nbsp;<a href="index.do" style="text-decoration: none;">注销</a>&nbsp;</div></div><div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div></div><div align="center" style="width: 100%;height: 840px;background-color: pink;overflow: scroll;"><table border="1" style="width: 90%;text-align: center;height: 800px;border-collapse: collapse;"><tr><td>主键Id</td><td>供应商编码</td><td>供应商名称</td><td>供应商详细描述</td><td>供应商联系人</td><td>联系电话</td><td>地址</td><td>传真</td></tr><% List<Map<String,Object>> list=(List<Map<String,Object>>)request.getAttribute("providers"); %><% for(int i=0;i<list.size();i++){ %><tr><td ><%=list.get(i).get("id") %></td><td><%=list.get(i).get("proCode") %></td><td><%=list.get(i).get("proName") %></td><td ><p style="text-overflow: ellipsis;overflow: hidden;white-space: nowrap;width: 260px;"><%=list.get(i).get("proDesc") %></p></td><td><%=list.get(i).get("proContact") %></td><td><%=list.get(i).get("proPhone") %></td><td><%=list.get(i).get("proAddress")%></td><td><%=list.get(i).get("proFax") %></td></tr><%} %></table></div></div></body></html>

其页面效果如下:

经理操作供应商管理功能查看信息

经理和普通员工都具备查阅供应商信息的权限,因此在控制层中直接调用service中的方法即可,无需在重复编写方法接口,则经理操作的时候,将数据发送给providerList.jsp页面进行展示,并且提供,添加供应商,修改,删除供应商的功能操作。

<%@page import="java.util.List"%><%@ page import="java.util.Map" %><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>超市订单管理系统--供应商列表</title></head><body><div style="width: 1680px;height: 1000px;margin: auto;"><div style="width: 100%;height: 160px;background-color:skyblue;"><div style="width: 100%;height: 20px;"><div align="left" style="width: 20%;height: 100%;float: left;" >&nbsp;<a href="home.do" style="text-decoration: none;">返回首页</a></div><div align="right" style="width: 80%;height: 100%;float: right;"><a>欢迎,<span style="color: red;">${userInfo.userName}</span></a>&nbsp;&nbsp;<a href="index.do" style="text-decoration: none;">注销</a>&nbsp;</div></div><div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div></div><div align="center" style="width: 100%;height: 840px;background-color: pink;overflow: scroll;"><div align="left" style="height: 40px;" ><a href="addProvider.do" style="text-decoration: none;text-align:center; width: 50px;height: 20px;color: white;font-weight: bold;margin-top:20px;margin-left:10px;border-radius: 5px;">添加供应商</a></div><table border="1" style="width: 90%;text-align: center;height: 800px;border-collapse: collapse;"><tr><td>主键Id</td><td>供应商编码</td><td>供应商名称</td><td>供应商详细描述</td><td>供应商联系人</td><td>联系电话</td><td>地址</td><td>传真</td><td>操作</td></tr><% List<Map<String,Object>> list=(List<Map<String,Object>>)request.getAttribute("providers"); %><% for(int i=0;i<list.size();i++){ %><tr><td ><%=list.get(i).get("id") %></td><td><%=list.get(i).get("proCode") %></td><td><%=list.get(i).get("proName") %></td><td ><p style="text-overflow: ellipsis;overflow: hidden;white-space: nowrap;width: 260px;"><%=list.get(i).get("proDesc") %></p></td><td><%=list.get(i).get("proContact") %></td><td><%=list.get(i).get("proPhone") %></td><td><%=list.get(i).get("proAddress")%></td><td><%=list.get(i).get("proFax") %></td><td><a href="GetProvider.do?index=<%=i%>"><input type="button" value="修改" style="background-color: green;border: none;border-radius: 5px;color: white;"></a><a href="DeleteProvider.do?id=<%=list.get(i).get("id") %>"><input type="button" value="删除" style="background-color: red;border: none;border-radius: 5px;color: white;"></a></td></tr><%} %></table></div></div></body></html>

页面效果如图:

经理添加供应商信息

当经理点击添加供应商,向控制器发出请求addProvider.do,那么在控制器中定义方法接收该请求:

//定义方法,用于接收添加供应商的虚拟地址,用于跳转至提那家供应商页面@RequestMapping("/addProvider.do")public String addProvider(){return "addProvider";}

即跳转至添加供应商的页面,其代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>超市订单管理系统--添加供应商</title></head><body><div style="width: 1200px;height: 800px;margin: auto;"><div style="width: 100%;height: 160px;background-color:skyblue;"><div style="width: 100%;height: 20px;"><div align="left" style="width: 20%;height: 100%;float: left;" >&nbsp;<a href="home.do" style="text-decoration: none;">返回首页</a></div><div align="right" style="width: 80%;height: 100%;float: right;"><a>欢迎,<span style="color: red;">${userInfo.userName}</span></a>&nbsp;&nbsp;<a href="index.do" style="text-decoration: none;">注销</a>&nbsp;</div></div><div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div></div><div align="center" style="width: 100%;height: 640px;background-color: pink;"><form action="toAddProvider.do" method="post"><div style="padding: 5px 0px"><label for="proCode">供应商编码:</label>&nbsp;<input id="proCode" name="proCode" type="text" placeholder="请输入供应商编码" /></div><div style="padding: 5px 0px"><label for="proName">供应商名称:</label>&nbsp;<input id="proName" name="proName" type="text" placeholder="请输入供应商名称" /></div><div style="padding: 5px 0px"><label >供应商详细描述:</label><br/><textarea rows="5" cols="40" name="proDesc" placeholder="请输入主营产品内容"></textarea></div><div style="padding: 5px 0px"><label >供应商联系人:</label>&nbsp;<input type="text" name="proContact" placeholder="请输入联系人姓名"></div><div style="padding: 5px 0px"><label >联系电话:</label>&nbsp;<input type="number" name="proPhone" placeholder="请输入手机号" ></div><div style="padding: 5px 0px"><label >地址:</label>&nbsp;<input type="text" name="proAddress" placeholder="请输入地址" ></div><div style="padding: 5px 0px"><label >传真:</label>&nbsp;<input type="text" name="proFax" placeholder="请输入传真号码" ></div><div style="padding: 5px 0px"><input type="submit"value="添加" style="width: 120px;background-color: green;border: none;padding: 5px;border-radius: 5px;color: white;"/></div></form></div></div></body></html>

效果图如下:

当经理填写新供应商信息之后,点击添加按钮将数据通过post发送toAddProvider.do请求,因此我们需要在控制层中定义方法接收该请求以及数据信息:

//定义方法,接收添加供应商页面发送过来的新供应商的信息@RequestMapping(value = "/toAddProvider.do",params = {"proCode","proName","proDesc","proContact","proPhone","proAddress","proFax"})public String toAddProvider(String proCode,String proName,String proDesc,String proContact,String proPhone,String proAddress,String proFax,HttpSession session ){//定义Map集合,将数据封装,便于传输Map<String,Object> map=new HashMap<>();map.put("proCode",proCode);//编号map.put("proName",proName);//名称map.put("proDesc",proDesc);//主营业务map.put("proContact",proContact);//联系人map.put("proPhone",proPhone);//联系电话map.put("proAddress",proAddress);//地址map.put("proFax",proFax);//传真//获得经理的id,表示该新供应商是由这个经理添加的long id= (long) ((Map<String,Object>)session.getAttribute("userInfo")).get("id");map.put("createdBy",id);map.put("creationDate",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));int i = pService.add(map);String url="";if (i>0)//添加供应商成功url="redirect:GetProviderList.do";return url;}

控制层接收到新的供应商信息之后,将其进行封装成Map集合,然后发送给service层,因此我们需要在service的接口中定义接收数据的方法:

//添加供应商int add(Map<String,Object> map);

在service实现类中实现该方法:

@Overridepublic int add(Map<String, Object> map) {return dao.add(map);}

并将封装的数据发送给dao层中的接口,通过Mybatis框架完成添加的sql语句,并将返回值返回:

//添加供应商@Insert("insert into smbms_provider(proCode,proName,proDesc," +"proContact,proPhone,proAddress,proFax,createdBy,creationDate) " +"values(#{proCode},#{proName},#{proDesc}," +"#{proContact},#{proPhone},#{proAddress}," +"#{proFax},#{createdBy},#{creationDate})")int add(Map<String,Object> map);

添加成功后,需同步刷新页面,可以看到列表上有新的供应商信息的显示,则表示添加成功。

经理操作修改供应商信息

在供应商列表显示页面,选择要修改的供应商进行点击修改按钮,则将该供应商对应的下标通过发送请求携带下标值发送给控制器,

<a href="GetProvider.do?index=<%=i%>"><input type="button" value="修改" style="background-color: green;border: none;border-radius: 5px;color: white;"></a>

控制器中需定义方法接收该请求以及下标的值,并根据下标从集合中获得要修改的供应商信息,

//定义方法,获得下标,用于找到要修改的供应商信息,并显示在修改页面上@RequestMapping("/GetProvider.do")public ModelAndView GetProvider(@RequestParam int index){Map<String, Object> map = providers.get(index);ModelAndView mav=new ModelAndView();mav.addObject("map",map);mav.setViewName("updateProvider");return mav;}

并将信息发送到修改页面上供用户进行修改:

<%@ page import="java.util.Map" %><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>超市订单管理系统--修改供应商</title></head><body><div style="width: 1200px;height: 800px;margin: auto;"><div style="width: 100%;height: 160px;background-color:skyblue;"><div style="width: 100%;height: 20px;"><div align="left" style="width: 20%;height: 100%;float: left;" >&nbsp;<a href="home.do" style="text-decoration: none;">返回首页</a></div><div align="right" style="width: 80%;height: 100%;float: right;"><a>欢迎,<span style="color: red;">${userInfo.userName}</span></a>&nbsp;&nbsp;<a href="index.do" style="text-decoration: none;">注销</a>&nbsp;</div></div><div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div></div><% Map<String,Object> provider=(Map<String,Object>)request.getAttribute("map"); %><div align="center" style="width: 100%;height: 640px;background-color: pink;"><form action="UpdateProvider.do" method="post"><!-- 完成修改功能的时候,需要将主键id隐藏存储在表单页面上因为在完成修改的sql语句的同时,是需要条件,只有主键id是不允许被修改的,那么能作为条件去修改数据库表中的数据只有主键id--><input type="hidden" name="id" value="<%=provider.get("id") %>"><div style="padding: 5px 0px"><label for="proCode">供应商编码:</label>&nbsp;<input id="proCode" name="proCode" value="<%=provider.get("proCode") %>" type="text" placeholder="请输入供应商编码" /></div><div style="padding: 5px 0px"><label for="proName">供应商名称:</label>&nbsp;<input id="proName" name="proName" value="<%=provider.get("proName") %>" type="text" placeholder="请输入供应商名称" /></div><div style="padding: 5px 0px"><label >供应商详细描述:</label><br/><textarea rows="5" cols="40" name="proDesc" placeholder="请输入主营产品内容"><%=provider.get("proDesc") %></textarea></div><div style="padding: 5px 0px"><label >供应商联系人:</label>&nbsp;<input type="text" name="proContact" value="<%=provider.get("proContact") %>" placeholder="请输入联系人姓名"></div><div style="padding: 5px 0px"><label >联系电话:</label>&nbsp;<input type="number" name="proPhone" value="<%=provider.get("proPhone") %>" placeholder="请输入手机号" ></div><div style="padding: 5px 0px"><label >地址:</label>&nbsp;<input type="text" name="proAddress" value="<%=provider.get("proAddress") %>" placeholder="请输入地址" ></div><div style="padding: 5px 0px"><label >传真:</label>&nbsp;<input type="text" name="proFax" value="<%=provider.get("proFax") %>" placeholder="请输入传真号码" ></div><div style="padding: 5px 0px"><input type="submit"value="修改供应商信息" style="background-color: green;border: none;padding: 5px;border-radius: 5px;color: white;"/></div></form></div></div></body></html>

其效果图如下:

当经理修改信息后,将修改后的数据信息发送给UpdateProvider.do请求给控制器,并使用post请求传输数据,控制器中定义方法接收:

//定义方法,获得修改供应商页面发送过来的更新后的供应商信息@RequestMapping(value = "/UpdateProvider.do",params = {"id","proCode","proName","proDesc","proContact","proPhone","proAddress","proFax"})public String UpdateProvider(long id,String proCode,String proName,String proDesc,String proContact,String proPhone,String proAddress,String proFax,HttpSession session){//定义Map集合,将数据封装,便于传输Map<String,Object> map=new HashMap<>();map.put("id",id);map.put("proCode",proCode);//编号map.put("proName",proName);//名称map.put("proDesc",proDesc);//主营业务map.put("proContact",proContact);//联系人map.put("proPhone",proPhone);//联系电话map.put("proAddress",proAddress);//地址map.put("proFax",proFax);//传真//获得经理的id,表示该新供应商是由这个经理添加的long userid= (long) ((Map<String,Object>)session.getAttribute("userInfo")).get("id");map.put("modifyBy",userid);map.put("modifyDate",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));int i = pService.update(map);String url="";if (i>0)//修改成功,刷新页面url="redirect:GetProviderList.do";return url;}

控制器将接收的数据封装成Map集合后,发送给service接口:

//修改供应商int update(Map<String,Object> map);

并在service实现类中实现给方法:

@Overridepublic int update(Map<String, Object> map) {return dao.update(map);}

并将所有数据发送给dao层的接口完成修改sql语句,更新至数据库的数据:

//修改供应商@Update("update smbms_provider set proCode=#{proCode},proName=#{proName}," +"proDesc=#{proDesc},proContact=#{proContact},proPhone=#{proPhone}," +"proAddress=#{proAddress},proFax=#{proFax},modifyBy=#{modifyBy}," +"modifyDate=#{modifyDate} where id=#{id}")int update(Map<String,Object> map);

如果修改成功,则会将int返回值给控制器,控制器根据判断返回值进行重定向跳转页面,刷新供应商列表页面。

经理删除解除合同的供应商信息

在供应商列表页面选择需要删除的供应商的删除按钮,发送请求给控制器,并携带该供应商的主键id:

<a href="DeleteProvider.do?id=<%=list.get(i).get("id") %>"><input type="button" value="删除" style="background-color: red;border: none;border-radius: 5px;color: white;"></a>

那么控制器中定义方法接收该请求,并获得主键id,发送给service接口:

//定义方法,用于根据id作为条件删除对应的供应商信息@RequestMapping("/DeleteProvider.do")public String DeleteProvider(@RequestParam long id){int i = pService.del(id);String url="";if (i>0)//删除成功,刷新页面url="redirect:GetProviderList.do";return url;}

在service接口中定义方法:

//删除供应商int del(long id);

在service实现类中实现该方法:

@Overridepublic int del(long id) {return dao.del(id);}

在dao层中完成删除供应商的sql语句操作,并将结果的int类型值返回给控制器:

//删除供应商@Delete("delete from smbms_provider where id=#{id}")int del(@Param("id")long id);

控制器判断返回值进行刷新列表页面,即完成删除功能。

总结

该模块的功能完成与上文的用户管理模块类似,可以加深读者对MVC架构以及Sql语句的操作。后期文章将介绍订单管理模块的实现步骤!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。