【需求案例思路分享】数据保存入库前自动生成流水号(37)

4 篇文章 0 订阅

流水号原则:流水号后四位同月自增,从0001开始,跨月重置自增;
思路分享:
1.写一个流水号工具类:

package cn.itcast;

/*
 * 获取流水号
 */

public class SerialNumberUtil {
	public static void main(String[] args) {
		
		String a = getId("HT202303",1);
		System.out.println("流水号:"+a);
	}
	
	 	private static final Integer ONE = 1;
	    private static final Integer TWO = 2;
	    private static final Integer THREE = 3;

	    // par为自定义前缀,想要几位数可以自行修改0的数量
	    // id获取方式为从数据库表中查询现在最大id+1(SELECT id+1  from table  ORDER BY id DESC LIMIT 1)
	    public static String getId(String par, Integer id){
	        //判断位数
	        String s = id + "";
	        int count = s.length();
	        String strNum = par;
	        if (ONE == count){
	            strNum += "000"+ String.valueOf(id);
	        }else if (TWO == count){
	            strNum += "00"+ String.valueOf(id);
	        }else if (THREE == count){
	            strNum += "0" + String.valueOf(id);
	        }else {
	            strNum += String.valueOf(id);
	        }
	        return strNum;
	    }	   
	}

2.在serviceImpl进行数据入库前产生流水号;
则需在调用数据保存接口之前产生流水号,那么:
首先:写一个接口去数据库查询:原则:根据输入的月份降序查询id最大的那一条数据记录返回,比如当前按照一个List<Map<String,String>>返回数据;
举例:
在这里插入图片描述
SQL语句:

SELECT * FROM data_list_question WHERE 1 = 1 AND MONTH = '2023-03' ORDER BY id DESC LIMIT 1

MyBatis语句:

<!-- 根据月份升序查询id最大的那一条数据记录返回 -->
    <select id="getMaxIdInfo" parameterType="map" resultType="map">
        SELECT * FROM data_list_question where 1 = 1
        <if test = "null != month and '' != month"> 
            and month = #{month}
        </if>
        ORDER BY id DESC LIMIT 1
    </select>

返回结果:
返回一条数据记录:
在这里插入图片描述
然后在service实现层写一个方法,生成问题单编号;

    @Autowired
    private CustomerMapper customerMapper;

    //生成问题单编号方法;
    private String getAutoQuestionNo(Map<String, Object> paramMap){
        String result = "";
        //前台输入的月份
        String month = String.valueOf(paramMap.get("month")).replace("-","").substring(2,6);  // 月度
        //获取数据库查询的数据
        List<Map<String, Object>> queMap = questionNoMapper.getQuestionNo(paramMap);
        String queNo = "";
        String sqMonth = "";
        String questionNo = "";

        if(queMap.size() < 1){
            //表中第一次插入数据的时候,从0001递增;
            questionNo = "0001";
        }else{
        	//获取数据库当前查询的问题单编号
            queNo = String.valueOf(queMap.get(0).get("questionNo"));
            //获取查询的月份
            sqMonth = String.valueOf(queMap.get(0).get("month"));
            //如果输入的月份与数据库查询的月份相等,则为同月;递增;否则重置清零递增;
            if(paramMap.get("month").equals(sqMonth)){
            	//获取问题单编号后4位递增;
                questionNo = Integer.toString(Integer.parseInt(queNo.substring(queNo.length() - 4)) + 1);
            }else{
                questionNo = "0001";
            }
        }
        // 调用SerialNumberUtil类中的getId方法,进行数据处理:
        result = SerialNumberUtil.getId(month,Integer.parseInt(questionNo));
        return result;
    }

最后在实现层调用保存数据入库接口之前,先调用该方法,将问题单编号put到map集合里面;
举例:
service实现层:

@Override
    public Result addData(Map<String, Object> paramMap) {
        String type = String.valueOf(paramMap.get("type"));
        String msg = "";
        //添加流水号
         paramMap.put("questionNo",getAutoQuestionNo(paramMap));
         questionNoMapper.addData(paramMap);
         msg = "数据添加成功";
        return Result.success().result(msg);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

KevinDuc

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值