Sfoglia il codice sorgente

解决美莱德请假同步问题

seyason 1 anno fa
parent
commit
b869ba5f4c

+ 6 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/LeaveSheetController.java

@@ -157,11 +157,7 @@ public class LeaveSheetController {
         JSONObject jsonObject=new JSONObject();
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        //需要修改************************************************  日期
-        LocalDateTime yesterday = LocalDateTime.now().minusDays(2);
-        String startDate = dtf.format(yesterday);
-        String endDate = dtf.format(yesterday.plusDays(30));
-        jsonObject.put("workDate",startDate);
+        String startDate = dtf.format(LocalDateTime.now());
         jsonObject.put("gmtFinished",startDate);
         String jsonString = jsonObject.toJSONString();
         TimeType allDay = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", companyId));
@@ -183,7 +179,7 @@ public class LeaveSheetController {
             User user=optional.get();
             /*System.out.println("泛微同步人员请假数据----"+user.getName());*/
             if(companyId.equals(user.getCompanyId())){
-                LeaveSheet leaveSheet=new LeaveSheet();
+                LeaveSheet leaveSheet = new LeaveSheet();
                 leaveSheet.setCompanyId(user.getCompanyId());
                 leaveSheet.setStatus(0);
                 leaveSheet.setOwnerId(user.getId());
@@ -235,9 +231,12 @@ public class LeaveSheetController {
             }
         }
         if(leaveSheetList.size()>0){
-            leaveSheetService.saveOrUpdateBatch(leaveSheetList);
+            leaveSheetService.remove(new QueryWrapper<LeaveSheet>().eq("company_id",companyId));
+            leaveSheetService.saveBatch(leaveSheetList);
         }
         return msg;
     }
+
+
 }
 

+ 41 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/LeaveSheetFvController.java

@@ -0,0 +1,41 @@
+package com.management.platform.controller;
+
+
+import com.management.platform.service.LeaveSheetFvService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-01-29
+ */
+@RestController
+@RequestMapping("/leave-sheet-fv")
+public class LeaveSheetFvController {
+
+    @Resource
+    LeaveSheetFvService leaveSheetFvService;
+
+    @RequestMapping("/syncData")
+    public HttpRespMsg syncData(String startDate, String endDate, Integer companyId) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        httpRespMsg.data = leaveSheetFvService.syncData(startDate, endDate, companyId);
+        return httpRespMsg;
+    }
+
+    @RequestMapping("/testAdd")
+    public HttpRespMsg testAdd(Integer companyId) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        leaveSheetFvService.testAdd(companyId);
+        return httpRespMsg;
+    }
+}
+

