Explorar el Código

1、新增打卡上班模块

machaoyi hace 1 año
padre
commit
8a4a78d182

+ 45 - 17
.idea/workspace.xml

@@ -4,8 +4,7 @@
     <option name="autoReloadType" value="SELECTIVE" />
   </component>
   <component name="ChangeListManager">
-    <list default="true" id="1dc46973-e6f5-473b-a131-bf2bbc2dca15" name="更改" comment="1、字典管理">
-      <change afterPath="$PROJECT_DIR$/core/pom.xml" afterDir="false" />
+    <list default="true" id="1dc46973-e6f5-473b-a131-bf2bbc2dca15" name="更改" comment="1、新增打卡上班模块">
       <change afterPath="$PROJECT_DIR$/work/pom.xml" afterDir="false" />
       <change afterPath="$PROJECT_DIR$/work/src/main/java/com/ctsi/work/WorkClock/controller/WorkClockController.java" afterDir="false" />
       <change afterPath="$PROJECT_DIR$/work/src/main/java/com/ctsi/work/WorkClock/entity/WorkClock.java" afterDir="false" />
@@ -13,16 +12,7 @@
       <change afterPath="$PROJECT_DIR$/work/src/main/java/com/ctsi/work/WorkClock/mapper/WorkClockMapper.xml" afterDir="false" />
       <change afterPath="$PROJECT_DIR$/work/src/main/java/com/ctsi/work/WorkClock/service/WorkClockService.java" afterDir="false" />
       <change afterPath="$PROJECT_DIR$/work/src/main/java/com/ctsi/work/WorkClock/service/impl/WorkClockServiceImpl.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/encodings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/encodings.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/application/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/application/pom.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/application/src/main/java/com/ctsi/Application.java" beforeDir="false" afterPath="$PROJECT_DIR$/application/src/main/java/com/ctsi/Application.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/application/src/main/java/com/ctsi/Enum/ErrorCodeEnum.java" beforeDir="false" afterPath="$PROJECT_DIR$/core/src/main/java/com/ctsi/Enum/ErrorCodeEnum.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/application/src/main/java/com/ctsi/entity/FramePage.java" beforeDir="false" afterPath="$PROJECT_DIR$/core/src/main/java/com/ctsi/entity/FramePage.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/application/src/main/java/com/ctsi/utils/ApiResult.java" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/application/src/main/java/com/ctsi/utils/LongtoStringSerialize.java" beforeDir="false" afterPath="$PROJECT_DIR$/core/src/main/java/com/ctsi/utils/LongtoStringSerialize.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -131,8 +121,8 @@
       <recent name="C:\Users\setin\IdeaProjects\GeneralFrame\application\src\main\java\com\ctsi" />
     </key>
     <key name="CopyClassDialog.RECENTS_KEY">
-      <recent name="com.ctsi.utils" />
       <recent name="com.ctsi.entity" />
+      <recent name="com.ctsi.utils" />
       <recent name="com.ctsi.Enum" />
       <recent name="com.ctsi.System.SysDicItem.entity" />
       <recent name="com.ctsi.Auth.entity" />
@@ -169,7 +159,7 @@
       <workItem from="1705278479826" duration="43131000" />
       <workItem from="1705392945258" duration="4784000" />
       <workItem from="1705397771531" duration="2808000" />
-      <workItem from="1705452083011" duration="2048000" />
+      <workItem from="1705452083011" duration="2993000" />
     </task>
     <task id="LOCAL-00001" summary="基础框架配置">
       <option name="closed" value="true" />
@@ -443,15 +433,53 @@
       <option name="project" value="LOCAL" />
       <updated>1705387037146</updated>
     </task>
-    <option name="localTasksCounter" value="35" />
+    <task id="LOCAL-00035" summary="1、整理模块">
+      <option name="closed" value="true" />
+      <created>1705454393927</created>
+      <option name="number" value="00035" />
+      <option name="presentableId" value="LOCAL-00035" />
+      <option name="project" value="LOCAL" />
+      <updated>1705454393928</updated>
+    </task>
+    <option name="localTasksCounter" value="36" />
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">
     <option name="version" value="3" />
   </component>
   <component name="Vcs.Log.Tabs.Properties">
+    <option name="OPEN_GENERIC_TABS">
+      <map>
+        <entry key="238be731-cae7-4d14-8d13-c9563e9f2cd0" value="TOOL_WINDOW" />
+      </map>
+    </option>
     <option name="TAB_STATES">
       <map>
