基于ssm jsp社区活动中心管理系统源码

【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浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,如ChromeSafariMicrosoft EdgeNetscape NavigatorInternet Explorer,服务器安装SQL ServerOracleMYSQL等数据库。浏览器通过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";
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿毕业分享网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值