Browse Source

泓浒请假同步

QuYueTing 1 day ago
parent
commit
d784b809a2

+ 31 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -63,6 +63,8 @@ public class ReportController {
     private AuditWorkflowTimeSettingMapper auditWorkflowTimeSettingMapper;
     @Resource
     private UserService userService;
+    @Resource
+    UserDateAllowService userDateAllowService;
     @Autowired
     RestTemplate restTemplate;
     @Resource
@@ -639,6 +641,14 @@ public class ReportController {
 
         //针对物奇微,增加填报内容的关键字检查:
         if (company.getId() == 1071) {
+            //工作时长必须大于0
+            for (int i=0;i<workingTime.length; i++) {
+                if (workingTime[i] == null || workingTime[i] <= 0) {
+                    HttpRespMsg msg = new HttpRespMsg();
+                    msg.setError("工作时长必须大于0");
+                    return msg;
+                }
+            }
             // 从MaskWord表中获取当前公司的过滤词
             List<MaskWord> maskWords = maskWordService.list(new LambdaQueryWrapper<MaskWord>()
                     .eq(MaskWord::getCompanyId, company.getId()));
@@ -704,6 +714,27 @@ public class ReportController {
                     }
                 }
             }
+            //校验,请假全天的填报限制
+            List<String> dateList = Arrays.asList(createDate);
+            List<UserCorpwxTime> cardTimeList = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>().eq("corpwx_userid", user.getCorpwxUserid()).in("create_date", dateList));
+            List<UserDateAllow> userDateAllowList = userDateAllowService.list(new QueryWrapper<UserDateAllow>().eq("company_id", company.getId()));
+            //提交时仅针对请假的时候做限制
+            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            for (int i=0;i<createDate.length; i++) {
+                LocalDate date = LocalDate.parse(createDate[i], dateTimeFormatter);
+                Optional<UserCorpwxTime> first = cardTimeList.stream().filter(card -> card.getCreateDate().isEqual(date)).findFirst();
+                if (first.isPresent()) {
+                    if (first.get().getAskLeaveTime() >= comTimeType.getAllday()) {
+                        //检查是否在额外排除名单里面
+                        if (!userDateAllowList.stream().anyMatch(u -> u.getUserId().equals(user.getId()) && u.getDate().isEqual(date))) {
+                            HttpRespMsg msg = new HttpRespMsg();
+                            msg.setError(dateTimeFormatter.format(date)+"全天请假,不可填报");
+                            return msg;
+                        }
+                    }
+                }
+            }
+
         }
         //检查项目是否可填报; 修改为不校验项目,前端加载的项目已经过滤掉了完成和撤销的
         List<Integer> integers = Arrays.asList(projectId);

+ 5 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/U8Controller.java

