Merge remote-tracking branch 'origin/main'

main
CFF 4 months ago
commit 3c69e45ab0

@ -1,31 +1,36 @@
package com.jiudian.manage.config;
//// 导入Spring相关注解和类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
//// 导入Spring相关注解和类,是核心组件
import org.springframework.context.annotation.Bean;//spring对象
import org.springframework.context.annotation.Configuration;//注释组件
import org.springframework.http.converter.HttpMessageConverter;//负责 HTTP 请求 / 响应消息转换的组件
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;//配置内容协商(如根据请求头确定返回数据格式)
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;// Spring MVC 的配置适配器组件,用于定制 Web 层的行为(如消息转换、拦截器、视图解析等
import java.nio.charset.Charset;
import java.util.List;
import java.nio.charset.Charset;//Java 标准库中处理字符集的类
import java.util.List;//Java 集合框架中的列表接口,用于存储转换器集合。
// * 自定义MVC配置类
// * 用于配置HTTP消息转换和内容协商解决中文乱码问题
// */
@Configuration
//Spring 会执行这些方法,将返回的对象存入容器(即 “注册 Bean”供其他组件依赖注入
@Configuration //标识当前类是配置类Spring 会扫描并加载其中的配置。
public class CustomMVCConfiguration extends WebMvcConfigurerAdapter {
//创建并配置String类型的HTTP消息转换器
@Bean
// 声明这是一个Bean会被Spring容器管理
// 创建字符串消息转换器,设置字符集为UTF-8
public HttpMessageConverter<String> responseBodyConverter() {
// 创建字符串消息转换器,处理响应体中字符串转换,设置字符集为UTF-8
public HttpMessageConverter<String> responseBodyConverter(){
StringHttpMessageConverter converter = new StringHttpMessageConverter(
Charset.forName("UTF-8"));
return converter;
return converter;//返回创建的转换器对象,交给 Spring 容器管理。
}
@Override
@Override//重写父类,自定义消息转换器配置
//HttpMessageConverter<?>:这是 Spring 框架中定义的HTTP 消息转换器接口
// ,其中 <?> 是泛型通配符,表示该转换器可以处理任意类型的数据。
//List<HttpMessageConverter<?>> converters 表示:一个包含多种 HTTP 消息转换器的列表
public void configureMessageConverters(
List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
@ -35,10 +40,11 @@ public class CustomMVCConfiguration extends WebMvcConfigurerAdapter {
}
@Override
//重写了父类WebMvcConfigurerAdapter中的同名方法用于自定义 Spring MVC 的内容协商配置
public void configureContentNegotiation(
ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false);
}
}
// 禁用基于URL路径扩展名的内容协商
// 禁用基于URL路径扩展名,不能有后缀的内容协商
// 例如:/api/users.json 或 /api/users.xml 这样的URL将不再生效

@ -1,5 +1,10 @@
package com.jiudian.manage.controller;
//导入所需的类和注解:
//自定义类Config配置信息的实体类、ConfigService处理配置业务的服务类
// State状态常量类如成功 / 错误码、StateSignal统一响应格式工具类
//Spring 注解:@Autowired依赖注入、@RestController标识 REST 控制器)、
// @RequestMapping映射 URL 路径)、@RequestParam接收请求参数
//Java 标准类Map用于返回键值对格式的响应数据
import com.jiudian.manage.model.Config;
import com.jiudian.manage.service.ConfigService;
import com.jiudian.manage.until.State;
@ -8,16 +13,21 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
///**
// * 配置管理控制器
// * 处理与系统配置相关的HTTP请求
// */
/*1
2StateSignal / 便
3. Map JSON */
@RestController //标记此类为REST控制器所有方法返回JSON格式数据
@RequestMapping(value = "/config") //定义基础URL路径
//建立URL路径与java方法的映射关系客户端发起HTTP请求会自动调用该注释的方法
@RequestMapping(value = "/config") //SpringMVC的注释语法定义基础URL路径所有方法的URL都以此为前缀
//value 是注解的属性,用于指定映射的 URL 路径
//创建类:配置管理控制器
public class ConfigController {
//自动注入ConfigService服务,依赖注入
//自动注入ConfigService服务,依赖注入用于后续调用configservice类中的方法
@Autowired
ConfigService configService;
@ -35,13 +45,13 @@ public class ConfigController {
// 配置存在,返回成功状态和配置数据
signal.put(State.SuccessCode);
signal.put(State.SuccessMessage);
signal.put("config",config);
signal.put("config",config);// 键为"config",值为获取到的配置对象
}else {
// 配置不存在,返回错误状态
signal.put(State.ErrorCode);
signal.put(State.ErrorMessage);
}
return signal.getResult();
return signal.getResult();//自动转为 JSON 响应给前端
}
/**
@ -56,9 +66,11 @@ public class ConfigController {
* @param totalroom
* @return
*/
@RequestMapping(value = "/updateConfig.do")//// 定义具体的URL路径
@RequestMapping(value = "/updateConfig.do")// 定义具体的URL路径
// 接受HTTP请求接收前端传递的配置参数调用服务层执行更新操作
//@RequestParam用于绑定 HTTP 请求参数到方法参数
public Map updateConfig(@RequestParam double managesalary,@RequestParam double staffsalary,@RequestParam double cleanerssalary,@RequestParam double manage,@RequestParam double staff,@RequestParam double cleaner,@RequestParam(required = false,defaultValue = "-1") double totalmoney,@RequestParam(required = false,defaultValue = "-1") double totalroom){
// 调用服务层执行更新操作
boolean update = configService.update(managesalary, staffsalary, cleanerssalary, manage, staff, cleaner, totalmoney, totalroom);
// 创建状态信号对象
StateSignal signal = new StateSignal();

@ -1,5 +1,10 @@
package com.jiudian.manage.controller;
//导入三类核心资源:
//自定义业务类UserService用户相关业务服务、FileUtil文件上传工具类、State状态常量类、StateSignal统一响应格式工具类
//Spring 注解 / 类:@Autowired依赖注入、@RestControllerREST 控制器)、@RequestMappingURL 映射)、@RequestParam接收请求参数
// 、MultipartFileSpring 封装的上传文件对象,用于接收前端上传的文件);
//Java 标准类File文件操作、FileOutputStream文件输出流虽未直接用但工具类可能依赖、Map响应数据格式、UUID生成唯一文件名
// Random随机数
import com.jiudian.manage.service.UserService;
import com.jiudian.manage.until.FileUtil;
import com.jiudian.manage.until.State;
@ -9,33 +14,39 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartFile;//Spring 封装的上传文件对象,用于接收前端上传的文件
import java.io.File;
import java.io.FileOutputStream;
import java.util.Map;
import java.util.Random;
import java.util.UUID;
import java.util.UUID;//生成唯一文件名
/**
*
*
* ID FileControllerupFilePhoto.do
* FileControllerFileUtilUserServicephoto
* UserServiceImplphotoUserUserMapperupdateByPrimaryKeySelective
* StateSignal /
*/
@RestController //标记为REST控制器返回JSON格式数据
@RequestMapping(value = "/upFile")
@RequestMapping(value = "/upFile")//定义控制器基础URL路径/根路径所有方法URL以此为前缀
public class FileController {
// 自动注入UserService服务
@Autowired
UserService userService;
@RequestMapping("/upFilePhoto.do")
//返回Map类型会自动转为 JSON参数为 “上传文件” 和 “用户 ID”
public Map upFilePhoto(@RequestParam MultipartFile file,@RequestParam int userid){
//接受上传文件和用户Id
//接受前端上传文件和用户Id参数
// 生成唯一的文件名,避免文件名冲突
// 使用UUID+原始文件名
String fileName = UUID.randomUUID().toString()+file.getOriginalFilename();
//定义文件保存路径
// 本地保存路径项目资源目录下的static/File文件夹
String filePath = ".\\src\\main\\resources\\static\\File\\";
// 数据库存储的“相对路径”:前端访问时用该路径
String RealfilePath = "File"+"/"+fileName;
// 更新用户头像路径到数据库
boolean photo = userService.photo(userid, RealfilePath);

@ -1,24 +1,31 @@
package com.jiudian.manage.controller;
//导入核心资源:
//实体类Order订单实体封装订单信息如入住人、时间、房间 ID 等);
//服务层OrderService订单服务接口、OrderServiceImpl接口的实现类包含订单业务逻辑
//工具类State状态常量类如成功 / 错误码、StateSignal统一响应格式工具类
//Spring 注解:@Autowired依赖注入、@RestControllerREST 控制器)、@RequestMappingURL 映射)、@RequestParam接收请求参数
//Java 标准类List存储订单列表、Map接口返回的响应数据格式
import com.jiudian.manage.model.Order;
import com.jiudian.manage.service.OrderService;
import com.jiudian.manage.service.impl.OrderServiceImpl;
import com.jiudian.manage.until.State;
import com.jiudian.manage.until.StateSignal;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;//URL映射
import org.springframework.web.bind.annotation.RequestParam;//接受参数请求
import org.springframework.web.bind.annotation.RestController;//REST控制器
import java.util.List;
import java.util.Map;
/**
*
*
*
*
* @RequestMapping URLOrderServiceImpl
* 使StateSignal
*/
@RestController
@RequestMapping(value = "/order")
@RequestMapping(value = "/order")//定义该订单控制器的基础路径
public class OrderController {
@Autowired
OrderServiceImpl orderService;
@ -38,15 +45,18 @@ public class OrderController {
public Map addOrder(@RequestParam String householdname,@RequestParam String id,@RequestParam String starttime,@RequestParam String endtime,@RequestParam int roomid,@RequestParam int userid){
// 调用服务层添加订单
boolean b = orderService.addOrder(householdname, id, starttime, endtime, roomid, userid);
// 创建统一响应对象StateSignal封装响应状态和数据
StateSignal signal = new StateSignal();
if(b){
//添加成功
signal.put(State.SuccessCode);
signal.put(State.SuccessMessage);
}else {
// 添加失败:存入错误状态码和消
signal.put(State.ErrorCode);
signal.put(State.ErrorMessage);
}
// 返回封装后的响应Map类型自动转为JSON给前端
return signal.getResult();
}
@ -57,6 +67,7 @@ public class OrderController {
*/
@RequestMapping("/delOrder.do")
public Map delOrder(@RequestParam int orderid){
// 调用服务层的delOrder方法执行删除操作返回布尔值结果
boolean b = orderService.delOrder(orderid);
StateSignal signal = new StateSignal();
if(b){
@ -106,9 +117,9 @@ public class OrderController {
if(allOrder!=null){
signal.put(State.SuccessCode);
signal.put(State.SuccessMessage);
signal.put("List",allOrder);
signal.put("pageNum",pageNum);
signal.put("pageSize",pageSize);
signal.put("List",allOrder);//键"List"对应值为订单列表
signal.put("pageNum",pageNum);//返回当前页码
signal.put("pageSize",pageSize);//返回每页条数
}else {
signal.put(State.ErrorCode);
signal.put(State.ErrorMessage);

@ -12,11 +12,11 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
//这个控制器实现了酒店房间管理的完整功能,包括添加、删除、查询和更新房间信息。
@RestController
@RequestMapping(value = "/room")
@RestController//标识是rest控制器返回JSON数据
@RequestMapping(value = "/room")//自定义控制器URL接口路径
public class RoomController {
@Autowired
RoomService roomService;
RoomService roomService;//注入服务层依赖,调用方法
@RequestMapping("/addRoom.do")
public Map addRoom(@RequestParam String local,@RequestParam double money,@RequestParam int state,@RequestParam int type){
boolean b = roomService.addRoom(local, money, state, type);

@ -47,7 +47,7 @@ public interface UserService {
* @param money
* @return
*/
public boolean addSlary(int userid,double money);
public boolean addSalary(int userid,double money);
/**
*

@ -1,10 +1,10 @@
package com.jiudian.manage.service.impl;
import com.github.pagehelper.PageHelper;
import com.jiudian.manage.mapper.UserMapper;
import com.jiudian.manage.model.User;
import com.jiudian.manage.service.UserService;
import com.jiudian.manage.until.UUIDUtil;
import com.github.pagehelper.PageHelper;//分页工具,实现分页查询
import com.jiudian.manage.mapper.UserMapper;//用户数据库接口
import com.jiudian.manage.model.User;//用户实现类
import com.jiudian.manage.service.UserService;//用户服务接口
import com.jiudian.manage.until.UUIDUtil;//生成用户唯一标识
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -29,23 +29,28 @@ import java.util.List;
//登录验证:验证用户名密码,返回用户 ID 和权限
//权限管理:基于 power 字段实现用户权限控制
@Service
//实现UserService接口的所有方法
//实现UserService接口的所有抽象方法
public class UserServiceImpl implements UserService {
//服务层通过userMapper调用 Mapper 接口中定义的 SQL 操作,实现 “服务层 - 数据访问层” 的交互
@Autowired
UserMapper userMapper;
@Override
//查询用户
public User selectUser(int userid) {
return userMapper.selectByPrimaryKey(userid);
}
public boolean addUser(String account, String password, int power){
//1.创建用户,封装用户信息
User user = new User();
user.setUseraccount(account);
user.setPassword(password);
user.setPower(power);
user.setIdnumber(UUIDUtil.generateShortUuid());
// 2. 调用UserMapper的insertSelective方法选择性插入用户仅插入非null字段
int insert = userMapper.insertSelective(user);
// 3. 根据插入结果返回布尔值:受影响行数>0表示插入成功返回true否则失败返回false
return insert>0?true:false;
}
@ -56,9 +61,11 @@ public class UserServiceImpl implements UserService {
}
@Override
//重写修改用户方法
public boolean alterUser(int userid, String password, String username, int age, int power, String IDnumber,String phonenumber) {
User user = new User();
user.setUserid(userid);
// 选择性设置字段:仅当参数不是默认值时,才设置(避免覆盖原有数据)
if(!password.equals("null")){
user.setPassword(password);
}
@ -77,28 +84,40 @@ public class UserServiceImpl implements UserService {
if(!phonenumber.equals("null")){
user.setPhonenumber(phonenumber);
}
//调用UserMapper的updateByPrimaryKeySelective方法选择性更新仅更新非null字段
int i = userMapper.updateByPrimaryKeySelective(user);
return i>0?true:false;
}
@Override
public boolean addSlary(int userid, double money) {
//重写addsalary方法
public boolean addSalary(int userid, double money) {
// . 先查询用户当前的薪水money字段)
User user = userMapper.selectByPrimaryKey(userid);
// 获取用户当前薪水
Double money1 = user.getMoney();
//计算新薪水:原有薪水 + 提成money
user.setMoney(money+money1);
int i = userMapper.updateByPrimaryKey(user);
//根据更新结果返回布尔值
return i>0?true:false;
}
@Override
//重写查询所有用户方法
public List<User> getAllUser(int pageNum,int pageSize) {
PageHelper.startPage(pageNum,pageSize);
// 1. 调用PageHelper.startPage开启分页功能传入页码pageNum和每页条数pageSize
return userMapper.getAllUser();
}
@Override
//重写根据页面查询用户
public List<User> getUserByPower(int power,int pageNum,int pageSize) {
//开启分页功能
PageHelper.startPage(pageNum,pageSize);
// 调用UserMapper的selectByPower方法按权限power查询用户自动分页
return userMapper.selectByPower(power);
}
@ -114,11 +133,14 @@ public class UserServiceImpl implements UserService {
@Override
public boolean photo(int userid, String url) {
//创建User实体类对象用于封装更新数据
User user = new User();
user.setUserid(userid);
user.setPhotourl(url);
int i = userMapper.updateByPrimaryKeySelective(user);
return i>0?true:false;
//执行后返回一个 int 类型的结果 i表示 “受影响的行数”
// (即数据库中实际被更新的记录数,成功时通常为 1失败时为 0
return i > 0 ? true : false;
}

Loading…
Cancel
Save