Преглед на файлове

Merge remote-tracking branch 'origin/master'

Guo1B0 преди 11 месеца
родител
ревизия
c60c5fc8a3

+ 21 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/LeaveSheetController.java

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-06-14
+ */
+@RestController
+@RequestMapping("/leave-sheet")
+public class LeaveSheetController {
+
+}
+

+ 158 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/LeaveSheet.java

@@ -0,0 +1,158 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.time.LocalDate;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-06-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class LeaveSheet extends Model<LeaveSheet> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 公司id
+     */
+    @TableField("company_id")
+    private Integer companyId;
+
+    /**
+     * 填报人id
+     */
+    @TableField("owner_id")
+    private String ownerId;
+
+    /**
+     * 填报人姓名
+     */
+    @TableField("owner_name")
+    private String ownerName;
+
+    /**
+     * 开始日期
+     */
+    @TableField("start_date")
+    private LocalDate startDate;
+
+    /**
+     * 结束日期
+     */
+    @TableField("end_date")
+    private LocalDate endDate;
+
+    /**
+     * 假期类型:0-事假,1-病假,2-年假,3-产假
+     */
+    @TableField("leave_type")
+    private Integer leaveType;
+
+    /**
+     * 0-审核通过,1-待审核,2-驳回,3-已撤回
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+    /**
+     * 录入人
+     */
+    @TableField("operator_id")
+    private String operatorId;
+
+    /**
+     * 请假时长
+     */
+    @TableField("time_hours")
+    private Float timeHours;
+
+    /**
+     * 请假天数
+     */
+    @TableField("time_days")
+    private Float timeDays;
+
+    /**
+     * 时间
+     */
+    @TableField("indate")
+    private LocalDateTime indate;
+
+    /**
+     * 0-按天,1-按小时
+     */
+    @TableField("time_type")
+    private Integer timeType;
+
+    /**
+     * 手机号
+     */
+    @TableField("tel")
+    private String tel;
+
+    /**
+     * 审核人id
+     */
+    @TableField("auditor_id")
+    private String auditorId;
+
+    /**
+     * 审核人姓名
+     */
+    @TableField("auditor_name")
+    private String auditorName;
+
+    /**
+     * 1-部门审核,2-指定人员审核
+     */
+    @TableField("auditor_type")
+    private Integer auditorType;
+
+    /**
+     * 钉钉审批实例procInst_id
+     */
+    @TableField("procinst_id")
+    private String procinstId;
+
+    /**
+     * 钉钉审批实例的审批通过时间
+     */
+    @TableField("gmt_finished")
+    private String gmtFinished;
+
+    /**
+     * 当前审核节点id
+     */
+    @TableField("cur_audit_setting_id")
+    private Integer curAuditSettingId;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/mapper/LeaveSheetMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.LeaveSheet;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-06-14
+ */
+public interface LeaveSheetMapper extends BaseMapper<LeaveSheet> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/LeaveSheetService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.LeaveSheet;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-06-14
+ */
+public interface LeaveSheetService extends IService<LeaveSheet> {
+
+}

+ 20 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/LeaveSheetServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.LeaveSheet;
+import com.management.platform.mapper.LeaveSheetMapper;
+import com.management.platform.service.LeaveSheetService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-06-14
+ */
+@Service
+public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSheet> implements LeaveSheetService {
+
+}

+ 116 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/task/TimingTask.java

@@ -4,6 +4,7 @@ import com.alibaba.excel.util.DateUtils;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.injector.methods.SelectById;
 import com.management.platform.controller.WeiXinCorpController;
@@ -35,6 +36,7 @@ import javax.annotation.Resource;
 import java.io.File;
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.security.SecureRandom;
 import java.sql.Timestamp;
 import java.text.DecimalFormat;
