feat(wms): 添加排班管理的查询功能
- 在 WmsAttendanceScheduleMapper 中新增关联查询和批量插入方法 - 实现员工和班次信息的关联查询功能 - 添加分页查询排班列表的详细信息展示 - 扩展 WmsAttendanceScheduleVo 数据传输对象 - 完善排班详情查询和列表查询的服务层逻辑 - 集成员工姓名、部门、岗位及班次时间等详细信息 - 优化批量插入排班数据的功能实现
This commit is contained in:
@@ -64,5 +64,48 @@ public class WmsAttendanceScheduleVo {
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 员工姓名
|
||||
*/
|
||||
@ExcelProperty(value = "员工姓名")
|
||||
private String employeeName;
|
||||
|
||||
/**
|
||||
* 员工部门
|
||||
*/
|
||||
@ExcelProperty(value = "员工部门")
|
||||
private String employeeDept;
|
||||
|
||||
/**
|
||||
* 员工岗位
|
||||
*/
|
||||
@ExcelProperty(value = "员工岗位")
|
||||
private String employeeJobType;
|
||||
|
||||
/**
|
||||
* 班次类型(白班/夜班)
|
||||
*/
|
||||
@ExcelProperty(value = "班次类型")
|
||||
private String shiftType;
|
||||
|
||||
/**
|
||||
* 班次开始时间
|
||||
*/
|
||||
@JsonFormat(pattern = "HH:mm")
|
||||
@ExcelProperty(value = "开始时间")
|
||||
private java.util.Date shiftStartTime;
|
||||
|
||||
/**
|
||||
* 班次结束时间
|
||||
*/
|
||||
@JsonFormat(pattern = "HH:mm")
|
||||
@ExcelProperty(value = "结束时间")
|
||||
private java.util.Date shiftEndTime;
|
||||
|
||||
/**
|
||||
* 工时
|
||||
*/
|
||||
@ExcelProperty(value = "工时")
|
||||
private java.math.BigDecimal workHours;
|
||||
|
||||
}
|
||||
|
||||
@@ -3,6 +3,9 @@ package com.klp.mapper;
|
||||
import com.klp.domain.WmsAttendanceSchedule;
|
||||
import com.klp.domain.vo.WmsAttendanceScheduleVo;
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 排班(谁在哪天上班)Mapper接口
|
||||
@@ -12,4 +15,25 @@ import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
*/
|
||||
public interface WmsAttendanceScheduleMapper extends BaseMapperPlus<WmsAttendanceScheduleMapper, WmsAttendanceSchedule, WmsAttendanceScheduleVo> {
|
||||
|
||||
/**
|
||||
* 查询排班列表(关联员工和班次信息)
|
||||
*/
|
||||
List<WmsAttendanceScheduleVo> selectScheduleWithDetails(@Param("userId") Long userId,
|
||||
@Param("workDate") java.util.Date workDate,
|
||||
@Param("shiftId") Long shiftId);
|
||||
|
||||
/**
|
||||
* 分页查询排班列表(关联员工和班次信息)
|
||||
*/
|
||||
List<WmsAttendanceScheduleVo> selectScheduleWithDetailsPage(@Param("userId") Long userId,
|
||||
@Param("workDate") java.util.Date workDate,
|
||||
@Param("shiftId") Long shiftId,
|
||||
@Param("shiftName") String shiftName,
|
||||
@Param("shiftGroup") String shiftGroup);
|
||||
|
||||
/**
|
||||
* 批量插入排班
|
||||
*/
|
||||
boolean insertBatch(@Param("list") List<WmsAttendanceSchedule> list);
|
||||
|
||||
}
|
||||
|
||||
@@ -51,7 +51,16 @@ public class WmsAttendanceScheduleServiceImpl implements IWmsAttendanceScheduleS
|
||||
*/
|
||||
@Override
|
||||
public WmsAttendanceScheduleVo queryById(Long scheduleId){
|
||||
return baseMapper.selectVoById(scheduleId);
|
||||
WmsAttendanceSchedule schedule = baseMapper.selectById(scheduleId);
|
||||
if (schedule == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 使用关联查询获取详细信息
|
||||
List<WmsAttendanceScheduleVo> list = baseMapper.selectScheduleWithDetails(
|
||||
schedule.getUserId(), schedule.getWorkDate(), schedule.getShiftId());
|
||||
|
||||
return list.isEmpty() ? null : list.get(0);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -59,8 +68,22 @@ public class WmsAttendanceScheduleServiceImpl implements IWmsAttendanceScheduleS
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<WmsAttendanceScheduleVo> queryPageList(WmsAttendanceScheduleBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<WmsAttendanceSchedule> lqw = buildQueryWrapper(bo);
|
||||
Page<WmsAttendanceScheduleVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
Page<WmsAttendanceScheduleVo> page = pageQuery.<WmsAttendanceScheduleVo>build();
|
||||
List<WmsAttendanceScheduleVo> list = baseMapper.selectScheduleWithDetailsPage(
|
||||
bo.getUserId(), bo.getWorkDate(), bo.getShiftId(), bo.getShiftName(), bo.getShiftGroup());
|
||||
|
||||
// 手动分页处理
|
||||
int total = list.size();
|
||||
int startNum = (int) ((page.getCurrent() - 1) * page.getSize());
|
||||
int endNum = Math.min(startNum + (int) page.getSize(), total);
|
||||
|
||||
List<WmsAttendanceScheduleVo> pageList = new ArrayList<>();
|
||||
if (startNum < total) {
|
||||
pageList = list.subList(startNum, endNum);
|
||||
}
|
||||
|
||||
Page<WmsAttendanceScheduleVo> result = new Page<>(page.getCurrent(), page.getSize(), total);
|
||||
result.setRecords(pageList);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
@@ -69,19 +92,7 @@ public class WmsAttendanceScheduleServiceImpl implements IWmsAttendanceScheduleS
|
||||
*/
|
||||
@Override
|
||||
public List<WmsAttendanceScheduleVo> queryList(WmsAttendanceScheduleBo bo) {
|
||||
LambdaQueryWrapper<WmsAttendanceSchedule> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<WmsAttendanceSchedule> buildQueryWrapper(WmsAttendanceScheduleBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<WmsAttendanceSchedule> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(bo.getUserId() != null, WmsAttendanceSchedule::getUserId, bo.getUserId());
|
||||
lqw.eq(bo.getWorkDate() != null, WmsAttendanceSchedule::getWorkDate, bo.getWorkDate());
|
||||
lqw.eq(bo.getShiftId() != null, WmsAttendanceSchedule::getShiftId, bo.getShiftId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getShiftName()), WmsAttendanceSchedule::getShiftName, bo.getShiftName());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getShiftGroup()), WmsAttendanceSchedule::getShiftGroup, bo.getShiftGroup());
|
||||
return lqw;
|
||||
return baseMapper.selectScheduleWithDetails(bo.getUserId(), bo.getWorkDate(), bo.getShiftId());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -19,5 +19,73 @@
|
||||
<result property="updateTime" column="update_time"/>
|
||||
</resultMap>
|
||||
|
||||
<resultMap type="com.klp.domain.vo.WmsAttendanceScheduleVo" id="WmsAttendanceScheduleVoResult">
|
||||
<result property="scheduleId" column="schedule_id"/>
|
||||
<result property="userId" column="user_id"/>
|
||||
<result property="workDate" column="work_date"/>
|
||||
<result property="shiftId" column="shift_id"/>
|
||||
<result property="shiftName" column="shift_name"/>
|
||||
<result property="shiftGroup" column="shift_group"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="employeeName" column="employee_name"/>
|
||||
<result property="employeeDept" column="employee_dept"/>
|
||||
<result property="employeeJobType" column="employee_job_type"/>
|
||||
<result property="shiftType" column="shift_type"/>
|
||||
<result property="shiftStartTime" column="shift_start_time"/>
|
||||
<result property="shiftEndTime" column="shift_end_time"/>
|
||||
<result property="workHours" column="work_hours"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectScheduleWithDetailsVo">
|
||||
SELECT s.schedule_id, s.user_id, s.work_date, s.shift_id, s.shift_name, s.shift_group, s.remark,
|
||||
e.name as employee_name, e.dept as employee_dept, e.job_type as employee_job_type,
|
||||
sh.shift_type, sh.start_time as shift_start_time, sh.end_time as shift_end_time, sh.work_hours
|
||||
FROM wms_attendance_schedule s
|
||||
LEFT JOIN wms_employee_info e ON s.user_id = e.info_id AND e.del_flag = 0
|
||||
LEFT JOIN wms_attendance_shift sh ON s.shift_id = sh.shift_id AND sh.del_flag = 0
|
||||
WHERE s.del_flag = 0
|
||||
</sql>
|
||||
|
||||
<select id="selectScheduleWithDetails" parameterType="java.util.Map" resultMap="WmsAttendanceScheduleVoResult">
|
||||
<include refid="selectScheduleWithDetailsVo"/>
|
||||
<if test="userId != null">
|
||||
AND s.user_id = #{userId}
|
||||
</if>
|
||||
<if test="workDate != null">
|
||||
AND s.work_date = #{workDate}
|
||||
</if>
|
||||
<if test="shiftId != null">
|
||||
AND s.shift_id = #{shiftId}
|
||||
</if>
|
||||
ORDER BY s.work_date DESC, s.user_id
|
||||
</select>
|
||||
|
||||
<select id="selectScheduleWithDetailsPage" parameterType="java.util.Map" resultMap="WmsAttendanceScheduleVoResult">
|
||||
<include refid="selectScheduleWithDetailsVo"/>
|
||||
<if test="userId != null">
|
||||
AND s.user_id = #{userId}
|
||||
</if>
|
||||
<if test="workDate != null">
|
||||
AND s.work_date = #{workDate}
|
||||
</if>
|
||||
<if test="shiftId != null">
|
||||
AND s.shift_id = #{shiftId}
|
||||
</if>
|
||||
<if test="shiftName != null and shiftName != ''">
|
||||
AND s.shift_name LIKE CONCAT('%', #{shiftName}, '%')
|
||||
</if>
|
||||
<if test="shiftGroup != null and shiftGroup != ''">
|
||||
AND s.shift_group = #{shiftGroup}
|
||||
</if>
|
||||
ORDER BY s.work_date DESC, s.user_id
|
||||
</select>
|
||||
|
||||
<insert id="insertBatch" parameterType="java.util.List">
|
||||
INSERT INTO wms_attendance_schedule (user_id, work_date, shift_id, shift_name, shift_group, remark)
|
||||
VALUES
|
||||
<foreach collection="list" item="item" separator=",">
|
||||
(#{item.userId}, #{item.workDate}, #{item.shiftId}, #{item.shiftName}, #{item.shiftGroup}, #{item.remark})
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user