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