编号的生成(日期+序列号)

经常会用到编号的生成,这边整理一下:

先看controller方法:

package com.simpleframework.bjno.controller;

import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/serial")
public class SerialController {

    @Autowired
    private SerialService serialService;

    /**
     * 获取编号
     *
     * @param model
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping("/getSipSdNo")
    public InvokeResult getSipSdNo(

            ) {
        try {
            Map returnResult = new HashMap();
            String dateString=serialService.getDateString();
            int sdNo = serialService.getInfSipSdNo();
            String serialNum = dateString + String.format("%04d", sdNo);
            returnResult.put("serialNo", serialNum);
            serialService.save(String.valueOf(sdNo),"");

            return InvokeResult.success(returnResult);
        } catch (Exception e) {
            return InvokeResult.failure(e.getMessage());

        }

    }
}

再看service,sql语句写在service中:

package com.bjno.service.serviceImpl;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import com.simpleframework.bjno.model.InfApplyNo;
import com.simpleframework.bjno.service.SerialService;
import com.simpleframework.core.repo.RepositoryFactory;
import com.simpleframework.core.repo.ServiceSupport;
import com.simpleframework.core.repo.jpa.spi.SingleEntityManager;

@Service
@Transactional
public class SerialServiceImpl extends ServiceSupport implements SerialService {

    private SingleEntityManager<InfApplyNo> internal = RepositoryFactory.get().build(InfApplyNo.class);

    @Override
    public void save(String applyNo,String sdNo) {
        InfApplyNo infApplyNo = new InfApplyNo();
        infApplyNo.setSdNo(StringUtils.isEmpty(sdNo)?"":sdNo);
        infApplyNo.setCreateDate(new Date());
        infApplyNo.setAppSdNo(StringUtils.isEmpty(applyNo)?"":applyNo);
        // infApplyNo.setId(null);
        internal.save(infApplyNo);
    }

    @Override
    public int getInfSipSdNo() {
        String sql = "select  max(to_number(APP_SD_NO))  " + "from  INF_APPLY_NO t "
                + "where  to_char(CREATE_DATE,‘YYYY-MM-DD‘)= to_char(sysdate,‘YYYY-MM-DD‘) " + "and APP_SD_NO is not null ";

        Map<String, Object> param = new HashMap<>();
        List<Object[]> list = nativeQuery().setSql(sql).list();
        int sdNo;
        if (list != null && list.size() > 0 && list.get(0) != null) {
            sdNo = Integer.parseInt(String.valueOf(list.get(0))) + 1;

        } else {
            sdNo = 1;
        }

        return sdNo;
    }

    @Override
    public String getYwNo(String deptQlId, String deptYwNum) {
        String sql = "select  max(DEPT_YW_REG_NO)  " + "from  DEPT_YW_INF t " + "where DEPT_QL_ID=:deptQlId and DEPT_YW_NUM=:deptYwNum  ";
        String serialNo = "";
        Map<String, Object> param = new HashMap<>();
        param.put("deptQlId", deptQlId);
        param.put("deptYwNum", deptYwNum);
        List<Object[]> list = nativeQuery().setSql(sql).setParam(param).list();
        if (list != null && list.size() > 0 && list.get(0) != null) {
            serialNo = String.valueOf(list.get(0));
        }
        return serialNo;
    }

    @Override
    public String getSipYwNo(String deptQlId, String deptYwNum) {
        String sql = "select  max(YW_NAME_DESC)  " + "from  DEPT_YW_INF t " + "where DEPT_QL_ID=:deptQlId and DEPT_YW_NUM=:deptYwNum  ";
        String serialNo = "";
        Map<String, Object> param = new HashMap<>();
        param.put("deptQlId", deptQlId);
        param.put("deptYwNum", deptYwNum);
        List<Object[]> list = nativeQuery().setSql(sql).setParam(param).list();
        if (list != null && list.size() > 0 && list.get(0) != null) {
            serialNo = String.valueOf(list.get(0));
        }
        return serialNo;
    }

    @Override
    public String getDateString() {
        Date currentTime = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
        String dateString = formatter.format(currentTime);
        return dateString;
    }

}
时间: 2024-10-10 06:08:14

编号的生成(日期+序列号)的相关文章

生成自增的编号,生成订单号

生成自增的编号: /**  * 生成工单编码  *   * @param workSheetType  *            工单类型  * @param systemName  *            系统名称  * @param cityCode  *            城市编码  * @return 形如AAA-BBB-CC-081127-0029  */ public synchronized String nextWorkSheetNum(String workSheetTy

生成日期流水号帮助类

/// <summary> /// 生成日期流水号 /// </summary> public class DateSerialNumberGenerator { private static readonly object Lock = new object(); private static string _nowYear;//系统年份 private static string _nowMonth;//系统月份 /// <summary> /// 获取下一个日期流

SQL查询得到(按编号分组的日期最大的记录)

用SQL查询得到(按编号分组的日期最大的记录) 编号 F1 F2 日期 001 ... ... 2006-01-01 10:25:00 001 ... ... 2006-01-01 10:26:00 002 ... ... 2006-01-01 10:25:00 002 ... ... 2006-01-01 10:26:00 用SQL查询得到(按编号分组的日期最大的记录) 编号 F1 F2 日期 001 ... ... 2006-01-01 10:26:00 002 ... ... 2006-0

PowerBI 应用时间智能(生成日期表)

简介 Power BI Desktop -是一款由微软发布的自助式商业智能工具,功能强大.易于使用.其中还可以通过微软云连多个数据源并且使用数据源来创建可视化表盘. 但是几乎所有的BI都需要展示如何随时间改变KPI.因此我将会介绍一个帮助我们使用事件元素来分析数据的关键功能.在PowerBI Desktop 中叫做“time intelligence”.应用这种时域分析法能是商业智能中基本的数据表现形式.毕竟公司想要知道的无非就是今年的业绩相比去年如何以及取得了何种进步. “Time intel

统计生成日期为昨天的数据

统计生成日期为昨天的数据(按日期算,非24小时): vi a1.py #!/usr/bin/python import osimport datetimeimport shutil dir="/ming" yesterday = datetime.date.today() - datetime.timedelta(days=1) os.remove("/log/110Hudrm/gmsnew.txt")os.mknod("/log/110Hudrm/gms

mysql生成日期的辅助表

为了解决mysql按日期分组查询统计的时候,没有数据补0.可以生成连续的时间表格来辅助查询 CREATE TABLE num (i int);-- 创建一个表用来储存0-9的数字INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);-- 生成0-9的数字,方便以后计算时间 * 生成日期 CREATE TABLE num (i int);-- 创建一个表用来储存0-9的数字 INSERT INTO n

MySQL 如何生成日期表

在开发过程中,经常会遇到统计问题,通常交易信息都不是连续的,此时,统计出来的数据都是不连续的,所以提前生成一个时期表,当没有交易数据的时候填充0,就可以了,下面是生成日期表的步骤 1.创建一个num表,用来存储数字0~9 1 CREATE TABLE num (i int); 结果如下: 2.在num表中生成0~9 1 -- CREATE TABLE num (i int); 2 INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (

流水号的生成(日期+业务码+自增序列)

项目开发时,使用了两套数据库,开发环境和上线环境,数据库表中大多采用了自增主键, 比如: id int unsigned primary key auto_increment, 但往往会碰到一些问题,比如: 开发环境中,使用爬虫抓取一些数据,建立索引,再把数据迁移到上线环境,会导致索引中的id和 上线环境数据库中id对不上,所以决定使用字符串作为主键. 那么问题来了,如何生成唯一的序列号? 格式按照:yyyyMMdd+两位业务码+10位的自增序列, 比如20150101**99**0000000

VBA 操作 Excel 生成日期及星期

直接上代码~~ 1.  在一个 Excel 生成当月或当年指定月份的日期及星期 ' 获取星期的显示 Function disp(i As Integer) Select Case i Case 1 disp = "一" Case 2 disp = "二" Case 3 disp = "三" Case 4 disp = "四" Case 5 disp = "五" Case 6 disp = "六&q