From 260ad701e251aaa71a1bf5531bd98d93cb91c2bf Mon Sep 17 00:00:00 2001
From: chenlu <1320612696@qq.com>
Date: 星期三, 19 十一月 2025 11:18:57 +0800
Subject: [PATCH] Merge branch 'master' of http://bore.pub:10439/r/ERP_override

---
 north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java       |  143 +++++++++++++++++++++++++++++++++++++++++++----
 north-glass-erp/src/main/java/com/example/erp/entity/pp/ReportingWorkDetail.java         |    3 +
 north-glass-erp/northglass-erp/src/views/pp/processCard/SelectPrintFlowCard.vue          |    2 
 north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportingWorkController.java |    9 --
 north-glass-erp/pom.xml                                                                  |    2 
 north-glass-erp/src/main/java/com/example/erp/tools/JacksonUtil.java                     |    1 
 north-glass-erp/src/main/java/com/example/erp/scheduling/ScheduledTasks.java             |   11 ++-
 7 files changed, 147 insertions(+), 24 deletions(-)

diff --git a/north-glass-erp/northglass-erp/src/views/pp/processCard/SelectPrintFlowCard.vue b/north-glass-erp/northglass-erp/src/views/pp/processCard/SelectPrintFlowCard.vue
index b442fa0..2381dce 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/processCard/SelectPrintFlowCard.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/processCard/SelectPrintFlowCard.vue
@@ -224,7 +224,7 @@
       slots: {filter: 'num1_filter'},
       filterMethod: filterChanged
     },
