From a2067815a960797b31613032748de809b7b5f668 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Tue, 21 Apr 2026 13:01:53 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E6=B7=BB=E5=8A=A0=E8=80=83?= =?UTF-8?q?=E5=8B=A4=E8=AE=B0=E5=BD=95=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 AttendanceRecords 实体类定义数据库表结构 - 创建 AttendanceRecordsBo 业务对象用于数据传输 - 实现 AttendanceRecordsController 提供 REST API 接口 - 开发 AttendanceRecordsMapper 数据访问层接口 - 实现 AttendanceRecordsServiceImpl 业务逻辑服务 - 定义 AttendanceRecordsVo 视图对象用于数据展示 - 集成 Excel 导出功能支持考勤数据批量导出 - 添加分页查询、条件筛选等数据检索功能 --- .../AttendanceRecordsController.java | 71 ++++++++++++++++ .../com/klp/domain/AttendanceRecords.java | 36 ++++++++ .../klp/domain/bo/AttendanceRecordsBo.java | 37 ++++++++ .../klp/domain/vo/AttendanceRecordsVo.java | 47 +++++++++++ .../klp/mapper/AttendanceRecordsMapper.java | 10 +++ .../service/IAttendanceRecordsService.java | 25 ++++++ .../impl/AttendanceRecordsServiceImpl.java | 84 +++++++++++++++++++ 7 files changed, 310 insertions(+) create mode 100644 klp-wms/src/main/java/com/klp/controller/AttendanceRecordsController.java create mode 100644 klp-wms/src/main/java/com/klp/domain/AttendanceRecords.java create mode 100644 klp-wms/src/main/java/com/klp/domain/bo/AttendanceRecordsBo.java create mode 100644 klp-wms/src/main/java/com/klp/domain/vo/AttendanceRecordsVo.java create mode 100644 klp-wms/src/main/java/com/klp/mapper/AttendanceRecordsMapper.java create mode 100644 klp-wms/src/main/java/com/klp/service/IAttendanceRecordsService.java create mode 100644 klp-wms/src/main/java/com/klp/service/impl/AttendanceRecordsServiceImpl.java diff --git a/klp-wms/src/main/java/com/klp/controller/AttendanceRecordsController.java b/klp-wms/src/main/java/com/klp/controller/AttendanceRecordsController.java new file mode 100644 index 00000000..3d8a6625 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/controller/AttendanceRecordsController.java @@ -0,0 +1,71 @@ +package com.klp.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.klp.common.annotation.RepeatSubmit; +import com.klp.common.annotation.Log; +import com.klp.common.core.controller.BaseController; +import com.klp.common.core.domain.PageQuery; +import com.klp.common.core.domain.R; +import com.klp.common.core.validate.AddGroup; +import com.klp.common.core.validate.EditGroup; +import com.klp.common.enums.BusinessType; +import com.klp.common.utils.poi.ExcelUtil; +import com.klp.domain.vo.AttendanceRecordsVo; +import com.klp.domain.bo.AttendanceRecordsBo; +import com.klp.service.IAttendanceRecordsService; +import com.klp.common.core.page.TableDataInfo; + +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/wms/attendanceRecords") +public class AttendanceRecordsController extends BaseController { + + private final IAttendanceRecordsService iAttendanceRecordsService; + + @GetMapping("/list") + public TableDataInfo list(AttendanceRecordsBo bo, PageQuery pageQuery) { + return iAttendanceRecordsService.queryPageList(bo, pageQuery); + } + + @Log(title = "打卡记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(AttendanceRecordsBo bo, HttpServletResponse response) { + List list = iAttendanceRecordsService.queryList(bo); + ExcelUtil.exportExcel(list, "打卡记录", AttendanceRecordsVo.class, response); + } + + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Integer id) { + return R.ok(iAttendanceRecordsService.queryById(id)); + } + + @Log(title = "打卡记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody AttendanceRecordsBo bo) { + return toAjax(iAttendanceRecordsService.insertByBo(bo)); + } + + @Log(title = "打卡记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody AttendanceRecordsBo bo) { + return toAjax(iAttendanceRecordsService.updateByBo(bo)); + } + + @Log(title = "打卡记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Integer[] ids) { + return toAjax(iAttendanceRecordsService.deleteWithValidByIds(Arrays.asList(ids), true)); + } +} \ No newline at end of file diff --git a/klp-wms/src/main/java/com/klp/domain/AttendanceRecords.java b/klp-wms/src/main/java/com/klp/domain/AttendanceRecords.java new file mode 100644 index 00000000..35c6cf6a --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/AttendanceRecords.java @@ -0,0 +1,36 @@ +package com.klp.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("attendance_records") +public class AttendanceRecords implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id") + private Integer id; + + private String pin; + + private String ename; + + private String deptname; + + private String sn; + + private Date checktime; + + private Integer verify; + + private Integer stateno; + + private String state; + + private Date createdAt; +} \ No newline at end of file diff --git a/klp-wms/src/main/java/com/klp/domain/bo/AttendanceRecordsBo.java b/klp-wms/src/main/java/com/klp/domain/bo/AttendanceRecordsBo.java new file mode 100644 index 00000000..5b15c7b4 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/bo/AttendanceRecordsBo.java @@ -0,0 +1,37 @@ +package com.klp.domain.bo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +@Data +@EqualsAndHashCode(callSuper = false) +public class AttendanceRecordsBo { + + private Integer id; + + private String pin; + + private String ename; + + private String deptname; + + private String sn; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date checktimeStart; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date checktimeEnd; + + private Integer verify; + + private Integer stateno; + + private String state; +} \ No newline at end of file diff --git a/klp-wms/src/main/java/com/klp/domain/vo/AttendanceRecordsVo.java b/klp-wms/src/main/java/com/klp/domain/vo/AttendanceRecordsVo.java new file mode 100644 index 00000000..b87b0601 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/domain/vo/AttendanceRecordsVo.java @@ -0,0 +1,47 @@ +package com.klp.domain.vo; + +import lombok.Data; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; + +@Data +@ExcelIgnoreUnannotated +public class AttendanceRecordsVo { + + private static final long serialVersionUID = 1L; + + @ExcelProperty(value = "主键ID") + private Integer id; + + @ExcelProperty(value = "人员编号") + private String pin; + + @ExcelProperty(value = "姓名") + private String ename; + + @ExcelProperty(value = "部门名称") + private String deptname; + + @ExcelProperty(value = "设备编号") + private String sn; + + @ExcelProperty(value = "打卡时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date checktime; + + @ExcelProperty(value = "验证方式") + private Integer verify; + + @ExcelProperty(value = "状态编号") + private Integer stateno; + + @ExcelProperty(value = "状态") + private String state; + + @ExcelProperty(value = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createdAt; +} \ No newline at end of file diff --git a/klp-wms/src/main/java/com/klp/mapper/AttendanceRecordsMapper.java b/klp-wms/src/main/java/com/klp/mapper/AttendanceRecordsMapper.java new file mode 100644 index 00000000..14c63844 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/mapper/AttendanceRecordsMapper.java @@ -0,0 +1,10 @@ +package com.klp.mapper; + +import com.klp.domain.AttendanceRecords; +import com.klp.domain.vo.AttendanceRecordsVo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface AttendanceRecordsMapper extends BaseMapper { +} \ No newline at end of file diff --git a/klp-wms/src/main/java/com/klp/service/IAttendanceRecordsService.java b/klp-wms/src/main/java/com/klp/service/IAttendanceRecordsService.java new file mode 100644 index 00000000..c9e9018e --- /dev/null +++ b/klp-wms/src/main/java/com/klp/service/IAttendanceRecordsService.java @@ -0,0 +1,25 @@ +package com.klp.service; + +import com.klp.domain.AttendanceRecords; +import com.klp.domain.vo.AttendanceRecordsVo; +import com.klp.domain.bo.AttendanceRecordsBo; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +public interface IAttendanceRecordsService { + + AttendanceRecordsVo queryById(Integer id); + + TableDataInfo queryPageList(AttendanceRecordsBo bo, PageQuery pageQuery); + + List queryList(AttendanceRecordsBo bo); + + Boolean insertByBo(AttendanceRecordsBo bo); + + Boolean updateByBo(AttendanceRecordsBo bo); + + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} \ No newline at end of file diff --git a/klp-wms/src/main/java/com/klp/service/impl/AttendanceRecordsServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/AttendanceRecordsServiceImpl.java new file mode 100644 index 00000000..e6936583 --- /dev/null +++ b/klp-wms/src/main/java/com/klp/service/impl/AttendanceRecordsServiceImpl.java @@ -0,0 +1,84 @@ +package com.klp.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.klp.common.core.page.TableDataInfo; +import com.klp.common.core.domain.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.klp.common.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.klp.domain.bo.AttendanceRecordsBo; +import com.klp.domain.vo.AttendanceRecordsVo; +import com.klp.domain.AttendanceRecords; +import com.klp.mapper.AttendanceRecordsMapper; +import com.klp.service.IAttendanceRecordsService; + +import java.util.List; +import java.util.Collection; + +@RequiredArgsConstructor +@Service +public class AttendanceRecordsServiceImpl implements IAttendanceRecordsService { + + private final AttendanceRecordsMapper baseMapper; + + @Override + public AttendanceRecordsVo queryById(Integer id) { + AttendanceRecords entity = baseMapper.selectById(id); + return BeanUtil.toBean(entity, AttendanceRecordsVo.class); + } + + @Override + public TableDataInfo queryPageList(AttendanceRecordsBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page page = baseMapper.selectPage(pageQuery.build(), lqw); + List voList = BeanUtil.copyToList(page.getRecords(), AttendanceRecordsVo.class); + Page voPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal()); + voPage.setRecords(voList); + return TableDataInfo.build(voPage); + } + + @Override + public List queryList(AttendanceRecordsBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + List list = baseMapper.selectList(lqw); + return BeanUtil.copyToList(list, AttendanceRecordsVo.class); + } + + private LambdaQueryWrapper buildQueryWrapper(AttendanceRecordsBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getId() != null, AttendanceRecords::getId, bo.getId()); + lqw.eq(StringUtils.isNotBlank(bo.getPin()), AttendanceRecords::getPin, bo.getPin()); + lqw.like(StringUtils.isNotBlank(bo.getEname()), AttendanceRecords::getEname, bo.getEname()); + lqw.eq(StringUtils.isNotBlank(bo.getDeptname()), AttendanceRecords::getDeptname, bo.getDeptname()); + lqw.eq(StringUtils.isNotBlank(bo.getSn()), AttendanceRecords::getSn, bo.getSn()); + lqw.ge(bo.getChecktimeStart() != null, AttendanceRecords::getChecktime, bo.getChecktimeStart()); + lqw.le(bo.getChecktimeEnd() != null, AttendanceRecords::getChecktime, bo.getChecktimeEnd()); + lqw.eq(bo.getVerify() != null, AttendanceRecords::getVerify, bo.getVerify()); + lqw.eq(bo.getStateno() != null, AttendanceRecords::getStateno, bo.getStateno()); + lqw.eq(StringUtils.isNotBlank(bo.getState()), AttendanceRecords::getState, bo.getState()); + lqw.orderByDesc(AttendanceRecords::getChecktime); + return lqw; + } + + @Override + public Boolean insertByBo(AttendanceRecordsBo bo) { + AttendanceRecords add = BeanUtil.toBean(bo, AttendanceRecords.class); + return baseMapper.insert(add) > 0; + } + + @Override + public Boolean updateByBo(AttendanceRecordsBo bo) { + AttendanceRecords update = BeanUtil.toBean(bo, AttendanceRecords.class); + return baseMapper.updateById(update) > 0; + } + + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} \ No newline at end of file