Ver código fonte

泓浒月度报表增加项目工时,考勤同步修改

QuYueTing 5 dias atrás
pai
commit
40c53be7ab

+ 7 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserFvTimeController.java

@@ -447,5 +447,12 @@ public class UserFvTimeController {
         return httpRespMsg;
     }
 
+    @RequestMapping("/syncHongHuFvTime")
+    public HttpRespMsg syncHongHuFvTime() {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        userFvTimeService.syncUserFvTime(7536);
+        return httpRespMsg;
+    }
+
 }
 

+ 13 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/FmwDetail.java

@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2025-04-25
+ * @since 2025-05-13
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -108,6 +108,18 @@ public class FmwDetail extends Model<FmwDetail> {
     @TableField("public_time")
     private Double publicTime;
 
+    /**
+     * 出差工时
+     */
+    @TableField("bustrip_time")
+    private Double bustripTime;
+
+    /**
+     * 清洁打包工时
+     */
+    @TableField("clean_time")
+    private Double cleanTime;
+
 
     @Override
     protected Serializable pkVal() {

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

@@ -13,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface UserFvTimeService extends IService<UserFvTime> {
 
+    public void syncUserFvTime(Integer specialCompanyId);
 }

+ 13 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceMonthlyWorktimeServiceImpl.java

@@ -41,12 +41,17 @@ public class FinanceMonthlyWorktimeServiceImpl extends ServiceImpl<FinanceMonthl
     public static final String TIME_TYPE_REPAIR = "维修工时(车间)";
     public static final String TIME_TYPE_DEBUG = "调试工时(车间)";
     public static final String TIME_TYPE_WAIT = "等料工时(车间)";
+    public static final String TIME_TYPE_BUSTRIP = "出差工时(含上机、售后工时)";
+    public static final String TIME_TYPE_CLEAN = "清洁打包工时(入库后)";
+
     static List<String> groupNameList = new ArrayList<>();
     {
         groupNameList.add(TIME_TYPE_COMPOSE);
         groupNameList.add(TIME_TYPE_REPAIR);
         groupNameList.add(TIME_TYPE_DEBUG);
         groupNameList.add(TIME_TYPE_WAIT);
+        groupNameList.add(TIME_TYPE_BUSTRIP);
+        groupNameList.add(TIME_TYPE_CLEAN);
     }
 
     @Resource
@@ -204,6 +209,8 @@ public class FinanceMonthlyWorktimeServiceImpl extends ServiceImpl<FinanceMonthl
                     fmwDetail.setDebugTime(0.0);
                     fmwDetail.setWaitingTime(0.0);
                     fmwDetail.setAssistTime(0.0);
+                    fmwDetail.setBustripTime(0.0);
+                    fmwDetail.setCleanTime(0.0);
 
                     fmwDetail.setFmwId(financeMonthlyWorktime.getId());
                     fmwDetail.setProjectId(report.getProjectId());
@@ -346,6 +353,12 @@ public class FinanceMonthlyWorktimeServiceImpl extends ServiceImpl<FinanceMonthl
             case TIME_TYPE_WAIT:
                 fmwDetail.setWaitingTime(report.getWorkingTime());
                 break;
+            case TIME_TYPE_BUSTRIP:
+                fmwDetail.setBustripTime(report.getWorkingTime());
+                break;
+            case TIME_TYPE_CLEAN:
+                fmwDetail.setCleanTime(report.getWorkingTime());
+                break;
         }
     }
 

