【567】基于ssm jsp社区活动中心管理系统源码和技术文档
开发技术说明:
本系统基于MVC模式进行开发,采用B/S模式,后端部分基于Java的SSm框架进行开发。
MVVM模式介绍:
MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。微软的WPF带来了新的技术体验,如Silverlight、音频、视频、3D、动画……,这导致了软件UI层更加细节化、可定制化。同时,在技术层面,WPF也带来了 诸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化。
1.2 MVVM模式优点:
MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点
低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xaml代码。
可测试。界面素来是比较难于测试的,测试可以针对ViewModel来写。
MVVM模式图解:
B/S体系结构介绍:
B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,如Chrome、Safari、Microsoft Edge、Netscape Navigator或Internet Explorer,服务器安装SQL Server、Oracle、MYSQL等数据库。浏览器通过Web Server同数据库进行数据交互。
1.5 B/S体系工作原理:
B/S架构采取浏览器请求,服务器响应的工作模式。
用户可以通过浏览器去访问Internet上由Web服务器产生的文本、数据、图片、动画、视频点播和声音等信息;
而每一个Web服务器又可以通过各种方式与数据库服务器连接,大量的数据实际存放在数据库服务器中;
从Web服务器上下载程序到本地来执行,在下载过程中若遇到与数据库有关的指令,由Web服务器交给数据库服务器来解释执行,并返回给Web服务器,Web服务器又返回给用户。在这种结构中,将许许多多的网连接到一块,形成一个巨大的网,即全球网。而各个企业可以在此结构的基础上建立自己的Internet。
在 B/S 模式中,用户是通过浏览器针对许多分布于网络上的服务器进行请求访问的,浏览器的请求通过服务器进行处理,并将处理结果以及相应的信息返回给浏览器,其他的数据加工、请求全部都是由Web Server完成的。通过该框架结构以及植入于操作系统内部的浏览器,该结构已经成为了当今软件应用的主流结构模式。
Java三层架构
根据总体规划设计,本药品管理系统决定采用三层架构的开发模式。三层架 构开发模式可将应用程序分为操作性好、可维护性强的编码模块,最后使得系统 具有良好的系统稳定性、程序可扩展性和数据安全性,以便更好地满足用户对系 统管理的需求[2]。
如果使用一层或两层结构开发系统,设计极可能存在重大缺点。且在开发系 统过程中,一旦出现系统相似的功能,只能采用复制代码的形式完成任务。如此 操作会导致一个系统中出现很多相同的代码,使得程序变得冗长,不利于系统维 护Mi]。传统的二层结构也常被应用于复杂的商业逻辑。但三层架构开发模式可以 通过引入中间层,中间层可以对业务规则进行处理,同时也包括数据访问应用程 序、验证合法性等,提供可扩展、易于访问和管理系统的方法;也可以在应用服 务器将多种应用服务分类整合,以提高应用程序的可重用性、安全性、可用性、 可扩展性和可移植性。
在逻辑中,所谓的三层架构就是将应用功能可以分为三个层次,分别为表现 层、业务逻辑层和数据访问层。三层架构是从两层架构演变而来,又是一种“客户 端-服务器”结构。数据传输必须通过中间层,必定会影响处理数据的效率,但是这 样可以从界面设计和数据库的高耦合封装中分隔开,实现系统各层之间“高内聚低 耦合”的设计模式C12][13]o三层架构的分层结构图如图2-1所示。
图2-1三层架构分层结构图
表现层。在最外层(最上层),位于客户端。负责接收用户输入的数据传递 给业务逻辑层,以及将系统的输出数据展示给用户。
它主要面向用户,为用户提供一个良好的用户界面Ml。管理员或员工用户只 需通过浏览器正确登录系统后,通过简单的界面链接就能快速地实现功能操作。 例如,管理员用户在点击“更新药品信息”链接后,可以浏览到药品的编号、名称、 售价等信息,还可以进行多种方式的查询,点击“修改”链接后,可以快速地进入修 改药品信息的界面。该层还包含用户与系统之间交互的所有逻辑QI。
业务逻辑层。在表现层和数据访问层之间,位于Web服务器端。在各种信 息管理系统中,在业务逻辑层中可以实现业务需求,它并不会因为系统前台设计 界面的变化而变化[⑹。
例如,用户选择相应的查询方式后,由表示层向业务逻辑层发送查询申请, 业务逻辑层接受申请后,即调用相关的业务逻辑,即告知“请允许我发送满足这个 查询条件的信息",向数据访问层发出请求;由数据访问层返回的查询结果进行格 式封装后,返回到表示层,即将查询出的结果显示在浏览页面[14][15]o为了保证核 心数据传输的安全性都应采用加密机制[15】。
数据访问层。在三层模式中的最底层,位于数据库服务器端。其功能主要 是负责对数据库的访问。管理并响应业务逻辑层对数据库的请求操作,可以实现 查询、添加、删除和修改数据库的操作,并把结果提交给Web服务器。存储数据 的数据库系统被更改后,再对数据访问层进行相应的修改就可以正常运行,而不 会影响业务逻辑层的代码[⑹。
数据访问层需要存储药品、员工、供应商、采购等信息,每个用户请求都会 要求在数据访问层获取相关的信息[⑷。数据库采用MYSQL,在数据库的 访问上使用MYSQL存储过程[⑸。









































package com.my.xymh.controller;
import java.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import com.my.xymh.base.BaseController;
import com.my.xymh.utils.JsonUtil2;
import com.my.xymh.utils.Pager;
import net.sf.json.JSONObject;
import java.util.*;
import com.my.xymh.entity.*;
import com.my.xymh.dao.*;
import com.my.xymh.service.*;
/**
* @ClassName:
* @Description:
* @author administrator
* @date - 2020年02月18日 12时25分56秒
*/
@Controller
@RequestMapping("/schoolJob")
public class SchoolJobController extends BaseController {
/**
* 依赖注入 start dao/service/===
*/
@Autowired
private GzService gzService;
@Autowired
private SchoolJobService schoolJobService;
@Autowired
private SchoolJobDao schoolJobDao;
@Autowired
private UserJobDao userJobDao;
@Autowired
private UserJobCommentDao userJobCommentDao;
@Autowired
private UserJobService userJobService;
//参加活动
@RequestMapping(value = "/joinJob.do")
public String joinJob(HttpServletRequest request,UserJob userJob,Model model){
User user= (User) request.getSession().getAttribute("user");
if(user==null){
model.addAttribute("msg","需要登录后才能进行操作");
//return "redirect:../schoolJob/addJobComment.do";
return "error";
}
Map params=new HashMap();
params.put("uid",user.getId());
params.put("jid",userJob.getJid());
List list=userJobDao.list(params);
if(list.size()>0){
model.addAttribute("msg","该活动已经参加,不能重复进行参加");
return "error";
}
if (user.getCredit()<=0){
model.addAttribute("msg","你的信誉值太低,无法报名");
return "error";
}
params.put("id",userJob.getJid());
SchoolJob s=(SchoolJob)schoolJobDao.list(params).get(0);
userJob.setTitle(s.getTitle());
userJob.setUid(user.getId());
userJob.setUsername(user.getUserName());
userJob.setCreatetime(new Date());
userJobDao.insert(userJob);
return findUserJob(request,model);
}
//查询已参加的活动
@RequestMapping(value = "/myJoinJob.do")
public String findUserJob(HttpServletRequest request,Model model){
User user= (User) request.getSession().getAttribute("user");
Map params=new HashMap();
params.put("uid",user.getId());
List<UserJob> list=userJobDao.list(params);
model.addAttribute("list",list);
return "schoolJob/myJoinJobs";
}
//添加活动评论
@RequestMapping(value = "/addJobComment.do")
public String addJobComment(HttpServletRequest request,UserJobComment userJobComment,Model model){
User user= (User) request.getSession().getAttribute("user");
if(user==null){
return detail(userJobComment.getJid(),model);
}
userJobComment.setUid(user.getId());
userJobComment.setUsername(user.getUserName());
userJobComment.setTime(new Date());
userJobCommentDao.insert(userJobComment);
return detail(userJobComment.getJid(),model);
}
private Map fail(String msg){
Map result=new HashMap();
result.put("msg",msg);
result.put("flag",false);
return result;
}
private Map success(){
Map result=new HashMap();
result.put("flag",true);
return result;
}
// --------------------------------------- 华丽分割线 ------------------------------
/**
* 分页查询 返回list对象(通过对象)
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/findByObj.do")
public String findByObj(SchoolJob schoolJob, Model model, HttpServletRequest request, HttpServletResponse response) {
Object attribute = request.getSession().getAttribute("isManage");
if(isEmpty(attribute)){
Integer id2 = Integer.valueOf(request.getSession().getAttribute("userId").toString());
schoolJob.setAddUserId(id2);
}
//分页查询
Pager<SchoolJob> pagers = schoolJobService.findByEntity(schoolJob);
model.addAttribute("pagers", pagers);
//存储查询条件
model.addAttribute("obj", schoolJob);
return "schoolJob/schoolJob";
}
@RequestMapping(value = "/findByObj2.do")
public String findByObj2(SchoolJob schoolJob, Model model, HttpServletRequest request, HttpServletResponse response) {
//分页查询
Pager<SchoolJob> pagers = schoolJobService.findByEntity(schoolJob);
model.addAttribute("pagers", pagers);
//存储查询条件
model.addAttribute("obj", schoolJob);
return "schoolJob/schoolJob2";
}
@RequestMapping(value = "/detail.do")
public String detail(Integer id,Model model) {
SchoolJob obj = schoolJobService.load(id);
model.addAttribute("obj",obj);
//查询某活动下的评论信息
Map params=new HashMap();
params.put("jid",id);
List<UserJobComment> comments=userJobCommentDao.list(params);
model.addAttribute("comments",comments);
return "schoolJob/detail";
}
/**
* 分页查询 返回list对象(通过Map)
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/findByMap.do")
public String findByMap(SchoolJob schoolJob, Model model, HttpServletRequest request, HttpServletResponse response) {
//通过map查询
Map<String,Object> params = new HashMap<String,Object>();
if(!isEmpty(schoolJob.getTitle())){
params.put("title", schoolJob.getTitle());
}
if(!isEmpty(schoolJob.getContent())){
params.put("content", schoolJob.getContent());
}
if(!isEmpty(schoolJob.getAddTime())){
params.put("addTime", schoolJob.getAddTime());
}
if(!isEmpty(schoolJob.getAddUserId())){
params.put("addUserId", schoolJob.getAddUserId());
}
//分页查询
Pager<SchoolJob> pagers = schoolJobService.findByMap(params);
model.addAttribute("pagers", pagers);
//存储查询条件
model.addAttribute("obj", schoolJob);
return "schoolJob/schoolJob";
}
/**
* 跳至添加页面
* @return
*/
@RequestMapping(value = "/add.do")
public String add() {
return "schoolJob/add";
}
/**
* 添加执行
* @return
*/
@RequestMapping(value = "/exAdd.do")
public String exAdd(SchoolJob schoolJob, Model model, HttpServletRequest request, HttpServletResponse response) {
Object attribute = request.getSession().getAttribute("isManage");
if(isEmpty(attribute)){
Integer id2 = Integer.valueOf(request.getSession().getAttribute("userId").toString());
schoolJob.setAddUserId(id2);
}
schoolJob.setAddTime(new Date());
schoolJobService.insert(schoolJob);
gzService.send(3,schoolJob.getTitle());
return "redirect:/schoolJob/findByObj.do";
}
/**
* 添加执行
* @return
*/
@RequestMapping(value = "/exAdd2.do")
public String exAdd2(SchoolJob schoolJob, Model model, HttpServletRequest request, HttpServletResponse response) {
Object attribute = request.getSession().getAttribute("isManage");
if(isEmpty(attribute)){
Integer id2 = Integer.valueOf(request.getSession().getAttribute("userId").toString());
schoolJob.setAddUserId(id2);
}
schoolJob.setAddTime(new Date());
schoolJobService.insert(schoolJob);
gzService.send(3,schoolJob.getTitle());
return "redirect:/schoolJob/findByObj2.do";
}
/**
* 跳至修改页面
* @return
*/
@RequestMapping(value = "/update.do")
public String update(Integer id,Model model) {
SchoolJob obj = schoolJobService.load(id);
model.addAttribute("obj",obj);
return "schoolJob/update";
}
/**
* 添加修改
* @return
*/
@RequestMapping(value = "/exUpdate.do")
public String exUpdate(SchoolJob schoolJob, Model model, HttpServletRequest request, HttpServletResponse response) {
schoolJobService.update(schoolJob);
return "redirect:/schoolJob/findByObj.do";
}
/**
* 删除通过主键
* @return
*/
@RequestMapping(value = "/delete.do")
public String delete(Integer id, Model model, HttpServletRequest request, HttpServletResponse response) {
//真正删除
schoolJobService.deleteById(id);
//通过参数删除
//Map<String,Object> params = new HashMap<String,Object>();
//params.put("id", id);
//schoolJobService.deleteBySqId("deleteBySql", params);
//状态删除
//SchoolJob load = schoolJobService.load(id);
//load.setIsDelete(1);
//schoolJobService.update(load);
return "redirect:/schoolJob/findByObj.do";
}
// --------------------------------------- 华丽分割线 ------------------------------
/**
* 分页查询 返回list json(通过对象)
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/findByObj.json", method = RequestMethod.GET)
@ResponseBody
public String findByObjByEntity(SchoolJob schoolJob, Model model, HttpServletRequest request, HttpServletResponse response) {
//分页查询
Pager<SchoolJob> pagers = schoolJobService.findByEntity(schoolJob);
JSONObject jsonObject = JsonUtil2.getJsonObject();
jsonObject.put("pagers", pagers);
jsonObject.put("obj", schoolJob);
return jsonObject.toString();
}
/**
* 分页查询 返回list json(通过Map)
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/findByMap.json", method = RequestMethod.GET)
@ResponseBody
public String findByMapMap(SchoolJob schoolJob, Model model, HttpServletRequest request, HttpServletResponse response) {
//通过map查询
Map<String,Object> params = new HashMap<String,Object>();
if(!isEmpty(schoolJob.getTitle())){
params.put("title", schoolJob.getTitle());
}
if(!isEmpty(schoolJob.getContent())){
params.put("content", schoolJob.getContent());
}
if(!isEmpty(schoolJob.getAddTime())){
params.put("addTime", schoolJob.getAddTime());
}
if(!isEmpty(schoolJob.getAddUserId())){
params.put("addUserId", schoolJob.getAddUserId());
}
//分页查询
Pager<SchoolJob> pagers = schoolJobService.findByMap(params);
JSONObject jsonObject = JsonUtil2.getJsonObject();
jsonObject.put("pagers", pagers);
jsonObject.put("obj", schoolJob);
return jsonObject.toString();
}
/**
* ajax 添加
* @param
* @return
*/
@RequestMapping(value = "/exAdd.json", method = RequestMethod.POST)
@ResponseBody
public String exAddJson(SchoolJob schoolJob, Model model, HttpServletRequest request, HttpServletResponse response) {
schoolJobService.insert(schoolJob);
JSONObject jsonObject = JsonUtil2.getJsonObject();
jsonObject.put("message", "添加成功");
return jsonObject.toString();
}
/**
* ajax 修改
* @param
* @return
*/
@RequestMapping(value = "/exUpdate.json",method = RequestMethod.POST)
@ResponseBody
public String exUpdateJson(SchoolJob schoolJob, Model model, HttpServletRequest request, HttpServletResponse response) {
schoolJobService.update(schoolJob);
JSONObject jsonObject = JsonUtil2.getJsonObject();
jsonObject.put("message", "修改成功");
return jsonObject.toString();
}
/**
* ajax 删除
* @return
*/
@RequestMapping(value = "/delete.json", produces = "text/html;charset=UTF-8", method = RequestMethod.GET)
@ResponseBody
public String exDeleteJson(Integer id, Model model, HttpServletRequest request, HttpServletResponse response) {
//真正删除
schoolJobService.deleteById(id);
//通过参数删除
//Map<String,Object> params = new HashMap<String,Object>();
//params.put("id", id);
//schoolJobService.deleteBySqId("deleteBySql", params);
//状态删除
//SchoolJob load = schoolJobService.load(id);
//load.setIsDelete(1);
//schoolJobService.update(load);
JSONObject jsonObject = JsonUtil2.getJsonObject();
jsonObject.put("message", "删除成功");
return jsonObject.toString();
}
/**
* 单文件上传
* @param file
* @param request
* @param model
* @return
*/
@RequestMapping(value = "/saveFile")
public String saveFile(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request, Model model) {
System.out.println("开始");
String path = request.getSession().getServletContext().getRealPath("/upload");
String fileName = file.getOriginalFilename();
System.out.println(path);
File targetFile = new File(path, fileName);
if(!targetFile.exists()){
targetFile.mkdirs();
}
//保存
try {
file.transferTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
/**
* springMvc多文件上传
* @param files
* @param id
* @return
*/
@RequestMapping(value = "/saveFiles")
public String saveFiles(@RequestParam("file") CommonsMultipartFile[] files,Integer id,HttpServletRequest request){
for(int i = 0;i<files.length;i++){
System.out.println("fileName---------->" + files[i].getOriginalFilename());
if(!files[i].isEmpty()){
int pre = (int) System.currentTimeMillis();
try {
//拿到输出流,同时重命名上传的文件
String filePath = request.getRealPath("/upload");
File f=new File(filePath);
if(!f.exists()){
f.mkdirs();
}
String fileNmae=new Date().getTime() + files[i].getOriginalFilename();
File file=new File(filePath+"/"+pre + files[i].getOriginalFilename());
if(!file.exists()){
file.createNewFile();
}
files[i].transferTo(file);
} catch (Exception e) {
e.printStackTrace();
System.out.println("上传出错");
}
}
}
return "";
}
// --------------------------------------- 华丽分割线 ------------------------------
@RequestMapping(value = "/nameList.do")
public String nameList(SchoolJob schoolJob, Model model, HttpServletRequest request, HttpServletResponse response) {
Object attribute = request.getSession().getAttribute("isManage");
if(isEmpty(attribute)){
Integer id2 = Integer.valueOf(request.getSession().getAttribute("userId").toString());
schoolJob.setAddUserId(id2);
}
UserJob userJob=new UserJob();
userJob.setJid(schoolJob.getId());
//分页查询
Pager<UserJob> pagers = userJobService.findByEntity(userJob);
model.addAttribute("pagers", pagers);
//存储查询条件
model.addAttribute("obj", schoolJob);
return "schoolJob/nameList";
}
@RequestMapping("/reduce.do")
public String reduce(Integer uid,Model model){
model.addAttribute("uid",uid);
model.addAttribute("msg","");
return "schoolJob/reduce";
}
}
110

被折叠的 条评论
为什么被折叠?



