票据系统对子票区间的一个应用
因为票据系统对子票区间的管理非常严格,但是为了兼容各大系统传送过来不同格式的数据,所以要做一个简单的处理!
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"))); // 结束区间}}
}
票据系统对子票区间的一个应用相关推荐
- [铁道部信息化管理]需求分析(一)—— 售票系统领域知识(区间票、订票、预留票)...
12306的已知信息.数据及问题 需求分析(一)-- 售票系统领域知识(区间票.订票.预留票) 需求分析(二)-- 涉众.用户体验 核心业务逻辑架构分析与设计(子系统分析) 需求分析(三)-- 票仓 ...
- 报销流程太慢太复杂?区块链技术引入票据系统效率翻一倍
电子票据,即在传统日常票据业务中加入了电子化的处理手段.我们经常会碰到各种各样的票据,像保险公司的单据,打车住酒店会开发票,医院挂号时的单据,甚至平时吃饭都会有单据. 目前我们使用的不管是传统的纸质票 ...
- 报销流程太慢太复杂?区块链技术引入票据系统,效率至少翻一倍
电子票据,即在传统日常票据业务中加入了电子化的处理手段.我们经常会碰到各种各样的票据,像保险公司的单据,打车住酒店会开发票,医院挂号时的单据,甚至平时吃饭都会有单据. 目前我们使用的不管是传统的纸质票 ...
- np.random.randint 与 np.random.rand区别 前者返回为参数指定的范围区间的一个整数后者返回的为一个概率
np.random.randint 与 np.random.rand区别 前者返回为参数指定的范围区间的一个整数后者返回的为一个概率 import numpy as np num_lstm = np ...
- Windows还原系统后分区合并为一个分区恢复方法
(一)故障类型: 还原系统后分区故障 (二)典型特征: 1.原来多个分区变成当前一个分区 2.原有分区与当前分区的数量或大小不一致,原有数据分区丢失 (三)损坏程度星级评价:★★★ [解决方案] (一 ...
- Win7系统便签怎样设置一个闹钟提醒
Win7系统便签怎么设置一个闹钟提醒呢?在便签上设置提醒事项,还可以确定任务完成时间,让每一项任务都在规定时间内完成,杜绝拖延快速完成工作.想要在便签上设置提醒,首先要有一款会提醒的便签,还要了解在该 ...
- web系统快速开发_开发一个快速销售系统
web系统快速开发 http://www.internationalnewsandviews.com/wp-content/uploads/2017/03/flash-sale-banner.png ...
- 计算机桌面出现家庭组,win10系统桌面突然多出一个家庭组图标的修复步骤
win10系统使用久了,好多网友反馈说win10系统桌面突然多出一个家庭组图标的问题,非常不方便.有什么办法可以永久解决win10系统桌面突然多出一个家庭组图标的问题,面对win10系统桌面突然多出一 ...
- linux系统如何为软件升级,在Linux系统中怎样才能使用一个命令升级所有软件?...
今天小编要跟大家分享的有关Linux的文章中,是关于在Linux系统中怎样才能使用一个命令升级所有软件,熟悉Linux系统的小伙伴都知道,让我们的 Linux 系统保持最新状态会用到多种包管理器.比如 ...
最新文章
- 【硬件基础】有源蜂鸣器与无源蜂鸣器
- gcc与gdb,函数小结
- ubuntu eclipse CDT 问题
- permute是最好的Mac上面的格式转换器
- 2017年7月27日 老大传授的知识
- JUnit5 快速指南
- 设置PDF文件默认缩放比例
- php留言板示例,php留言板完整实例源码
- 影视后期PR效果窗口
- 【Unity3d学习】魔鬼与牧师(动作分离版本)
- 有趣又实用的4款微信小程序,有了它们,APP都要靠边站!
- SpringCloud(二)——Eureka的使用和集群搭建
- Dropwizard 直接run 运行配置【IDEA】
- 声网的视频直播与屏幕共享
- 前端码农日常英语学习
- 4 个 JavaScript 最基础的问题 —— Eric Elliott
- java 指定垃g1圾收集_java垃圾回收G1收集器
- PC端品优购注册页面 resgister.css以及web服务器学习
- 关于问卷数据的质量检验(宏观)
- opencv无法读取MP4格式视频