源码获取:博客首页 "资源" 里下载!
主要技术:springmvc、 springboot 、mybatis、mysql 、jQuery、layui、css、jsp shiro权限控制
主要功能截图如下:
用户登录、首页主要功能有:会员信息管理、会员到期续费管理、充值管理、教练课程管理、私教管理、器材管理、小商品售卖管理、信息统计、修改密码等主要功能:
会员管理、续卡、会员卡类型管理:
教练列表展示和添加修改删除教练信息:
会员私教课程管理:
添加私教信息:
健身课程列表展示查询和添加修改:
健身器材列表展示查询和添加修改:
物品遗失管理、归还、添加丢失物品、查询、取回丢失物品等:
健身房小商品售卖管理:列表数据展示、查询、进货、售卖 退货等操作
简单的树状图统计:
代码:
数据库表:
课程管理Controller控制层:
/**
* @Description: 课程管理Controller控制层
*/
@Controller
@RequestMapping("/subject")
public class SubjectController {
@Autowired
private SubjectDaoImpl subjectDaoImpl;
@Autowired
private SubjectDao subjectDao;
@Autowired
private PrivateCoachInfoDao privateCoachInfoDao;
/**
* @Description: 课程管理-进入课程信息界面
* xiaoc
* @Date: 2020/4/8
*/
@RequestMapping("/jin7")
public String jin7(){
return "WEB-INF/jsp/subject";
}
/**
* @Description: 课程管理-根据课程名称分页查询
* xiaoc
* @Date: 2020/4/8
*/
@RequestMapping("/query")
@ResponseBody
public Map<String,Object> query(String subname, int pageSize, int pageNumber){
Map<String,Object> map1=new HashMap<String,Object>();
map1.put("subname",subname);
map1.put("qi",(pageNumber-1)*pageSize);
map1.put("shi",pageSize);
return subjectDaoImpl.query(map1);
}
/**
* @Description: 课程管理-根据课程id删除课程
* xiaoc
* @Date: 2020/4/8
*/
@RequestMapping("/del")
@ResponseBody
public Map<String,Object> del(long subId,String subname, int pageSize, int pageNumber){
//先根据教练id在私教信息表里查询是否有其信息
List<PrivateCoachInfo> privateCoachInfoList = privateCoachInfoDao.queryBySubjectIdNative(subId);
if(privateCoachInfoList !=null && privateCoachInfoList.size() > 0){
//如果有,先循环删除
for(PrivateCoachInfo privateCoachInfo : privateCoachInfoList){
if(subId == privateCoachInfo.getSubject().getSubId()){
privateCoachInfoDao.delete(privateCoachInfo);
}
}
}
subjectDao.deleteById(subId);
Map<String,Object> map1=new HashMap<String,Object>();
map1.put("subname",subname);
map1.put("qi",(pageNumber-1)*pageSize);
map1.put("shi",pageSize);
return subjectDaoImpl.query(map1);
}
/**
* @Description: 课程管理-添加课程
* xiaoc
* @Date: 2020/4/8
*/
@RequestMapping("/add")
@ResponseBody
public void save(Subject subject){
subjectDao.save(subject);
}
/**
* @Description: 课程管理-根据课程id查询课程信息
* xiaoc
* @Date: 2020/4/8
*/
@RequestMapping("/cha")
@ResponseBody
public Optional<Subject> one(long subId){
return subjectDao.findById(subId);
}
/**
* @Description: 课程管理-修改课程信息
* xiaoc
* @Date: 2020/4/8
*/
@RequestMapping("/upd")
@ResponseBody
public void upd(Subject subject){
subjectDao.save(subject);
}
/**
* @Description: 课程管理-根据课程名称计算总课程数据
* xiaoc
* @Date: 2020/4/8
*/
@RequestMapping("/count")
@ResponseBody
public Long count (String subname){
subjectDaoImpl.count(subname);
return subjectDaoImpl.count(subname);
}
}
商品管理Controller控制层:
/**
* @Description: 商品管理Controller控制层
*/
@Controller
@RequestMapping("/goods")
public class GoodsController {
@Autowired
private GoodsDao goodsDao;
@Autowired
private GoodInfoDao goodInfoDao;
@Autowired
private GoodsDaoImpl goodsDaoImpl;
/**
* @Description: 商品管理-进入商品列表界面
* xiaoc
* @Date: 2020/4/14
*/
@RequestMapping("/sp")
public String sp(){
return "WEB-INF/jsp/Goods";
}
/**
* @Description: 商品管理-根据商品名称分页查询
* xiaoc
* @Date: 2020/4/14
*/
@RequestMapping("/query")
@ResponseBody
public Map<String,Object> query(String goodsname, int pageSize, int pageNumber){
Map<String,Object> map1=new HashMap<String,Object>();
map1.put("goodsname",goodsname);
map1.put("qi",(pageNumber-1)*pageSize);
map1.put("shi",pageSize);
return goodsDaoImpl.query(map1);
}
/**
* @Description: 商品管理-查询所有商品信息
* xiaoc
* @Date: 2020/4/14
*/
@RequestMapping("/query2")
@ResponseBody
public List<Goods> query2(){
List list = goodsDao.findAll();
return list;
}
/**
* @Description: 商品管理-根据商品id删除商品信息
* xiaoc
* @Date: 2020/4/14
*/
@RequestMapping("/del")
@ResponseBody
public Map<String,Object> del(long goodsId,String goodsname, int pageSize, int pageNumber){
//先根据商品id在商品信息表里查询是否有其信息
List<GoodInfo> goodInfoList = goodInfoDao.queryByGoodsIdNative(goodsId);
if(goodInfoList !=null && goodInfoList.size() > 0){
//如果有,先循环删除
for(GoodInfo goodInfo : goodInfoList){
if(goodsId == goodInfo.getGoods().getGoodsId()){
goodInfoDao.delete(goodInfo);
}
}
}
goodsDao.deleteById(goodsId);
Map<String,Object> map1=new HashMap<String,Object>();
map1.put("goodsname",goodsname);
map1.put("qi",(pageNumber-1)*pageSize);
map1.put("shi",pageSize);
return goodsDaoImpl.query(map1);
}
/**
* @Description: 商品管理-添加商品
* xiaoc
* @Date: 2020/4/14
*/
@RequestMapping("/add")
@ResponseBody
public void save(Goods goods){
goodsDao.save(goods);
}
/**
* @Description: 商品管理-根据商品id查询单个商品信息
* xiaoc
* @Date: 2020/4/14
*/
@RequestMapping("/cha")
@ResponseBody
public Optional<Goods> one(long goodsId){
return goodsDao.findById(goodsId);
}
/**
* @Description: 商品管理-根据商品名称计算总数量
* xiaoc
* @Date: 2020/4/14
*/
@RequestMapping("/count")
@ResponseBody
public Long count (String goodsName){
goodsDaoImpl.count(goodsName);
return goodsDaoImpl.count(goodsName);
}
/**
* @Description: 商品管理-修改商品信息
* xiaoc
* @Date: 2020/4/14
*/
@RequestMapping("/upd")
@ResponseBody
public void upd(Goods goods){
goodsDaoImpl.update(goods);
}
/**
* @Description: 商品管理-修改商品信息
* xiaoc
* @Date: 2020/4/14
*/
@RequestMapping("/update")
@ResponseBody
public void update(Goods goods){
goodsDao.save(goods);
}
/**
* @Description: 商品管理-查询所有商品信息
* xiaoc
* @Date: 2020/4/14
*/
@RequestMapping("/topcoach")
@ResponseBody
public Map<String,Object> topcoach(){
Map<String,Object> map = new HashMap<String,Object>();
map.put("goods",goodsDao.findAll());
return map ;
}
}
管理员登录Controller控制层:
/**
* @Description: 管理员登录Controller控制层
*/
@Controller
@RequestMapping("/")
public class AdminuserConntroller {
@Autowired
private AdminuserDao adminuserDao;
/**
* @Description: 输入端口号直接跳转登录界面
* xiaoc
* @Date: 2020/4/29
*/
@RequestMapping("/")
public String beforeLogin(){
return "login";
}
/**
* @Description: 管理员登录验证方法
* xiaoc
* @Date: 2020/4/4
*/
@RequestMapping("/dl/yz")
public String login(String username, String password,HttpSession httpSession,Model model){
Subject subject= SecurityUtils.getSubject();
UsernamePasswordToken userToken=new UsernamePasswordToken(username,DigestUtils.md5Hex(password));
try{
subject.login(userToken);
Adminuser a= adminuserDao.findByAdminNameAndAdminPassword(username,DigestUtils.md5Hex(password));
httpSession.setAttribute("user",a);
return "WEB-INF/jsp/index";
}catch (UnknownAccountException e){
model.addAttribute("msg","用户名或密码错误,请重新输入");
return "login";
}
/*Adminuser a= adminuserDao.findByAdminNameAndAdminmima(username,password);
if(a!=null){
httpSession.setAttribute("user",a);
return "WEB-INF/jsp/index" ;
}
model.addAttribute("mag","账号或密码错误");
return "login";*/
}
/**
* @Description: 退出登录后清楚session
* xiaoc
* @Date: 2020/5/1
*/
@RequestMapping("/logout")
public String logout(){
Subject subject = SecurityUtils.getSubject();
subject.logout();
return "redirect:/login";
}
/**
* @Description: 跳转到修改密码界面
* xiaoc
* @Date: 2020/5/1
*/
@RequestMapping("/updPassword")
public String updPassword(){
return "WEB-INF/jsp/updPassword";
}
/**
* @Description: 修改密码
* xiaoc
* @Date: 2020/5/1
*/
@RequestMapping("/upd/updPassword")
public String updPasswordConfirm(String oldPassword,String newPassword,String newPasswordAgain,HttpSession httpSession,Model model){
Pattern p = Pattern.compile("^(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!.%*#?&])[A-Za-z\\d$@$!.%*#?&]{8,}$");
Matcher m = p.matcher(newPassword);
if(!m.matches()){
model.addAttribute("msg","新密码最少为8位并为字母+数字+特殊字符");
return "WEB-INF/jsp/updPassword";
}
if(!newPassword.equals(newPasswordAgain)){
model.addAttribute("msg","两次输入新密码不一致,请重新输入");
return "WEB-INF/jsp/updPassword";
}
Adminuser adminuser=(Adminuser) httpSession.getAttribute("user");
if(null != adminuser){
if(!adminuser.getAdminPassword().equals(DigestUtils.md5Hex(oldPassword))){
model.addAttribute("msg","原密码不正确,请重新输入");
return "WEB-INF/jsp/updPassword";
}
adminuserDao.updPassword(adminuser.getAdminId(), DigestUtils.md5Hex(newPassword));
}
Subject subject = SecurityUtils.getSubject();
subject.logout();
return "redirect:/login.jsp";
}
}
源码获取:博客首页 "资源" 里下载!