当前位置: 首页 > article >正文

基于springboot的婚纱摄影网站

博主主页:猫头鹰源码

博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战

主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询

文末联系获取

项目介绍: 

该系统基于springboot技术,mysql数据库,页面采用html,具有完整的业务逻辑,适合选题:springboot、婚纱、摄影、婚纱摄影等。

项目功能:

1 网站管理
1.1 轮播图管理
概述:所管理的轮播图为首页展示的三张轮播图(规定只能三张显示)

新增:点击新增按钮

①、填写轮播图的标题(此标题为鼠标放上轮播图照片时显示的文字)

②、上传所要展示的照片,图片建议尺寸: 1922像素 * 544像素

③点击保存即可

修改

①、点击修改按钮、只能修改标题,如要修改照片请删除后重新添加

删除

①、点击删除按钮即可

1.2 资讯管理
概述:热门活动所展示的

新增:点击新增按钮

①、填写标题(此标题为文章标题)

②、填写活动内容

③、上传所要展示的照片,图片建议尺寸: 890像素 * 593像素

④、点击保存即可

修改

①、点击修改按钮、只能修改标题和内容,如要修改照片请删除后重新添加

删除

①、点击修改按钮,选择状态为禁用

2 摄影管理
2.1 整体流程

2.2 级别管理
概述:为摄影师的级别

新增:点击新增按钮

①、填写级别名称

②、点击保存即可

修改

①、点击修改按钮

删除

①、点击修改按钮,选择状态为禁用

2.3 标签管理
概述:为摄影师的标签

新增:点击新增按钮

①、填写标签名称

②、点击保存即可

修改

①、点击修改按钮

删除

①、点击修改按钮,选择状态为禁用

2.4 拍摄景点管理
概述:拍摄景点,常驻馆

新增:点击新增按钮

①、填写景点名称、景点描述、状态

②、上传所要景点的照片(只能一张),图片建议尺寸: 855像素 * 520像素

③、点击保存即可

修改

①、点击修改按钮、只能景点名称、景点描述,如要修改照片请删除后重新添加

删除

①、点击修改按钮,选择状态为禁用

2.5 摄影师管理
概述:摄影师

新增:点击新增按钮

①、填写摄影师名称、摄影师描述、选择标签、选择级别、选择常驻馆(就是景点)

②、上传所摄影师头像,图片建议尺寸: 270像素 * 270像素

③、点击保存即可

修改

①、点击修改按钮、只能景点名称、景点描述,如要修改照片请删除后重新添加

删除

①、点击修改按钮,选择状态为禁用或者点击状态栏中的按钮,YES为启用 NO为禁用

2.6 客片管理
概述:摄影师的客片

新增:点击新增按钮

①、填写作品标题、作品描述、选择摄影师、选择常驻馆(就是景点)

②、上传所拍摄的客片的照片(点击添加附件按钮,支持多张照片),图片建议尺寸: 无

③、点击保存即可

④、设置客片的封面(很重要),点击设置封面按钮,然后上传照片,图片建议尺寸: 290像素 * 380像素

修改

①、点击修改按钮、只能作品标题、作品描述,如要修改照片请删除后重新添加

删除

①、点击状态栏中的按钮,YES为启用 NO为禁用

3 用户订单管理
3.1 订单管理
概述:用户的预约和已预约和摄影师的无档期设置

无档期设置

①、选择摄影师

②、选择无档期的时间,点击确定

③、选择该摄影师该时间段是没有空无档期还是已经有预约了

④、点击保存即可

接收

①、点击接收按钮,即为接受该用户的预约

拒绝

①、点击拒绝按钮,即为拒绝该用户的预约

* 很重要的一点,无档期设置和接收、拒绝设置时必须时时间段无冲突的,必须再三确认。

系统包含技术:

后端:springboot
前端:js、css,html页面
开发工具:idea
数据库:mysql 5.7
JDK版本:jdk1.8

部分截图说明:

下面是首页

客片欣赏,后台可以维护 

 

拍摄景点维护

选择摄影师

预约摄影师

预约

用户登录后查看订单

 后台-登录

 后台-管理员首页

 后台-订单管理

后台-级别维护

 后台-摄影师管理

后台-资讯活动管理

 后台-景点维护

部分代码:

过滤器