@@ -53,7 +53,11 @@ public class U8Controller {
             userFvTimeService.syncUserFvTime(HONGHU_COMP_ID, null, startDate, endDate);
         }
         if (syncLeave != null && syncLeave) {
-            leaveSheetService.syncHongHuLeaveSheet(startDate, endDate, HONGHU_COMP_ID);
+            try {
+                leaveSheetService.syncHongHuLeaveSheet(startDate, endDate, HONGHU_COMP_ID);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
         }
         if (syncBusinessTrip != null && syncBusinessTrip) {
             businessTripService.syncHongHuData(HONGHU_COMP_ID);

+ 118 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserDateAllowController.java

@@ -0,0 +1,118 @@
+package com.management.platform.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.management.platform.entity.User;
+import com.management.platform.entity.UserDateAllow;
+import com.management.platform.mapper.UserMapper;
+import com.management.platform.service.UserDateAllowService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-10-14
+ */
+@RestController
+@RequestMapping("/user-date-allow")
+public class UserDateAllowController {
+
+    @Resource
+    private UserDateAllowService userDateAllowService;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private HttpServletRequest request;
+
+    @RequestMapping("/userDateAllow")
+    public HttpRespMsg userDateAllow(UserDateAllow userDateAllow){
+        HttpRespMsg msg = new HttpRespMsg();
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        int count;
+        if(userDateAllow.getId() == null){
+            count = userDateAllowService.count(new LambdaQueryWrapper<UserDateAllow>()
+                    .eq(UserDateAllow::getCompanyId, companyId)
+                    .eq(UserDateAllow::getDate, userDateAllow.getDate())
+                    .eq(UserDateAllow::getUserId, userDateAllow.getUserId()));
+        } else {
+            count = userDateAllowService.count(new LambdaQueryWrapper<UserDateAllow>()
+                    .eq(UserDateAllow::getCompanyId, companyId)
+                    .ne(UserDateAllow::getId, userDateAllow.getId())
+                    .eq(UserDateAllow::getDate, userDateAllow.getDate())
+                    .eq(UserDateAllow::getUserId, userDateAllow.getUserId()));
+        }
+        if(count > 0){
+            msg.setError("该用户在当前日期已存在允许记录,请重新选择");
+            return msg;
+        }
+        userDateAllow.setCompanyId(companyId);
+        if(!userDateAllowService.saveOrUpdate(userDateAllow)){
+            msg.setError("验证失败");
+        }
+        return msg;
+    }
+
+    @RequestMapping("/list")
+    public HttpRespMsg list(){
+        HttpRespMsg msg = new HttpRespMsg();
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, companyId));
+        List<UserDateAllow> userDateAllows = userDateAllowService.list(new LambdaQueryWrapper<UserDateAllow>().eq(UserDateAllow::getCompanyId, companyId));
+
+        // 创建用户ID到用户名的映射
+        Map<String, String> userIdToNameMap = userList.stream()
+                .collect(Collectors.toMap(User::getId, User::getName, (existing, replacement) -> existing));
+
+        // 为每个UserDateAllow设置用户名
+        userDateAllows.forEach(u -> {
+            String userName = userIdToNameMap.get(u.getUserId());
+            if(userName != null){
+                u.setUserName(userName);
+            }
+        });
+
+        msg.setData(userDateAllows);
+        return msg;
+    }
+
+    @RequestMapping("/delete")
+    public HttpRespMsg delete(Integer id){
+        HttpRespMsg msg = new HttpRespMsg();
+        if(!userDateAllowService.removeById(id)){
+            msg.setError("验证失败");
+        }
+        return msg;
+    }
+
+    @RequestMapping("/listByUser")
+    public HttpRespMsg listByUser(String userId){
+        HttpRespMsg msg = new HttpRespMsg();
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        List<UserDateAllow> userDateAllows = userDateAllowService.list(new LambdaQueryWrapper<UserDateAllow>()
+                .eq(UserDateAllow::getCompanyId, companyId)
+                .eq(UserDateAllow::getUserId, userId));
+        msg.setData(userDateAllows);
+        return msg;
+    }
+
+    @RequestMapping("/listByDate")
+    public HttpRespMsg listByDate(String date){
+        HttpRespMsg msg = new HttpRespMsg();
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        List<UserDateAllow> userDateAllows = userDateAllowService.list(new LambdaQueryWrapper<UserDateAllow>()
+                .eq(UserDateAllow::getCompanyId, companyId)
+                .eq(UserDateAllow::getDate, date));
+        msg.setData(userDateAllows);
+        return msg;
+    }
+}

+ 66 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/UserDateAllow.java

@@ -0,0 +1,66 @@
+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 com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-10-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class UserDateAllow extends Model<UserDateAllow> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 所属公司id
+     */
+    @TableField("company_id")
+    private Integer companyId;
+
+    /**
+     * 指定日期
+     */
+    @TableField("date")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate date;
+
+    /**
+     * 用户id
+     */
+    @TableField("user_id")
+    private String userId;
+
+    /**
+     * 用户名称(临时字段,不存储到数据库)
+     */
+    @TableField(exist = false)
+    private String userName;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

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

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

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/LeaveSheetService.java

@@ -43,5 +43,5 @@ public interface LeaveSheetService extends IService<LeaveSheet> {
 
     HttpRespMsg getCompanyUserTime(String userId, HttpServletRequest request);
     
-    void syncHongHuLeaveSheet(String startDate, String endData,Integer specialCompanyId);
+    void syncHongHuLeaveSheet(String startDate, String endData,Integer specialCompanyId) throws Exception;
 }

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

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

+ 22 - 16
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/LeaveSheetServiceImpl.java

@@ -910,25 +910,27 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
     }
 
     @Override
