基于javaweb+mysql的ssm+maven高校后勤报修系统(java+ssm+jsp+mysql)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的SSM+Maven高校后勤报修系统(java+ssm+jsp+mysql)
管理员
admin 12346
学生
a1 123456
a2 123456
a3 123456
后勤人员
a1 123456
a2 123456
a3 123456
登录:
http://localhost:8080/houqinbaoxiu/jsp/login.jsp
图片存放路径: src\main\webapp\upload,项目全路径不能有中文
流程:
1 学生报修
2 管理员指派后勤人员
3 后勤确认结果
// if(false)
// return R.error(511,"永远不会进入");
//根据字段查询是否有相同数据
Wrapper<DictionaryEntity> queryWrapper = new EntityWrapper<DictionaryEntity>()
.notIn("id",dictionary.getId())
.eq("dic_code", dictionary.getDicCode())
.eq("index_name", dictionary.getIndexName())
;
if(dictionary.getDicCode().contains("_erji_types")){
queryWrapper.eq("super_id",dictionary.getSuperId());
}
logger.info("sql语句:"+queryWrapper.getSqlSegment());
DictionaryEntity dictionaryEntity = dictionaryService.selectOne(queryWrapper);
if(dictionaryEntity==null){
dictionaryService.updateById(dictionary);//根据id更新
//如果字典表修改数据的话,把数据再重新查出,放入监听器中
List<DictionaryEntity> dictionaryEntities = dictionaryService.selectList(new EntityWrapper<DictionaryEntity>());
ServletContext servletContext = request.getServletContext();
Map<String, Map<Integer,String>> map = new HashMap<>();
for(DictionaryEntity d :dictionaryEntities){
Map<Integer, String> m = map.get(d.getDicCode());
if(m ==null || m.isEmpty()){
m = new HashMap<>();
}
m.put(d.getCodeIndex(),d.getIndexName());
map.put(d.getDicCode(),m);
}
servletContext.setAttribute("dictionaryMap",map);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 删除
*/
/**
* 耗材
* 后端接口
* @email
*/
@RestController
@Controller
@RequestMapping("/haocai")
public class HaocaiController {
private static final Logger logger = LoggerFactory.getLogger(HaocaiController.class);
@Autowired
private HaocaiService haocaiService;
@Autowired
private TokenService tokenService;
@Autowired
private DictionaryService dictionaryService;
//级联表service
@Autowired
private XueshengService xueshengService;
@Autowired
private HouqinrenyuanService houqinrenyuanService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
/**
* 学生
* 后端接口
* @email
*/
@RestController
@Controller
@RequestMapping("/xuesheng")
public class XueshengController {
private static final Logger logger = LoggerFactory.getLogger(XueshengController.class);
@Autowired
private XueshengService xueshengService;
@Autowired
private TokenService tokenService;
@Autowired
private DictionaryService dictionaryService;
//级联表service
@Autowired
private HouqinrenyuanService houqinrenyuanService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永不会进入");
else if("学生".equals(role))
params.put("xueshengId",request.getSession().getAttribute("userId"));
else if("后勤人员".equals(role))
params.put("houqinrenyuanId",request.getSession().getAttribute("userId"));
if(params.get("orderBy")==null || params.get("orderBy")==""){
params.put("orderBy","id");
}
PageUtils page = xueshengService.queryPage(params);
* 列表
*/
@RequestMapping("/list")
public R list( UsersEntity user){
EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", usersService.selectListView(ew));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UsersEntity user = usersService.selectById(id);
return R.ok().put("data", user);
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Integer id = (Integer)request.getSession().getAttribute("userId");
UsersEntity user = usersService.selectById(id);
return R.ok().put("data", user);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody UsersEntity user){
// ValidatorUtils.validateEntity(user);
if(usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
user.setPassword("123456");
usersService.insert(user);
return R.ok();
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永不会进入");
else if("学生".equals(role))
params.put("xueshengId",request.getSession().getAttribute("userId"));
else if("后勤人员".equals(role))
params.put("houqinrenyuanId",request.getSession().getAttribute("userId"));
if(params.get("orderBy")==null || params.get("orderBy")==""){
params.put("orderBy","id");
}
PageUtils page = houqinrenyuanService.queryPage(params);
//字典表数据转换
List<HouqinrenyuanView> list =(List<HouqinrenyuanView>)page.getList();
for(HouqinrenyuanView c:list){
//修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
HouqinrenyuanEntity houqinrenyuan = houqinrenyuanService.selectById(id);
if(houqinrenyuan !=null){
//entity转view
HouqinrenyuanView view = new HouqinrenyuanView();
BeanUtils.copyProperties( houqinrenyuan , view );//把实体数据重构到view中
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
/**
* 登录相关
*/
@RequestMapping("config")
@RestController
public class ConfigController{
@Autowired
private ConfigService configService;
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,ConfigEntity config){
EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
PageUtils page = configService.queryPage(params);
return R.ok().put("data", page);
}
/**
* 列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,ConfigEntity config){
EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
PageUtils page = configService.queryPage(params);
return R.ok().put("data", page);
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
ConfigEntity config = configService.selectById(id);
return R.ok().put("data", config);
}
/**
* 详情
}
if(StringUtil.isNotEmpty(String.valueOf(thisTable.get("types")))){//当前表类型
thisTable.put("types",String.valueOf(thisTable.get("types")).split(","));
if(StringUtil.isEmpty(one)){
one ="thisTypes0";
}else{
if(StringUtil.isEmpty(two)){
two ="thisTypes0";
}
}
}
if(isJoinTableFlag){//级联表类型
Map<String, Object> joinTable = (Map<String, Object>) params.get("joinTable");
if(StringUtil.isNotEmpty(String.valueOf(joinTable.get("types")))){
joinTable.put("types",String.valueOf(joinTable.get("types")).split(","));
if(StringUtil.isEmpty(one)){
one ="joinTypes0";
}else{
if(StringUtil.isEmpty(two)){
two ="joinTypes0";
}
}
}
}
List<Map<String, Object>> result = commonService.barCount(params);
List<String> xAxis = new ArrayList<>();//报表x轴
List<List<String>> yAxis = new ArrayList<>();//y轴
List<String> legend = new ArrayList<>();//标题
if(StringUtil.isEmpty(two)){//不包含第二列
List<String> yAxis0 = new ArrayList<>();
yAxis.add(yAxis0);
legend.add("数值");
for(Map<String, Object> map :result){
String oneValue = String.valueOf(map.get(one));
String value = String.valueOf(map.get("value"));
xAxis.add(oneValue);
yAxis0.add(value);
}
}else{//包含第二列
Map<String, HashMap<String, String>> dataMap = new LinkedHashMap<>();
if(StringUtil.isNotEmpty(two)){
for(Map<String, Object> map :result){
String oneValue = String.valueOf(map.get(one));
String twoValue = String.valueOf(map.get(two));
String value = String.valueOf(map.get("value"));
if(!legend.contains(twoValue)){
haocaiList.add(haocaiEntity);
//把要查询是否重复的字段放入map中
//耗材编号
if(seachFields.containsKey("haocaiUuidNumber")){
List<String> haocaiUuidNumber = seachFields.get("haocaiUuidNumber");
haocaiUuidNumber.add(data.get(0));//要改的
}else{
List<String> haocaiUuidNumber = new ArrayList<>();
haocaiUuidNumber.add(data.get(0));//要改的
seachFields.put("haocaiUuidNumber",haocaiUuidNumber);
}
}
//查询是否重复
//耗材编号
List<HaocaiEntity> haocaiEntities_haocaiUuidNumber = haocaiService.selectList(new EntityWrapper<HaocaiEntity>().in("haocai_uuid_number", seachFields.get("haocaiUuidNumber")));
if(haocaiEntities_haocaiUuidNumber.size() >0 ){
ArrayList<String> repeatFields = new ArrayList<>();
for(HaocaiEntity s:haocaiEntities_haocaiUuidNumber){
repeatFields.add(s.getHaocaiUuidNumber());
}
return R.error(511,"数据库的该表中的 [耗材编号] 字段已经存在 存在数据为:"+repeatFields.toString());
}
haocaiService.insertBatch(haocaiList);
return R.ok();
}
}
}
}catch (Exception e){
e.printStackTrace();
return R.error(511,"批量插入数据异常,请联系管理员");
}
}
/**
* 权限(Token)验证
*/
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {
public static final String LOGIN_TOKEN_KEY = "Token";
@Autowired
private TokenService tokenService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//支持跨域请求
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
IgnoreAuth annotation;
if (handler instanceof HandlerMethod) {
annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
} else {
return true;
}
//从header中获取token
String token = request.getHeader(LOGIN_TOKEN_KEY);
/**
* 不需要验证权限的方法直接放过
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody XueshengEntity xuesheng, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,xuesheng:{}",this.getClass().getName(),xuesheng.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
Wrapper<XueshengEntity> queryWrapper = new EntityWrapper<XueshengEntity>()
.eq("username", xuesheng.getUsername())
.or()
.eq("xuesheng_phone", xuesheng.getXueshengPhone())
.or()
.eq("xuesheng_id_number", xuesheng.getXueshengIdNumber())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
XueshengEntity xueshengEntity = xueshengService.selectOne(queryWrapper);
if(xueshengEntity==null){
xuesheng.setCreateTime(new Date());
xuesheng.setPassword("123456");
xueshengService.insert(xuesheng);
return R.ok();
}else {
return R.error(511,"账户或者学生手机号或者学生身份证号已经被使用");
}
}
/**
return R.error(511,"查不到数据");
}
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
}
/**
* 权限(Token)验证
*/
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {
public static final String LOGIN_TOKEN_KEY = "Token";
@Autowired
private TokenService tokenService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//支持跨域请求
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
IgnoreAuth annotation;
if (handler instanceof HandlerMethod) {
annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
} else {
return true;
}
//从header中获取token
String token = request.getHeader(LOGIN_TOKEN_KEY);
/**
* 不需要验证权限的方法直接放过
*/
if(annotation!=null) {
// return R.error(511,"永远不会进入");
//根据字段查询是否有相同数据
Wrapper<HouqinrenyuanEntity> queryWrapper = new EntityWrapper<HouqinrenyuanEntity>()
.notIn("id",houqinrenyuan.getId())
.andNew()
.eq("username", houqinrenyuan.getUsername())
.or()
.eq("houqinrenyuan_phone", houqinrenyuan.getHouqinrenyuanPhone())
.or()
.eq("houqinrenyuan_id_number", houqinrenyuan.getHouqinrenyuanIdNumber())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
HouqinrenyuanEntity houqinrenyuanEntity = houqinrenyuanService.selectOne(queryWrapper);
if("".equals(houqinrenyuan.getHouqinrenyuanPhoto()) || "null".equals(houqinrenyuan.getHouqinrenyuanPhoto())){
houqinrenyuan.setHouqinrenyuanPhoto(null);
}
if(houqinrenyuanEntity==null){
houqinrenyuanService.updateById(houqinrenyuan);//根据id更新
return R.ok();
}else {
return R.error(511,"账户或者后勤人员手机号或者后勤人员身份证号已经被使用");
}
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
houqinrenyuanService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 批量上传
*/
}
/**
* 单列求和
*/
@RequestMapping("/cal/{tableName}/{columnName}")
@IgnoreAuth
public R cal(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("table", tableName);
params.put("column", columnName);
Map<String, Object> result = commonService.selectCal(params);
return R.ok().put("data", result);
}
/**
* 分组统计
*/
@RequestMapping("/group/{tableName}/{columnName}")
@IgnoreAuth
public R group(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("table", tableName);
params.put("column", columnName);
List<Map<String, Object>> result = commonService.selectGroup(params);
return R.ok().put("data", result);
}
/**
* (按值统计)
*/
@RequestMapping("/value/{tableName}/{xColumnName}/{yColumnName}")
@IgnoreAuth
public R value(@PathVariable("tableName") String tableName, @PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("table", tableName);
params.put("xColumn", xColumnName);
params.put("yColumn", yColumnName);
List<Map<String, Object>> result = commonService.selectValue(params);
return R.ok().put("data", result);
}
return R.error("账号不存在");
}
return R.ok();
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrHouqinrenyuan(HttpServletRequest request){
Integer id = (Integer)request.getSession().getAttribute("userId");
HouqinrenyuanEntity houqinrenyuan = houqinrenyuanService.selectById(id);
if(houqinrenyuan !=null){
//entity转view
HouqinrenyuanView view = new HouqinrenyuanView();
BeanUtils.copyProperties( houqinrenyuan , view );//把实体数据重构到view中
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
}
/**
* 报修
* 后端接口
* @email
*/
@RestController
@Controller
@RequestMapping("/baoxiu")
public class BaoxiuController {
private static final Logger logger = LoggerFactory.getLogger(BaoxiuController.class);
@Autowired
private BaoxiuService baoxiuService;
@Autowired
private TokenService tokenService;
@Autowired
private DictionaryService dictionaryService;
//级联表service
@Autowired
private XueshengService xueshengService;
@Autowired
private HouqinrenyuanService houqinrenyuanService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永不会进入");
else if("学生".equals(role))
List<String> xueshengPhone = new ArrayList<>();
xueshengPhone.add(data.get(0));//要改的
seachFields.put("xueshengPhone",xueshengPhone);
}
//学生身份证号
if(seachFields.containsKey("xueshengIdNumber")){
List<String> xueshengIdNumber = seachFields.get("xueshengIdNumber");
xueshengIdNumber.add(data.get(0));//要改的
}else{
List<String> xueshengIdNumber = new ArrayList<>();
xueshengIdNumber.add(data.get(0));//要改的
seachFields.put("xueshengIdNumber",xueshengIdNumber);
}
}
//查询是否重复
//账户
List<XueshengEntity> xueshengEntities_username = xueshengService.selectList(new EntityWrapper<XueshengEntity>().in("username", seachFields.get("username")));
if(xueshengEntities_username.size() >0 ){
ArrayList<String> repeatFields = new ArrayList<>();
for(XueshengEntity s:xueshengEntities_username){
repeatFields.add(s.getUsername());
}
return R.error(511,"数据库的该表中的 [账户] 字段已经存在 存在数据为:"+repeatFields.toString());
}
//学生手机号
List<XueshengEntity> xueshengEntities_xueshengPhone = xueshengService.selectList(new EntityWrapper<XueshengEntity>().in("xuesheng_phone", seachFields.get("xueshengPhone")));
if(xueshengEntities_xueshengPhone.size() >0 ){
ArrayList<String> repeatFields = new ArrayList<>();
for(XueshengEntity s:xueshengEntities_xueshengPhone){
repeatFields.add(s.getXueshengPhone());
}
return R.error(511,"数据库的该表中的 [学生手机号] 字段已经存在 存在数据为:"+repeatFields.toString());
}
//学生身份证号
List<XueshengEntity> xueshengEntities_xueshengIdNumber = xueshengService.selectList(new EntityWrapper<XueshengEntity>().in("xuesheng_id_number", seachFields.get("xueshengIdNumber")));
if(xueshengEntities_xueshengIdNumber.size() >0 ){
ArrayList<String> repeatFields = new ArrayList<>();
for(XueshengEntity s:xueshengEntities_xueshengIdNumber){
repeatFields.add(s.getXueshengIdNumber());
}
return R.error(511,"数据库的该表中的 [学生身份证号] 字段已经存在 存在数据为:"+repeatFields.toString());
}
xueshengService.insertBatch(xueshengList);
return R.ok();
}
}
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody HaocaiEntity haocai, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,haocai:{}",this.getClass().getName(),haocai.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
Wrapper<HaocaiEntity> queryWrapper = new EntityWrapper<HaocaiEntity>()
.eq("haocai_uuid_number", haocai.getHaocaiUuidNumber())
.eq("haocai_name", haocai.getHaocaiName())
.eq("haocai_types", haocai.getHaocaiTypes())
.eq("haocai_kucun_number", haocai.getHaocaiKucunNumber())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
HaocaiEntity haocaiEntity = haocaiService.selectOne(queryWrapper);
if(haocaiEntity==null){
haocai.setInsertTime(new Date());
haocai.setCreateTime(new Date());
haocaiService.insert(haocai);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody HaocaiEntity haocai, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,haocai:{}",this.getClass().getName(),haocai.toString());