diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/HuahengBaseController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/HuahengBaseController.java index ef758e7..d313b3b 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/HuahengBaseController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/HuahengBaseController.java @@ -4,14 +4,10 @@ import java.util.concurrent.TimeUnit; import javax.annotation.Nonnull; -import org.apache.poi.ss.formula.functions.T; import org.jeecg.common.api.vo.Result; -import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.utils.RedissonDistributedLocker; import org.springframework.beans.factory.annotation.Autowired; -import com.baomidou.mybatisplus.extension.service.IService; - import cn.hutool.core.date.SystemClock; import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; @@ -26,7 +22,7 @@ public class HuahengBaseController { private RedissonDistributedLocker redissonDistributedLocker; public interface MultiProcessListener { - Result<?> doProcess(); + Result<?> doProcess() throws Exception; } /** 等待时间 */ @@ -69,17 +65,20 @@ public class HuahengBaseController { final boolean tryLock = redissonDistributedLocker.tryLock(fullLockKey, TimeUnit.SECONDS, WAIT_TIME, LEASE_TIME); final long endTime = SystemClock.now(); if (!tryLock) { - log.error("[{}]获取分布式锁失败,lockKey = {},耗时 {}ms", taskName, fullLockKey, endTime - startTime); - throw new RuntimeException(StrUtil.format("[{}]获取分布式锁失败,lockKey = {},等待时间超出10秒", taskName, fullLockKey)); + log.error("[{}] 获取分布式锁失败 lockKey = {},等待锁耗时:{}ms", taskName, fullLockKey, endTime - startTime); + throw new RuntimeException(StrUtil.format("[{}] 获取分布式锁失败 lockKey = {},等待时间超出10秒", taskName, fullLockKey)); } // 注意:一定是获取锁成功后,才进行try{}finally{释放锁} try { - log.info("[{}]获取分布式锁成功,lockKey = {},耗时 {}ms", taskName, fullLockKey, endTime - startTime); + log.info("[{}] 开始分布式事务 lockKey = {},获取锁耗时: {}ms", taskName, fullLockKey, endTime - startTime); result = multiProcessListener.doProcess(); } catch (Exception e) { - throw new RuntimeException(StrUtil.format("[{}]执行分布式事务失败,lockKey = {}", taskName, fullLockKey), e); + final long finishTime = SystemClock.now(); + throw new RuntimeException(StrUtil.format("[{}] 执行分布式事务失败 lockKey = {},事务耗时:{}ms", taskName, fullLockKey, finishTime - endTime), e); } finally { redissonDistributedLocker.unlock(fullLockKey); + final long finishTime = SystemClock.now(); + log.info("[{}] 结束分布式事务 lockKey = {},事务耗时:{}ms", taskName, fullLockKey, finishTime - endTime); } return result; diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/TestController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/TestController.java index 3578cfa..b9508c7 100644 --- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/TestController.java +++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/TestController.java @@ -1,15 +1,19 @@ package org.jeecg.modules.wms.framework.controller; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Date; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import javax.servlet.http.HttpServletRequest; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; -import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader; +import org.jeecg.modules.system.entity.SysDataLog; +import org.jeecg.modules.system.service.ISysDataLogService; import org.jeecg.utils.HuahengRedisUtil; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -17,7 +21,8 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.extern.slf4j.Slf4j; @@ -34,43 +39,51 @@ public class TestController extends HuahengBaseController { @Autowired private HuahengRedisUtil redisUtil; + @Autowired + private ISysDataLogService sysDataLogService; + @AutoLog(value = "TestController-testRedis") @ResponseBody @PostMapping(value = "/testRedis") - public Result<?> testRedis(@RequestBody Map<String, String> paramMap, HttpServletRequest request) throws InterruptedException { - -// log.info(JSON.toJSONString(paramMap)); - String key = "testKey"; - Map<String, ReceiptHeader> receiptHeaderMap = new ConcurrentHashMap<String, ReceiptHeader>(); - ReceiptHeader value = new ReceiptHeader(); - value.setCode("001"); - receiptHeaderMap.put("receiptHeader1", value); - redisUtil.set(key, receiptHeaderMap); -// Map<String, ReceiptHeader> result = redisUtil.get(key, new TypeReference<Map<String, ReceiptHeader>>() {}); -// log.info("redisUtil.get -> " + JSON.toJSONString(result)); + public Result<?> testRedis(@RequestBody Map<String, String> paramMap, HttpServletRequest request) { + +// log.info("testRedis in paramMap:{}", JSON.toJSONString(paramMap)); +// String key = "testKey"; +// Map<String, ReceiptHeader> receiptHeaderMap = new ConcurrentHashMap<String, ReceiptHeader>(); +// ReceiptHeader receiptHeader = new ReceiptHeader(); +// receiptHeader.setCode("001"); +// receiptHeaderMap.put("receiptHeaderKey", receiptHeader); +// Map<String, ReceiptHeader> value = redisUtil.getAndSet(key, receiptHeaderMap, new TypeReference<Map<String, ReceiptHeader>>() {}, 10); // Long rxpireTime = redisUtil.getExpire(key); -// log.info("rxpireTime -> " + rxpireTime); -// redisUtil.expire(key, 100); +// log.info("redisUtil.getAndSet {} -> {} rxpireTime -> {}", key, JSON.toJSONString(value), rxpireTime); +// +// Thread.sleep(2000l); +// receiptHeaderMap = redisUtil.get(key, new TypeReference<Map<String, ReceiptHeader>>() {}); // rxpireTime = redisUtil.getExpire(key); -// log.info("rxpireTime -> " + rxpireTime); -// value.setCode("2222222222222222"); - redisUtil.delete(key); - Map<String, ReceiptHeader> result = redisUtil.getAndSet(key, receiptHeaderMap, new TypeReference<Map<String, ReceiptHeader>>() {}, 10); - Long rxpireTime = redisUtil.getExpire(key); - log.info("redisUtil.get -> {} rxpireTime -> {}", JSON.toJSONString(result), rxpireTime); - - Thread.sleep(2000l); - result = redisUtil.get(key, new TypeReference<Map<String, ReceiptHeader>>() {}); - rxpireTime = redisUtil.getExpire(key); - log.info("redisUtil.get sleep 2s -> {} rxpireTime -> {}", JSON.toJSONString(result), rxpireTime); - - Long count = redisUtil.decr("countKey", 10); - rxpireTime = redisUtil.getExpire("countKey"); - log.info("countKey decr count -> {} rxpireTime -> {}", count, rxpireTime); - count = redisUtil.decr("countKey", 100); - rxpireTime = redisUtil.getExpire("countKey"); - log.info("countKey decr count -> {} rxpireTime -> {}", count, rxpireTime); - +// log.info("redisUtil.get {} sleep 2s -> {} rxpireTime -> {}", key, JSON.toJSONString(value), rxpireTime); + + Result result = handleMultiProcess("testRedis", paramMap.get("username"), new MultiProcessListener() { + + @Override + @Transactional(timeout = 10) + public Result<?> doProcess() throws Exception { + LambdaUpdateWrapper<SysDataLog> updateWrapper = new UpdateWrapper().lambda(); + updateWrapper.set(SysDataLog::getUpdateTime, new Date()); + updateWrapper.eq(SysDataLog::getId, 10); + Thread.sleep(1000); + sysDataLogService.update(updateWrapper); + return new Result<>(); + } + + }); + +// Long count = redisUtil.decr("countKey", 10); +// rxpireTime = redisUtil.getExpire("countKey"); +// log.info("countKey decr count -> {} rxpireTime -> {}", count, rxpireTime); +// count = redisUtil.decr("countKey", 100); +// rxpireTime = redisUtil.getExpire("countKey"); +// log.info("countKey decr count -> {} rxpireTime -> {}", count, rxpireTime); + // Thread.sleep(2000l); // count = redisUtil.get("countKey", Long.class); // rxpireTime = redisUtil.getExpire("countKey"); @@ -95,8 +108,11 @@ public class TestController extends HuahengBaseController { // rxpireTime = redisUtil.getExpire("countKey"); // log.info("countKey sleep 10s get -> {} rxpireTime -> {}", count, rxpireTime); // log.info("countKey hasKey -> {}",redisUtil.hasKey("countKey")); - - return Result.OK(count); + return result; + } + + private int generateInt(int min, int max) throws NoSuchAlgorithmException { + return (int)(min + SecureRandom.getInstanceStrong().nextDouble() * (max - min + 1)); } } diff --git a/huaheng-wms-core/src/main/resources/application-dev.yml b/huaheng-wms-core/src/main/resources/application-dev.yml index fd71308..ff37593 100644 --- a/huaheng-wms-core/src/main/resources/application-dev.yml +++ b/huaheng-wms-core/src/main/resources/application-dev.yml @@ -47,7 +47,7 @@ spring: org: quartz: scheduler: - instanceName: Scheduler_Dev + instanceName: dev instanceId: AUTO jobStore: class: org.quartz.impl.jdbcjobstore.JobStoreTX diff --git a/huaheng-wms-core/src/main/resources/application-prod.yml b/huaheng-wms-core/src/main/resources/application-prod.yml index 12cec0e..701a2a6 100644 --- a/huaheng-wms-core/src/main/resources/application-prod.yml +++ b/huaheng-wms-core/src/main/resources/application-prod.yml @@ -47,7 +47,7 @@ spring: org: quartz: scheduler: - instanceName: Scheduler_Prod + instanceName: prod instanceId: AUTO jobStore: class: org.quartz.impl.jdbcjobstore.JobStoreTX diff --git a/huaheng-wms-core/src/main/resources/application-test.yml b/huaheng-wms-core/src/main/resources/application-test.yml index 8ac15fb..fe4ff8d 100644 --- a/huaheng-wms-core/src/main/resources/application-test.yml +++ b/huaheng-wms-core/src/main/resources/application-test.yml @@ -47,7 +47,7 @@ spring: org: quartz: scheduler: - instanceName: Scheduler_Test + instanceName: test instanceId: AUTO jobStore: class: org.quartz.impl.jdbcjobstore.JobStoreTX