-    public void syncHongHuLeaveSheet(String startDate, String endData,Integer specialCompanyId) {
+    public void syncHongHuLeaveSheet(String startDate, String endDate,Integer specialCompanyId) throws Exception {
         RestTemplate restTemplate = new RestTemplate();
+        System.out.println("同步泓浒请假数据=="+startDate+"至"+endDate);
         String sumUrl = DataCollectTask.PREFIX_URL + "/dataCollect/getLeaveSheetDataSum";
-        String listUrl = StringUtils.isEmpty(startDate)?DataCollectTask.PREFIX_URL + "/dataCollect/getLeaveSheetDataList"
-                :DataCollectTask.PREFIX_URL + "/dataCollect/getLeaveSheetDataListInRange";
+        String listUrl = DataCollectTask.PREFIX_URL + "/dataCollect/getLeaveSheetDataListInRange";
+        if (StringUtils.isEmpty(startDate) || StringUtils.isEmpty(endDate)) {
+            throw new Exception("开始结束日期不能为空");
+        }
         try {
             int totalNum = 0;
-            if (StringUtils.isEmpty(startDate)) {
-                ResponseEntity<String> sumResponse = restTemplate.exchange(
-                        sumUrl,
-                        HttpMethod.GET,
-                        null,
-                        String.class
-                );
-                if (sumResponse.getStatusCode() == HttpStatus.OK) {
-                    totalNum = Integer.parseInt(sumResponse.getBody());
-                } else {
-                    System.out.println("请求失败,状态码: " + sumResponse.getStatusCode());
-                }
+            ResponseEntity<String> sumResponse = restTemplate.exchange(
+                    sumUrl+"?startDate="+startDate+"&endDate="+endDate,
+                    HttpMethod.GET,
+                    null,
+                    String.class
+            );
+            if (sumResponse.getStatusCode() == HttpStatus.OK) {
+                totalNum = Integer.parseInt(sumResponse.getBody());
+                System.out.println("totalNum===="+totalNum);
+            } else {
+                System.out.println("请求失败,状态码: " + sumResponse.getStatusCode());
             }
 
             if(totalNum > 0 || !StringUtils.isEmpty(startDate)){
@@ -946,7 +948,7 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
                     requestBody.put("pageNo", offset);
                     requestBody.put("pageSize", pageSize);
                     requestBody.put("startDate", startDate);
-                    requestBody.put("endDate", endData);
+                    requestBody.put("endDate", endDate);
                     HttpEntity<Object> requestEntity = new HttpEntity<>(requestBody, headers);
                     ResponseEntity<List<LeaveSheet>> listResponse = restTemplate.exchange(
                             listUrl,
@@ -998,6 +1000,10 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
                                     Project project = projectMapper.selectOne(new QueryWrapper<Project>().eq("project_code", "HH-QJ-0000001").eq("company_id", specialCompanyId));
                                     TaskGroup leaveGroup = taskGroupMapper.selectOne(new LambdaQueryWrapper<TaskGroup>().eq(TaskGroup::getProjectId, project.getId()).eq(TaskGroup::getName, "请假工时"));
                                     for (LocalDate date = tmp.getStartDate(); date.compareTo(tmp.getEndDate()) <= 0; date = date.plusDays(1)) {
+                                        //跳过非工作日
+                                        if (!WorkDayCalculateUtils.isWorkDay(date)) {
+                                            continue;
+                                        }
                                         //先计算每一天的请假工时数合计
                                         List<LeaveSheet> leaveSheetList = leaveSheetMapper.selectList(new LambdaQueryWrapper<LeaveSheet>()
                                                 .eq(LeaveSheet::getOwnerId, ownerId)

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

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.UserDateAllow;
+import com.management.platform.mapper.UserDateAllowMapper;
+import com.management.platform.service.UserDateAllowService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2025-10-14
+ */
+@Service
+public class UserDateAllowServiceImpl extends ServiceImpl<UserDateAllowMapper, UserDateAllow> implements UserDateAllowService {
+
+}

+ 10 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/DataCollectTask.java

@@ -72,7 +72,16 @@ public class DataCollectTask {
     public void leaveSheetTask(){
         if(isDev){return;}
         if(isPrivateDeploy) return;
-        leaveSheetService.syncHongHuLeaveSheet(null,null,HONGHU_COMP_ID);
+        //默认获取前后15天的请假单
+        LocalDate now = LocalDate.now();
+        LocalDate startDate = now.minusDays(15);
+        LocalDate endDate = now.plusDays(15);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        try {
+            leaveSheetService.syncHongHuLeaveSheet(formatter.format(startDate),formatter.format(endDate),HONGHU_COMP_ID);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
     }
 
     @Scheduled(cron = "0 0 3 * * ?")

+ 18 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserDateAllowMapper.xml

@@ -0,0 +1,18 @@
+<?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.UserDateAllowMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.UserDateAllow">
+        <id column="id" property="id" />
+        <result column="company_id" property="companyId" />
+        <result column="date" property="date" />
+        <result column="user_id" property="userId" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, company_id, date, user_id
+    </sql>
+
+</mapper>