+        <entry key="238be731-cae7-4d14-8d13-c9563e9f2cd0">
+          <value>
+            <State>
+              <option name="FILTERS">
+                <map>
+                  <entry key="branch">
+                    <value>
+                      <list>
+                        <option value="HEAD" />
+                      </list>
+                    </value>
+                  </entry>
+                  <entry key="structure">
+                    <value>
+                      <list>
+                        <option value="dir:C:/Users/setin/IdeaProjects/GeneralFrame/application/src/main/java/com/ctsi/utils" />
+                      </list>
+                    </value>
+                  </entry>
+                </map>
+              </option>
+              <option name="SHOW_ONLY_AFFECTED_CHANGES" value="true" />
+            </State>
+          </value>
+        </entry>
         <entry key="MAIN">
           <value>
             <State />
@@ -462,8 +490,6 @@
   </component>
   <component name="VcsManagerConfiguration">
     <option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
-    <MESSAGE value="1、菜单接口、部门接口" />
-    <MESSAGE value="1、部门列表树型结构构建" />
     <MESSAGE value="1、角色表" />
     <MESSAGE value="1、token使用redis持久化集成&#10;2、菜单和部门列表展示所有信息" />
     <MESSAGE value="1、登录接口包修改" />
@@ -487,7 +513,9 @@
     <MESSAGE value="1、debug" />
     <MESSAGE value="1、修改图形验证码的字体,以便在linux中使用" />
     <MESSAGE value="1、字典管理" />
-    <option name="LAST_COMMIT_MESSAGE" value="1、字典管理" />
+    <MESSAGE value="1、整理模块" />
+    <MESSAGE value="1、新增打卡上班模块" />
+    <option name="LAST_COMMIT_MESSAGE" value="1、新增打卡上班模块" />
   </component>
   <component name="XSLT-Support.FileAssociations.UIState">
     <expand />

+ 67 - 0
work/pom.xml

@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>work</artifactId>
+    <packaging>jar</packaging>
+    <name>work</name>
+    <parent>
+        <groupId>com.ctsi</groupId>
+        <artifactId>myframe</artifactId>
+        <version>2.5.15</version>
+    </parent>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-extension</artifactId>
+            <version>3.5.5</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.ctsi</groupId>
+            <artifactId>core</artifactId>
+            <version>2.5.15</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.25</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.26</version>
+        </dependency>
+    </dependencies>
+    <profiles>
+        <profile>
+            <id>swagger</id>
+            <properties>
+                <profile.swagger>,swagger</profile.swagger>
+            </properties>
+        </profile>
+    </profiles>
+</project>

+ 113 - 0
work/src/main/java/com/ctsi/work/WorkClock/controller/WorkClockController.java

@@ -0,0 +1,113 @@
+package com.ctsi.work.WorkClock.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ctsi.entity.FramePage;
+import com.ctsi.utils.ApiResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+import com.ctsi.work.WorkClock.entity.WorkClock;
+import com.ctsi.work.WorkClock.service.WorkClockService;
+
+import javax.annotation.Resource;
+
+ /**
+ * 员工打卡表;(work_clock)表控制层
+ * @author : machaoyi
+ * @date : 2024-1-16
+ */
+@Api(tags = "员工打卡表对象功能接口")
+@RestController
+@RequestMapping("/workClock")
+public class WorkClockController{
+    @Resource
+    private WorkClockService workClockService;
+    private static final Logger log = LoggerFactory.getLogger(WorkClockController.class);
+    
+    /** 
+     * 通过ID查询单条数据 
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    @ApiOperation("通过ID查询单条数据")
+    @GetMapping("{id}")
+    public ApiResult<WorkClock> queryById(Long id){
+        try {
+            return ApiResult.success(workClockService.queryById(id));
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            return ApiResult.failure("查询失败",null);
+        }
+    }
+    
+    /** 
+     * 分页查询
+     *
+     * @param workClock 筛选条件
+     * @return 查询结果
+     */
+    @ApiOperation("分页查询")
+    @GetMapping
+    public ApiResult<Page<WorkClock>> paginQuery(WorkClock workClock, FramePage framePage){
+        try {
+            return ApiResult.success(workClockService.paginQuery(workClock, framePage.getPageNum(), framePage.getPageSize()));
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            return ApiResult.failure("分页查询失败",null);
+        }    
+    }
+    
+    /** 
+     * 新增数据
+     *
+     * @param workClock 实例对象
+     * @return 实例对象
+     */
+    @ApiOperation("新增数据")
+    @PostMapping
+    public ApiResult<WorkClock> add(@RequestBody WorkClock workClock){
+        try {
+            return ApiResult.success(workClockService.insert(workClock));
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            return ApiResult.failure("新增数据失败",null);
+        }
+    }
+    
+    /** 
+     * 更新数据
+     *
+     * @param workClock 实例对象
+     * @return 实例对象
+     */
+    @ApiOperation("更新数据")
+    @PutMapping
+    public ApiResult<WorkClock> edit(@RequestBody WorkClock workClock){
+        try {
+            return ApiResult.success(workClockService.update(workClock));
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            return ApiResult.failure("更新数据失败",null);
+        }
+    }
+    
+    /** 
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 是否成功
+     */
+    @ApiOperation("通过主键删除数据")
+    @DeleteMapping
+    public ApiResult<Boolean> deleteById(Long id){
+        try {
+            return ApiResult.success(workClockService.deleteById(id));
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            return ApiResult.failure("删除数据失败",null);
+        }
+    }
+}