-    {field: 'batch', title: t('order.batch'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 110},
+    {field: 'batch', title: t('order.batch'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 110,filterMethod: filterChanged},
     {
       field: 'quantity',
       title: t('order.quantity'),
diff --git a/north-glass-erp/pom.xml b/north-glass-erp/pom.xml
index 55fca6a..167e26d 100644
--- a/north-glass-erp/pom.xml
+++ b/north-glass-erp/pom.xml
@@ -125,7 +125,7 @@
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
-            <version>1.2.24</version>
+            <version>1.2.83</version>
         </dependency>
 
         <dependency>
diff --git a/north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportingWorkController.java b/north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportingWorkController.java
index 61638f7..c34f803 100644
--- a/north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportingWorkController.java
+++ b/north-glass-erp/src/main/java/com/example/erp/controller/pp/ReportingWorkController.java
@@ -163,13 +163,8 @@
     }
     @ApiOperation("mes鎶ュ伐鎺ュ彛娴嬭瘯")
     @PostMapping  ("/mesReportingWork1")
-    public Result mesReportingWork1(@RequestBody Map<String,Object> reportingWork) throws JsonProcessingException {
-        return reportingWorkService.mesReportingWorkSv1(reportingWork);
-//        if(aBoolean){
-//            return Result.success(aBoolean);
-//        }else{
-//            throw new ServiceException(Constants.Code_600, "涓婂伐搴忓凡瀹屽伐鏁伴噺灏忎簬鏈伐搴忔姤宸ユ暟閲忥紝璇锋鏌�");
-//        }
+    public Result mesReportingWorkSvToRedis(@RequestBody Map<String,Object> reportingWork) throws JsonProcessingException, InterruptedException {
+        return reportingWorkService.mesReportingWorkSvToRedis(reportingWork);
     }
 
     @ApiOperation("mes鎶ュ伐娆$牬鏂板")
diff --git a/north-glass-erp/src/main/java/com/example/erp/entity/pp/ReportingWorkDetail.java b/north-glass-erp/src/main/java/com/example/erp/entity/pp/ReportingWorkDetail.java
index 079c6e0..57cba52 100644
--- a/north-glass-erp/src/main/java/com/example/erp/entity/pp/ReportingWorkDetail.java
+++ b/north-glass-erp/src/main/java/com/example/erp/entity/pp/ReportingWorkDetail.java
@@ -6,6 +6,7 @@
 import com.example.erp.entity.sd.Order;
 import com.example.erp.entity.sd.OrderDetail;
 import com.example.erp.entity.sd.OrderGlassDetail;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.time.LocalDate;
@@ -67,8 +68,10 @@
     //杩斿伐瀹℃牳浜�
     private String reviewer;
     //杩斿伐鏃堕棿
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate reworkTime;
     //杩斿伐鏇存柊鏃堕棿
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate reworkUpdateTime;
     //杩斿伐闈㈢Н
    // private double reworkArea;
diff --git a/north-glass-erp/src/main/java/com/example/erp/scheduling/ScheduledTasks.java b/north-glass-erp/src/main/java/com/example/erp/scheduling/ScheduledTasks.java
index eadc377..b4a05a5 100644
--- a/north-glass-erp/src/main/java/com/example/erp/scheduling/ScheduledTasks.java
+++ b/north-glass-erp/src/main/java/com/example/erp/scheduling/ScheduledTasks.java
@@ -1,12 +1,17 @@
 package com.example.erp.scheduling;
 
+import com.example.erp.service.pp.ReportingWorkService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 @Component
+@RequiredArgsConstructor
 public class ScheduledTasks {
-//    @Scheduled( fixedRate = 5*1000)
-//    public void reportingWorkRedisToMysql() {
-//        System.out.println(1);
+    private final ReportingWorkService reportingWorkService;
+
+//    @Scheduled( fixedRate = 2*60*1000)
+//    public void reportingWorkRedisToMysql() throws InterruptedException {
+//        reportingWorkService.redisToMysqlReportingWork();
 //    }
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java b/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java
index 2fcd474..82791e5 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java
@@ -3,7 +3,6 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.aspose.cad.internal.I.S;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -33,9 +32,9 @@
 import com.example.erp.tools.JacksonUtil;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import lombok.RequiredArgsConstructor;
+import org.springframework.data.redis.core.RedisCallback;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -51,6 +50,7 @@
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 @Service
 @DS("pp")
@@ -1134,12 +1134,7 @@
             //鍒ゆ柇鎶ュ伐琛ㄦ槸鍚﹀瓨鍦紝涓嶅瓨鍦ㄥ垯鏂板鎶ュ伐涓诲壇琛ㄦ暟鎹紝瀛樺湪鍒欎慨鏀瑰壇琛ㄦ暟鎹�
             if(ReportingWorks.isEmpty()){
                 //鑾峰彇褰撳墠鏈�澶ф姤宸ュ崟鍙风敓鎴愭姤宸ュ崟鍙�
-                String formattedNumber = String.format("%04d", reportingWorkMapper.selectMaxReportingWorkId() + 1);
-                //鏍煎紡鍖栧綋鍓嶆棩鏈�
-                Date currentDate = new Date();
-                SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd");
-                String formattedDate = dateFormat.format(currentDate);
-                String reportingWorkId = "BG" + formattedDate + formattedNumber;
+                String reportingWorkId = this.getTodayMaxReportingId();
 
                 reportingWork.setReportingWorkId(reportingWorkId);
                 reportingWorkDetail.setReportingWorkId(reportingWorkId);
@@ -1592,7 +1587,7 @@
 
 
     //@Transactional(rollbackFor = Exception.class , noRollbackFor = ServiceException.class)
-    public Result mesReportingWorkSv1(Map<String, Object> reportingWorkMap) throws JsonProcessingException {
+    public Result mesReportingWorkSvToRedis(Map<String, Object> reportingWorkMap) throws JsonProcessingException, InterruptedException {
 
         //璁剧疆鍥炴粴鐐�
         //Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
@@ -1601,11 +1596,20 @@
         String detailJson = JacksonUtil.writeValueAsString(reportingWorkMap.get("detail"));
         ReportingWork reportingWork = JacksonUtil.readValue(titleJson, ReportingWork.class);
         ReportingWorkDetail reportingWorkDetail = JacksonUtil.readValue(detailJson, ReportingWorkDetail.class);
-        String Base_KEY = reportingWork.getProcessId()+":"+reportingWork.getThisProcess()+":"+reportingWork.getDeviceName();
+        String Base_KEY = "reportingWork:"+reportingWork.getProcessId()+"/"+reportingWorkDetail.getTechnologyNumber()+":"+reportingWork.getThisProcess()+":"+reportingWork.getDeviceName();
         String reportingWork_KEY = Base_KEY+":title";
-        String reportingWorkDetail_KEY = Base_KEY+":detail:"+reportingWorkDetail.getOrderNumber()+":"+reportingWorkDetail.getTechnologyNumber();
+        String reportingWorkDetail_KEY = Base_KEY+":detail:"+reportingWorkDetail.getOrderNumber();
 
-        String process_KEY = reportingWork.getProcessId()+":process:"+reportingWorkDetail.getOrderNumber()+":"+reportingWorkDetail.getTechnologyNumber();
+        String process_KEY = "reportingWork:"+reportingWork.getProcessId()+"/"+reportingWorkDetail.getTechnologyNumber()+":process";
+
+        //鍒ゆ柇閿佹槸鍚﹀瓨鍦紝瀛樺湪绛夊緟5绉�
+        if(Boolean.TRUE.equals(stringRedisTemplate.hasKey("lock:reportingWork"))){
+            Thread.sleep(5*1000);
+            if(Boolean.TRUE.equals(stringRedisTemplate.hasKey("lock:reportingWork"))){
+                throw new ServiceException(Constants.Code_600, "褰撳墠鏈嶅姟鍣ㄦ鍦ㄥ鐞嗘姤宸ユ暟鎹紝璇风◢鍚庨噸璇曪紒");
+            }
+        }
+
 
         //鍒ゆ柇宸ュ簭鏄惁瀛樺湪redis涓�
         if(!Boolean.TRUE.equals(stringRedisTemplate.hasKey(process_KEY+":"+reportingWork.getThisProcess()))){
@@ -1650,6 +1654,8 @@
                     JacksonUtil.readValueObjectToString(reportingWork,new TypeReference<Map<String, String>>() {})
             );
         }
+        //鑾峰彇鍙姤鏁伴噺
+
         //鍒ゆ柇鏄惁redis姝ゆ姤宸ユ槑缁嗕腑key鏄惁瀛樺湪
         if(Boolean.TRUE.equals(stringRedisTemplate.hasKey(reportingWorkDetail_KEY))){
             stringRedisTemplate.opsForHash().increment(
@@ -1665,4 +1671,117 @@
         }
         return Result.success("鎻愪氦鎴愬姛");
     }
+
+    public void redisToMysqlReportingWork() throws InterruptedException {
+        if(Boolean.TRUE.equals(stringRedisTemplate.hasKey("lock:reportingWork"))){
+            throw new ServiceException(Constants.Code_600, "瀹氭椂浠诲姟:褰撳墠鏈嶅姟鍣ㄦ鍦ㄥ鐞嗘姤宸ユ暟鎹紝璇风◢鍚庨噸璇曪紒");
+        }
+        //鑾峰彇鎵�鏈塳ey
+        String pattern = "reportingWork:*";
+        Set<String> keys = stringRedisTemplate.keys(pattern);
+
+        //鍒ゆ柇redis涓槸鍚﹀瓨鍦ㄦ姤宸ユ暟鎹�,瀛樺湪鍒欐坊鍔犻攣 骞朵笖淇敼key杞Щ鍒颁笂浼爉ysql鐨刱ey涓�
+        if (keys != null && !keys.isEmpty()) {
+            //娣诲姞閿�
+            stringRedisTemplate.opsForValue().set("lock:reportingWork","1",60, TimeUnit.SECONDS);
+
+            if(Boolean.FALSE.equals(stringRedisTemplate.hasKey("upload:*" ))){
+                keys.forEach(key -> {
+                    stringRedisTemplate.rename(key, "upload:" + key);
+                });
+            }
+        }
+        //娣诲姞鏆傚仠鏃堕棿锛屾柟寮忚幏鍙杕ap鏃讹紝redis涓暟鎹繕鍦ㄥ彉鍖�
+        Thread.sleep(200);
+
+
+        // 淇濆瓨鏃ュ織锛屾妸redis涓殑鏁版嵁淇濆瓨鍒版棩蹇椾腑
+        Map<String, Map<Object, Object>> map = this.getAllHashesByPattern("upload:reportingWork:*");
+        Log log = new Log();
+        log.setContent(JacksonUtil.writeValueAsString(map));
+        log.setFunction("reportingWorkRedisToMysql");
+        log.setOperator("鑷姩瀹氭椂鎶ュ伐");
+        logService.saveLog(log);
+        //鍒犻櫎閿侊紝璁╂帴鍙g户缁帴鏀舵姤宸�
+        stringRedisTemplate.delete("lock:reportingWork");
+
+        //鑾峰彇鍒版墍鏈夊弬鏁板悗娓呯┖redis搴�
+        // stringRedisTemplate.getConnectionFactory().getConnection().flushDb();
+
+        //浠巖edis涓幏鍙栨墍鏈夋姤宸ヤ富琛ㄦ暟鎹�
+        String titleKeyString = "upload:reportingWork:*:title";
+        Set<String> titleKeys = stringRedisTemplate.keys(titleKeyString);
+        if (titleKeys != null) {
+            titleKeys.forEach(titleKey -> {
+                ReportingWork reportingWork = JSON.parseObject(
+                        JSONObject.toJSONString(stringRedisTemplate.opsForHash().entries(titleKey))
+                        , ReportingWork.class
+                );
+                //鑾峰彇褰撳ぉ涓�鍏辨湁澶氬皯涓姤宸ョ紪鍙�
+                String reportingWorkId = this.getTodayMaxReportingId();
+                //娣诲姞鎶ュ伐缂栧彿
+                reportingWork.setReportingWorkId(reportingWorkId);
+                //寰�涓昏〃鎻掑叆鎶ュ伐涓绘暟鎹�
+                reportingWorkMapper.insert(reportingWork);
+
+                String detailKeyString = titleKey.replace(":title", ":detail:*");
+                Set<String> detailKeys = stringRedisTemplate.keys(detailKeyString);
+                if (detailKeys != null) {
+                    detailKeys.forEach(detailKey -> {
+
+                        ReportingWorkDetail reportingWorkDetail = JSON.parseObject(
+                                JSONObject.toJSONString(stringRedisTemplate.opsForHash().entries(detailKey))
+                                , ReportingWorkDetail.class
+                        );
+                        reportingWorkDetail.setReportingWorkId(reportingWorkId);
+                        reportingWorkDetailMapper.insert(reportingWorkDetail);
+
+                        //鏍规嵁璁㈠崟id锛岃鍗曞簭鍙凤紝浠ュ強灏忕墖搴忓彿 鏇存柊灏忕墖娴佺▼鐨勫畬宸ユ暟閲忎互鍙婂埡鐮存暟閲�
+                        LambdaUpdateWrapper<OrderProcessDetail> updateWrapper = new LambdaUpdateWrapper<>();
+                        updateWrapper.eq(OrderProcessDetail::getOrderNumber, reportingWorkDetail.getOrderNumber())
+                                .eq(OrderProcessDetail::getProcessId, reportingWork.getProcessId())
+                                .eq(OrderProcessDetail::getOrderId, reportingWork.getOrderId())
+                                .eq(OrderProcessDetail::getProcess, reportingWork.getThisProcess())
+                                .eq(OrderProcessDetail::getTechnologyNumber, reportingWorkDetail.getTechnologyNumber())
+                                .setSql("reporting_work_num_count = reporting_work_num_count +" + reportingWorkDetail.getCompletedQuantity())
+                                .setSql("reporting_work_num =reporting_work_num +" + reportingWorkDetail.getCompletedQuantity());
+
+                        orderProcessDetailMapper.update(null, updateWrapper);
+                    });
+                }
+
+            });
+        }
+        Set<String> uploadKeys = stringRedisTemplate.keys("upload:reportingWork:*");
+        if (uploadKeys != null) {
+            stringRedisTemplate.delete(uploadKeys);
+        }
+
+    }
+
+    public String getTodayMaxReportingId() {
+        String formattedNumber = String.format("%04d", reportingWorkMapper.selectMaxReportingWorkId() + 1);
+        //鏍煎紡鍖栧綋鍓嶆棩鏈�
+        Date currentDate = new Date();
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd");
+        String formattedDate = dateFormat.format(currentDate);
+        return "BG" + formattedDate + formattedNumber;
+
+    }
+
+
+/*鑾峰彇鎵�鏈夌殑鍙傛暟杞�*/
+    public Map<String, Map<Object, Object>> getAllHashesByPattern(String pattern) {
+        Set<String> keys = stringRedisTemplate.keys(pattern);
+        Map<String, Map<Object, Object>> result = new HashMap<>();
+
+        if (keys != null) {
+            for (String key : keys) {
+                Map<Object, Object> hashData = stringRedisTemplate.opsForHash().entries(key);
+                result.put(key, hashData);
+            }
+        }
+
+        return result;
+    }
 }
diff --git a/north-glass-erp/src/main/java/com/example/erp/tools/JacksonUtil.java b/north-glass-erp/src/main/java/com/example/erp/tools/JacksonUtil.java
index 4a9d2a9..5bfe6e3 100644
--- a/north-glass-erp/src/main/java/com/example/erp/tools/JacksonUtil.java
+++ b/north-glass-erp/src/main/java/com/example/erp/tools/JacksonUtil.java
@@ -28,6 +28,7 @@
     static {
         objectMapper = new ObjectMapper();
         objectMapper.registerModule(new JavaTimeModule());
+
     }
 
     public static ObjectMapper getObjectMapper(){

--
Gitblit v1.8.0