@@ -5240,4 +5240,54 @@ alter table jsh_serial_number change delete_Flag delete_Flag varchar(1) DEFAULT
|
|||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- 删除单据子表单据主表id字段对应外键约束
|
-- 删除单据子表单据主表id字段对应外键约束
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
ALTER TABLE jsh_depotitem DROP FOREIGN KEY jsh_depotitem_ibfk_1;
|
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 ;
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -61,6 +61,16 @@ public class BusinessConstants {
|
|||||||
* 批量插入sql时最大的数据条数
|
* 批量插入sql时最大的数据条数
|
||||||
* */
|
* */
|
||||||
public static final int BATCH_INSERT_MAX_NUMBER = 500;
|
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";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -77,7 +77,8 @@ public class DepotHeadController {
|
|||||||
BaseResponseInfo res = new BaseResponseInfo();
|
BaseResponseInfo res = new BaseResponseInfo();
|
||||||
Map<String, Object> map = new HashMap<String, Object>();
|
Map<String, Object> map = new HashMap<String, Object>();
|
||||||
try {
|
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);
|
map.put("DefaultNumber", number);
|
||||||
res.code = 200;
|
res.code = 200;
|
||||||
res.data = map;
|
res.data = map;
|
||||||
|
|||||||
@@ -107,4 +107,9 @@ public interface DepotHeadMapperEx {
|
|||||||
* 更新单据主表信息
|
* 更新单据主表信息
|
||||||
* */
|
* */
|
||||||
void updatedepotHead(DepotHead depotHead);
|
void updatedepotHead(DepotHead depotHead);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得一个全局唯一的数作为订单号的追加
|
||||||
|
* */
|
||||||
|
Long getBuildOnlyNumber(@Param("seq_name") String seq_name);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import com.jsh.erp.service.supplier.SupplierService;
|
|||||||
import com.jsh.erp.service.user.UserService;
|
import com.jsh.erp.service.user.UserService;
|
||||||
import com.jsh.erp.utils.StringUtil;
|
import com.jsh.erp.utils.StringUtil;
|
||||||
import com.jsh.erp.utils.Tools;
|
import com.jsh.erp.utils.Tools;
|
||||||
|
import lombok.Synchronized;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.dao.DataAccessException;
|
import org.springframework.dao.DataAccessException;
|
||||||
@@ -153,6 +154,26 @@ public class DepotHeadService {
|
|||||||
example.createCriteria().andIdIn(ids);
|
example.createCriteria().andIdIn(ids);
|
||||||
return depotHeadMapper.updateByExampleSelective(depotHead, example);
|
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) {
|
public String buildNumber(String type, String subType, String beginTime, String endTime) {
|
||||||
String newNumber = "0001"; //新编号
|
String newNumber = "0001"; //新编号
|
||||||
|
|||||||
@@ -247,6 +247,8 @@ public class SerialNumberService {
|
|||||||
* 1、根据商品名称必须查询到唯一的商品
|
* 1、根据商品名称必须查询到唯一的商品
|
||||||
* 2、该商品必须已经启用序列号
|
* 2、该商品必须已经启用序列号
|
||||||
* 3、该商品已绑定序列号数量小于商品现有库存
|
* 3、该商品已绑定序列号数量小于商品现有库存
|
||||||
|
* 2019-02-01
|
||||||
|
* 用商品的库存去限制序列号的添加有点不合乎道理,去掉此限制
|
||||||
* create time: 2019/1/23 17:04
|
* create time: 2019/1/23 17:04
|
||||||
* @Param: materialName
|
* @Param: materialName
|
||||||
* @return Long 满足使用条件的商品的id
|
* @return Long 满足使用条件的商品的id
|
||||||
@@ -257,15 +259,15 @@ public class SerialNumberService {
|
|||||||
//库存=入库-出库
|
//库存=入库-出库
|
||||||
//入库数量
|
//入库数量
|
||||||
Long materialId=checkMaterialName(materialName);
|
Long materialId=checkMaterialName(materialName);
|
||||||
int inSum = depotItemService.findByTypeAndMaterialId(BusinessConstants.DEPOTHEAD_TYPE_STORAGE, materialId);
|
// int inSum = depotItemService.findByTypeAndMaterialId(BusinessConstants.DEPOTHEAD_TYPE_STORAGE, materialId);
|
||||||
//出库数量
|
// //出库数量
|
||||||
int outSum = depotItemService.findByTypeAndMaterialId(BusinessConstants.DEPOTHEAD_TYPE_OUT, materialId);
|
// int outSum = depotItemService.findByTypeAndMaterialId(BusinessConstants.DEPOTHEAD_TYPE_OUT, materialId);
|
||||||
//查询当前商品下有效的序列号
|
// //查询当前商品下有效的序列号
|
||||||
int serialNumberSum = serialNumberMapperEx.findSerialNumberByMaterialId(materialId);
|
// int serialNumberSum = serialNumberMapperEx.findSerialNumberByMaterialId(materialId);
|
||||||
if((inSum-outSum)<=serialNumberSum){
|
// if((inSum-outSum)<=serialNumberSum){
|
||||||
throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_CODE,
|
// throw new BusinessRunTimeException(ExceptionConstants.MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_CODE,
|
||||||
ExceptionConstants.MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_MSG);
|
// ExceptionConstants.MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_MSG);
|
||||||
}
|
// }
|
||||||
return materialId;
|
return materialId;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -389,5 +389,8 @@
|
|||||||
</set>
|
</set>
|
||||||
where Id = #{id,jdbcType=BIGINT}
|
where Id = #{id,jdbcType=BIGINT}
|
||||||
</update>
|
</update>
|
||||||
|
<select id="getBuildOnlyNumber" resultType="java.lang.Long">
|
||||||
|
select _nextval(#{seq_name}) from dual;
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
Reference in New Issue
Block a user