+ 6 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -11120,7 +11120,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 if (first.isPresent()) {
                     User targetUser = first.get();
                     for (Report report : reportList) {
-                        if (report.getCreatorId().equals(targetUser.getId()) && fvTime.getWorkDate().isEqual(report.getCreateDate())) {
+                        if (report.getCreatorId().equals(fvTime.getUserId()) && fvTime.getWorkDate().isEqual(report.getCreateDate())) {
                             reportTime = report.getWorkingTime();
                             //不一致
                             if (Math.abs(fvTime.getWorkHours() - report.getWorkingTime()) > 0.01) {
@@ -11146,7 +11146,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 }
             }
         }
-
+        for (UserFvTime time : userFvTimeList) {
+            if (time.getUserId().equals("8603257582743396361")) {
+                System.out.println("张南考勤==" + time.getWorkDate()+"=="+time.getWorkHours());
+            }
+        }
         //反向,检测有填报日报但是没有考勤的数据
         for (Report report : reportList) {
             boolean hasCardTime = false;

+ 107 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserFvTimeServiceImpl.java

@@ -1,10 +1,22 @@
 package com.management.platform.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.management.platform.entity.User;
 import com.management.platform.entity.UserFvTime;
 import com.management.platform.mapper.UserFvTimeMapper;
+import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.UserFvTimeService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.*;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.client.RestTemplate;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -17,4 +29,99 @@ import org.springframework.stereotype.Service;
 @Service
 public class UserFvTimeServiceImpl extends ServiceImpl<UserFvTimeMapper, UserFvTime> implements UserFvTimeService {
 
+    public static final String PREFIX_URL = "http://58.210.104.138:10020";
+
+    @Resource
+    private UserFvTimeMapper userFvTimeMapper;
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Override
+    public void syncUserFvTime(Integer specialCompanyId) {
+        RestTemplate restTemplate = new RestTemplate();
+        String sumUrl = PREFIX_URL+"/dataCollect/getWorkDayDataSum";
+        String listUrl = PREFIX_URL+"/dataCollect/getWorkDayDataList";
+
+        try {
+            ResponseEntity<String> sumResponse = restTemplate.exchange(
+                    sumUrl,
+                    HttpMethod.GET,
+                    null,
+                    String.class
+            );
+            Integer totalNum = 0;
+            if (sumResponse.getStatusCode() == HttpStatus.OK) {
+                totalNum = Integer.parseInt(sumResponse.getBody());
+            } else {
+                System.out.println("请求失败,状态码: " + sumResponse.getStatusCode());
+            }
+            if(totalNum > 0){
+                int pageSize = 1000;
+                int offset = 0;
+                List<UserFvTime> toAddList = new ArrayList<>();
+                List<UserFvTime> toUpdateList = new ArrayList<>();
+                List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, specialCompanyId));
+                Map<String, User> userMap = users.stream().filter(t -> StringUtils.isNotBlank(t.getJobNumber()))
+                        .collect(Collectors.toMap(User::getJobNumber, t -> t));
+                while (offset < totalNum) {
+                    HttpHeaders headers = new HttpHeaders();
+                    headers.setContentType(MediaType.APPLICATION_JSON);
+                    Map<String, Object> requestBody = new HashMap<>();
+                    requestBody.put("pageNo", offset);
+                    requestBody.put("pageSize", pageSize);
+                    HttpEntity<Object> requestEntity = new HttpEntity<>(requestBody, headers);
+                    ResponseEntity<List<UserFvTime>> listResponse = restTemplate.exchange(
+                            listUrl,
+                            HttpMethod.POST,
+                            requestEntity,
+                            new  ParameterizedTypeReference<List<UserFvTime>>(){}
+                    );
+                    if (listResponse.getStatusCode() == HttpStatus.OK) {
+                        List<UserFvTime> dataList = listResponse.getBody();
+                        if(org.apache.commons.collections.CollectionUtils.isNotEmpty(dataList)){
+                            for (UserFvTime userFvTime : dataList) {
+                                if(StringUtils.isBlank(userFvTime.getProcinstId())){
+                                    System.out.println(userFvTime);
+                                }
+                                User tmp = userMap.get(userFvTime.getUserId());
+                                if(null == tmp){
+                                    System.out.println("缺失id=== "+userFvTime.getUserId()+",缺失名字=== "+userFvTime.getName());
+                                }
+                                userFvTime.setUserId(null==tmp?null:tmp.getId());
+                            }
+                            List<UserFvTime> realDataList = dataList.stream().filter(t -> StringUtils.isNotBlank(t.getUserId())).collect(Collectors.toList());
+                            if(!CollectionUtils.isEmpty(realDataList)){
+                                List<String> collect = realDataList.stream().map(UserFvTime::getProcinstId).distinct().collect(Collectors.toList());
+                                List<UserFvTime> existList = userFvTimeMapper.selectList(new LambdaQueryWrapper<UserFvTime>().in(UserFvTime::getProcinstId, collect).eq(UserFvTime::getCompanyId, specialCompanyId));
+                                for (UserFvTime tmp : realDataList) {
+                                    Optional<UserFvTime> first = existList.stream().filter(t -> t.getProcinstId().equals(tmp.getProcinstId())).findFirst();
+                                    if(first.isPresent()){
+                                        tmp.setId(first.get().getId());
+                                        toUpdateList.add(tmp);
+                                    } else {
+                                        toAddList.add(tmp);
+                                    }
+                                }
+                                if(!CollectionUtils.isEmpty(toAddList)){
+                                    userFvTimeMapper.batchInsertCollect(toAddList);
+                                }
+                                if(!CollectionUtils.isEmpty(toUpdateList)){
+                                    for (UserFvTime tmp : toUpdateList) {
+                                        userFvTimeMapper.updateById(tmp);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    toUpdateList.clear();
+                    toAddList.clear();
+                    offset += pageSize;
+                }
+            }
+        } catch (Exception e) {
+            System.out.println("请求发生异常: " + e.getMessage());
+            e.printStackTrace();
+        }
+    }
 }

+ 12 - 96
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/DataCollectTask.java

@@ -2,8 +2,6 @@ package com.management.platform.task;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.management.platform.controller.ReportController;
 import com.management.platform.entity.*;
 import com.management.platform.entity.vo.TisTimeVO;
 import com.management.platform.mapper.*;
@@ -78,6 +76,8 @@ public class DataCollectTask {
     private CompanyMapper companyMapper;
     @Autowired
     private LeaveSheetService leaveSheetService;
+    @Autowired
+    private UserFvTimeService userFvTimeService;
 
 
 //    private static HikariDataSource sqlServerDataSource;
@@ -291,96 +291,12 @@ public class DataCollectTask {
 
     }
 
-//    @Scheduled(cron = "0 30 1 * * ?")
-@Scheduled(cron = "50 24 11 * * ?")
+    @Scheduled(cron = "0 30 1 * * ?")
+//@Scheduled(cron = "20 58 14 * * ?")
     public void workDayTask(){
-//        if(isDev){return;}
-//        if(isPrivateDeploy) return;
-        RestTemplate restTemplate = new RestTemplate();
-        String sumUrl = PREFIX_URL+"/dataCollect/getWorkDayDataSum";
-        String listUrl = PREFIX_URL+"/dataCollect/getWorkDayDataList";
-
-        try {
-            ResponseEntity<String> sumResponse = restTemplate.exchange(
-                    sumUrl,
-                    HttpMethod.GET,
-                    null,
-                    String.class
-            );
-            Integer totalNum = 0;
-            if (sumResponse.getStatusCode() == HttpStatus.OK) {
-                totalNum = Integer.parseInt(sumResponse.getBody());
-            } else {
-                System.out.println("请求失败,状态码: " + sumResponse.getStatusCode());
-            }
-            if(totalNum > 0){
-                int pageSize = 1000;
-                int offset = 0;
-                List<UserFvTime> toAddList = new ArrayList<>();
-                List<UserFvTime> toUpdateList = new ArrayList<>();
-                List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, specialCompanyId));
-                Map<String, User> userMap = users.stream().filter(t -> StringUtils.isNotBlank(t.getJobNumber()))
-                        .collect(Collectors.toMap(User::getJobNumber, t -> t));
-                while (offset < totalNum) {
-                    HttpHeaders headers = new HttpHeaders();
-                    headers.setContentType(MediaType.APPLICATION_JSON);
-                    Map<String, Object> requestBody = new HashMap<>();
-                    requestBody.put("pageNo", offset);
-                    requestBody.put("pageSize", pageSize);
-                    HttpEntity<Object> requestEntity = new HttpEntity<>(requestBody, headers);
-                    ResponseEntity<List<UserFvTime>> listResponse = restTemplate.exchange(
-                            listUrl,
-                            HttpMethod.POST,
-                            requestEntity,
-                            new  ParameterizedTypeReference<List<UserFvTime>>(){}
-                    );
-                    if (listResponse.getStatusCode() == HttpStatus.OK) {
-                        List<UserFvTime> dataList = listResponse.getBody();
-                        if(org.apache.commons.collections.CollectionUtils.isNotEmpty(dataList)){
-                            for (UserFvTime userFvTime : dataList) {
-                                if(StringUtils.isBlank(userFvTime.getProcinstId())){
-                                    System.out.println(userFvTime);
-                                }
-                                User tmp = userMap.get(userFvTime.getUserId());
-                                if(null == tmp){
-                                    System.out.println("缺失id=== "+userFvTime.getUserId()+",缺失名字=== "+userFvTime.getName());
-                                }
-                                userFvTime.setUserId(null==tmp?null:tmp.getId());
-                            }
-                            List<UserFvTime> realDataList = dataList.stream().filter(t -> StringUtils.isNotBlank(t.getUserId())).collect(Collectors.toList());
-                            if(!CollectionUtils.isEmpty(realDataList)){
-                                List<String> collect = realDataList.stream().map(UserFvTime::getProcinstId).distinct().collect(Collectors.toList());
-                                List<UserFvTime> existList = userFvTimeMapper.selectList(new LambdaQueryWrapper<UserFvTime>().in(UserFvTime::getProcinstId, collect).eq(UserFvTime::getCompanyId, specialCompanyId));
-                                for (UserFvTime tmp : realDataList) {
-                                    Optional<UserFvTime> first = existList.stream().filter(t -> t.getProcinstId().equals(tmp.getProcinstId())).findFirst();
-                                    if(first.isPresent()){
-                                        tmp.setId(first.get().getId());
-                                        toUpdateList.add(tmp);
-                                    } else {
-                                        toAddList.add(tmp);
-                                    }
-                                }
-                                if(!CollectionUtils.isEmpty(toAddList)){
-                                    userFvTimeMapper.batchInsertCollect(toAddList);
-                                }
-                                if(!CollectionUtils.isEmpty(toUpdateList)){
-                                    for (UserFvTime tmp : toUpdateList) {
-                                        userFvTimeMapper.updateById(tmp);
-                                    }
-                                }
-                            }
-                        }
-                    }
-                    toUpdateList.clear();
-                    toAddList.clear();
-                    offset += pageSize;
-                }
-            }
-        } catch (Exception e) {
-            System.out.println("请求发生异常: " + e.getMessage());
-            e.printStackTrace();
-        }
-
+        if(isDev){return;}
+        if(isPrivateDeploy) return;
+        userFvTimeService.syncUserFvTime(specialCompanyId);
     }
 
     @Scheduled(cron = "0 0 2 * * ?")
@@ -733,12 +649,12 @@ public class DataCollectTask {
         }
     }
 
-//    @Scheduled(cron = "0 0 3 * * ?")
-@Scheduled(cron = "30 47 11 * * ?")
+    @Scheduled(cron = "0 0 3 * * ?")
+//@Scheduled(cron = "30 34 14 * * ?")
     @Async
     public void businessTripTask(){
-//        if(isDev){return;}
-//        if(isPrivateDeploy) return;
+        if(isDev){return;}
+        if(isPrivateDeploy) return;
         RestTemplate restTemplate = new RestTemplate();
         String sumUrl = PREFIX_URL+"/dataCollect/getBusinessTripDataSum";
         String listUrl = PREFIX_URL+"/dataCollect/getBusinessTripDataList";
@@ -855,7 +771,7 @@ public class DataCollectTask {
                                             UserFvTime time = new UserFvTime();
                                             time.setUserId(trip.getOwnerId());
                                             time.setWorkDate(startDate);
-                                            time.setStartTime("9:00");
+                                            time.setStartTime("09:00");
                                             time.setEndTime("18:00");
                                             time.setWorkHours(8.0f);
                                             time.setCompanyId(trip.getCompanyId());

+ 4 - 14
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/FmwDetailMapper.xml

@@ -19,23 +19,13 @@
         <result column="waiting_time" property="waitingTime" />
         <result column="assist_time" property="assistTime" />
         <result column="public_time" property="publicTime" />
+        <result column="bustrip_time" property="bustripTime" />
+        <result column="clean_time" property="cleanTime" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, fmw_id, dept_id, dept_name, dept_code, project_id, project_code, extra_field4, extra_field5, compose_time, repair_time, debug_time, waiting_time, assist_time, public_time
+        id, fmw_id, dept_id, dept_name, dept_code, project_id, project_code, extra_field4, extra_field5, compose_time, repair_time, debug_time, waiting_time, assist_time, public_time, bustrip_time, clean_time
     </sql>
-    <select id="getTisTime" resultType="com.management.platform.entity.vo.TisTimeVO">
-        select extra_field4 as orderId,extra_field5 as line
-             ,sum(compose_time+repair_time+debug_time+waiting_time+assist_time+public_time) as workTime
-        from fmw_detail
-        where fmw_id = #{fmwId}
-        group by extra_field4,extra_field5
-    </select>
-    <select id="getTisTimeByFmwId" resultType="com.management.platform.entity.vo.TisTimeVO">
-        select extra_field4 as orderId,extra_field5 as line
-             ,sum(compose_time+repair_time+waiting_time+assist_time+public_time) as workTime
-        from fmw_detail
-        where fmw_id = #{fmwId}
-    </select>
+
 </mapper>