@Configuration
public class FilterConfiguration {
    @Bean
    public FilterRegistrationBean filterAdminRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        //注入过滤器
        registration.setFilter(new AdminFilter());
        //拦截规则
        registration.addUrlPatterns("/manage/page/*","/manage/home.html","/manage/index.html");
        //过滤器名称
        registration.setName("AdminFilter");
        //是否自动注册 false 取消Filter的自动注册
        registration.setEnabled(true);
        //过滤器顺序
        registration.setOrder(2);
        return registration;
    }
    @Bean
    public FilterRegistrationBean filterLoginRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        //注入过滤器
        registration.setFilter(new LoginFilter());
        //拦截规则
        registration.addUrlPatterns("/member.html");
        //过滤器名称
        registration.setName("LoginFilter");
        //是否自动注册 false 取消Filter的自动注册
        registration.setEnabled(true);
        //过滤器顺序
        registration.setOrder(1);
        return registration;
    }

}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException {
		HttpServletRequest request=(HttpServletRequest)arg0;
		HttpServletResponse response=(HttpServletResponse)arg1;
		HttpSession session = request.getSession();
		
		
		if(session.getAttribute("admin")!=null){
			arg2.doFilter(arg0, arg1);
		}else{
			response.sendRedirect("/manage/login.html");
		}
	}

	public void init(FilterConfig arg0) throws ServletException {
	}

摄影师操作

/**
	 * 分页获取photographer
	 * 
	 * @return
	 */
	@RequestMapping(value = "getPhotographerListByPage", method = RequestMethod.POST)
	@ResponseBody
	public ReturnResult getPhotographerListByPage(PageVO page, String labelId, String levelId, String spotsId,
			String beforeTime, String afterTime, String status, String name) {
		returnResult.setStatus(ReturnCodeType.FAILURE);
		try {
			Map<String, Object> resultMap = new HashMap<String, Object>();
			StringBuffer sql = new StringBuffer(
					"SELECT a.*,f.`name` AS label,g.`name` AS level,h.`name` AS spots FROM t_photographer a," +
							"t_photographer_label b,t_photographer_level c ,t_photographer_spots d,t_label f," +
							"t_level g,t_spots h WHERE a.id=b.photographerId AND a.id = c.photographer " +
							"AND a.id = d.photographerId AND f.id=b.labelId AND g.id=c.levelId AND h.id= d.spotsId");
			if (StringUtils.isNotBlank(labelId)) {
				sql.append(" AND b.labelId=" + labelId);
				sql.append(" AND f.id=" + labelId);
			}
			if (StringUtils.isNotBlank(levelId)) {
				sql.append(" AND c.levelId=" + levelId);
				sql.append(" AND g.id=" + levelId);
			}
			if (StringUtils.isNotBlank(spotsId)) {
				sql.append(" AND d.spotsId=" + spotsId);
				sql.append(" AND h.id=" + spotsId);
			}
			if (StringUtils.isNotBlank(status)) {
				sql.append(" AND a.status=" + status);
			}
			if (StringUtils.isNotBlank(name)) {
				sql.append(" AND a.name=" + name);
			}
			List<Map<String, Object>> results = photographerService.selectPageBySQL(sql.toString(), page.getPage() - 1,
					page.getRows());
			if (!results.isEmpty() && results != null) {
				int total = photographerService.selectCount(new TPhotographer());
				int rows = page.getRows();
				rows = rows == 0 ? 10 : rows;
				resultMap.put("total", (total % rows != 0 ? (total / rows + 1) : (total / rows)));
				resultMap.put("page", page.getPage());
				resultMap.put("records", total);
				resultMap.put("rows", results);
				returnResult.setStatus(ReturnCodeType.SUCCESS).setData(resultMap);
			}
		} catch (Exception e) {
			logger.error("分页获取photographer失败" + e);
		}
		return returnResult;
	}

	/**
	 * 分页获取启用的photographer
	 * 
	 * @return
	 */
	@RequestMapping(value = "getPhotographerListByPageStatus", method = RequestMethod.POST)
	@ResponseBody
	public ReturnResult getPhotographerListByPageStatus(PageVO page, String labelId, String levelId, String spotsId,
			String start, String end) {
		returnResult.setStatus(ReturnCodeType.FAILURE);
		try {
			Map<String, Object> resultMap = new HashMap<String, Object>();
			StringBuffer sql = new StringBuffer(
					"SELECT a.*,f.`name` AS label,g.`name` AS level,h.`name` AS spots FROM t_photographer a,t_photographer_label b,t_photographer_level c ,t_photographer_spots d,t_label f,t_level g,t_spots h WHERE a.id=b.photographerId AND a.id = c.photographer AND a.id = d.photographerId AND f.id=b.labelId AND g.id=c.levelId AND h.id= d.spotsId AND a.status=0");

			StringBuffer countSql = new StringBuffer("SELECT COUNT(*) AS total FROM t_photographer a,t_photographer_label b,t_photographer_level c ,t_photographer_spots d,t_label f,t_level g,t_spots h WHERE a.id=b.photographerId AND a.id = c.photographer AND a.id = d.photographerId AND f.id=b.labelId AND g.id=c.levelId AND h.id= d.spotsId AND a.status=0");
			if (StringUtils.isNotBlank(start) && StringUtils.isNotBlank(end)) {
				List<String> list = photographerService.selectByStartEnd(start,end);
				for(String id : list){
					sql.append(" AND a.id!="+id);
					countSql.append(" AND a.id!="+id);
				}
			}
			if (StringUtils.isNotBlank(labelId)) {
				sql.append(" AND b.labelId=" + labelId);
				sql.append(" AND f.id=" + labelId);
				countSql.append(" AND b.labelId=" + labelId);
				countSql.append(" AND f.id=" + labelId);
			}
			if (StringUtils.isNotBlank(levelId)) {
				sql.append(" AND c.levelId=" + levelId);
				sql.append(" AND g.id=" + levelId);
				countSql.append(" AND c.levelId=" + levelId);
				countSql.append(" AND g.id=" + levelId);
			}
			if (StringUtils.isNotBlank(spotsId)) {
				sql.append(" AND d.spotsId=" + spotsId);
				sql.append(" AND h.id=" + spotsId);
				countSql.append(" AND d.spotsId=" + spotsId);
				countSql.append(" AND h.id=" + spotsId);
			}

			List<Map<String, Object>> results = photographerService.selectPageBySQL(sql.toString(), page.getPage() - 1,
					page.getRows());
			if (!results.isEmpty() && results != null) {
				int total = Integer.valueOf( photographerService.selectBySQL(countSql.toString()).get(0).get("total").toString());
				int rows = page.getRows();
				rows = rows == 0 ? 10 : rows;
				resultMap.put("total", (total % rows != 0 ? (total / rows + 1) : (total / rows)));
				resultMap.put("page", page.getPage());
				resultMap.put("records", total);
				resultMap.put("rows", results);
				returnResult.setStatus(ReturnCodeType.SUCCESS).setData(resultMap);
			}
		} catch (Exception e) {
			logger.error("分页获取启用的photographer失败" + e);
		}
		return returnResult;
	}

	/**
	 * 获取所有启用的Photographer
	 * 
	 * @param Photographer
	 * @return
	 */
	@RequestMapping(value = "getAllPhotographer", method = RequestMethod.POST)
	@ResponseBody
	public ReturnResult getAllPhotographer() {
		returnResult.setStatus(ReturnCodeType.FAILURE);
		try {
			returnResult.setStatus(ReturnCodeType.SUCCESS).setData(photographerService.selectBySQL(
					"SELECT a.id,a.name FROM t_photographer a,t_photographer_label b,t_photographer_level c ,t_photographer_spots d,t_label f,t_level g,t_spots h WHERE a.id=b.photographerId AND a.id = c.photographer AND a.id = d.photographerId AND f.id=b.labelId AND g.id=c.levelId AND h.id= d.spotsId AND a.status=0"));
		} catch (Exception e) {
			logger.error("获取所有启用的Photographer失败" + e);
		}
		return returnResult;
	}