@@ -93,6 +95,8 @@ public class TimingTask {
     private String path;
     @Resource
     private TimeTypeService timeTypeService;
+    @Resource
+    private LeaveSheetService leaveSheetService;
 
     private static final List<Integer> VALID_TOKEN_CHARS = new ArrayList<>();
     static {
@@ -208,4 +212,116 @@ public class TimingTask {
         }
     }
 
+    /**
+    * @Description:每天凌晨1:20同步前一天的企业微信审核通过的请假数据到车间管家
+    * @Param: []
+    * @return: void
+    * @Author: yurk
+    * @Date: 2024/6/14
+    */
+    @Scheduled(cron = "0 20 1 ? * *")
+    public void getLeaveSheetData() throws Exception {
+        if(isDev){
+            return;
+        }
+        DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        LocalDate start=LocalDate.now().minusDays(1);
+        LocalDate end=LocalDate.now();
+        List<WxCorpInfo> list = wxCorpInfoService.list(null);
+        JSONArray jsonArrayFilter = new JSONArray();
+        JSONObject filter1 = new JSONObject();
+        filter1.put("key","record_type");
+        filter1.put("value",1);
+        jsonArrayFilter.add(filter1);
+        JSONObject filter2 = new JSONObject();
+        filter2.put("key","sp_status");
+        filter2.put("value",2);
+        for (WxCorpInfo wxCorpInfo : list) {
+            JSONArray approvalInfo = wxCorpInfoService.getApprovalInfo(wxCorpInfo.getCompanyId(), df.format(start), df.format(end), "", jsonArrayFilter);
+            List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, wxCorpInfo.getCompanyId()));
+            if(approvalInfo!=null){
+                List<LeaveSheet> leaveSheets = new ArrayList<>();
+                for (int i = 0; i < approvalInfo.size(); i++) {
+                    JSONObject item = approvalInfo.getJSONObject(i);
+                    JSONObject applyer = item.getJSONObject("applyer");
+                    String userid = applyer.getString("userid");
+                    Optional<User> first = userList.stream().filter(u -> u.getCorpwxUserid().equals(userid)).findFirst();
+                    if(!first.isPresent()){
+                        continue;
+                    }
+                    LeaveSheet leaveSheet=new LeaveSheet();
+                    leaveSheet.setCompanyId(wxCorpInfo.getCompanyId());
+                    leaveSheet.setStatus(0);
+                    leaveSheet.setOwnerId(first.get().getId());
+                    leaveSheet.setOwnerName(first.get().getName());
+                    JSONObject apply_data = item.getJSONObject("apply_data");
+                    JSONArray contents = apply_data.getJSONArray("contents");
+                    for (int i1 = 0; i1 < contents.size(); i1++) {
+                        JSONObject map = contents.getJSONObject(i1);
+                        JSONArray title = map.getJSONArray("title");
+                        JSONObject value = map.getJSONObject("value");
+                        String control = map.getString("control");
+                        if(control.equals("Vacation")){
+                            JSONObject vacation = value.getJSONObject("vacation");
+                            JSONObject selector = vacation.getJSONObject("selector");
+                            //企业微信请假默认单选
+                            JSONArray options = selector.getJSONArray("options");
+                            JSONObject option = options.getJSONObject(0);
+                            int leaveType;
+                            switch (option.getJSONArray("value").getJSONObject(0).getString("text")){
+                                case "事假":leaveType=0;
+                                    break;
+                                case "病假":leaveType=1;
+                                    break;
+                                case "年假":leaveType=2;
+                                    break;
+                                case "产假":leaveType=3;
+                                    break;
+                                case "婚假":leaveType=4;
+                                    break;
+                                case "丧假":leaveType=5;
+                                    break;
+                                case "调休":leaveType=6;
+                                    break;
+                                case "陪产假":leaveType=7;
+                                    break;
+                                default:leaveType=8;
+                            }
+                            leaveSheet.setLeaveType(leaveType);
+                            JSONObject attendance = vacation.getJSONObject("attendance");
+                            JSONObject date_range = attendance.getJSONObject("date_range");
+                            leaveSheet.setTimeType(date_range.getString("type").equals("hour")?1:0);
+                            long new_begin = date_range.getLongValue("new_begin");
+                            long new_end = date_range.getLongValue("new_end");
+                            LocalDate startDate = DateTimeUtil.getLocalDateFromUnix(new_begin);
+                            LocalDate endDate = DateTimeUtil.getLocalDateFromUnix(new_end);
+                            leaveSheet.setStartDate(startDate);
+                            leaveSheet.setEndDate(endDate);
+                            long new_duration = date_range.getLongValue("new_duration");
+                            BigDecimal bigDecimal = new BigDecimal(new_duration);
+                            bigDecimal=bigDecimal.divide(new BigDecimal(3600),1, RoundingMode.HALF_DOWN);
+                            leaveSheet.setTimeHours(bigDecimal.floatValue());
+                            bigDecimal=bigDecimal.divide(new BigDecimal(8),1,RoundingMode.HALF_DOWN);
+                            leaveSheet.setTimeDays(bigDecimal.floatValue());
+                            leaveSheet.setLeaveType(1);
+                        }
+                        if(control.equals("Text")){
+                            if(title.getJSONObject(0).getString("text").equals("请假事由")){
+                                leaveSheet.setRemark(value.getString("text"));
+                            }
+                        }
+                    }
+                    LeaveSheet one = leaveSheetService.getOne(new LambdaQueryWrapper<LeaveSheet>().eq(LeaveSheet::getStartDate, leaveSheet.getStartDate()).eq(LeaveSheet::getEndDate, leaveSheet.getEndDate()).eq(LeaveSheet::getOwnerId, leaveSheet.getOwnerId()));
+                    if(one!=null){
+                        leaveSheet.setId(one.getId());
+                    }
+                    leaveSheets.add(leaveSheet);
+                }
+                if(leaveSheets.size()>0){
+                    leaveSheetService.saveOrUpdateBatch(leaveSheets);
+                }
+            }
+        }
+    }
+
 }

