This commit is contained in:
2026-05-09 14:11:06 +08:00
4 changed files with 162 additions and 16 deletions

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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());
}
/**

View File

@@ -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>