票据系统对子票区间的一个应用

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

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

split 拆分字符串

    @Test
    public void test10(){
        String rangNo = "123456-3654123";
        //拆分
        String[] split = rangNo.split("-");
        //String类型
        String begin = split[0];
        String end = split[1];
        //转int
        int 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 字符串截取(截取时要注意包前不包后)

    @Test
    public 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个0
            System.out.println(String.format("%012d", Integer.parseInt("0"))); // 起始区间
            System.out.println(String.format("%012d", Integer.parseInt("0"))); // 结束区间
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彦登的登

动力来源

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值