Pārlūkot izejas kodu

修改MES员工打卡同步规则

wukai 1 nedēļu atpakaļ
vecāks
revīzija
e41a0222e4

+ 2 - 2
jjt-admin/src/test/java/com/jjt/task/TaskEmpTest.java

@@ -25,9 +25,9 @@ public class TaskEmpTest {
 
     @Test
     public void test() throws Exception {
-        String date = "2025-07-30";
+        String date = "2025-08-03";
         LocalDate localDate = LocalDate.parse(date);
-        empService.sync(DateUtils.toDate(localDate));
+//        empService.sync(DateUtils.toDate(localDate));
         calcService.calc(DateUtils.toDate(localDate));
     }
 

+ 28 - 0
jjt-admin/src/test/java/com/jjt/wk/EmpCalcTest.java

@@ -1,13 +1,21 @@
 package com.jjt.wk;
 
+import com.alibaba.fastjson2.JSON;
 import com.jjt.JjtApplication;
+import com.jjt.biz.vo.KnittingEmpVO;
 import com.jjt.common.utils.DateUtils;
 import com.jjt.emp.service.ITwinEmpCalcService;
+import com.jjt.wkEmp.domain.TwinWkEmpSync;
+import com.jjt.wkEmp.service.ITwinWkEmpRotaService;
+import com.jjt.wkEmp.service.ITwinWkEmpSyncService;
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
 
 import javax.annotation.Resource;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * DataProcess$
@@ -19,6 +27,10 @@ import java.util.Date;
 public class EmpCalcTest {
     @Resource
     private ITwinEmpCalcService empCalcService;
+    @Resource
+    private ITwinWkEmpRotaService rotaService;
+    @Resource
+    private ITwinWkEmpSyncService syncService;
 
     @Test
     public void test() {
@@ -26,5 +38,21 @@ public class EmpCalcTest {
         Date date = DateUtils.parseDate(s);
         empCalcService.calcNew(date);
     }
+
+    @Test
+    public void sync() {
+        Map<String, Object> params = new HashMap<>();
+        params.put("beginRecordTime", "2025-08-03 00:00:00");
+        params.put("endRecordTime", "2025-08-03 23:59:59");
+        TwinWkEmpSync search = new TwinWkEmpSync();
+        search.setParams(params);
+        List<TwinWkEmpSync> list = syncService.selectTwinWkEmpSyncList(search);
+        for (TwinWkEmpSync sync : list) {
+            String content = sync.getContent();
+            System.err.println(content);
+            KnittingEmpVO data = JSON.parseObject(content, KnittingEmpVO.class);
+            rotaService.sync(data);
+        }
+    }
 }
 

+ 2 - 4
jjt-biz/src/main/java/com/jjt/biz/controller/ApiProductivityExportController.java

@@ -26,10 +26,7 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.net.URLEncoder;
 import java.time.LocalDate;
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -67,6 +64,7 @@ public class ApiProductivityExportController extends BaseController {
             bkp.setVerticalAlignment(VerticalAlignment.CENTER);
 
             List<TwinEmpCalc> list = empCalcService.selectTwinEmpCalcListByDate(DateUtils.parseDate(date));
+            list.sort(Comparator.comparing(TwinEmpCalc::getDeviceId));
             Sheet sheet = wb.getSheetAt(0);
             Sheet bSheet = wb.cloneSheet(0);
             Cell title = sheet.getRow(0).getCell(0);

+ 14 - 0
jjt-biz/src/main/java/com/jjt/emp/service/impl/TwinEmpCalcServiceImpl.java

@@ -146,6 +146,20 @@ public class TwinEmpCalcServiceImpl implements ITwinEmpCalcService {
 //        process(true, emp, calcMap, configMap, calcList, specHourMap);
 //        process(false, emp, calcMap, configMap, calcList, specHourMap);
         List<TwinEmpCalc> calcList = process(emp, effMap, configMap, specHourList);
+        //最后还需要合并,否则数据会重复
+        calcList = calcList.stream().collect(Collectors.groupingBy(o -> o.getDeviceId() + "-" + o.getDensity() + "-" + o.getMick() + "-" + o.getEmpTeam())).entrySet().stream().map(entry -> {
+            List<TwinEmpCalc> group = entry.getValue();
+            TwinEmpCalc calc = group.get(0);
+            // 合并产量
+            BigDecimal totalLength = group.stream().map(TwinEmpCalc::getLength).reduce(BigDecimal.ZERO, BigDecimal::add);
+            calc.setLength(totalLength);
+
+            // 合并总价
+            BigDecimal totalPrice = group.stream().map(TwinEmpCalc::getTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+            calc.setTotalPrice(totalPrice);
+            return calc;
+        }).collect(Collectors.toList());
+
         if (calcList.size() > 0) {
             try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
                 TwinEmpCalcMapper mapper = sqlSession.getMapper(TwinEmpCalcMapper.class);

+ 5 - 3
jjt-biz/src/main/java/com/jjt/wkEmp/service/impl/TwinWkEmpRotaServiceImpl.java

@@ -117,8 +117,6 @@ public class TwinWkEmpRotaServiceImpl implements ITwinWkEmpRotaService {
         rota.setEmpId(data.getId());
         rota.setEmpName(data.getName());
         rota.setEmpTeam(data.getTeam());
-        rota.setInTime(data.getIn());
-        rota.setOutTime(data.getOut());
         Set<Integer> deviceSet = new TreeSet<>();
         for (String s : data.getDevices()) {
             String id = s.replace("J", "");
@@ -126,9 +124,13 @@ public class TwinWkEmpRotaServiceImpl implements ITwinWkEmpRotaService {
         }
         String devices = deviceSet.stream().map(String::valueOf).collect(Collectors.joining(","));
         rota.setDevices(devices);
-        if (rota.getShiftId() != null) {
+        //2025-08-04 修改同步规则,之前是后面一条记录覆盖前一条记录,现在需要判断上下班时间
+        if (rota.getShiftId() != null && rota.getInTime().equals(data.getIn()) && rota.getOutTime().equals(data.getOut())) {
             updateTwinWkEmpRota(rota);
         } else {
+            rota.setShiftId(null);
+            rota.setInTime(data.getIn());
+            rota.setOutTime(data.getOut());
             insertTwinWkEmpRota(rota);
         }
     }