+ 158 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/LeaveSheetFv.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-01-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class LeaveSheetFv extends Model<LeaveSheetFv> {
+
+    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-platform/src/main/java/com/management/platform/mapper/LeaveSheetFvMapper.java

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

+ 19 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/LeaveSheetFvService.java

@@ -0,0 +1,19 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.LeaveSheetFv;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-01-29
+ */
+public interface LeaveSheetFvService extends IService<LeaveSheetFv> {
+
+    Integer syncData(String startDate, String endDate, Integer companyId);
+
+    void testAdd(Integer companyId);
+}

+ 144 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/LeaveSheetFvServiceImpl.java

@@ -0,0 +1,144 @@
+package com.management.platform.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.*;
+import com.management.platform.mapper.LeaveSheetFvMapper;
+import com.management.platform.mapper.TimeTypeMapper;
+import com.management.platform.mapper.UserMapper;
+import com.management.platform.service.LeaveSheetFvService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.util.DockWithMLD;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.Duration;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-01-29
+ */
+@Service
+@Transactional
+public class LeaveSheetFvServiceImpl extends ServiceImpl<LeaveSheetFvMapper, LeaveSheetFv> implements LeaveSheetFvService {
+
+    @Resource
+    LeaveSheetFvMapper leaveSheetFvMapper;
+    @Resource
+    TimeTypeMapper timeTypeMapper;
+    @Resource
+    UserMapper userMapper;
+
+    @Override
+    public Integer syncData(String startDate, String endDate, Integer companyId) {
+        TimeType comTimeType = timeTypeMapper.selectById(companyId);
+        DockWithMLD dockWithMLD=new DockWithMLD();
+        JSONObject jsonObject=new JSONObject();
+        DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        List<LeaveSheetFv> oldLeaveSheetList = list(new QueryWrapper<LeaveSheetFv>().eq("company_id", companyId));
+        jsonObject.put("workDate",startDate);
+        jsonObject.put("gmtFinished",endDate);
+        String jsonString = jsonObject.toJSONString();
+        List<LeaveSheetFv> leaveSheetList=new ArrayList<>();
+
+        List<User> allUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
+        //Todo: 获取请假数据
+        HttpRespMsg leaveRecordMsg = dockWithMLD.getResult("http://10.1.10.51:20175/api/cube/restful/interface/getModeDataPageList/getLeaveRecord", jsonString);
+        List<Map<String,Object>> leaveRecordList= (List<Map<String, Object>>) leaveRecordMsg.data;
+        System.out.println("原始数据条数:"+leaveRecordList.size());
+        for (Map<String, Object> map : leaveRecordList) {
+            Optional<User> optional=allUserList.stream().filter(al->al.getJobNumber()!=null&&al.getJobNumber().equals(map.get("rybh"))).findFirst();
+            if(!optional.isPresent()){
+                continue;
+            }
+            User user=optional.get();
+            LeaveSheetFv leaveSheet=new LeaveSheetFv();
+            leaveSheet.setCompanyId(user.getCompanyId());
+            leaveSheet.setStatus(0);
+            leaveSheet.setOwnerId(user.getId());
+            leaveSheet.setOwnerName(user.getName());
+            leaveSheet.setStartDate(LocalDate.parse(String.valueOf(map.get("startDate")),dtf1));
+            leaveSheet.setEndDate(LocalDate.parse(String.valueOf(map.get("endDate")),dtf1));
+            Integer timeType=null;
+            switch (String.valueOf(map.get("timeType"))){
+                case "小时":timeType=1;
+                    break;
+                case "天":timeType=0;
+                    break;
+            }
+            leaveSheet.setTimeType(timeType);
+            leaveSheet.setTimeDays(Float.parseFloat(((String) map.get("timeDays")).equals("")?"0.00":((String) map.get("timeDays"))));
+            if (timeType == 0){
+                leaveSheet.setTimeHours(leaveSheet.getTimeDays()*comTimeType.getAllday());
+            }else {
+                leaveSheet.setTimeHours(Float.parseFloat(((String) map.get("timeHours")).equals("")?"0.00":((String) map.get("timeHours"))));
+            }
+            Integer leaveType;
+            switch (String.valueOf(map.get("leaveType"))){
+                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);
+            leaveSheet.setProcinstId(String.valueOf(map.get("id")));
+            leaveSheet.setGmtFinished(String.valueOf(map.get("gmtFinished")));
+            leaveSheetList.add(leaveSheet);
+        }
+        if(leaveSheetList.size()>0){
+            //删掉该公司的所有请假数据
+            System.out.println("删除老数据");
+            leaveSheetFvMapper.delete(new QueryWrapper<LeaveSheetFv>().eq("company_id",companyId));
+            //再重新插入
+            saveBatch(leaveSheetList);
+        }
+        System.out.println("请假数据同步完成,共获取到"+leaveSheetList.size()+"条数据");
+        return new Integer(leaveSheetList.size());
+    }
+
+    @Override
+    public void testAdd(Integer companyId) {
+        LeaveSheetFv leaveSheetFv=new LeaveSheetFv();
+        leaveSheetFv.setCompanyId(companyId);
+        leaveSheetFv.setOwnerId("1");
+        leaveSheetFv.setOwnerName("张三");
+        leaveSheetFv.setStartDate(LocalDate.of(2024,1,1));
+        leaveSheetFv.setEndDate(LocalDate.of(2024,1,2));
+        leaveSheetFv.setTimeType(0);
+        leaveSheetFv.setTimeDays(1.0f);
+        leaveSheetFv.setTimeHours(8.0f);
+        leaveSheetFv.setLeaveType(0);
+        leaveSheetFv.setProcinstId("1");
+        leaveSheetFv.setGmtFinished(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        leaveSheetFvMapper.insert(leaveSheetFv);
+    }
+}

+ 24 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -5514,7 +5514,30 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 }
                 //是否启用自定义的维度了
                 if (timeType.getCustomDegreeActive() == 1) {
-                    item.add(map.get("degreeName") != null?map.get("degreeName").toString():"");
+                    if (timeType.getCustomDegreeMultiple()) {
+                        //多选的自定义维度
+                        List<ReportExtraDegree> extraDegreeList = reportExtraDegreeMapper.selectList(new QueryWrapper<ReportExtraDegree>().eq("company_id", companyId));
+                        String degreeIds = (String) map.get("multiDegrId");
+                        String degreeNames = "";
+                        if (!StringUtils.isEmpty(degreeIds)) {
+                            degreeIds = degreeIds.replace("@", ",");
+                            JSONArray array = JSONArray.parseArray(degreeIds);
+                            for (int i=0;i<array.size(); i++) {
+                                Integer id = array.getInteger(i);
+                                Optional<ReportExtraDegree> first = extraDegreeList.stream().filter(d -> d.getId().equals(id)).findFirst();
+                                if (first.isPresent()) {
+                                    ReportExtraDegree degree = first.get();
+                                    degreeNames += degree.getName() + ",";
+                                }
+                            }
+                            if (degreeNames.length() > 0) {
+                                degreeNames = degreeNames.substring(0, degreeNames.length()-1);
+                            }
+                        }
+                        item.add(degreeNames);
+                    } else {
+                        item.add(map.get("degreeName") != null?map.get("degreeName").toString():"");
+                    }
                 }
                 //是否启用了自定义数值
                 if (timeType.getCustomDataActive() == 1) {

+ 4 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -516,18 +516,15 @@ public class TimingTask {
                     leaveSheet.setLeaveType(leaveType);
                     leaveSheet.setProcinstId(String.valueOf(map.get("id")));
                     leaveSheet.setGmtFinished(String.valueOf(map.get("gmtFinished")));
-                    //看看是否已经存在:同一个人,同一段时间,同样的请假时长则视为同一条记录
-                    Optional<LeaveSheet> first = oldLeaveSheetList.stream().filter(ol -> ol.getStartDate().isEqual(leaveSheet.getStartDate())&&ol.getEndDate().isEqual(leaveSheet.getEndDate())&& ol.getOwnerId().equals(leaveSheet.getOwnerId())&&ol.getTimeHours().equals(leaveSheet.getTimeHours())).findFirst();
-                    if(first.isPresent()){
-                        leaveSheet.setId(first.get().getId());
-                    }
                     leaveSheetList.add(leaveSheet);
                 }
             }
             if(leaveSheetList.size()>0){
-                leaveSheetService.saveOrUpdateBatch(leaveSheetList);
+                //删除老数据
+                leaveSheetMapper.delete(new QueryWrapper<LeaveSheet>().eq("company_id",compId));
+                leaveSheetService.saveBatch(leaveSheetList);
             }
-            System.out.println(leaveRecordList);
+            System.out.println("定时任务:共同步到"+leaveRecordList.size()+"条请假数据");
             //Todo: 获取出差数据
             HttpRespMsg travelRecordMsg = dockWithMLD.getResult("http://10.1.10.51:20175/api/cube/restful/interface/getModeDataPageList/getTravelRecord", jsonString);
             List<Map<String,Object>> travelRecordList= (List<Map<String, Object>>) travelRecordMsg.data;

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/DockWithMLD.java

@@ -112,7 +112,7 @@ public class DockWithMLD {
                 }
                 httpRespMsg.data=resultList;
                 //todo 这里处理返回信息
-                System.out.println("成功"+ resulString);
+                System.out.println("成功"+ (resulString.length()>100?resulString.substring(0,100)+"...":resulString));
             }else{
                 System.out.println("获取数据失败,请查看日志"+currentDate+" "+currentTime);
             }

+ 35 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/LeaveSheetFvMapper.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.LeaveSheetFvMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.LeaveSheetFv">
+        <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>

BIN
fhKeeper/formulahousekeeper/management-platform/src/main/resources/upload/多项目任务模板.xlsx