一、数据库表 1.1 排班表
1.2 员工表
二、分析排班规则 2.1 DAY_OF_WEEK 在java中,可以通过Calendar获取的系统时间,DAY_OF_WEEK是说一周的周几,但这里的1是从星期天开始的,星期一是2,星期二是3…….以此类推。
以下是截取的源码部分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 public final static int SUNDAY = 1 ; public final static int MONDAY = 2 ; public final static int TUESDAY = 3 ; public final static int WEDNESDAY = 4 ; public final static int THURSDAY = 5 ; public final static int FRIDAY = 6 ; public final static int SATURDAY = 7 ;
规则分析 这里我们可以用一串01数字组合代表一周的上下午。
既然1是从星期天开始的,那么我们这也是从这开始!
这里我们拿 星期一三五下午排班为例。
日 一 二 三 四 五 六
00 01 00 01 00 01 00
0 是代表早上,1是下午
比如说,现在的时间是星期五下午,我们找对应排班的医生
1 2 3 4 5 6 7 8 [ { password=123 , scheduling_id=2 , delmark=1 , rule_name=星期一三五下午, week_rule=00010001000100 , deptment_id=2 , regist_level_id=1 , id=4 , realname=华佗 } ]
2.2 java代码 EmployeeServiceImpl.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 @Service public class EmployeeServiceImpl implements EmployeeService { @Autowired private EmployeeMapper employeeMapper; @Override public List<Map<String, Object>> getRegistDoctorList (String deptmentId, String registLevelId) { return this .getWorkDoctorList(deptmentId, registLevelId); } private List<Map<String, Object>> getWorkDoctorList (String deptmentId, String registLevelId) { List<Map<String, Object>> list = employeeMapper.getRegistDoctorList(deptmentId, registLevelId); Calendar c = Calendar.getInstance(); int ruleDay = (c.get(Calendar.DAY_OF_WEEK)-1 )*2 ; int amOrPm = c.get(Calendar.AM_PM); List<Map<String, Object>> docs = new ArrayList <>(); for (Map<String, Object> emp : list) { String week_rule = (String) emp.get("week_rule" ); char cc = week_rule.charAt(ruleDay + amOrPm); if (cc=='1' ) { docs.add(emp); } } System.out.println(docs); return docs; } }
EmployeeMapper.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace ="com.lan.mapper.EmployeeMapper" > <select id ="getRegistDoctorList" resultType ="java.util.Map" > SELECT * FROM employee e , scheduling s WHERE e.deptment_id = #{deptmentId} AND e.regist_level_id = #{registLevelId} AND e.scheduling_id = s.id </select > </mapper >
2.2 实现截图