From 6e96ad104ed20f4d33cb5c8ef07a951430eaccf7 Mon Sep 17 00:00:00 2001 From: XaoLi717 <144221124+XaoLi717@users.noreply.github.com> Date: Thu, 21 Nov 2024 14:09:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E5=8B=A4=E6=95=B0=E6=8D=AE=E6=9A=82?= =?UTF-8?q?=E6=97=B6ok?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/kqdata/KqdataController.java | 95 ++++++++++ .../admin/kqdata/vo/KqdataPageReqVO.java | 52 ++++++ .../admin/kqdata/vo/KqdataRespVO.java | 59 ++++++ .../admin/kqdata/vo/KqdataSaveReqVO.java | 42 +++++ .../home/dal/dataobject/kqdata/KqdataDO.java | 67 +++++++ .../home/dal/mysql/kqdata/KqdataMapper.java | 36 ++++ .../home/service/kqdata/KqdataService.java | 55 ++++++ .../service/kqdata/KqdataServiceImpl.java | 74 ++++++++ .../resources/mapper/kqdata/KqdataMapper.xml | 12 ++ .../service/kqdata/KqdataServiceImplTest.java | 170 ++++++++++++++++++ 10 files changed, 662 insertions(+) create mode 100644 yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/kqdata/KqdataController.java create mode 100644 yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/kqdata/vo/KqdataPageReqVO.java create mode 100644 yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/kqdata/vo/KqdataRespVO.java create mode 100644 yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/kqdata/vo/KqdataSaveReqVO.java create mode 100644 yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/dal/dataobject/kqdata/KqdataDO.java create mode 100644 yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/dal/mysql/kqdata/KqdataMapper.java create mode 100644 yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/kqdata/KqdataService.java create mode 100644 yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/kqdata/KqdataServiceImpl.java create mode 100644 yudao-module-home/yudao-module-home-biz/src/main/resources/mapper/kqdata/KqdataMapper.xml create mode 100644 yudao-module-home/yudao-module-home-biz/src/test/java/cn/iocoder/yudao/module/home/service/kqdata/KqdataServiceImplTest.java diff --git a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/kqdata/KqdataController.java b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/kqdata/KqdataController.java new file mode 100644 index 0000000..a9f539e --- /dev/null +++ b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/kqdata/KqdataController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.home.controller.admin.kqdata; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.home.controller.admin.kqdata.vo.*; +import cn.iocoder.yudao.module.home.dal.dataobject.kqdata.KqdataDO; +import cn.iocoder.yudao.module.home.service.kqdata.KqdataService; + +@Tag(name = "管理后台 - 考勤数据") +@RestController +@RequestMapping("/home/kqdata") +@Validated +public class KqdataController { + + @Resource + private KqdataService kqdataService; + + @PostMapping("/create") + @Operation(summary = "创建考勤数据") + @PreAuthorize("@ss.hasPermission('home:kqdata:create')") + public CommonResult createKqdata(@Valid @RequestBody KqdataSaveReqVO createReqVO) { + return success(kqdataService.createKqdata(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新考勤数据") + @PreAuthorize("@ss.hasPermission('home:kqdata:update')") + public CommonResult updateKqdata(@Valid @RequestBody KqdataSaveReqVO updateReqVO) { + kqdataService.updateKqdata(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除考勤数据") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('home:kqdata:delete')") + public CommonResult deleteKqdata(@RequestParam("id") Long id) { + kqdataService.deleteKqdata(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得考勤数据") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('home:kqdata:query')") + public CommonResult getKqdata(@RequestParam("id") Long id) { + KqdataDO kqdata = kqdataService.getKqdata(id); + return success(BeanUtils.toBean(kqdata, KqdataRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得考勤数据分页") + @PreAuthorize("@ss.hasPermission('home:kqdata:query')") + public CommonResult> getKqdataPage(@Valid KqdataPageReqVO pageReqVO) { + PageResult pageResult = kqdataService.getKqdataPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, KqdataRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出考勤数据 Excel") + @PreAuthorize("@ss.hasPermission('home:kqdata:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportKqdataExcel(@Valid KqdataPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = kqdataService.getKqdataPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "考勤数据.xls", "数据", KqdataRespVO.class, + BeanUtils.toBean(list, KqdataRespVO.class)); + } + +} diff --git a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/kqdata/vo/KqdataPageReqVO.java b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/kqdata/vo/KqdataPageReqVO.java new file mode 100644 index 0000000..bdec341 --- /dev/null +++ b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/kqdata/vo/KqdataPageReqVO.java @@ -0,0 +1,52 @@ +package cn.iocoder.yudao.module.home.controller.admin.kqdata.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 考勤数据分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class KqdataPageReqVO extends PageParam { + + @Schema(description = "id", example = "3518") + private Long id; + + @Schema(description = "员工", example = "赵六") + private String userName; + + @Schema(description = "员工id", example = "24276") + private Long userId; + + @Schema(description = "部门", example = "李四") + private String deptName; + + @Schema(description = "部门id", example = "29100") + private Long deptId; + + @Schema(description = "工作状态", example = "2") + private String dayStatus; + + @Schema(description = "标识") + private Long tokey; + + @Schema(description = "工作天数") + private Integer workDay; + + @Schema(description = "加班天数") + private Integer overDay; + + @Schema(description = "年班天数") + private Integer yoverDay; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/kqdata/vo/KqdataRespVO.java b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/kqdata/vo/KqdataRespVO.java new file mode 100644 index 0000000..7a52538 --- /dev/null +++ b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/kqdata/vo/KqdataRespVO.java @@ -0,0 +1,59 @@ +package cn.iocoder.yudao.module.home.controller.admin.kqdata.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 考勤数据 Response VO") +@Data +@ExcelIgnoreUnannotated +public class KqdataRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3518") + @ExcelProperty("id") + private Long id; + + @Schema(description = "员工", example = "赵六") + @ExcelProperty("员工") + private String userName; + + @Schema(description = "员工id", example = "24276") + @ExcelProperty("员工id") + private Long userId; + + @Schema(description = "部门", example = "李四") + @ExcelProperty("部门") + private String deptName; + + @Schema(description = "部门id", example = "29100") + @ExcelProperty("部门id") + private Long deptId; + + @Schema(description = "工作状态", example = "2") + @ExcelProperty("工作状态") + private String dayStatus; + + @Schema(description = "标识") + @ExcelProperty("标识") + private Long tokey; + + @Schema(description = "工作天数") + @ExcelProperty("工作天数") + private Integer workDay; + + @Schema(description = "加班天数") + @ExcelProperty("加班天数") + private Integer overDay; + + @Schema(description = "年班天数") + @ExcelProperty("年班天数") + private Integer yoverDay; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/kqdata/vo/KqdataSaveReqVO.java b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/kqdata/vo/KqdataSaveReqVO.java new file mode 100644 index 0000000..5ae50d4 --- /dev/null +++ b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/controller/admin/kqdata/vo/KqdataSaveReqVO.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.home.controller.admin.kqdata.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 考勤数据新增/修改 Request VO") +@Data +public class KqdataSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3518") + private Long id; + + @Schema(description = "员工", example = "赵六") + private String userName; + + @Schema(description = "员工id", example = "24276") + private Long userId; + + @Schema(description = "部门", example = "李四") + private String deptName; + + @Schema(description = "部门id", example = "29100") + private Long deptId; + + @Schema(description = "工作状态", example = "2") + private String dayStatus; + + @Schema(description = "标识") + private Long tokey; + + @Schema(description = "工作天数") + private Integer workDay; + + @Schema(description = "加班天数") + private Integer overDay; + + @Schema(description = "年班天数") + private Integer yoverDay; + +} diff --git a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/dal/dataobject/kqdata/KqdataDO.java b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/dal/dataobject/kqdata/KqdataDO.java new file mode 100644 index 0000000..9170639 --- /dev/null +++ b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/dal/dataobject/kqdata/KqdataDO.java @@ -0,0 +1,67 @@ +package cn.iocoder.yudao.module.home.dal.dataobject.kqdata; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 考勤数据 DO + * + * @author 君风 + */ +@TableName("oa_kqdata") +@KeySequence("oa_kqdata_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class KqdataDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 员工 + */ + private String userName; + /** + * 员工id + */ + private Long userId; + /** + * 部门 + */ + private String deptName; + /** + * 部门id + */ + private Long deptId; + /** + * 工作状态 + */ + private String dayStatus; + /** + * 标识 + */ + private Long tokey; + /** + * 工作天数 + */ + private Integer workDay; + /** + * 加班天数 + */ + private Integer overDay; + /** + * 年班天数 + */ + private Integer yoverDay; + +} diff --git a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/dal/mysql/kqdata/KqdataMapper.java b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/dal/mysql/kqdata/KqdataMapper.java new file mode 100644 index 0000000..26fbdaa --- /dev/null +++ b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/dal/mysql/kqdata/KqdataMapper.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.home.dal.mysql.kqdata; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.home.dal.dataobject.kqdata.KqdataDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.home.controller.admin.kqdata.vo.*; + +/** + * 考勤数据 Mapper + * + * @author 君风 + */ +@Mapper +public interface KqdataMapper extends BaseMapperX { + + default PageResult selectPage(KqdataPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(KqdataDO::getId, reqVO.getId()) + .likeIfPresent(KqdataDO::getUserName, reqVO.getUserName()) + .eqIfPresent(KqdataDO::getUserId, reqVO.getUserId()) + .likeIfPresent(KqdataDO::getDeptName, reqVO.getDeptName()) + .eqIfPresent(KqdataDO::getDeptId, reqVO.getDeptId()) + .eqIfPresent(KqdataDO::getDayStatus, reqVO.getDayStatus()) + .eqIfPresent(KqdataDO::getTokey, reqVO.getTokey()) + .eqIfPresent(KqdataDO::getWorkDay, reqVO.getWorkDay()) + .eqIfPresent(KqdataDO::getOverDay, reqVO.getOverDay()) + .eqIfPresent(KqdataDO::getYoverDay, reqVO.getYoverDay()) + .betweenIfPresent(KqdataDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(KqdataDO::getId)); + } + +} diff --git a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/kqdata/KqdataService.java b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/kqdata/KqdataService.java new file mode 100644 index 0000000..fed2dc7 --- /dev/null +++ b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/kqdata/KqdataService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.home.service.kqdata; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.home.controller.admin.kqdata.vo.*; +import cn.iocoder.yudao.module.home.dal.dataobject.kqdata.KqdataDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 考勤数据 Service 接口 + * + * @author 君风 + */ +public interface KqdataService { + + /** + * 创建考勤数据 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createKqdata(@Valid KqdataSaveReqVO createReqVO); + + /** + * 更新考勤数据 + * + * @param updateReqVO 更新信息 + */ + void updateKqdata(@Valid KqdataSaveReqVO updateReqVO); + + /** + * 删除考勤数据 + * + * @param id 编号 + */ + void deleteKqdata(Long id); + + /** + * 获得考勤数据 + * + * @param id 编号 + * @return 考勤数据 + */ + KqdataDO getKqdata(Long id); + + /** + * 获得考勤数据分页 + * + * @param pageReqVO 分页查询 + * @return 考勤数据分页 + */ + PageResult getKqdataPage(KqdataPageReqVO pageReqVO); + +} diff --git a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/kqdata/KqdataServiceImpl.java b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/kqdata/KqdataServiceImpl.java new file mode 100644 index 0000000..ea91144 --- /dev/null +++ b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/kqdata/KqdataServiceImpl.java @@ -0,0 +1,74 @@ +package cn.iocoder.yudao.module.home.service.kqdata; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.home.controller.admin.kqdata.vo.*; +import cn.iocoder.yudao.module.home.dal.dataobject.kqdata.KqdataDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.home.dal.mysql.kqdata.KqdataMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.home.enums.ErrorCodeConstants.*; + +/** + * 考勤数据 Service 实现类 + * + * @author 君风 + */ +@Service +@Validated +public class KqdataServiceImpl implements KqdataService { + + @Resource + private KqdataMapper kqdataMapper; + + @Override + public Long createKqdata(KqdataSaveReqVO createReqVO) { + // 插入 + KqdataDO kqdata = BeanUtils.toBean(createReqVO, KqdataDO.class); + kqdataMapper.insert(kqdata); + // 返回 + return kqdata.getId(); + } + + @Override + public void updateKqdata(KqdataSaveReqVO updateReqVO) { + // 校验存在 + validateKqdataExists(updateReqVO.getId()); + // 更新 + KqdataDO updateObj = BeanUtils.toBean(updateReqVO, KqdataDO.class); + kqdataMapper.updateById(updateObj); + } + + @Override + public void deleteKqdata(Long id) { + // 校验存在 + validateKqdataExists(id); + // 删除 + kqdataMapper.deleteById(id); + } + + private void validateKqdataExists(Long id) { + if (kqdataMapper.selectById(id) == null) { + throw exception(KQDATA_NOT_EXISTS); + } + } + + @Override + public KqdataDO getKqdata(Long id) { + return kqdataMapper.selectById(id); + } + + @Override + public PageResult getKqdataPage(KqdataPageReqVO pageReqVO) { + return kqdataMapper.selectPage(pageReqVO); + } + +} diff --git a/yudao-module-home/yudao-module-home-biz/src/main/resources/mapper/kqdata/KqdataMapper.xml b/yudao-module-home/yudao-module-home-biz/src/main/resources/mapper/kqdata/KqdataMapper.xml new file mode 100644 index 0000000..55a4721 --- /dev/null +++ b/yudao-module-home/yudao-module-home-biz/src/main/resources/mapper/kqdata/KqdataMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-home/yudao-module-home-biz/src/test/java/cn/iocoder/yudao/module/home/service/kqdata/KqdataServiceImplTest.java b/yudao-module-home/yudao-module-home-biz/src/test/java/cn/iocoder/yudao/module/home/service/kqdata/KqdataServiceImplTest.java new file mode 100644 index 0000000..bc493e2 --- /dev/null +++ b/yudao-module-home/yudao-module-home-biz/src/test/java/cn/iocoder/yudao/module/home/service/kqdata/KqdataServiceImplTest.java @@ -0,0 +1,170 @@ +package cn.iocoder.yudao.module.home.service.kqdata; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + +import javax.annotation.Resource; + +import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; + +import cn.iocoder.yudao.module.home.controller.admin.kqdata.vo.*; +import cn.iocoder.yudao.module.home.dal.dataobject.kqdata.KqdataDO; +import cn.iocoder.yudao.module.home.dal.mysql.kqdata.KqdataMapper; +import cn.iocoder.yudao.framework.common.pojo.PageResult; + +import javax.annotation.Resource; +import org.springframework.context.annotation.Import; +import java.util.*; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.*; +import static cn.iocoder.yudao.module.home.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * {@link KqdataServiceImpl} 的单元测试类 + * + * @author 君风 + */ +@Import(KqdataServiceImpl.class) +public class KqdataServiceImplTest extends BaseDbUnitTest { + + @Resource + private KqdataServiceImpl kqdataService; + + @Resource + private KqdataMapper kqdataMapper; + + @Test + public void testCreateKqdata_success() { + // 准备参数 + KqdataSaveReqVO createReqVO = randomPojo(KqdataSaveReqVO.class).setId(null); + + // 调用 + Long kqdataId = kqdataService.createKqdata(createReqVO); + // 断言 + assertNotNull(kqdataId); + // 校验记录的属性是否正确 + KqdataDO kqdata = kqdataMapper.selectById(kqdataId); + assertPojoEquals(createReqVO, kqdata, "id"); + } + + @Test + public void testUpdateKqdata_success() { + // mock 数据 + KqdataDO dbKqdata = randomPojo(KqdataDO.class); + kqdataMapper.insert(dbKqdata);// @Sql: 先插入出一条存在的数据 + // 准备参数 + KqdataSaveReqVO updateReqVO = randomPojo(KqdataSaveReqVO.class, o -> { + o.setId(dbKqdata.getId()); // 设置更新的 ID + }); + + // 调用 + kqdataService.updateKqdata(updateReqVO); + // 校验是否更新正确 + KqdataDO kqdata = kqdataMapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, kqdata); + } + + @Test + public void testUpdateKqdata_notExists() { + // 准备参数 + KqdataSaveReqVO updateReqVO = randomPojo(KqdataSaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> kqdataService.updateKqdata(updateReqVO), KQDATA_NOT_EXISTS); + } + + @Test + public void testDeleteKqdata_success() { + // mock 数据 + KqdataDO dbKqdata = randomPojo(KqdataDO.class); + kqdataMapper.insert(dbKqdata);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbKqdata.getId(); + + // 调用 + kqdataService.deleteKqdata(id); + // 校验数据不存在了 + assertNull(kqdataMapper.selectById(id)); + } + + @Test + public void testDeleteKqdata_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> kqdataService.deleteKqdata(id), KQDATA_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetKqdataPage() { + // mock 数据 + KqdataDO dbKqdata = randomPojo(KqdataDO.class, o -> { // 等会查询到 + o.setId(null); + o.setUserName(null); + o.setUserId(null); + o.setDeptName(null); + o.setDeptId(null); + o.setDayStatus(null); + o.setKey(null); + o.setWorkDay(null); + o.setOverDay(null); + o.setYoverDay(null); + o.setCreateTime(null); + }); + kqdataMapper.insert(dbKqdata); + // 测试 id 不匹配 + kqdataMapper.insert(cloneIgnoreId(dbKqdata, o -> o.setId(null))); + // 测试 userName 不匹配 + kqdataMapper.insert(cloneIgnoreId(dbKqdata, o -> o.setUserName(null))); + // 测试 userId 不匹配 + kqdataMapper.insert(cloneIgnoreId(dbKqdata, o -> o.setUserId(null))); + // 测试 deptName 不匹配 + kqdataMapper.insert(cloneIgnoreId(dbKqdata, o -> o.setDeptName(null))); + // 测试 deptId 不匹配 + kqdataMapper.insert(cloneIgnoreId(dbKqdata, o -> o.setDeptId(null))); + // 测试 dayStatus 不匹配 + kqdataMapper.insert(cloneIgnoreId(dbKqdata, o -> o.setDayStatus(null))); + // 测试 key 不匹配 + kqdataMapper.insert(cloneIgnoreId(dbKqdata, o -> o.setKey(null))); + // 测试 workDay 不匹配 + kqdataMapper.insert(cloneIgnoreId(dbKqdata, o -> o.setWorkDay(null))); + // 测试 overDay 不匹配 + kqdataMapper.insert(cloneIgnoreId(dbKqdata, o -> o.setOverDay(null))); + // 测试 yoverDay 不匹配 + kqdataMapper.insert(cloneIgnoreId(dbKqdata, o -> o.setYoverDay(null))); + // 测试 createTime 不匹配 + kqdataMapper.insert(cloneIgnoreId(dbKqdata, o -> o.setCreateTime(null))); + // 准备参数 + KqdataPageReqVO reqVO = new KqdataPageReqVO(); + reqVO.setId(null); + reqVO.setUserName(null); + reqVO.setUserId(null); + reqVO.setDeptName(null); + reqVO.setDeptId(null); + reqVO.setDayStatus(null); + reqVO.setKey(null); + reqVO.setWorkDay(null); + reqVO.setOverDay(null); + reqVO.setYoverDay(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = kqdataService.getKqdataPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbKqdata, pageResult.getList().get(0)); + } + +}