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
e8a77a28
Commit
e8a77a28
authored
May 22, 2022
by
季圣华
Browse files
优化批次和序列号商品的入库和出库校验
parent
faf2c3ec
Changes
4
Hide whitespace changes
Inline
Side-by-side
jshERP-boot/src/main/java/com/jsh/erp/constants/BusinessConstants.java
View file @
e8a77a28
...
@@ -60,6 +60,11 @@ public class BusinessConstants {
...
@@ -60,6 +60,11 @@ public class BusinessConstants {
* */
* */
public
static
final
String
ENABLE_SERIAL_NUMBER_ENABLED
=
"1"
;
public
static
final
String
ENABLE_SERIAL_NUMBER_ENABLED
=
"1"
;
public
static
final
String
ENABLE_SERIAL_NUMBER_NOT_ENABLED
=
"0"
;
public
static
final
String
ENABLE_SERIAL_NUMBER_NOT_ENABLED
=
"0"
;
/**
* 商品是否开启批号标识enableBatchNumber '0'未启用 '1'启用
* */
public
static
final
String
ENABLE_BATCH_NUMBER_ENABLED
=
"1"
;
public
static
final
String
ENABLE_BATCH_NUMBER_NOT_ENABLED
=
"0"
;
/**
/**
* 单据状态 billsStatus '0'未审核 '1'审核 '2'完成采购|销售 '3'部分采购|销售
* 单据状态 billsStatus '0'未审核 '1'审核 '2'完成采购|销售 '3'部分采购|销售
* */
* */
...
...
jshERP-boot/src/main/java/com/jsh/erp/constants/ExceptionConstants.java
View file @
e8a77a28
...
@@ -284,9 +284,9 @@ public class ExceptionConstants {
...
@@ -284,9 +284,9 @@ public class ExceptionConstants {
//该商品未开启序列号
//该商品未开启序列号
public
static
final
int
MATERIAL_NOT_ENABLE_SERIAL_NUMBER_CODE
=
8000002
;
public
static
final
int
MATERIAL_NOT_ENABLE_SERIAL_NUMBER_CODE
=
8000002
;
public
static
final
String
MATERIAL_NOT_ENABLE_SERIAL_NUMBER_MSG
=
"该商品未开启序列号功能"
;
public
static
final
String
MATERIAL_NOT_ENABLE_SERIAL_NUMBER_MSG
=
"该商品未开启序列号功能"
;
//
该
商品
已绑定序列号数量小于等于商品现有库存
//商品
的序列号不能为空
public
static
final
int
MATERIAL_SERIAL_NUMBERE_
NOT_MORE_THAN_STORAGE
_CODE
=
8000003
;
public
static
final
int
MATERIAL_SERIAL_NUMBERE_
EMPTY
_CODE
=
8000003
;
public
static
final
String
MATERIAL_SERIAL_NUMBERE_
NOT_MORE_THAN_STORAGE_MSG
=
"该商品已绑定序列号数量大于等于商品现有库存
"
;
public
static
final
String
MATERIAL_SERIAL_NUMBERE_
EMPTY_MSG
=
"抱歉,商品条码:%s的序列号不能为空
"
;
//商品库存不足
//商品库存不足
public
static
final
int
MATERIAL_STOCK_NOT_ENOUGH_CODE
=
8000004
;
public
static
final
int
MATERIAL_STOCK_NOT_ENOUGH_CODE
=
8000004
;
public
static
final
String
MATERIAL_STOCK_NOT_ENOUGH_MSG
=
"商品:%s库存不足"
;
public
static
final
String
MATERIAL_STOCK_NOT_ENOUGH_MSG
=
"商品:%s库存不足"
;
...
@@ -326,6 +326,9 @@ public class ExceptionConstants {
...
@@ -326,6 +326,9 @@ public class ExceptionConstants {
//比例格式错误
//比例格式错误
public
static
final
int
MATERIAL_RATIO_NOT_INTEGER_CODE
=
8000016
;
public
static
final
int
MATERIAL_RATIO_NOT_INTEGER_CODE
=
8000016
;
public
static
final
String
MATERIAL_RATIO_NOT_INTEGER_MSG
=
"第%s行比例格式错误"
;
public
static
final
String
MATERIAL_RATIO_NOT_INTEGER_MSG
=
"第%s行比例格式错误"
;
//商品的批号不能为空
public
static
final
int
MATERIAL_BATCH_NUMBERE_EMPTY_CODE
=
8000017
;
public
static
final
String
MATERIAL_BATCH_NUMBERE_EMPTY_MSG
=
"抱歉,商品条码:%s的批号不能为空"
;
/**
/**
* 单据信息
* 单据信息
* type = 85
* type = 85
...
...
jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java
View file @
e8a77a28
...
@@ -387,23 +387,6 @@ public class DepotItemService {
...
@@ -387,23 +387,6 @@ public class DepotItemService {
public
void
saveDetials
(
String
rows
,
Long
headerId
,
String
actionType
,
HttpServletRequest
request
)
throws
Exception
{
public
void
saveDetials
(
String
rows
,
Long
headerId
,
String
actionType
,
HttpServletRequest
request
)
throws
Exception
{
//查询单据主表信息
//查询单据主表信息
DepotHead
depotHead
=
depotHeadMapper
.
selectByPrimaryKey
(
headerId
);
DepotHead
depotHead
=
depotHeadMapper
.
selectByPrimaryKey
(
headerId
);
//获得当前操作人
User
userInfo
=
userService
.
getCurrentUser
();
//首先回收序列号,如果是调拨,不用处理序列号
if
(
BusinessConstants
.
DEPOTHEAD_TYPE_OUT
.
equals
(
depotHead
.
getType
())
&&!
BusinessConstants
.
SUB_TYPE_TRANSFER
.
equals
(
depotHead
.
getSubType
())){
List
<
DepotItem
>
depotItemList
=
getListByHeaderId
(
headerId
);
for
(
DepotItem
depotItem
:
depotItemList
){
Material
material
=
materialService
.
getMaterial
(
depotItem
.
getMaterialId
());
if
(
material
==
null
){
continue
;
}
if
(
BusinessConstants
.
ENABLE_SERIAL_NUMBER_ENABLED
.
equals
(
material
.
getEnableSerialNumber
())){
serialNumberService
.
cancelSerialNumber
(
depotItem
.
getMaterialId
(),
depotHead
.
getNumber
(),
(
depotItem
.
getBasicNumber
()==
null
?
0
:
depotItem
.
getBasicNumber
()).
intValue
(),
userInfo
);
}
}
}
//删除单据的明细
//删除单据的明细
deleteDepotItemHeadId
(
headerId
);
deleteDepotItemHeadId
(
headerId
);
JSONArray
rowArr
=
JSONArray
.
parseArray
(
rows
);
JSONArray
rowArr
=
JSONArray
.
parseArray
(
rows
);
...
@@ -417,6 +400,7 @@ public class DepotItemService {
...
@@ -417,6 +400,7 @@ public class DepotItemService {
depotItem
.
setMaterialId
(
materialExtend
.
getMaterialId
());
depotItem
.
setMaterialId
(
materialExtend
.
getMaterialId
());
depotItem
.
setMaterialExtendId
(
materialExtend
.
getId
());
depotItem
.
setMaterialExtendId
(
materialExtend
.
getId
());
depotItem
.
setMaterialUnit
(
rowObj
.
getString
(
"unit"
));
depotItem
.
setMaterialUnit
(
rowObj
.
getString
(
"unit"
));
Material
material
=
materialService
.
getMaterial
(
depotItem
.
getMaterialId
());
if
(
StringUtil
.
isExist
(
rowObj
.
get
(
"snList"
)))
{
if
(
StringUtil
.
isExist
(
rowObj
.
get
(
"snList"
)))
{
depotItem
.
setSnList
(
rowObj
.
getString
(
"snList"
));
depotItem
.
setSnList
(
rowObj
.
getString
(
"snList"
));
if
(
StringUtil
.
isExist
(
rowObj
.
get
(
"depotId"
)))
{
if
(
StringUtil
.
isExist
(
rowObj
.
get
(
"depotId"
)))
{
...
@@ -427,9 +411,21 @@ public class DepotItemService {
...
@@ -427,9 +411,21 @@ public class DepotItemService {
serialNumberService
.
addSerialNumberByBill
(
depotHead
.
getNumber
(),
materialExtend
.
getMaterialId
(),
depotId
,
depotItem
.
getSnList
());
serialNumberService
.
addSerialNumberByBill
(
depotHead
.
getNumber
(),
materialExtend
.
getMaterialId
(),
depotId
,
depotItem
.
getSnList
());
}
}
}
}
}
else
{
//序列号不能为空
if
(
BusinessConstants
.
ENABLE_SERIAL_NUMBER_ENABLED
.
equals
(
material
.
getEnableSerialNumber
()))
{
throw
new
BusinessRunTimeException
(
ExceptionConstants
.
MATERIAL_SERIAL_NUMBERE_EMPTY_CODE
,
String
.
format
(
ExceptionConstants
.
MATERIAL_SERIAL_NUMBERE_EMPTY_MSG
,
barCode
));
}
}
}
if
(
StringUtil
.
isExist
(
rowObj
.
get
(
"batchNumber"
)))
{
if
(
StringUtil
.
isExist
(
rowObj
.
get
(
"batchNumber"
)))
{
depotItem
.
setBatchNumber
(
rowObj
.
getString
(
"batchNumber"
));
depotItem
.
setBatchNumber
(
rowObj
.
getString
(
"batchNumber"
));
}
else
{
//批号不能为空
if
(
BusinessConstants
.
ENABLE_BATCH_NUMBER_ENABLED
.
equals
(
material
.
getEnableBatchNumber
()))
{
throw
new
BusinessRunTimeException
(
ExceptionConstants
.
MATERIAL_BATCH_NUMBERE_EMPTY_CODE
,
String
.
format
(
ExceptionConstants
.
MATERIAL_BATCH_NUMBERE_EMPTY_MSG
,
barCode
));
}
}
}
if
(
StringUtil
.
isExist
(
rowObj
.
get
(
"expirationDate"
)))
{
if
(
StringUtil
.
isExist
(
rowObj
.
get
(
"expirationDate"
)))
{
depotItem
.
setExpirationDate
(
rowObj
.
getDate
(
"expirationDate"
));
depotItem
.
setExpirationDate
(
rowObj
.
getDate
(
"expirationDate"
));
...
@@ -531,28 +527,22 @@ public class DepotItemService {
...
@@ -531,28 +527,22 @@ public class DepotItemService {
}
}
//出库时判断库存是否充足
//出库时判断库存是否充足
if
(
BusinessConstants
.
DEPOTHEAD_TYPE_OUT
.
equals
(
depotHead
.
getType
())){
if
(
BusinessConstants
.
DEPOTHEAD_TYPE_OUT
.
equals
(
depotHead
.
getType
())){
if
(
depotItem
==
null
){
continue
;
}
Material
material
=
materialService
.
getMaterial
(
depotItem
.
getMaterialId
());
if
(
material
==
null
){
continue
;
}
BigDecimal
stock
=
getStockByParam
(
depotItem
.
getDepotId
(),
depotItem
.
getMaterialId
(),
null
,
null
);
BigDecimal
stock
=
getStockByParam
(
depotItem
.
getDepotId
(),
depotItem
.
getMaterialId
(),
null
,
null
);
if
(
StringUtil
.
isNotEmpty
(
depotItem
.
getSku
()))
{
if
(
StringUtil
.
isNotEmpty
(
depotItem
.
getSku
()))
{
//对于sku商品要换个方式计算库存
//对于sku商品要换个方式计算库存
stock
=
getSkuStockByParam
(
depotItem
.
getDepotId
(),
depotItem
.
getMaterialExtendId
(),
null
,
null
);
stock
=
getSkuStockByParam
(
depotItem
.
getDepotId
(),
depotItem
.
getMaterialExtendId
(),
null
,
null
);
}
}
BigDecimal
thisBasicNumber
=
depotItem
.
getBasicNumber
()==
null
?
BigDecimal
.
ZERO
:
depotItem
.
getBasicNumber
();
BigDecimal
thisBasicNumber
=
depotItem
.
getBasicNumber
()==
null
?
BigDecimal
.
ZERO
:
depotItem
.
getBasicNumber
();
if
(
systemConfigService
.
getMinusStockFlag
()
==
false
&&
stock
.
compareTo
(
thisBasicNumber
)<
0
){
if
(
!
systemConfigService
.
getMinusStockFlag
()
&&
stock
.
compareTo
(
thisBasicNumber
)<
0
){
throw
new
BusinessRunTimeException
(
ExceptionConstants
.
MATERIAL_STOCK_NOT_ENOUGH_CODE
,
throw
new
BusinessRunTimeException
(
ExceptionConstants
.
MATERIAL_STOCK_NOT_ENOUGH_CODE
,
String
.
format
(
ExceptionConstants
.
MATERIAL_STOCK_NOT_ENOUGH_MSG
,
material
==
null
?
""
:
material
.
getName
()));
String
.
format
(
ExceptionConstants
.
MATERIAL_STOCK_NOT_ENOUGH_MSG
,
material
.
getName
()));
}
}
//出库时处理序列号
//出库时处理序列号
if
(!
BusinessConstants
.
SUB_TYPE_TRANSFER
.
equals
(
depotHead
.
getSubType
()))
{
if
(!
BusinessConstants
.
SUB_TYPE_TRANSFER
.
equals
(
depotHead
.
getSubType
()))
{
//判断商品是否开启序列号,开启的
收回
序列号,未开启的跳过
//判断商品是否开启序列号,开启的
售出
序列号,未开启的跳过
if
(
BusinessConstants
.
ENABLE_SERIAL_NUMBER_ENABLED
.
equals
(
material
.
getEnableSerialNumber
()))
{
if
(
BusinessConstants
.
ENABLE_SERIAL_NUMBER_ENABLED
.
equals
(
material
.
getEnableSerialNumber
()))
{
//查询单据子表中开启序列号的数据列表
//售出序列号,获得当前操作人
User
userInfo
=
userService
.
getCurrentUser
();
serialNumberService
.
checkAndUpdateSerialNumber
(
depotItem
,
depotHead
.
getNumber
(),
userInfo
,
StringUtil
.
toNull
(
depotItem
.
getSnList
()));
serialNumberService
.
checkAndUpdateSerialNumber
(
depotItem
,
depotHead
.
getNumber
(),
userInfo
,
StringUtil
.
toNull
(
depotItem
.
getSnList
()));
}
}
}
}
...
...
jshERP-boot/src/main/java/com/jsh/erp/service/serialNumber/SerialNumberService.java
View file @
e8a77a28
...
@@ -287,6 +287,8 @@ public class SerialNumberService {
...
@@ -287,6 +287,8 @@ public class SerialNumberService {
public
int
sellSerialNumber
(
Long
materialId
,
String
outBillNo
,
String
snList
,
User
user
)
throws
Exception
{
public
int
sellSerialNumber
(
Long
materialId
,
String
outBillNo
,
String
snList
,
User
user
)
throws
Exception
{
int
result
=
0
;
int
result
=
0
;
try
{
try
{
//将中文的逗号批量替换为英文逗号
snList
=
snList
.
replaceAll
(
","
,
","
);
String
[]
snArray
=
snList
.
split
(
","
);
String
[]
snArray
=
snList
.
split
(
","
);
result
=
serialNumberMapperEx
.
sellSerialNumber
(
materialId
,
outBillNo
,
snArray
,
new
Date
(),
user
==
null
?
null
:
user
.
getId
());
result
=
serialNumberMapperEx
.
sellSerialNumber
(
materialId
,
outBillNo
,
snArray
,
new
Date
(),
user
==
null
?
null
:
user
.
getId
());
}
catch
(
Exception
e
){
}
catch
(
Exception
e
){
...
...
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