Explorar o código

add:考勤提交

caozixuan hai 1 ano
pai
achega
f4165cb2d4

+ 254 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/result/TBDingSubmitResult.java

@@ -0,0 +1,254 @@
+package com.qmth.sop.business.bean.result;
+
+import com.qmth.sop.common.enums.DingSubmitStatusEnum;
+import com.qmth.sop.common.enums.RoleTypeEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 考勤提交查询结果
+ * @Author: CaoZixuan
+ * @Date: 2023-08-25
+ */
+public class TBDingSubmitResult {
+    @ApiModelProperty(value = "服务单元")
+    private String serviceUnitName;
+
+    @ApiModelProperty(value = "sop流水号")
+    private String sopNo;
+
+    @ApiModelProperty(value = "客户名称")
+    private String customName;
+
+    @ApiModelProperty(value = "省份")
+    private String province;
+
+    @ApiModelProperty(value = "城市")
+    private String city;
+
+    @ApiModelProperty(value = "进场时间")
+    private Long approachTime;
+
+    @ApiModelProperty(value = "撤场时间")
+    private Long departureTime;
+
+    @ApiModelProperty(value = "姓名")
+    private String archivesName;
+
+    @ApiModelProperty(value = "项目角色")
+    private RoleTypeEnum roleType;
+
+    @ApiModelProperty(value = "供应商")
+    private String supplierName;
+
+    @ApiModelProperty(value = "实际出勤(天)")
+    private Integer actualDays;
+
+    @ApiModelProperty(value = "工作日(天)")
+    private Integer weekdays;
+
+    @ApiModelProperty(value = "周末(天)")
+    private Integer weekends;
+
+    @ApiModelProperty(value = "法定节假日(天)")
+    private Integer legalHolidays;
+
+    @ApiModelProperty(value = "累计工时(小时)")
+    private Double workHours;
+
+    @ApiModelProperty(value = "违规工时(天)")
+    private Double violationDays;
+
+    @ApiModelProperty(value = "考勤异常数")
+    private Integer dingExceptionCount;
+
+    @ApiModelProperty(value = "剩余补卡次数")
+    private Integer remainCount;
+
+    @ApiModelProperty(value = "待处理异常数")
+    private Integer exceptionCount;
+
+    @ApiModelProperty(value = "提交状态")
+    private DingSubmitStatusEnum submitStatus;
+
+    @ApiModelProperty(value = "提交人")
+    private Long submitUserName;
+
+    @ApiModelProperty(value = "提交时间")
+    private Long submitTime;
+
+    public String getServiceUnitName() {
+        return serviceUnitName;
+    }
+
+    public void setServiceUnitName(String serviceUnitName) {
+        this.serviceUnitName = serviceUnitName;
+    }
+
+    public String getSopNo() {
+        return sopNo;
+    }
+
+    public void setSopNo(String sopNo) {
+        this.sopNo = sopNo;
+    }
+
+    public String getCustomName() {
+        return customName;
+    }
+
+    public void setCustomName(String customName) {
+        this.customName = customName;
+    }
+
+    public String getProvince() {
+        return province;
+    }
+
+    public void setProvince(String province) {
+        this.province = province;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public Long getApproachTime() {
+        return approachTime;
+    }
+
+    public void setApproachTime(Long approachTime) {
+        this.approachTime = approachTime;
+    }
+
+    public Long getDepartureTime() {
+        return departureTime;
+    }
+
+    public void setDepartureTime(Long departureTime) {
+        this.departureTime = departureTime;
+    }
+
+    public String getArchivesName() {
+        return archivesName;
+    }
+
+    public void setArchivesName(String archivesName) {
+        this.archivesName = archivesName;
+    }
+
+    public RoleTypeEnum getRoleType() {
+        return roleType;
+    }
+
+    public void setRoleType(RoleTypeEnum roleType) {
+        this.roleType = roleType;
+    }
+
+    public String getSupplierName() {
+        return supplierName;
+    }
+
+    public void setSupplierName(String supplierName) {
+        this.supplierName = supplierName;
+    }
+
+    public Integer getActualDays() {
+        return actualDays;
+    }
+
+    public void setActualDays(Integer actualDays) {
+        this.actualDays = actualDays;
+    }
+
+    public Integer getWeekdays() {
+        return weekdays;
+    }
+
+    public void setWeekdays(Integer weekdays) {
+        this.weekdays = weekdays;
+    }
+
+    public Integer getWeekends() {
+        return weekends;
+    }
+
+    public void setWeekends(Integer weekends) {
+        this.weekends = weekends;
+    }
+
+    public Integer getLegalHolidays() {
+        return legalHolidays;
+    }
+
+    public void setLegalHolidays(Integer legalHolidays) {
+        this.legalHolidays = legalHolidays;
+    }
+
+    public Double getWorkHours() {
+        return workHours;
+    }
+
+    public void setWorkHours(Double workHours) {
+        this.workHours = workHours;
+    }
+
+    public Double getViolationDays() {
+        return violationDays;
+    }
+
+    public void setViolationDays(Double violationDays) {
+        this.violationDays = violationDays;
+    }
+
+    public Integer getDingExceptionCount() {
+        return dingExceptionCount;
+    }
+
+    public void setDingExceptionCount(Integer dingExceptionCount) {
+        this.dingExceptionCount = dingExceptionCount;
+    }
+
+    public Integer getRemainCount() {
+        return remainCount;
+    }
+
+    public void setRemainCount(Integer remainCount) {
+        this.remainCount = remainCount;
+    }
+
+    public Integer getExceptionCount() {
+        return exceptionCount;
+    }
+
+    public void setExceptionCount(Integer exceptionCount) {
+        this.exceptionCount = exceptionCount;
+    }
+
+    public DingSubmitStatusEnum getSubmitStatus() {
+        return submitStatus;
+    }
+
+    public void setSubmitStatus(DingSubmitStatusEnum submitStatus) {
+        this.submitStatus = submitStatus;
+    }
+
+    public Long getSubmitUserName() {
+        return submitUserName;
+    }
+
+    public void setSubmitUserName(Long submitUserName) {
+        this.submitUserName = submitUserName;
+    }
+
+    public Long getSubmitTime() {
+        return submitTime;
+    }
+
+    public void setSubmitTime(Long submitTime) {
+        this.submitTime = submitTime;
+    }
+}

+ 201 - 0
sop-business/src/main/java/com/qmth/sop/business/entity/TBDingSubmit.java

@@ -0,0 +1,201 @@
+package com.qmth.sop.business.entity;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.sop.common.base.BaseEntity;
+import com.qmth.sop.common.enums.DingSubmitStatusEnum;
+import com.qmth.sop.common.enums.RoleTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 考勤提交表
+ * @Author: CaoZixuan
+ * @Date: 2023-08-24
+ */
+@ApiModel(value="TBDingSubmit对象", description="考勤提交审核表")
+public class TBDingSubmit extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "服务单元id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long serviceId;
+
+    @ApiModelProperty(value = "sop流水号")
+    private String sopNo;
+
+    @ApiModelProperty(value = "派单号")
+    private String crmNo;
+
+    @ApiModelProperty(value = "人员档案id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long userArchivesId;
+
+    @ApiModelProperty(value = "进场时间")
+    private Long approachTime;
+
+    @ApiModelProperty(value = "离场时间")
+    private Long departureTime;
+
+    @ApiModelProperty(value = "项目角色")
+    private RoleTypeEnum roleType;
+
+    @ApiModelProperty(value = "实际出勤(天)")
+    private Integer actualDays;
+
+    @ApiModelProperty(value = "工作日(天)")
+    private Integer weekdays;
+
+    @ApiModelProperty(value = "周末(天)")
+    private Integer weekends;
+
+    @ApiModelProperty(value = "法定节假日(天)")
+    private Integer legalHolidays;
+
+    @ApiModelProperty(value = "累计工时(小时)")
+    private Double workHours;
+
+    @ApiModelProperty(value = "违规工时")
+    private Double violationDays;
+
+    @ApiModelProperty(value = "提交人id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long submitUserId;
+
+    @ApiModelProperty(value = "提交时间")
+    private Long submitTime;
+
+    @ApiModelProperty(value = "提交状态")
+    private DingSubmitStatusEnum submitStatus;
+
+    public Long getServiceId() {
+        return serviceId;
+    }
+
+    public void setServiceId(Long serviceId) {
+        this.serviceId = serviceId;
+    }
+
+    public String getSopNo() {
+        return sopNo;
+    }
+
+    public void setSopNo(String sopNo) {
+        this.sopNo = sopNo;
+    }
+
+    public String getCrmNo() {
+        return crmNo;
+    }
+
+    public void setCrmNo(String crmNo) {
+        this.crmNo = crmNo;
+    }
+
+    public Long getUserArchivesId() {
+        return userArchivesId;
+    }
+
+    public void setUserArchivesId(Long userArchivesId) {
+        this.userArchivesId = userArchivesId;
+    }
+
+    public Long getApproachTime() {
+        return approachTime;
+    }
+
+    public void setApproachTime(Long approachTime) {
+        this.approachTime = approachTime;
+    }
+
+    public Long getDepartureTime() {
+        return departureTime;
+    }
+
+    public void setDepartureTime(Long departureTime) {
+        this.departureTime = departureTime;
+    }
+
+    public RoleTypeEnum getRoleType() {
+        return roleType;
+    }
+
+    public void setRoleType(RoleTypeEnum roleType) {
+        this.roleType = roleType;
+    }
+
+    public Integer getActualDays() {
+        return actualDays;
+    }
+
+    public void setActualDays(Integer actualDays) {
+        this.actualDays = actualDays;
+    }
+
+    public Integer getWeekdays() {
+        return weekdays;
+    }
+
+    public void setWeekdays(Integer weekdays) {
+        this.weekdays = weekdays;
+    }
+
+    public Integer getWeekends() {
+        return weekends;
+    }
+
+    public void setWeekends(Integer weekends) {
+        this.weekends = weekends;
+    }
+
+    public Integer getLegalHolidays() {
+        return legalHolidays;
+    }
+
+    public void setLegalHolidays(Integer legalHolidays) {
+        this.legalHolidays = legalHolidays;
+    }
+
+    public Double getWorkHours() {
+        return workHours;
+    }
+
+    public void setWorkHours(Double workHours) {
+        this.workHours = workHours;
+    }
+
+    public Double getViolationDays() {
+        return violationDays;
+    }
+
+    public void setViolationDays(Double violationDays) {
+        this.violationDays = violationDays;
+    }
+
+    public Long getSubmitUserId() {
+        return submitUserId;
+    }
+
+    public void setSubmitUserId(Long submitUserId) {
+        this.submitUserId = submitUserId;
+    }
+
+    public Long getSubmitTime() {
+        return submitTime;
+    }
+
+    public void setSubmitTime(Long submitTime) {
+        this.submitTime = submitTime;
+    }
+
+    public DingSubmitStatusEnum getSubmitStatus() {
+        return submitStatus;
+    }
+
+    public void setSubmitStatus(DingSubmitStatusEnum submitStatus) {
+        this.submitStatus = submitStatus;
+    }
+}

+ 47 - 0
sop-business/src/main/java/com/qmth/sop/business/mapper/TBDingSubmitMapper.java

@@ -0,0 +1,47 @@
+package com.qmth.sop.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.sop.business.bean.result.TBDingSubmitResult;
+import com.qmth.sop.business.entity.TBDingSubmit;
+import com.qmth.sop.common.enums.DingSubmitStatusEnum;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @Description: 考勤提交mapper
+ * @Author: CaoZixuan
+ * @Date: 2023-08-25
+ */
+public interface TBDingSubmitMapper extends BaseMapper<TBDingSubmit> {
+
+    /**
+     * 考勤提交分页查询
+     *
+     * @param iPage               分页参数
+     * @param serviceUnitId       服务单元id
+     * @param dingSubmitStatus    考勤提交状态
+     * @param submitUserId        提交人id
+     * @param archivesName        档案名称
+     * @param supplierId          供应商id
+     * @param customName          客户名
+     * @param sopNo               sop号
+     * @param violationHoursLimit 违规工时限制
+     * @param dingExceptionLimit  需处理异常考勤限制
+     * @param remainLimit         补卡限制
+     * @param exceptionLimit      异常限制
+     * @return 考勤提交分页查询结果
+     */
+    IPage<TBDingSubmitResult> findDingSubmitPage(@Param("iPage") Page<TBDingSubmitResult> iPage,
+                                                 @Param("serviceUnitId") Long serviceUnitId,
+                                                 @Param("dingSubmitStatus") DingSubmitStatusEnum dingSubmitStatus,
+                                                 @Param("submitUserId") Long submitUserId,
+                                                 @Param("archivesName") String archivesName,
+                                                 @Param("supplierId") Long supplierId,
+                                                 @Param("customName") String customName,
+                                                 @Param("sopNo") String sopNo,
+                                                 @Param("violationHoursLimit") Integer violationHoursLimit,
+                                                 @Param("dingExceptionLimit") Integer dingExceptionLimit,
+                                                 @Param("remainLimit") Integer remainLimit,
+                                                 @Param("exceptionLimit") Integer exceptionLimit);
+}

+ 27 - 0
sop-business/src/main/java/com/qmth/sop/business/service/TBDingSubmitService.java

@@ -0,0 +1,27 @@
+package com.qmth.sop.business.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.sop.business.bean.result.TBDingSubmitResult;
+import com.qmth.sop.business.entity.TBDingSubmit;
+import com.qmth.sop.common.enums.DingSubmitStatusEnum;
+
+/**
+ * @Description: 考勤提交服务接口
+ * @Author: CaoZixuan
+ * @Date: 2023-08-25
+ */
+public interface TBDingSubmitService extends IService<TBDingSubmit> {
+    IPage<TBDingSubmitResult> findDingSubmitPage(Long serviceUnitId, DingSubmitStatusEnum dingSubmitStatus, Long submitUserId,
+                                                 String archivesName, Long supplierId, String customName, String sopNo,
+                                                 Integer violationHoursLimit, Integer dingExceptionLimit,
+                                                 Integer remainLimit, Integer exceptionLimit, Integer pageNumber, Integer pageSize);
+
+    Object findDingSubmitSubTotal();
+
+    void submitDingBatch();
+
+    void applyWithDraw(Long archivesId, String crmNo);
+
+    void cancelWithDraw(Long archivesId, String crmNo);
+}

+ 41 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingSubmitServiceImpl.java

@@ -0,0 +1,41 @@
+package com.qmth.sop.business.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.sop.business.bean.result.TBDingSubmitResult;
+import com.qmth.sop.business.entity.TBDingSubmit;
+import com.qmth.sop.business.mapper.TBDingSubmitMapper;
+import com.qmth.sop.business.service.TBDingSubmitService;
+import com.qmth.sop.common.enums.DingSubmitStatusEnum;
+
+/**
+ * @Description: 考勤提交服务实现类
+ * @Author: CaoZixuan
+ * @Date: 2023/08/25
+ */
+public class TBDingSubmitServiceImpl extends ServiceImpl<TBDingSubmitMapper, TBDingSubmit> implements TBDingSubmitService {
+    @Override
+    public IPage<TBDingSubmitResult> findDingSubmitPage(Long serviceUnitId, DingSubmitStatusEnum dingSubmitStatus, Long submitUserId, String archivesName, Long supplierId, String customName, String sopNo, Integer violationHoursLimit, Integer dingExceptionLimit, Integer remainLimit, Integer exceptionLimit, Integer pageNumber, Integer pageSize) {
+        return null;
+    }
+
+    @Override
+    public Object findDingSubmitSubTotal() {
+        return null;
+    }
+
+    @Override
+    public void submitDingBatch() {
+
+    }
+
+    @Override
+    public void applyWithDraw(Long archivesId, String crmNo) {
+
+    }
+
+    @Override
+    public void cancelWithDraw(Long archivesId, String crmNo) {
+
+    }
+}

+ 31 - 1
sop-business/src/main/resources/db/log/caozixuan_update_log.sql

@@ -143,4 +143,34 @@ ALTER TABLE t_b_device_in_out
     ADD COLUMN status VARCHAR(20) NOT NULL COMMENT '状态,NORMAL:正常,BREAK_DOWN:故障' AFTER address;
 
 ALTER TABLE t_b_device_in_out
-    ADD COLUMN location VARCHAR(100) NULL COMMENT '当前所在地' AFTER supplier_name;
+    ADD COLUMN location VARCHAR(100) NULL COMMENT '当前所在地' AFTER supplier_name;
+
+-- 2023/08/25
+CREATE TABLE `t_b_ding_submit` (
+                                   `id` bigint NOT NULL COMMENT '主键',
+                                   `service_id` bigint NOT NULL COMMENT '服务单元id',
+                                   `sop_no` varchar(100) NOT NULL COMMENT 'sop单号',
+                                   `crm_no` varchar(100) NOT NULL COMMENT 'crm单号',
+                                   `user_archives_id` bigint NOT NULL COMMENT '人员档案id',
+                                   `approach_time` bigint NOT NULL COMMENT '进场时间',
+                                   `departure_time` bigint NOT NULL COMMENT '出场时间',
+                                   `role_type` varchar(20) NOT NULL COMMENT '项目角色类型',
+                                   `actual_days` int DEFAULT NULL COMMENT '实际出勤(天)',
+                                   `weekdays` int DEFAULT NULL COMMENT '工作日(天)',
+                                   `weekends` int DEFAULT NULL COMMENT '周末(天)',
+                                   `legal_holidays` int DEFAULT NULL COMMENT '法定节假日(天)',
+                                   `work_hours` decimal(8,2) DEFAULT NULL COMMENT '累计工时(小时)',
+                                   `violation_days` decimal(8,2) DEFAULT NULL COMMENT '违规工时',
+                                   `submit_user_id` bigint NOT NULL COMMENT '提交人id',
+                                   `submit_time` bigint NOT NULL COMMENT '提交时间',
+                                   `submit_status` varchar(20) NOT NULL COMMENT '提交状态',
+                                   `create_id` bigint DEFAULT NULL COMMENT '创建人id',
+                                   `create_time` bigint DEFAULT NULL COMMENT '创建时间',
+                                   `update_id` bigint DEFAULT NULL COMMENT '更新人id',
+                                   `update_time` bigint DEFAULT NULL COMMENT '更新时间',
+                                   PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='考勤提交审核表'
+
+ALTER TABLE t_b_ding
+    ADD COLUMN user_archives_id BIGINT NOT NULL COMMENT '人员档案id' AFTER user_id,
+    ADD COLUMN role_type VARCHAR(20) NOT NULL COMMENT '项目角色' AFTER user_archives_id;

+ 39 - 0
sop-business/src/main/resources/mapper/TBDingSubmitMapper.xml

@@ -0,0 +1,39 @@
+<?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.qmth.sop.business.mapper.TBDingSubmitMapper">
+
+    <select id="findDingSubmitPage" resultType="com.qmth.sop.business.bean.result.TBDingSubmitResult">
+        SELECT
+            service_id,
+            sop_no,
+            crm_no,
+            user_archives_id,
+            MAX(role_type) AS roleType,
+            MIN(sign_in_time) AS approachTime,
+            MAX(sign_out_time) AS departureTime,
+            COUNT(1) AS actualDays,
+            SUM(IF(date_type = 'WEEKDAY', 1, 0)) AS weekdays,
+            SUM(IF(date_type = 'WEEKEND', 1, 0)) AS weekends,
+            SUM(IF(date_type = 'LEGAL_HOLIDAYS', 1, 0)) AS legalHolidays,
+            ROUND(SUM(IF(sign_out_time IS NOT NULL
+                             AND sign_in_time IS NOT NULL,
+                         TIMESTAMPDIFF(MINUTE,
+                                       FROM_UNIXTIME(SUBSTRING(sign_out_time, 1, 10),
+                                                     '%Y-%m-%d %H:%i:%s'),
+                                       FROM_UNIXTIME(SUBSTRING(sign_in_time, 1, 10),
+                                                     '%Y-%m-%d %H:%i:%s')),
+                         0)) / 60,
+                  1) AS workHours,
+            SUM(IF((sign_in_time IS NULL
+                OR sign_out_time IS NULL),
+                   1,
+                   0)) AS violationDays,
+            SUM(IF((sign_in_time IS NULL
+                OR sign_out_time IS NULL),
+                   1,
+                   0)) AS dingExceptionCount
+        FROM
+            t_b_ding
+        GROUP BY service_id , sop_no , crm_no , user_archives_id;
+    </select>
+</mapper>

+ 38 - 0
sop-common/src/main/java/com/qmth/sop/common/enums/DingSubmitStatusEnum.java

@@ -0,0 +1,38 @@
+package com.qmth.sop.common.enums;
+
+/**
+ * @Description: 考勤提交状态
+ * @Author: CaoZixuan
+ * @Date: 2023-08-24
+ */
+public enum DingSubmitStatusEnum {
+    WILL_SUBMIT("工程师未提交考勤或撤回了考勤提交的状态","待提交","--"),
+    ALREADY_SUBMIT("工程师提交或取消撤回考勤","已提交","已提交"),
+    APPLY_WITHDRAW("工程师申请撤回考勤提交","已提交","申请撤回"),
+    CANCEL_WITHDRAW("工程师取消撤回申请","已提交","已提交"),
+    AGREE_WITHDRAW("管理员同意撤回","待提交","已撤回"),
+    AGREE_DING("管理员同意考勤申请","审核通过","审核通过")
+    ;
+
+    DingSubmitStatusEnum(String operate, String submitDesc, String auditDesc) {
+        this.operate = operate;
+        this.submitDesc = submitDesc;
+        this.auditDesc = auditDesc;
+    }
+
+    private final String operate;
+    private final String submitDesc;
+    private final String auditDesc;
+
+    public String getOperate() {
+        return operate;
+    }
+
+    public String getSubmitDesc() {
+        return submitDesc;
+    }
+
+    public String getAuditDesc() {
+        return auditDesc;
+    }
+}