From 3bf9f9697e33de0afbd240532100d98bb2741ff6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=AA=E4=BA=91=E6=98=8A?= Date: Fri, 25 Dec 2020 16:53:24 +0800 Subject: [PATCH] =?UTF-8?q?fix(core):=E5=8D=95=E5=8F=B7=E7=94=9F=E6=88=90?= =?UTF-8?q?=E6=9C=AA=E6=AD=A3=E5=B8=B8=E9=87=8D=E7=BD=AE=E6=B5=81=E6=B0=B4?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/SynchronizedService.java | 6 ++++- .../core/apiservice/util/OrderNoMakeUtil.java | 28 +++++++++++----------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SynchronizedService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SynchronizedService.java index c4ee0db..c2eee47 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SynchronizedService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SynchronizedService.java @@ -90,8 +90,12 @@ public class SynchronizedService implements ISynchronizedService { String orderNoTemplate = OrderNoMakeUtil.getOrderNoTemplate(codeRole); String redisKey = REDIS_PREFIX_LOCK_GET_ORDER_NO + ":" + code + ":" + orderNoTemplate; - long orginSerialNo = codeRole.getSerialNo() < 0 ? 0 : codeRole.getSerialNo(); + long orginSerialNo = codeRole.getSerialNo(); + if (codeRole.getSerialNo() < 0 || OrderNoMakeUtil.isCycleByPrefix(codeRole, orderNoTemplate)) { + orginSerialNo = 0; + } long incr = codeRole.getSerialNoIncrement() * num; + //缓存增加 //先判断redis是否存在,如果不存在,则用默认初始值+步长*数量,如果存在,则添加步长 * 数量 codeRole.setSerialNo(redisRes.putObjAdditional(redisKey, orginSerialNo, incr) - incr); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/OrderNoMakeUtil.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/OrderNoMakeUtil.java index 79c57a9..f58e579 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/OrderNoMakeUtil.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/OrderNoMakeUtil.java @@ -65,18 +65,7 @@ public class OrderNoMakeUtil { // 判断是否首次生成(SerialNo初始值-1) if (orderNoRule.getSerialNo() > 0 && prefixIdx != -1) { - String newNo = orderNoTemplate.substring(0, prefixIdx); - String oldNo = orderNoRule.getOrderNo().substring(0, prefixIdx); - long serialNo = orderNoRule.getSerialNo() + orderNoRule.getSerialNoIncrement(); - - // 前缀(日期)不同后是否重置流水号 - if (!newNo.equals(oldNo) && orderNoRule.getIsCycle() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { - orderNoRule.setSerialNo(orderNoRule.getSerialNoSeed()); - } else { - orderNoRule.setSerialNo(serialNo); - } - BigDecimal maxSerialNo = TEN.pow(orderNoRule.getSerialNoLength()).subtract(BigDecimal.ONE); if (CommonEnumUtil.TRUE_OR_FALSE.valueOfBoolean(orderNoRule.getIsFixedLength()) && serialNo > maxSerialNo.longValue()) { @@ -92,18 +81,29 @@ public class OrderNoMakeUtil { } /** + * + * @param orderNoRule + * @param orderNoTemplate + * @return + */ + public static boolean isCycleByPrefix(SysOrderNoRule orderNoRule, String orderNoTemplate){ + int prefixIdx = orderNoTemplate.indexOf(SERIAL_NO); + String newNo = orderNoTemplate.substring(0, prefixIdx); + String oldNo = orderNoRule.getOrderNo().substring(0, prefixIdx); + return !newNo.equals(oldNo) && CommonEnumUtil.TRUE_OR_FALSE.valueOfBoolean(orderNoRule.getIsCycle()); + } + + /** * 替换字符串 * * @param no * @param constant * @param param - * @return */ - private static StringBuilder replace(StringBuilder no, String constant, Object param) { + private static void replace(StringBuilder no, String constant, Object param) { int day = no.indexOf(constant); if (day != -1) { no.replace(day, day + constant.length(), param.toString()); } - return no; } }