文末获取源码
开发语言:Java
开发工具:IDEA /Eclipse
数据库:MYSQL5.7/8.0
应用服务:Tomcat7/Tomcat8
是否Maven项目:是
后端框架:SpringBoot
前端框架:vue+element等
JDK版本:jdk1.8
项目架构:B/S架构
目录
前言介绍
摄影跟拍预定管理方面的任务繁琐,以至于每年都在摄影跟拍预定管理这方面投入较多的精力却效果甚微,摄影跟拍预定管理系统的目标就是为了能够缓解摄影跟拍预定管理工作方面面临的压力,让摄影跟拍预定管理方面的工作变得更加高效准确。
本项目在开发和设计过程中涉及到原理和技术有: B/S、java技术和MySQL数据库等等;将按以下章节进行开发设计:
管理员:管理员使用本系统涉到的功能主要有:首页、个人中心、用户管理、摄影师管理、摄影跟拍管理、类别管理、周边商品管理、商品类型管理、跟拍预约管理、跟拍流程管理、成品信息管理、商品订单管理、系统管理等功能。
摄影师;摄影师使用本系统涉到的功能主要有:首页、个人中心、跟拍预约管理、跟拍流程管理、成品信息管理、商品订单管理等功能。
用户主要包括首页、个人中心、跟拍预约管理、跟拍流程管理、成品信息管理、商品订单管理、评论信息管理、我的收藏管理等功能。
系统功能分析
考虑到实际生活中在摄影跟拍预定方面的需要以及对该系统认真的分析,将系统权限按管理员、摄影师和用户这三类涉及用户划分。
(a) 管理员;管理员使用本系统涉到的功能主要有:首页、个人中心、用户管理、摄影师管理、摄影跟拍管理、类别管理、周边商品管理、商品类型管理、跟拍预约管理、跟拍流程管理、成品信息管理、商品订单管理、系统管理等功能。管理员用例图如图
(b)摄影师;摄影师使用本系统涉到的功能主要有:首页、个人中心、跟拍预约管理、跟拍流程管理、成品信息管理、商品订单管理等功能。摄影师用例图如图
(c)用户主要包括首页、个人中心、跟拍预约管理、跟拍流程管理、成品信息管理、商品订单管理、评论信息管理、我的收藏管理等功能。用户用例图如图
系统设计
系统整体功能如下图所示:
数据库设计
概念模型是对现实中的问题出现的事物的进行描述,ER图是由实体及其关系构成的图,通过E-R图可以清楚地描述系统涉及到的实体之间的相互关系。
个人中心实体图如图
摄影跟拍实体图如图
周边商品实体图如图
系统详细设计
首页
摄影跟拍预定管理系统,在系统首页可以查看首页、摄影跟拍、周边商品、公告信息、个人中心、后台管理等内容,并进行详细操作,如图
摄影跟拍
在摄影跟拍页面中可以查看套餐名称、类别、套餐简介、拍摄地点、套餐价格、注意事项、发布日期等内容进行预约、评论或收藏等操作,如图
周边商品
在周边商品页面可以查看商品名称、商品类型、商品规格、商品简介、原材料、生产地、单价、数量、上架日期、点击次数等内容进行购买、收藏或评论等操作,如图
公告信息
个人中心
在个人中心页面通过填写个人账号、密码、 姓名、邮箱、手机号码、图片等内容进行更新信息,并可以根据我的收藏进行相应的操作,如图
管理员功能模块
管理员进行登录,进入系统前在登录页面根据要求填写用户名和密码,选择角色等信息,点击登录进行登录操作,如图
管理员登录系统后,可以对首页、个人中心、用户管理、摄影师管理、摄影跟拍管理、类别管理、周边商品管理、商品类型管理、跟拍预约管理、跟拍流程管理、成品信息管理、商品订单管理、系统管理等进行相应的操作管理,如图
用户管理
在用户管理页面可以对索引、个人账号、姓名、性别、邮箱、手机号码、照片等内容进行详情、修改或删除等操作,如图
摄影师管理
在摄影师管理页面可以对索引、工号、员工姓名、性别、邮箱、联系手机、照片等内容进行详情、修改或删除等操作,如图
摄影跟拍管理
在摄影跟拍管理页面可以对索引、套餐名称、套餐图片、类别、拍摄地点、套餐价格、注意事项、发布日期等内容进行详情、修改、查看评论或删除等操作,如图
类别管理
在课程分类管理页面可以对索引、类型等内容进行详情、修改或删除等操作,如图
周边商品管理
在周边商品管理页面可以对索引、商品名称、商品类型、商品图片、商品规格、生产地、原材料、单价、数量、上架日期等内容进行详情、修改、查看评论或删除等操作,如图
成品信息管理
在成品信息管理页面可以对索引、成品名称、 成品图片、成品附件、个人账号、姓名、手机号码、上传日期、工号、员工姓名、联系手机等内容进行详情或删除等操作,如图
商品订单管理
在商品订单管理页面中可以对索引、商品名称、商品类型、单价、数量、金额、个人账号、姓名、手机号码、下单备注、下单时间、是否支付、审核回复、审核状态、审核等内容进行详情或删除等操作,如图
系统管理
在轮播图管理页面中可以对索引、名称、值等内容进行详情或修改等操作,并可以根据公告信息进行相应的操作,如图
摄影师功能模块
摄影师登录进入摄影跟拍预定管理系统可以对首页、个人中心、跟拍预约管理、跟拍流程管理、成品信息管理、商品订单管理等进行相应操作,如图
跟拍预约管理
在跟拍预约管理页面中可以对索引、套餐名称、类型、拍摄地点、套餐价格、个人账号、姓名、手机号码、预约日期、预约备注、下单时间、是否支付、审核回复、审核状态、审核等内容进行详情或流程等操作,如图
跟拍流程管理
在跟拍流程管理页面可以对索引、套餐名称、类别、拍摄地点、个人账号、姓名、手机号码、安排时间、工号、员工姓名、联系手机、操作日期审核回复、审核状态等内容进行详情、成品、修改或删除等操作,如图
用户功能模块
用户注册,通过填写个人账号、密码、 确认密码、 姓名、邮箱、手机号码等内容进行注册等操作,如图
用户登录进入摄影跟拍预定管理系统可以对首页、个人中心、跟拍预约管理、跟拍流程管理、成品信息管理、商品订单管理、评论信息管理、我的收藏管理等进行相应操作,如图
成品信息管理
在成品信息管理页面可以对索引、成品名称、 成品图片、成品附件、个人账号、姓名、手机号码、上传日期、工号、员工姓名、联系手机等内容进行详情等操作,如图
跟拍预约管理
在跟拍预约管理页面可以对索引、套餐名称、类型、拍摄地点、套餐价格、个人账号、姓名、手机号码、预约日期、预约备注、下单时间、是否支付、审核回复、审核状态、审核等内容进行详情等操作,如图
部分核心代码:
/**
* 摄影跟拍
* 后端接口
* @author
* @email
* @date 2022-02-24 11:54:57
*/
@RestController
@RequestMapping("/sheyinggenpai")
public class SheyinggenpaiController {
@Autowired
private SheyinggenpaiService sheyinggenpaiService;
@Autowired
private StoreupService storeupService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,SheyinggenpaiEntity sheyinggenpai,
HttpServletRequest request){
EntityWrapper<SheyinggenpaiEntity> ew = new EntityWrapper<SheyinggenpaiEntity>();
PageUtils page = sheyinggenpaiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, sheyinggenpai), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,SheyinggenpaiEntity sheyinggenpai,
HttpServletRequest request){
EntityWrapper<SheyinggenpaiEntity> ew = new EntityWrapper<SheyinggenpaiEntity>();
PageUtils page = sheyinggenpaiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, sheyinggenpai), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( SheyinggenpaiEntity sheyinggenpai){
EntityWrapper<SheyinggenpaiEntity> ew = new EntityWrapper<SheyinggenpaiEntity>();
ew.allEq(MPUtil.allEQMapPre( sheyinggenpai, "sheyinggenpai"));
return R.ok().put("data", sheyinggenpaiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(SheyinggenpaiEntity sheyinggenpai){
EntityWrapper< SheyinggenpaiEntity> ew = new EntityWrapper< SheyinggenpaiEntity>();
ew.allEq(MPUtil.allEQMapPre( sheyinggenpai, "sheyinggenpai"));
SheyinggenpaiView sheyinggenpaiView = sheyinggenpaiService.selectView(ew);
return R.ok("查询摄影跟拍成功").put("data", sheyinggenpaiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
SheyinggenpaiEntity sheyinggenpai = sheyinggenpaiService.selectById(id);
sheyinggenpai.setClicktime(new Date());
sheyinggenpaiService.updateById(sheyinggenpai);
return R.ok().put("data", sheyinggenpai);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
SheyinggenpaiEntity sheyinggenpai = sheyinggenpaiService.selectById(id);
sheyinggenpai.setClicktime(new Date());
sheyinggenpaiService.updateById(sheyinggenpai);
return R.ok().put("data", sheyinggenpai);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody SheyinggenpaiEntity sheyinggenpai, HttpServletRequest request){
sheyinggenpai.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(sheyinggenpai);
sheyinggenpaiService.insert(sheyinggenpai);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody SheyinggenpaiEntity sheyinggenpai, HttpServletRequest request){
sheyinggenpai.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(sheyinggenpai);
sheyinggenpaiService.insert(sheyinggenpai);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody SheyinggenpaiEntity sheyinggenpai, HttpServletRequest request){
//ValidatorUtils.validateEntity(sheyinggenpai);
sheyinggenpaiService.updateById(sheyinggenpai);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
sheyinggenpaiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<SheyinggenpaiEntity> wrapper = new EntityWrapper<SheyinggenpaiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = sheyinggenpaiService.selectCount(wrapper);
return R.ok().put("count", count);
}
/**
* 前端智能排序
*/
@IgnoreAuth
@RequestMapping("/autoSort")
public R autoSort(@RequestParam Map<String, Object> params,SheyinggenpaiEntity sheyinggenpai, HttpServletRequest request,String pre){
EntityWrapper<SheyinggenpaiEntity> ew = new EntityWrapper<SheyinggenpaiEntity>();
Map<String, Object> newMap = new HashMap<String, Object>();
Map<String, Object> param = new HashMap<String, Object>();
Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, Object> entry = it.next();
String key = entry.getKey();
String newKey = entry.getKey();
if (pre.endsWith(".")) {
newMap.put(pre + newKey, entry.getValue());
} else if (StringUtils.isEmpty(pre)) {
newMap.put(newKey, entry.getValue());
} else {
newMap.put(pre + "." + newKey, entry.getValue());
}
}
params.put("sort", "clicktime");
params.put("order", "desc");
PageUtils page = sheyinggenpaiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, sheyinggenpai), params), params));
return R.ok().put("data", page);
}
}
/**
* 成品信息
* 数据库通用操作实体类(普通增删改查)
* @author
* @email
* @date 2022-02-24 11:54:57
*/
@TableName("chengpinxinxi")
public class ChengpinxinxiEntity<T> implements Serializable {
private static final long serialVersionUID = 1L;
public ChengpinxinxiEntity() {
}
public ChengpinxinxiEntity(T t) {
try {
BeanUtils.copyProperties(this, t);
} catch (IllegalAccessException | InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 主键id
*/
@TableId
private Long id;
/**
* 成品名称
*/
private String chengpinmingcheng;
/**
* 成品图片
*/
private String chengpintupian;
/**
* 成品附件
*/
private String chengpinfujian;
/**
* 个人账号
*/
private String gerenzhanghao;
/**
* 姓名
*/
private String xingming;
/**
* 手机号码
*/
private String shoujihaoma;
/**
* 上传日期
*/
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
@DateTimeFormat
private Date shangchuanriqi;
/**
* 工号
*/
private String gonghao;
/**
* 员工姓名
*/
private String yuangongxingming;
/**
* 联系手机
*/
private String lianxishouji;
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
@DateTimeFormat
private Date addtime;
public Date getAddtime() {
return addtime;
}
public void setAddtime(Date addtime) {
this.addtime = addtime;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
/**
* 设置:成品名称
*/
public void setChengpinmingcheng(String chengpinmingcheng) {
this.chengpinmingcheng = chengpinmingcheng;
}
/**
* 获取:成品名称
*/
public String getChengpinmingcheng() {
return chengpinmingcheng;
}
/**
* 设置:成品图片
*/
public void setChengpintupian(String chengpintupian) {
this.chengpintupian = chengpintupian;
}
/**
* 获取:成品图片
*/
public String getChengpintupian() {
return chengpintupian;
}
/**
* 设置:成品附件
*/
public void setChengpinfujian(String chengpinfujian) {
this.chengpinfujian = chengpinfujian;
}
/**
* 获取:成品附件
*/
public String getChengpinfujian() {
return chengpinfujian;
}
/**
* 设置:个人账号
*/
public void setGerenzhanghao(String gerenzhanghao) {
this.gerenzhanghao = gerenzhanghao;
}
/**
* 获取:个人账号
*/
public String getGerenzhanghao() {
return gerenzhanghao;
}
/**
* 设置:姓名
*/
public void setXingming(String xingming) {
this.xingming = xingming;
}
/**
* 获取:姓名
*/
public String getXingming() {
return xingming;
}
/**
* 设置:手机号码
*/
public void setShoujihaoma(String shoujihaoma) {
this.shoujihaoma = shoujihaoma;
}
/**
* 获取:手机号码
*/
public String getShoujihaoma() {
return shoujihaoma;
}
/**
* 设置:上传日期
*/
public void setShangchuanriqi(Date shangchuanriqi) {
this.shangchuanriqi = shangchuanriqi;
}
/**
* 获取:上传日期
*/
public Date getShangchuanriqi() {
return shangchuanriqi;
}
/**
* 设置:工号
*/
public void setGonghao(String gonghao) {
this.gonghao = gonghao;
}
/**
* 获取:工号
*/
public String getGonghao() {
return gonghao;
}
/**
* 设置:员工姓名
*/
public void setYuangongxingming(String yuangongxingming) {
this.yuangongxingming = yuangongxingming;
}
/**
* 获取:员工姓名
*/
public String getYuangongxingming() {
return yuangongxingming;
}
/**
* 设置:联系手机
*/
public void setLianxishouji(String lianxishouji) {
this.lianxishouji = lianxishouji;
}
/**
* 获取:联系手机
*/
public String getLianxishouji() {
return lianxishouji;
}
}