因为票据系统对子票区间的管理非常严格,但是为了兼容各大系统传送过来不同格式的数据,所以要做一个简单的处理!

1、当知道传入数据一定携带“-”时,可以直接使用split对字符串进行拆分

split 拆分字符串

    @Testpublic void test10(){String rangNo = "123456-3654123";//拆分String[] split = rangNo.split("-");//String类型String begin = split[0];String end = split[1];//转intint intBegin = Integer.parseInt(begin);int intEnd = Integer.parseInt(end);//补位String formatBegin = String.format("%012d", intBegin);//只能识别int类型,所以需要转换String format = String.format("%012d", intEnd);System.out.println(formatBegin+"**************8"+format);}

2、如果不确定收到的参数是什么类型,需做兼容处理

contains 集合中是否包含某字符串

indexOf 查询字符串在第几位

substring 字符串截取(截取时要注意包前不包后)

    @Testpublic void test11(){String rangNo = "123-321";//判空if (StringUtils.isNullOrEmpty(rangNo)){//判断是否带“-”boolean contains = rangNo.contains("-");if (contains){//判断“-”在第几位int i = rangNo.indexOf("-");//分段获取String substringBegin = rangNo.substring(0, i);//截取前半部分String substringEnd = rangNo.substring(i + 1);//截取后半部分//补位String formatBegin = String.format("%012d", Integer.parseInt(substringBegin));//只能识别int类型,所以需要转换String formatEnd = String.format("%012d",  Integer.parseInt(substringEnd));System.out.println(formatBegin+"********"+formatEnd);List<String> rangList = new ArrayList<>();rangList.add(formatBegin);rangList.add(formatEnd);return;}}}

注意:Integer是有长度限制的,当时小编在写这个工具类时没考虑到最大值问题,所以代码还有一个很明显的bug,应用实际最重要,结合场景去完善功能吧!!!!!

java int 类整数的最大值是 2 的 31 次方 - 1 = 2147483648 - 1 = 2147483647

可以用 Integer.MAX_VALUE 表示它,即 int value = Integer.MAX_VALUE;

Integer.MAX_VALUE + 1 = Integer.MIN_VALUE = -2147483648

再大的数就要用 long (最大值 2 的 63 次方 - 1 )或者 BigDecimal 表示

提取新增Utils方法

package cn.bankapp.ecds.custom.tranServerOld.util;import cn.bankapp.ecds.common.exception.CheckException;
import cn.bankapp.ecds.common.exception.ErrorCode;import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang.StringUtils;import java.util.ArrayList;
import java.util.List;/*** @ClassName RangeNoInspectUntils* @Description TODO* @Author WYD* @Date 2022/7/19 17:45* @Version 1.0*/
@Log4j2
public class RangeNoInspectUntils {/*** 票据区间拆分** @param rangeNo      子区间号* @param beginRangeNo 开始区间* @param endRangeNo   结束区间* @throws Exception*/public List<String> rangeNo(String rangeNo, String beginRangeNo, String endRangeNo) throws Exception {if (StringUtils.isBlank(rangeNo) && StringUtils.isBlank(beginRangeNo) && StringUtils.isBlank(endRangeNo)) {throw new CheckException(ErrorCode.PARAM_NULL, "‘子区间号’或‘起始子区间-结束子区间’至少有一个不能为空");}String beginRangeNoNew;String endRangeNoNew;if (StringUtils.isNotEmpty(rangeNo)) {boolean containsRangeNo = rangeNo.contains("-");if (containsRangeNo) {log.info("-----------子票区间{}-----------", rangeNo);//wyd  20220505  拆分String[] str = rangeNo.split("-");String begin = str[0];String end = str[1];if ("0".equals(begin) && "0".equals(end)) {beginRangeNoNew = begin;endRangeNoNew = end;} else {//获取截取到的参数int beginNo = Integer.parseInt(begin);int endNo = Integer.parseInt(end);//数据不够12位进行补齐beginRangeNoNew = String.format("%012d", beginNo);endRangeNoNew = String.format("%012d", endNo);}}else {if ("0".equals(rangeNo)){beginRangeNoNew = "0";endRangeNoNew = "0";}else {log.info("票据区间不存在");throw new Exception("票据区间不存在");}}} else {log.info("-----------起始区间{}-结束区间{}-----------", beginRangeNo, endRangeNo);String rangeNo1 = null;if (StringUtils.isNotBlank(beginRangeNo)) {rangeNo1 = beginRangeNo;} else {rangeNo1 = endRangeNo;}boolean containsBeginRangeNo = rangeNo1.contains("-");if (containsBeginRangeNo) {log.info("----------进入containsBeginRangeNo方法{}----------------", containsBeginRangeNo);int i1 = rangeNo1.indexOf("-");String beginNo = rangeNo1.substring(0, i1);String endNo = rangeNo1.substring(i1 + 1);if ("0".equals(beginNo) && "0".equals(endNo)) {log.info("----------等分化不可拆分票--------------");beginRangeNoNew = beginNo;endRangeNoNew = endNo;} else {log.info("----------等分化可拆分票--------------");//数据不够12位进行补齐beginRangeNoNew = String.format("%012d", Integer.parseInt(beginNo));endRangeNoNew = String.format("%012d", Integer.parseInt(endNo));}} else {log.info("----------未进入containsBeginRangeNo方法{}----------------", containsBeginRangeNo);if ("0".equals(beginRangeNo) && "0".equals(endRangeNo)) {log.info("----------等分化不可拆分票{}{}--------------", beginRangeNo, endRangeNo);beginRangeNoNew = beginRangeNo;endRangeNoNew = endRangeNo;} else {log.info("----------等分化可拆分票{},{}--------------", beginRangeNo, endRangeNo);//数据不够12位进行补齐beginRangeNoNew = String.format("%012d", Integer.parseInt(beginRangeNo));endRangeNoNew = String.format("%012d", Integer.parseInt(endRangeNo));}}}List<String> rangeNoList = new ArrayList<>();rangeNoList.add(beginRangeNoNew);rangeNoList.add(endRangeNoNew);log.info("区间号{},{}",beginRangeNoNew,endRangeNoNew);return rangeNoList;}/*** @return void* 测试* @Author WYD* @Description //TODO* @Date 2022/7/19* @Param [args]* @Version 1.0**/public static void main(String[] args) throws Exception {String billNo = "62312313"; // 票号String subString = billNo.substring(0, 1);System.out.println(subString);//区间//等分化票可拆分if ("5".equals(subString) || "6".equals(subString)) {List<String> strings = new RangeNoInspectUntils().rangeNo("0", null, null);System.out.println(strings.get(0));System.out.println(strings.get(1));} else {//传统票区间默认为12个0System.out.println(String.format("%012d", Integer.parseInt("0"))); // 起始区间System.out.println(String.format("%012d", Integer.parseInt("0"))); // 结束区间}}
}

票据系统对子票区间的一个应用相关推荐

  1. [铁道部信息化管理]需求分析(一)—— 售票系统领域知识(区间票、订票、预留票)...

    12306的已知信息.数据及问题 需求分析(一)-- 售票系统领域知识(区间票.订票.预留票) 需求分析(二)-- 涉众.用户体验 核心业务逻辑架构分析与设计(子系统分析) 需求分析(三)-- 票仓 ...

  2. 报销流程太慢太复杂?区块链技术引入票据系统效率翻一倍

    电子票据,即在传统日常票据业务中加入了电子化的处理手段.我们经常会碰到各种各样的票据,像保险公司的单据,打车住酒店会开发票,医院挂号时的单据,甚至平时吃饭都会有单据. 目前我们使用的不管是传统的纸质票 ...

  3. 报销流程太慢太复杂?区块链技术引入票据系统,效率至少翻一倍

    电子票据,即在传统日常票据业务中加入了电子化的处理手段.我们经常会碰到各种各样的票据,像保险公司的单据,打车住酒店会开发票,医院挂号时的单据,甚至平时吃饭都会有单据. 目前我们使用的不管是传统的纸质票 ...

  4. np.random.randint 与 np.random.rand区别 前者返回为参数指定的范围区间的一个整数后者返回的为一个概率

    np.random.randint  与 np.random.rand区别 前者返回为参数指定的范围区间的一个整数后者返回的为一个概率 import numpy as np num_lstm = np ...

  5. Windows还原系统后分区合并为一个分区恢复方法

    (一)故障类型: 还原系统后分区故障 (二)典型特征: 1.原来多个分区变成当前一个分区 2.原有分区与当前分区的数量或大小不一致,原有数据分区丢失 (三)损坏程度星级评价:★★★ [解决方案] (一 ...

  6. Win7系统便签怎样设置一个闹钟提醒

    Win7系统便签怎么设置一个闹钟提醒呢?在便签上设置提醒事项,还可以确定任务完成时间,让每一项任务都在规定时间内完成,杜绝拖延快速完成工作.想要在便签上设置提醒,首先要有一款会提醒的便签,还要了解在该 ...

  7. web系统快速开发_开发一个快速销售系统

    web系统快速开发 http://www.internationalnewsandviews.com/wp-content/uploads/2017/03/flash-sale-banner.png ...

  8. 计算机桌面出现家庭组,win10系统桌面突然多出一个家庭组图标的修复步骤

    win10系统使用久了,好多网友反馈说win10系统桌面突然多出一个家庭组图标的问题,非常不方便.有什么办法可以永久解决win10系统桌面突然多出一个家庭组图标的问题,面对win10系统桌面突然多出一 ...

  9. linux系统如何为软件升级,在Linux系统中怎样才能使用一个命令升级所有软件?...

    今天小编要跟大家分享的有关Linux的文章中,是关于在Linux系统中怎样才能使用一个命令升级所有软件,熟悉Linux系统的小伙伴都知道,让我们的 Linux 系统保持最新状态会用到多种包管理器.比如 ...

最新文章

  1. 【硬件基础】有源蜂鸣器与无源蜂鸣器
  2. gcc与gdb,函数小结
  3. ubuntu eclipse CDT 问题
  4. permute是最好的Mac上面的格式转换器
  5. 2017年7月27日 老大传授的知识
  6. JUnit5 快速指南
  7. 设置PDF文件默认缩放比例
  8. php留言板示例,php留言板完整实例源码
  9. 影视后期PR效果窗口
  10. 【Unity3d学习】魔鬼与牧师(动作分离版本)
  11. 有趣又实用的4款微信小程序,有了它们,APP都要靠边站!
  12. SpringCloud(二)——Eureka的使用和集群搭建
  13. Dropwizard 直接run 运行配置【IDEA】
  14. 声网的视频直播与屏幕共享
  15. 前端码农日常英语学习
  16. 4 个 JavaScript 最基础的问题 —— Eric Elliott
  17. java 指定垃g1圾收集_java垃圾回收G1收集器
  18. PC端品优购注册页面 resgister.css以及web服务器学习
  19. 关于问卷数据的质量检验(宏观)
  20. opencv无法读取MP4格式视频

热门文章

  1. BookChat学习软件—(面向程序员的 IT 互联网开源编程书籍免费阅读)
  2. surface系列安装linux解决触屏等驱动问题以及使用心得
  3. Azure基础:什么是Azure AD ?(23)
  4. 互联网总体架构设计篇
  5. LOOP GROUP BY 分组循环的使用方法小栗子
  6. C++11,使简单的事情简单
  7. 基于SpringBoot与LayUI的后台管理系统
  8. 系统平台如何解决常见问题
  9. 搭建LNMP实现分离
  10. 类似损失函数符号L的字母怎么在mathtype打出来?