+ 7 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/util/DateTimeUtil.java

@@ -23,6 +23,13 @@ public class DateTimeUtil {
         return format;
     }
 
+    //把秒转化为时间
+    public static LocalDate getLocalDateFromUnix(long timestamp) {
+        Instant instant = Instant.ofEpochSecond(timestamp);
+        LocalDate localDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).toLocalDate();
+        return localDate;
+    }
+
     //把时间转为为秒,方便计算时长
     public static int getSecondsFromTime(String time) {
         DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");

+ 35 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/LeaveSheetMapper.xml

@@ -0,0 +1,35 @@
+<?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.management.platform.mapper.LeaveSheetMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.LeaveSheet">
+        <id column="id" property="id" />
+        <result column="company_id" property="companyId" />
+        <result column="owner_id" property="ownerId" />
+        <result column="owner_name" property="ownerName" />
+        <result column="start_date" property="startDate" />
+        <result column="end_date" property="endDate" />
+        <result column="leave_type" property="leaveType" />
+        <result column="status" property="status" />
+        <result column="remark" property="remark" />
+        <result column="operator_id" property="operatorId" />
+        <result column="time_hours" property="timeHours" />
+        <result column="time_days" property="timeDays" />
+        <result column="indate" property="indate" />
+        <result column="time_type" property="timeType" />
+        <result column="tel" property="tel" />
+        <result column="auditor_id" property="auditorId" />
+        <result column="auditor_name" property="auditorName" />
+        <result column="auditor_type" property="auditorType" />
+        <result column="procinst_id" property="procinstId" />
+        <result column="gmt_finished" property="gmtFinished" />
+        <result column="cur_audit_setting_id" property="curAuditSettingId" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, company_id, owner_id, owner_name, start_date, end_date, leave_type, status, remark, operator_id, time_hours, time_days, indate, time_type, tel, auditor_id, auditor_name, auditor_type, procinst_id, gmt_finished, cur_audit_setting_id
+    </sql>
+
+</mapper>