以上就是部分功能展示,从整体上来看,本系统功能是十分完整的,界面设计简洁大方,交互友好,数据库设计也很合理,规模适中,代码工整,清晰,适合学习使用。

好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,下期见~~


http://www.kler.cn/a/2445.html

相关文章:

  • springmvc的拦截器,全局异常处理和文件上传
  • Vue+element 回车查询页面刷新
  • Flask内存马学习
  • 电气设计 | 低压接地系统:TN-C 、TN-S、TN-C-S、TT适用哪些场所?
  • 【原生js案例】前端封装ajax请求及node连接 MySQL获取真实数据
  • 高防IP能够为游戏行业提供哪些防护?
  • debian11安装k8s
  • Tornado 异步协程coroutine原理
  • 【K3s】第28篇 详解 k3s-killall.sh 脚本
  • 多线程 (六) wait和notify
  • 熟悉常用的 Linux 操作和 Hadoop 操作
  • 【Docker】之docker-compose的介绍与命令的使用
  • spring boot 集成 postgis jar
  • leetcode -- 876.链表的中间节点
  • XCPC第十一站,带你学会图论基本算法
  • 【kubernetes云原生】k8s标签选择器使用详解
  • 小白怎么系统的自学计算机科学和黑客技术?
  • 【Shell】脚本
  • day13 模块和异常捕获总结
  • 【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(7)
  • 银行数字化转型导师坚鹏:基于案例研究的银行APP运营成功之道
  • Word2010(详细布局解释)
  • 栈----数据结构
  • 测试用例的价值与体系(软件测试入门)
  • 字符串的反转以及巧用反转 ------关于反转,看这一篇就足够了
  • 架构师必须要掌握的大小端问题