Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
JSH ERP
Commits
86e7b3e7
Commit
86e7b3e7
authored
Feb 01, 2019
by
乾坤平台
Committed by
季圣华
Feb 01, 2019
Browse files
!24 添加生成唯一单据编号功能
Merge pull request !24 from 乾坤平台/master
parents
4ee63669
b1d74a16
Changes
8
Hide whitespace changes
Inline
Side-by-side
sql/jsh_erp.sql
View file @
86e7b3e7
...
...
@@ -5240,4 +5240,54 @@ alter table jsh_serial_number change delete_Flag delete_Flag varchar(1) DEFAULT
-- ----------------------------
-- 删除单据子表单据主表id字段对应外键约束
-- ----------------------------
ALTER TABLE jsh_depotitem DROP FOREIGN KEY jsh_depotitem_ibfk_1;
\ No newline at end of file
ALTER TABLE jsh_depotitem DROP FOREIGN KEY jsh_depotitem_ibfk_1;
-- ----------------------------
-- 时间:2019年2月1日
-- version:1.0.2
-- 此次更新添加sequence表,用于获取一个唯一的数值
-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
-- ----------------------------
-- ----------------------------
-- 添加表tbl_sequence
-- ----------------------------
DROP TABLE IF EXISTS `tbl_sequence`;
CREATE TABLE tbl_sequence (
seq_name VARCHAR(50) NOT NULL COMMENT '序列名称',
minvalue bigint(20) NOT NULL COMMENT '最小值',
maxvalue bigint(20) NOT NULL COMMENT '最大值',
current_val bigint(20) NOT NULL COMMENT '当前值',
increment_val INT DEFAULT '1' NOT NULL COMMENT '增长步数',
remark VARCHAR(500) DEFAULT null COMMENT '备注',
PRIMARY KEY (seq_name)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='sequence表';
-- ----------------------------
-- 添加表单据编号sequence
-- ----------------------------
insert into tbl_sequence (seq_name, minvalue, maxvalue, current_val, increment_val,remark) values ('depot_number_seq', 1, 999999999999999999, 1, 1,'单据编号sequence');
-- ----------------------------
-- 创建function _nextval() 用于获取当前序列号
-- ----------------------------
DELIMITER //
create function _nextval(name varchar(50))
returns long
begin
declare _cur bigint;
declare _maxvalue bigint; -- 接收最大值
declare _increment int; -- 接收增长步数
set _increment = (select increment_val from tbl_sequence where seq_name = name);
set _maxvalue = (select maxvalue from tbl_sequence where seq_name = name);
set _cur = (select current_val from tbl_sequence where seq_name = name for update);
update tbl_sequence -- 更新当前值
set current_val = _cur + increment_val
where seq_name = name ;
if(_cur + _increment >= _maxvalue) then -- 判断是都达到最大值
update tbl_sequence
set current_val = minvalue
where seq_name = name ;
end if;
return _cur;
end;
//
DELIMITER ;
sql/华夏ERP数据库设计汇总.xlsx
View file @
86e7b3e7
No preview for this file type
src/main/java/com/jsh/erp/constants/BusinessConstants.java
View file @
86e7b3e7
...
...
@@ -61,6 +61,16 @@ public class BusinessConstants {
* 批量插入sql时最大的数据条数
* */
public
static
final
int
BATCH_INSERT_MAX_NUMBER
=
500
;
/**
* sequence名称
* */
//sequence返回字符串的最小长度
public
static
final
Long
SEQ_TO_STRING_MIN_LENGTH
=
1000000L
;
//sequence长度小于基准长度时前追加基础值
public
static
final
String
SEQ_TO_STRING_LESS_INSERT
=
"0"
;
//单据编号
public
static
final
String
DEPOT_NUMBER_SEQ
=
"depot_number_seq"
;
...
...
src/main/java/com/jsh/erp/controller/DepotHeadController.java
View file @
86e7b3e7
...
...
@@ -77,7 +77,8 @@ public class DepotHeadController {
BaseResponseInfo
res
=
new
BaseResponseInfo
();
Map
<
String
,
Object
>
map
=
new
HashMap
<
String
,
Object
>();
try
{
String
number
=
depotHeadService
.
buildNumber
(
type
,
subType
,
beginTime
,
endTime
);
// String number = depotHeadService.buildNumber(type, subType, beginTime, endTime);
String
number
=
depotHeadService
.
buildOnlyNumber
();
map
.
put
(
"DefaultNumber"
,
number
);
res
.
code
=
200
;
res
.
data
=
map
;
...
...
src/main/java/com/jsh/erp/datasource/mappers/DepotHeadMapperEx.java
View file @
86e7b3e7
...
...
@@ -107,4 +107,9 @@ public interface DepotHeadMapperEx {
* 更新单据主表信息
* */
void
updatedepotHead
(
DepotHead
depotHead
);
/**
* 获得一个全局唯一的数作为订单号的追加
* */
Long
getBuildOnlyNumber
(
@Param
(
"seq_name"
)
String
seq_name
);
}
src/main/java/com/jsh/erp/service/depotHead/DepotHeadService.java
View file @
86e7b3e7
...
...
@@ -20,6 +20,7 @@ import com.jsh.erp.service.supplier.SupplierService;
import
com.jsh.erp.service.user.UserService
;
import
com.jsh.erp.utils.StringUtil
;
import
com.jsh.erp.utils.Tools
;
import
lombok.Synchronized
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.dao.DataAccessException
;
...
...
@@ -153,6 +154,26 @@ public class DepotHeadService {
example
.
createCriteria
().
andIdIn
(
ids
);
return
depotHeadMapper
.
updateByExampleSelective
(
depotHead
,
example
);
}
/**
* 创建一个唯一的序列号
* */
public
String
buildOnlyNumber
(){
Long
buildOnlyNumber
=
null
;
synchronized
(
this
){
buildOnlyNumber
=
depotHeadMapperEx
.
getBuildOnlyNumber
(
BusinessConstants
.
DEPOT_NUMBER_SEQ
);
}
if
(
buildOnlyNumber
<
BusinessConstants
.
SEQ_TO_STRING_MIN_LENGTH
){
StringBuffer
sb
=
new
StringBuffer
(
buildOnlyNumber
.
toString
());
int
len
=
BusinessConstants
.
SEQ_TO_STRING_MIN_LENGTH
.
toString
().
length
()-
sb
.
length
();
for
(
int
i
=
0
;
i
<
len
;
i
++){
sb
.
insert
(
0
,
BusinessConstants
.
SEQ_TO_STRING_LESS_INSERT
);
}
return
sb
.
toString
();
}
else
{
return
buildOnlyNumber
.
toString
();
}
}
public
String
buildNumber
(
String
type
,
String
subType
,
String
beginTime
,
String
endTime
)
{
String
newNumber
=
"0001"
;
//新编号
...
...
src/main/java/com/jsh/erp/service/serialNumber/SerialNumberService.java
View file @
86e7b3e7
...
...
@@ -247,6 +247,8 @@ public class SerialNumberService {
* 1、根据商品名称必须查询到唯一的商品
* 2、该商品必须已经启用序列号
* 3、该商品已绑定序列号数量小于商品现有库存
* 2019-02-01
* 用商品的库存去限制序列号的添加有点不合乎道理,去掉此限制
* create time: 2019/1/23 17:04
* @Param: materialName
* @return Long 满足使用条件的商品的id
...
...
@@ -257,15 +259,15 @@ public class SerialNumberService {
//库存=入库-出库
//入库数量
Long
materialId
=
checkMaterialName
(
materialName
);
int
inSum
=
depotItemService
.
findByTypeAndMaterialId
(
BusinessConstants
.
DEPOTHEAD_TYPE_STORAGE
,
materialId
);
//出库数量
int
outSum
=
depotItemService
.
findByTypeAndMaterialId
(
BusinessConstants
.
DEPOTHEAD_TYPE_OUT
,
materialId
);
//查询当前商品下有效的序列号
int
serialNumberSum
=
serialNumberMapperEx
.
findSerialNumberByMaterialId
(
materialId
);
if
((
inSum
-
outSum
)<=
serialNumberSum
){
throw
new
BusinessRunTimeException
(
ExceptionConstants
.
MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_CODE
,
ExceptionConstants
.
MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_MSG
);
}
//
int inSum = depotItemService.findByTypeAndMaterialId(BusinessConstants.DEPOTHEAD_TYPE_STORAGE, materialId);
//
//出库数量
//
int outSum = depotItemService.findByTypeAndMaterialId(BusinessConstants.DEPOTHEAD_TYPE_OUT, materialId);
//
//查询当前商品下有效的序列号
//
int serialNumberSum = serialNumberMapperEx.findSerialNumberByMaterialId(materialId);
//
if((inSum-outSum)<=serialNumberSum){
//
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_CODE,
//
ExceptionConstants.MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_MSG);
//
}
return
materialId
;
}
return
null
;
...
...
src/main/resources/mapper_xml/DepotHeadMapperEx.xml
View file @
86e7b3e7
...
...
@@ -389,5 +389,8 @@
</set>
where Id = #{id,jdbcType=BIGINT}
</update>
<select
id=
"getBuildOnlyNumber"
resultType=
"java.lang.Long"
>
select _nextval(#{seq_name}) from dual;
</select>
</mapper>
\ No newline at end of file
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment