1.编写存储过程
存储过程需要先创建再使用
首先需要 create [你的数据库名]
注意把表名和数据库名改的和自己的一样,其他的cv就vans了。
create[你的数据库名]
GO
/****** Object: StoredProcedure [dbo].[GetBillNo] Script Date: 04/07/2020 14:57:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--时间:2020-04-07
--功能:获取单据号 @SBIID为单据内码入口参数,@active为活动方式,是获取还是保存 0-预取;1-正式取
--GetBillNo 18,0,''
ALTER procedure [dbo].[你的表名]
(
@SBIID INT,
@action int,
--单据字符串
@BillString nchar(15) outPut
)
AS
--是否日期
declare @iDate as int
--前缀
declare @Prefix as char(7)
--日期格式
declare @dateFormat as varchar(8)
--序号部分
declare @serial as int
--当天最大记录数
declare @dayCount as int
--定义最后修改时间
declare @dtLastModi as datetime
--定义今天日期
declare @dtDay as datetime
--获取今天日期
select @dtDay=Convert(datetime,left(getdate(),10))
--获取是否含日期/日期格式
select @iDate=SBNIfDate,@dateFormat=SBNDateFormat from sys_SysBillNo(你的表名,删去我和括号,改成你的表名) where sbiid=@SBIID
if @action=1
begin
--获取最后修改日期
select @dtLastModi=Convert(datetime,left(SBNLastModified,10)) from sys_SysBillNo(你的表名) where sbiid=@SBIID
--如果今天日期不等于最后修改日期则把累加数清零
--if @dtDay<>@dtLastModi
--begin
-- update sys_SysBillNo(你的表名) set SBNDayCount=0
-- update sys_sysbillno(你的表名) set SBNLastModified=Getdate()
--end
--获取单据号
begin tran
update sys_sysbillno(你的表名) set sbndaycount=sbndaycount+1 where sbiid=@sbiid
select @Prefix=sbnprefix,@dayCount=sbndayCount from sys_SysBillNo(你的表名) where sbiid=@SBIID
commit
--产生获取的单据号
--
if @iDate=0
set @BillString=@Prefix+right('0000'+rtrim(cast(@dayCount as varchar(4))),4)
else
BEGIN
if @dateFormat='YYYY'
set @BillString=@Prefix+ltrim(CONVERT(char(2), GETDATE(), 12))+right('0000'+rtrim(cast(@dayCount as varchar(4))),4)
ELSE IF @dateFormat='YYYYMM'
set @BillString=@Prefix+ltrim(CONVERT(char(4), GETDATE(), 12))+right('0000'+rtrim(cast(@dayCount as varchar(4))),4)
ELSE IF @dateFormat='YYYYMMDD'
set @BillString=@Prefix+ltrim(CONVERT(char(6), GETDATE(), 12))+right('0000'+rtrim(cast(@dayCount as varchar(4))),4)
END
select @BillString
return
end
else
--预取单据号
select @Prefix=sbnprefix from sys_SysBillNo(你的表名) where sbiid=@SBIID
if @@ROWCOUNT>0
BEGIN
if @iDate=0
set @BillString=@Prefix+'0000'
else
BEGIN
if @dateFormat='YYYY'
set @BillString=@Prefix+ltrim(CONVERT(char(2), GETDATE(), 12))+'0000'
ELSE IF @dateFormat='YYYYMM'
set @BillString=@Prefix+ltrim(CONVERT(char(4), GETDATE(), 12))+'0000'
ELSE IF @dateFormat='YYYYMMDD'
set @BillString=@Prefix+ltrim(CONVERT(char(6), GETDATE(), 12))+'0000'
END
select @BillString
Return
END
2.建表
注意SBNIPrefix 这里可供编码的长短由
决定。自己录的一条数据如下图。
3.dao层
/**
* 自动获取编号
* @param billType 这里传SBIID的值
* @param action 这里传0 和 1
* 这里传0 和 1
* 传0 代表预选 一般用于页面单号还不需要生成的时候,比如新增的时候,不一 定确定,我们就可以传0 。
* 传1 是真实的单号,一般用于新增确定,单号一定要生成的时候 自己会自增。
* @return
*/
String findPrestrainCode(@Param("billType") Integer billType, @Param("action") Integer action);
4.mapper
<select id="findPrestrainCode" resultType="String" statementType="CALLABLE">
EXEC GetBillNo #{billType},#{action},'';
</select>
没什么业务就不走service了
5.Controller
/**
- 自动获取编号
- @param billType
- @param action
- @return
*/
@RequestMapping("/getCode")
@ResponseBody
String findPrestrainCode(@Param(“billType”) Integer billType, @Param(“action”) Integer action){
return receivingLiaisonDAO.findPrestrainCode(billType,action);
}
测试类测试
测试结果
传0时,
传1时,
女神镇