+ 88 - 0
work/src/main/java/com/ctsi/work/WorkClock/entity/WorkClock.java

@@ -0,0 +1,88 @@
+package com.ctsi.work.WorkClock.entity;
+
+import com.ctsi.utils.LongtoStringSerialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+
+ /**
+ * 员工打卡表;
+ * @author : machaoyi
+ * @date : 2024-1-16
+ */
+@ApiModel(value = "员工打卡表",description = "")
+@TableName("work_clock")
+public class WorkClock implements Serializable,Cloneable{
+    /** 主键id */
+    @ApiModelProperty(value = "主键id",notes = "")
+    @TableId
+    @JsonSerialize(using = LongtoStringSerialize.class)
+    private Long id ;
+    /** 用户id */
+    @ApiModelProperty(value = "用户id",notes = "")
+    private String userId ;
+    /** 打卡类型 */
+    @ApiModelProperty(value = "打卡类型",notes = "")
+    private Integer clockType ;
+    /** 打卡时间 */
+    @ApiModelProperty(value = "打卡时间",notes = "")
+    private Long clockTime ;
+    /** 打卡地址 */
+    @ApiModelProperty(value = "打卡地址",notes = "")
+    private String clockAddr ;
+    /** 打卡状态 */
+    @ApiModelProperty(value = "打卡状态",notes = "")
+    private Integer clockStatus ;
+
+    /** 主键id */
+    public Long getId(){
+        return this.id;
+    }
+    /** 主键id */
+    public void setId(Long id){
+        this.id=id;
+    }
+    /** 用户id */
+    public String getUserId(){
+        return this.userId;
+    }
+    /** 用户id */
+    public void setUserId(String userId){
+        this.userId=userId;
+    }
+    /** 打卡类型 */
+    public Integer getClockType(){
+        return this.clockType;
+    }
+    /** 打卡类型 */
+    public void setClockType(Integer clockType){
+        this.clockType=clockType;
+    }
+    /** 打卡时间 */
+    public Long getClockTime(){
+        return this.clockTime;
+    }
+    /** 打卡时间 */
+    public void setClockTime(Long clockTime){
+        this.clockTime=clockTime;
+    }
+    /** 打卡地址 */
+    public String getClockAddr(){
+        return this.clockAddr;
+    }
+    /** 打卡地址 */
+    public void setClockAddr(String clockAddr){
+        this.clockAddr=clockAddr;
+    }
+    /** 打卡状态 */
+    public Integer getClockStatus(){
+        return this.clockStatus;
+    }
+    /** 打卡状态 */
+    public void setClockStatus(Integer clockStatus){
+        this.clockStatus=clockStatus;
+    }
+}

+ 26 - 0
work/src/main/java/com/ctsi/work/WorkClock/mapper/WorkClockMapper.java

@@ -0,0 +1,26 @@
+package com.ctsi.work.WorkClock.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import com.ctsi.work.WorkClock.entity.WorkClock;
+
+ /**
+ * 员工打卡表;(work_clock)表数据库访问层
+ * @author : machaoyi
+ * @date : 2024-1-16
+ */
+@Mapper
+public interface WorkClockMapper  extends BaseMapper<WorkClock>{
+    /** 
+     * 分页查询指定行数据
+     *
+     * @param page 分页参数
+     * @param wrapper 动态查询条件
+     * @return 分页对象列表
+     */
+    IPage<WorkClock> selectByPage(IPage<WorkClock> page , @Param(Constants.WRAPPER) Wrapper<WorkClock> wrapper);
+}

+ 8 - 0
work/src/main/java/com/ctsi/work/WorkClock/mapper/WorkClockMapper.xml

@@ -0,0 +1,8 @@
+<?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.ctsi.work.WorkClock.mapper.WorkClockMapper">
+     <select id="selectByPage" resultType="com.ctsi.work.WorkClock.entity.WorkClock">
+        select * from work_clock ${ew.customSqlSegment}
+    </select>
+</mapper>

+ 51 - 0
work/src/main/java/com/ctsi/work/WorkClock/service/WorkClockService.java

