diff --git a/src/main/java/com/jiudian/manage/service/ConfigService.java b/src/main/java/com/jiudian/manage/service/ConfigService.java index 97f9c22..c8a670a 100644 --- a/src/main/java/com/jiudian/manage/service/ConfigService.java +++ b/src/main/java/com/jiudian/manage/service/ConfigService.java @@ -1,7 +1,10 @@ package com.jiudian.manage.service; import com.jiudian.manage.model.Config; - +//ConfigService是一个业务逻辑接口,定义了系统配置相关的操作方法。它属于服务层 +//定义配置管理的业务接口 +//约束实现类必须提供的功能 +//作为控制器(Controller)和数据访问层(Mapper)之间的桥梁 public interface ConfigService { public Config get(); public boolean update(double managesalary,double staffsalary, double cleanerssalary, double manage, double staff, double cleaner, double totalmoney, double totalroom); diff --git a/src/main/java/com/jiudian/manage/service/OrderService.java b/src/main/java/com/jiudian/manage/service/OrderService.java index dcb867c..924a252 100644 --- a/src/main/java/com/jiudian/manage/service/OrderService.java +++ b/src/main/java/com/jiudian/manage/service/OrderService.java @@ -3,7 +3,8 @@ package com.jiudian.manage.service; import com.jiudian.manage.model.Order; import java.util.List; - +//接口包含了订单管理的完整功能:创建、删除、更新状态、查询 +//将复杂的订单处理逻辑封装在 Service 层,控制器只需调用接口即可 public interface OrderService { /** * 增加订单 diff --git a/src/main/java/com/jiudian/manage/service/RoomService.java b/src/main/java/com/jiudian/manage/service/RoomService.java index 915aa55..6fd8f88 100644 --- a/src/main/java/com/jiudian/manage/service/RoomService.java +++ b/src/main/java/com/jiudian/manage/service/RoomService.java @@ -3,7 +3,7 @@ package com.jiudian.manage.service; import com.jiudian.manage.model.Room; import java.util.List; - +//RoomService接口中的方法会调用RoomMapper接口中的方法: public interface RoomService { /** * 添加一个新房间 diff --git a/src/main/java/com/jiudian/manage/service/UserService.java b/src/main/java/com/jiudian/manage/service/UserService.java index 3e6fde4..67c96d3 100644 --- a/src/main/java/com/jiudian/manage/service/UserService.java +++ b/src/main/java/com/jiudian/manage/service/UserService.java @@ -3,7 +3,12 @@ package com.jiudian.manage.service; import com.jiudian.manage.model.User; import java.util.List; - +/*这个UserService接口定义了用户管理系统的核心业务功能,主要包括: +用户信息管理:查询、添加、删除、修改用户基本信息 +权限管理:根据权限查询用户,设置用户权限 +登录认证:验证用户身份,返回用户 ID 和权限 +业绩管理:增加用户业绩 / 薪水 +头像管理:上传和更新用户头像*/ public interface UserService { public User selectUser(int userid); diff --git a/src/main/java/com/jiudian/manage/service/impl/ConfigServiceImpl.java b/src/main/java/com/jiudian/manage/service/impl/ConfigServiceImpl.java index 2597404..c9b8985 100644 --- a/src/main/java/com/jiudian/manage/service/impl/ConfigServiceImpl.java +++ b/src/main/java/com/jiudian/manage/service/impl/ConfigServiceImpl.java @@ -5,10 +5,14 @@ import com.jiudian.manage.model.Config; import com.jiudian.manage.service.ConfigService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - -@Service +///** +// * ConfigService接口的实现类 +// * 处理系统配置相关的业务逻辑 +// */ +@Service // 标记为服务层组件,被Spring管理 public class ConfigServiceImpl implements ConfigService { @Autowired + // 自动注入ConfigMapper,用于数据库操作 ConfigMapper configMapper; @Override @@ -18,14 +22,17 @@ public class ConfigServiceImpl implements ConfigService { @Override public boolean update(double managesalary, double staffsalary, double cleanerssalary, double manage, double staff, double cleaner, double totalmoney, double totalroom) { + //创建配置对象 Config config = new Config(); config.setId(1); + // 设置薪资相关配置 config.setManagesalary(managesalary); config.setStaffsalary(staffsalary); config.setCleanerssalary(cleanerssalary); config.setManage(manage); config.setStaff(staff); config.setCleaner(cleaner); + //对于totalmoney和totalroom字段,只有当传入值不是 - 1 时才更新 if(totalmoney!=-1){ config.setTotalmoney(totalmoney); } @@ -33,6 +40,6 @@ public class ConfigServiceImpl implements ConfigService { config.setTotalroom(totalroom); } int i = configMapper.updateByPrimaryKeySelective(config); - return i>0?true:false; + return i>0?true:false; //根据影响行数判断更新是否成功 } } diff --git a/src/main/java/com/jiudian/manage/service/impl/OrderServiceImpl.java b/src/main/java/com/jiudian/manage/service/impl/OrderServiceImpl.java index 5f340e6..2474ccc 100644 --- a/src/main/java/com/jiudian/manage/service/impl/OrderServiceImpl.java +++ b/src/main/java/com/jiudian/manage/service/impl/OrderServiceImpl.java @@ -14,6 +14,9 @@ import org.springframework.stereotype.Service; import java.util.List; +// * OrderService接口的实现类 +// * 处理订单相关的业务逻辑 +// */ @Service public class OrderServiceImpl implements OrderService { @Autowired @@ -22,13 +25,27 @@ public class OrderServiceImpl implements OrderService { RoomMapper roomMapper; @Autowired ConfigMapper configMapper; - + // 自动注入相关Mapper @Override + /** + * 添加新订单 + * 包含房间状态检查、订单创建、系统配置更新等完整业务流程 + * + * @param householdname 入住人姓名 + * @param id 入住人身份证号 + * @param starttime 入住开始时间 + * @param endtime 入住结束时间 + * @param roomid 房间ID + * @param userid 操作用户ID + * @return 订单创建成功返回true,失败返回false + */ public boolean addOrder(String householdname, String id, String starttime, String endtime, int roomid, int userid) { + // 1. 检查房间状态是否为可预订(状态1) Room room = roomMapper.selectByPrimaryKey(roomid); if(room.getState()!=1){ return false; } + // 2. 创建订单对象 Order order = new Order(); order.setHouseholdname(householdname); order.setId(id); @@ -37,15 +54,17 @@ public class OrderServiceImpl implements OrderService { order.setRoomid(roomid); order.setUserid(userid); order.setState(0); + // 3. 计算订单金额 double money = TimeUtil.getBetweenDay(starttime,endtime)*room.getMoney(); order.setMoney(money); - +// 4. 更新系统配置(总营业额和总房间数) Config config = configMapper.selectByPrimaryKey(1); config.setTotalroom(config.getTotalroom()+1); config.setTotalmoney(config.getTotalmoney()+money); configMapper.updateByPrimaryKeySelective(config); - +// 5. 插入订单记录 int insert = orderMapper.insertSelective(order); + // 6. 如果订单插入成功,更新房间状态为已入住(状态2 if(insert>0){ Room room1 = new Room(); room1.setRoomid(roomid); @@ -60,7 +79,13 @@ public class OrderServiceImpl implements OrderService { return false; } } - + /** + * 删除订单 + * 同时更新房间状态为可预订 + * + * @param orderid 订单ID + * @return 删除成功返回true,失败返回false + */ @Override public boolean delOrder(int orderid) { Order order = orderMapper.selectByPrimaryKey(orderid); @@ -105,7 +130,14 @@ public class OrderServiceImpl implements OrderService { } return false; } - + /** + * 分页查询所有订单 + * 使用PageHelper实现分页功能 + * + * @param pageNum 页码 + * @param pageSize 每页记录数 + * @return 订单列表 + */ @Override public List getAllOrder(int pageNum, int pageSize) { PageHelper.startPage(pageNum,pageSize); diff --git a/src/main/java/com/jiudian/manage/service/impl/RoomServiceImpl.java b/src/main/java/com/jiudian/manage/service/impl/RoomServiceImpl.java index b293140..d5e0ec2 100644 --- a/src/main/java/com/jiudian/manage/service/impl/RoomServiceImpl.java +++ b/src/main/java/com/jiudian/manage/service/impl/RoomServiceImpl.java @@ -8,9 +8,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; - +//这个RoomServiceImpl类实现了房间管理的完整业务逻辑,包括: +//房间的添加、删除、修改 +//房间状态的单独更新 +//基于状态和类型的组合查询 +//分页查询支持 +//代码遵循了面向接口编程的原则,通过依赖注入获取 Mapper 对象,实现了业务逻辑与数据访问的解耦, +//降低系统中不同组件之间的依赖关系,使它们能够独立地开发、测试和维护。 @Service public class RoomServiceImpl implements RoomService { + // 自动注入RoomMapper,用于数据库操作 @Autowired RoomMapper roomMapper; diff --git a/src/main/java/com/jiudian/manage/service/impl/UserServiceImpl.java b/src/main/java/com/jiudian/manage/service/impl/UserServiceImpl.java index 71a3883..8ffa541 100644 --- a/src/main/java/com/jiudian/manage/service/impl/UserServiceImpl.java +++ b/src/main/java/com/jiudian/manage/service/impl/UserServiceImpl.java @@ -9,8 +9,27 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; - +//UserServiceImpl是一个完整的用户管理服务实现类,它: +//实现了 UserService 接口:提供了用户管理的所有功能 +//使用 MyBatis 进行数据访问:通过 UserMapper 操作数据库 +//1. 用户基础操作 +//添加用户:创建新用户账号,自动生成工号 +//删除用户:根据 ID 删除用户 +//查询用户:根据 ID 查询用户详情 +//更新用户:支持部分字段更新,灵活更新用户信息 +//2. 用户信息管理 +//修改个人信息:更新用户名、年龄、手机号等 +//更新头像:上传和更新用户头像 +//业绩管理:增加用户业绩 / 薪水记录 +//3. 用户查询与筛选 +//分页查询:支持分页获取所有用户 +//权限筛选:按权限等级查询特定用户群体 +//灵活查询:支持多条件组合查询 +//4. 用户认证与授权 +//登录验证:验证用户名密码,返回用户 ID 和权限 +//权限管理:基于 power 字段实现用户权限控制 @Service +//实现UserService接口的所有方法 public class UserServiceImpl implements UserService { @Autowired UserMapper userMapper; diff --git a/src/main/java/com/jiudian/manage/until/FileUtil.java b/src/main/java/com/jiudian/manage/until/FileUtil.java index 62fe0b8..3887f0a 100644 --- a/src/main/java/com/jiudian/manage/until/FileUtil.java +++ b/src/main/java/com/jiudian/manage/until/FileUtil.java @@ -2,13 +2,20 @@ package com.jiudian.manage.until; import java.io.File; import java.io.FileOutputStream; - +/** + * 上传文件 + * + * @return 上传成功返回true,失败返回false + * @throws Exception 如果发生IO异常会抛出 + */ public class FileUtil { public static boolean uploadFile(byte[] file, String filePath, String fileName) throws Exception { + // 创建目标文件夹 File targetFile = new File(filePath); if(!targetFile.exists()){ targetFile.mkdirs(); } + //写入文件 FileOutputStream out = new FileOutputStream(filePath+fileName); out.write(file); out.flush(); diff --git a/src/main/java/com/jiudian/manage/until/ImageCode.java b/src/main/java/com/jiudian/manage/until/ImageCode.java index ec020b1..d728d3d 100644 --- a/src/main/java/com/jiudian/manage/until/ImageCode.java +++ b/src/main/java/com/jiudian/manage/until/ImageCode.java @@ -11,15 +11,19 @@ import java.util.Random; public class ImageCode { public static final String CODENAME="ImageCode"; + //* 生成验证码图片并发送到客户端 public static void createImage(HttpServletResponse response, HttpSession session) throws IOException { + // 创建图像缓冲区 BufferedImage image = new BufferedImage(80, 30, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); Random r = new Random(); + // 设置背景色 g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255))); g.fillRect(0, 0, 80, 20); //获取生成的验证码 String code = getNumber(); //绑定验证码 + // 将验证码存储到Session中 session.setAttribute(CODENAME, code); g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 25)); g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255))); @@ -29,6 +33,10 @@ public class ImageCode { OutputStream os = response.getOutputStream(); ImageIO.write(image, "jpeg", os); } + /** + * 生成随机验证码 + * @return 4位随机验证码 + */ public static String getNumber(){ String str = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String code = ""; diff --git a/src/main/java/com/jiudian/manage/until/State.java b/src/main/java/com/jiudian/manage/until/State.java index 422e8f6..0ed3967 100644 --- a/src/main/java/com/jiudian/manage/until/State.java +++ b/src/main/java/com/jiudian/manage/until/State.java @@ -1,6 +1,18 @@ package com.jiudian.manage.until; - +/** + * 状态枚举类 + * 定义接口返回的标准状态码和提示信息 + * 用于统一API接口的返回格式 + */ public enum State { + /** + * 成功状态码 + * 键名:"code",值:"0" + */ + /** + * 成功提示信息 + * 键名:"message",值:"成功" + */ SuccessCode("code","0"),SuccessMessage("message","成功"), ErrorCode("code","-1"),ErrorMessage("message","失败") ; @@ -8,6 +20,11 @@ public enum State { public String name; public String message; + /** + * 构造方法 + * @param name 状态键名 + * @param message 状态值 + */ State(String name,String message) { this.name = name; this.message = message; @@ -21,3 +38,8 @@ public enum State { } } +//状态码标记:使用code="0"表示成功 +//消息提示:使用 "成功" 作为提示信息 +//返回值:Service 方法返回 true 表示业务操作成功 +//数据库影响:数据操作影响行数大于 0 +//前端展示:用户界面显示成功反馈 diff --git a/src/main/java/com/jiudian/manage/until/StateSignal.java b/src/main/java/com/jiudian/manage/until/StateSignal.java index 364c9b4..5536f40 100644 --- a/src/main/java/com/jiudian/manage/until/StateSignal.java +++ b/src/main/java/com/jiudian/manage/until/StateSignal.java @@ -1,16 +1,30 @@ package com.jiudian.manage.until; import java.util.HashMap; - +//StateSignal类是一个响应结果构建器,它: +//统一了 API 响应格式:所有接口返回包含状态码和消息的标准格式 public class StateSignal { + // 存储响应数据的HashMap HashMap result = new HashMap(); - + /** + * 添加状态枚举中的键值对 + * @param state 状态枚举对象 + */ public void put(State state){ result.put(state.name,state.message); } + /** + * 添加自定义键值对 + * @param name 键名 + * @param val 值 + */ public void put(String name,Object val){ result.put(name,val); } + /** + * 获取构建好的响应结果 + * @return 包含响应数据的HashMap + */ public HashMap getResult() { return result; } diff --git a/src/main/java/com/jiudian/manage/until/TimeUtil.java b/src/main/java/com/jiudian/manage/until/TimeUtil.java index 297015a..7fd05ef 100644 --- a/src/main/java/com/jiudian/manage/until/TimeUtil.java +++ b/src/main/java/com/jiudian/manage/until/TimeUtil.java @@ -8,12 +8,13 @@ import java.util.GregorianCalendar; public class TimeUtil { /** - * 获取两个时间段的天数从date2-date1 - * @param date1 - * @param date2 - * @return + * 计算两个日期之间的天数差(date2 - date1) + * @param date1 开始日期字符串(格式:yyyy-MM-dd) + * @param date2 结束日期字符串(格式:yyyy-MM-dd) + * @return 两个日期之间的天数差 */ public static int getBetweenDay(String date1, String date2) { + // 将字符串日期转换为Calendar对象 Calendar d1 = new GregorianCalendar(); d1.setTime(formatterTime(date1)); Calendar d2 = new GregorianCalendar(); @@ -28,7 +29,11 @@ public class TimeUtil { } return days; } - + /** + * 将字符串日期格式化为Date对象 + * @param date 日期字符串(格式:yyyy-MM-dd) + * @return Date对象,如果格式错误返回null + */ public static Date formatterTime(String date){ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); Date newDate=null; diff --git a/src/main/java/com/jiudian/manage/until/UUIDUtil.java b/src/main/java/com/jiudian/manage/until/UUIDUtil.java index 86c892d..1be54e2 100644 --- a/src/main/java/com/jiudian/manage/until/UUIDUtil.java +++ b/src/main/java/com/jiudian/manage/until/UUIDUtil.java @@ -2,6 +2,10 @@ package com.jiudian.manage.until; import java.util.UUID; +/** + * UUID工具类 + * 提供生成短版UUID的功能,生成工号 + */ public class UUIDUtil { public static String[] chars = new String[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", @@ -17,9 +21,13 @@ public class UUIDUtil { public static String generateShortUuid() { StringBuffer shortBuffer = new StringBuffer(); String uuid = UUID.randomUUID().toString().replace("-", ""); + // 将32位UUID转换为8位 for (int i = 0; i < 8; i++) { + // 每4个字符为一组 String str = uuid.substring(i * 4, i * 4 + 4); + // 转换为16进制整数 int x = Integer.parseInt(str, 16); + // 取模62(字符集大小)得到索引 shortBuffer.append(chars[x % 0x3E]); } return shortBuffer.toString();