@@ -0,0 +1,51 @@
+package com.ctsi.work.WorkClock.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ctsi.work.WorkClock.entity.WorkClock;
+
+ /**
+ * 员工打卡表;(work_clock)表服务接口
+ * @author : machaoyi
+ * @date : 2024-1-16
+ */
+public interface WorkClockService{
+    
+    /** 
+     * 通过ID查询单条数据 
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    WorkClock queryById(Long id);
+    
+    /**
+     * 分页查询
+     *
+     * @param workClock 筛选条件
+     * @param current 当前页码
+     * @param size  每页大小
+     * @return
+     */
+    Page<WorkClock> paginQuery(WorkClock workClock, long current, long size);
+    /** 
+     * 新增数据
+     *
+     * @param workClock 实例对象
+     * @return 实例对象
+     */
+    WorkClock insert(WorkClock workClock);
+    /** 
+     * 更新数据
+     *
+     * @param workClock 实例对象
+     * @return 实例对象
+     */
+    WorkClock update(WorkClock workClock);
+    /** 
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 是否成功
+     */
+    boolean deleteById(Long id);
+}

+ 107 - 0
work/src/main/java/com/ctsi/work/WorkClock/service/impl/WorkClockServiceImpl.java

@@ -0,0 +1,107 @@
+package com.ctsi.work.WorkClock.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
+import com.ctsi.work.WorkClock.entity.WorkClock;
+import com.ctsi.work.WorkClock.mapper.WorkClockMapper;
+import com.ctsi.work.WorkClock.service.WorkClockService;
+ /**
+ * 员工打卡表;(work_clock)表服务实现类
+ * @author : machaoyi
+ * @date : 2024-1-16
+ */
+@Service
+public class WorkClockServiceImpl implements WorkClockService{
+    @Autowired
+    private WorkClockMapper workClockMapper;
+    
+    /** 
+     * 通过ID查询单条数据 
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    public WorkClock queryById(Long id){
+        return workClockMapper.selectById(id);
+    }
+    
+    /**
+     * 分页查询
+     *
+     * @param workClock 筛选条件
+     * @param current 当前页码
+     * @param size  每页大小
+     * @return
+     */
+    public Page<WorkClock> paginQuery(WorkClock workClock, long current, long size){
+        //1. 构建动态查询条件
+        LambdaQueryWrapper<WorkClock> queryWrapper = new LambdaQueryWrapper<>();
+        if(StrUtil.isNotBlank(workClock.getUserId())){
+            queryWrapper.eq(WorkClock::getUserId, workClock.getUserId());
+        }
+        if(StrUtil.isNotBlank(workClock.getClockAddr())){
+            queryWrapper.eq(WorkClock::getClockAddr, workClock.getClockAddr());
+        }
+        //2. 执行分页查询
+        Page<WorkClock> pagin = new Page<>(current , size , true);
+        IPage<WorkClock> selectResult = workClockMapper.selectPage(pagin , queryWrapper);
+        pagin.setPages(selectResult.getPages());
+        pagin.setTotal(selectResult.getTotal());
+        pagin.setRecords(selectResult.getRecords());
+        //3. 返回结果
+        return pagin;
+    }
+    
+    /** 
+     * 新增数据
+     *
+     * @param workClock 实例对象
+     * @return 实例对象
+     */
+    public WorkClock insert(WorkClock workClock){
+        workClockMapper.insert(workClock);
+        return workClock;
+    }
+    
+    /** 
+     * 更新数据
+     *
+     * @param workClock 实例对象
+     * @return 实例对象
+     */
+    public WorkClock update(WorkClock workClock){
+        //1. 根据条件动态更新
+        LambdaUpdateChainWrapper<WorkClock> chainWrapper = new LambdaUpdateChainWrapper<WorkClock>(workClockMapper);
+        if(StrUtil.isNotBlank(workClock.getUserId())){
+            chainWrapper.set(WorkClock::getUserId, workClock.getUserId());
+        }
+        if(StrUtil.isNotBlank(workClock.getClockAddr())){
+            chainWrapper.set(WorkClock::getClockAddr, workClock.getClockAddr());
+        }
+        //2. 设置主键,并更新
+        chainWrapper.eq(WorkClock::getId, workClock.getId());
+        boolean ret = chainWrapper.update();
+        //3. 更新成功了,查询最最对象返回
+        if(ret){
+            return queryById(workClock.getId());
+        }else{
+            return workClock;
+        }
+    }
+    
+    /** 
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 是否成功
+     */
+    public boolean deleteById(Long id){
+        int total = workClockMapper.deleteById(id);
+        return total > 0;
+    }
+}