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
ecb0edca
Commit
ecb0edca
authored
Sep 29, 2021
by
季圣华
Browse files
优化序列号和批次商品的逻辑
parent
fdfcc811
Changes
7
Hide whitespace changes
Inline
Side-by-side
jshERP-boot/src/main/java/com/jsh/erp/constants/BusinessConstants.java
View file @
ecb0edca
...
...
@@ -72,11 +72,12 @@ public class BusinessConstants {
* */
public
static
final
String
SUB_TYPE_PURCHASE_ORDER
=
"采购订单"
;
public
static
final
String
SUB_TYPE_PURCHASE
=
"采购"
;
public
static
final
String
SUB_TYPE_PURCHASE_
T
ETURN
S
=
"采购退货"
;
public
static
final
String
SUB_TYPE_PURCHASE_
R
ETURN
=
"采购退货"
;
public
static
final
String
SUB_TYPE_OTHER
=
"其它"
;
public
static
final
String
SUB_TYPE_RETAIL
=
"零售"
;
public
static
final
String
SUB_TYPE_SALES_ORDER
=
"销售订单"
;
public
static
final
String
SUB_TYPE_SALES
=
"销售"
;
public
static
final
String
SUB_TYPE_SALES_RETURN
=
"销售退货"
;
public
static
final
String
SUB_TYPE_TRANSFER
=
"调拨"
;
/**
* 批量插入sql时最大的数据条数
...
...
jshERP-boot/src/main/java/com/jsh/erp/controller/MaterialController.java
View file @
ecb0edca
...
...
@@ -199,6 +199,8 @@ public class MaterialController {
item
.
put
(
"model"
,
material
.
getModel
());
item
.
put
(
"unit"
,
material
.
getCommodityUnit
()
+
ratio
);
item
.
put
(
"sku"
,
material
.
getSku
());
item
.
put
(
"enableSerialNumber"
,
material
.
getEnableSerialNumber
());
item
.
put
(
"enableBatchNumber"
,
material
.
getEnableBatchNumber
());
BigDecimal
stock
;
if
(
StringUtil
.
isNotEmpty
(
material
.
getSku
())){
stock
=
depotItemService
.
getSkuStockByParam
(
depotId
,
material
.
getMeId
(),
null
,
null
);
...
...
jshERP-boot/src/main/java/com/jsh/erp/controller/SerialNumberController.java
View file @
ecb0edca
...
...
@@ -93,25 +93,25 @@ public class SerialNumberController {
* 获取序列号商品
* @param name
* @param depotId
* @param
materialId
* @param
barCode
* @param currentPage
* @param pageSize
* @param request
* @return
* @throws Exception
*/
@GetMapping
(
value
=
"/getEnableSerialNumberList"
)
@GetMapping
(
value
=
"/
serialNumber/
getEnableSerialNumberList"
)
public
BaseResponseInfo
getEnableSerialNumberList
(
@RequestParam
(
"name"
)
String
name
,
@RequestParam
(
"depotId"
)
Long
depotId
,
@RequestParam
(
"
materialId"
)
Long
materialId
,
@RequestParam
(
value
=
Constants
.
CURRENT_PAGE
,
required
=
false
)
Integer
currentPage
,
@RequestParam
(
value
=
Constants
.
PAGE_SIZE
,
required
=
false
)
Integer
pageSize
,
@RequestParam
(
"
barCode"
)
String
barCode
,
@RequestParam
(
"page"
)
Integer
currentPage
,
@RequestParam
(
"rows"
)
Integer
pageSize
,
HttpServletRequest
request
)
throws
Exception
{
BaseResponseInfo
res
=
new
BaseResponseInfo
();
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
try
{
List
<
SerialNumber
>
list
=
serialNumberService
.
getEnableSerialNumberList
(
name
,
depotId
,
materialId
,
(
currentPage
-
1
)*
pageSize
,
pageSize
);
Long
total
=
serialNumberService
.
getEnableSerialNumberCount
(
name
,
depotId
,
materialId
);
List
<
SerialNumber
>
list
=
serialNumberService
.
getEnableSerialNumberList
(
name
,
depotId
,
barCode
,
(
currentPage
-
1
)*
pageSize
,
pageSize
);
Long
total
=
serialNumberService
.
getEnableSerialNumberCount
(
name
,
depotId
,
barCode
);
map
.
put
(
"rows"
,
list
);
map
.
put
(
"total"
,
total
);
res
.
code
=
200
;
...
...
jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/SerialNumberMapperEx.java
View file @
ecb0edca
...
...
@@ -51,7 +51,7 @@ public interface SerialNumberMapperEx {
* 卖出: update jsh_serial_number set is_Sell='1' ,depothead_Id='depotheadId' where 1=1 and material_Id='materialId'
* and is_Sell !='1' and delete_Flag !='1' {limit 0,count}
* */
int
sellSerialNumber
(
@Param
(
"materialId"
)
Long
materialId
,
@Param
(
"depotHeadId"
)
Long
depotHeadId
,
@Param
(
"
count"
)
Integer
count
,
@Param
(
"updateTime"
)
Date
updateTime
,
@Param
(
"updater"
)
Long
updater
);
int
sellSerialNumber
(
@Param
(
"materialId"
)
Long
materialId
,
@Param
(
"depotHeadId"
)
Long
depotHeadId
,
@Param
(
"
snArray"
)
String
snArray
[]
,
@Param
(
"updateTime"
)
Date
updateTime
,
@Param
(
"updater"
)
Long
updater
);
/**
* 赎回:update jsh_serial_number set is_Sell='0',depothead_Id=null where 1=1 and material_Id='materialId'
* and depothead_Id='depotheadId' and is_Sell !='0' and delete_Flag !='1' {limit 0,count}
...
...
@@ -66,10 +66,10 @@ public interface SerialNumberMapperEx {
List
<
SerialNumber
>
getEnableSerialNumberList
(
@Param
(
"name"
)
String
name
,
@Param
(
"depotId"
)
Long
depotId
,
@Param
(
"
materialId"
)
Long
materialId
,
@Param
(
"
barCode"
)
String
barCode
,
@Param
(
"offset"
)
Integer
offset
,
@Param
(
"rows"
)
Integer
rows
);
Long
getEnableSerialNumberCount
(
@Param
(
"name"
)
String
name
,
@Param
(
"depotId"
)
Long
depotId
,
@Param
(
"
materialId"
)
Long
materialId
);
@Param
(
"
barCode"
)
String
barCode
);
}
jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java
View file @
ecb0edca
...
...
@@ -336,6 +336,13 @@ public class DepotItemService {
depotItem
.
setMaterialUnit
(
rowObj
.
getString
(
"unit"
));
if
(
StringUtil
.
isExist
(
rowObj
.
get
(
"snList"
)))
{
depotItem
.
setSnList
(
rowObj
.
getString
(
"snList"
));
if
(
StringUtil
.
isExist
(
rowObj
.
get
(
"depotId"
)))
{
Long
depotId
=
rowObj
.
getLong
(
"depotId"
);
if
(
BusinessConstants
.
SUB_TYPE_PURCHASE
.
equals
(
depotHead
.
getSubType
())||
BusinessConstants
.
SUB_TYPE_SALES_RETURN
.
equals
(
depotHead
.
getSubType
()))
{
serialNumberService
.
addSerialNumberByBill
(
materialExtend
.
getMaterialId
(),
depotId
,
depotItem
.
getSnList
());
}
}
}
if
(
StringUtil
.
isExist
(
rowObj
.
get
(
"batchNumber"
)))
{
depotItem
.
setBatchNumber
(
rowObj
.
getString
(
"batchNumber"
));
...
...
@@ -442,7 +449,7 @@ public class DepotItemService {
//判断商品是否开启序列号,开启的收回序列号,未开启的跳过
if
(
BusinessConstants
.
ENABLE_SERIAL_NUMBER_ENABLED
.
equals
(
material
.
getEnableSerialNumber
()))
{
//查询单据子表中开启序列号的数据列表
serialNumberService
.
checkAndUpdateSerialNumber
(
depotItem
,
userInfo
);
serialNumberService
.
checkAndUpdateSerialNumber
(
depotItem
,
userInfo
,
StringUtil
.
toNull
(
depotItem
.
getSnList
())
);
}
}
}
...
...
jshERP-boot/src/main/java/com/jsh/erp/service/serialNumber/SerialNumberService.java
View file @
ecb0edca
...
...
@@ -341,19 +341,9 @@ public class SerialNumberService {
* @Param: List<DepotItem>
* @return void
*/
public
void
checkAndUpdateSerialNumber
(
DepotItem
depotItem
,
User
userInfo
)
throws
Exception
{
public
void
checkAndUpdateSerialNumber
(
DepotItem
depotItem
,
User
userInfo
,
String
snList
)
throws
Exception
{
if
(
depotItem
!=
null
){
//查询商品下已分配的可用序列号数量
int
SerialNumberSum
=
serialNumberMapperEx
.
countSerialNumberByMaterialIdAndDepotheadId
(
depotItem
.
getMaterialId
(),
null
,
BusinessConstants
.
IS_SELL_HOLD
);
//BasicNumber=OperNumber*ratio
if
((
depotItem
.
getBasicNumber
()==
null
?
0
:
depotItem
.
getBasicNumber
()).
intValue
()>
SerialNumberSum
){
//获取商品名称
Material
material
=
materialMapper
.
selectByPrimaryKey
(
depotItem
.
getMaterialId
());
throw
new
BusinessRunTimeException
(
ExceptionConstants
.
MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_CODE
,
String
.
format
(
ExceptionConstants
.
MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_MSG
,
material
==
null
?
""
:
material
.
getName
()));
}
//商品下序列号充足,分配序列号
sellSerialNumber
(
depotItem
.
getMaterialId
(),
depotItem
.
getHeaderId
(),(
depotItem
.
getBasicNumber
()==
null
?
0
:
depotItem
.
getBasicNumber
()).
intValue
(),
userInfo
);
sellSerialNumber
(
depotItem
.
getMaterialId
(),
depotItem
.
getHeaderId
(),
snList
,
userInfo
);
}
}
/**
...
...
@@ -372,10 +362,11 @@ public class SerialNumberService {
* @return com.jsh.erp.datasource.entities.SerialNumberEx
*/
@Transactional
(
value
=
"transactionManager"
,
rollbackFor
=
Exception
.
class
)
public
int
sellSerialNumber
(
Long
materialId
,
Long
depotHeadId
,
int
coun
t
,
User
user
)
throws
Exception
{
public
int
sellSerialNumber
(
Long
materialId
,
Long
depotHeadId
,
String
snLis
t
,
User
user
)
throws
Exception
{
int
result
=
0
;
try
{
result
=
serialNumberMapperEx
.
sellSerialNumber
(
materialId
,
depotHeadId
,
count
,
new
Date
(),
user
==
null
?
null
:
user
.
getId
());
String
[]
snArray
=
snList
.
split
(
","
);
result
=
serialNumberMapperEx
.
sellSerialNumber
(
materialId
,
depotHeadId
,
snArray
,
new
Date
(),
user
==
null
?
null
:
user
.
getId
());
}
catch
(
Exception
e
){
JshException
.
writeFail
(
logger
,
e
);
}
...
...
@@ -459,23 +450,40 @@ public class SerialNumberService {
return
result
;
}
public
List
<
SerialNumber
>
getEnableSerialNumberList
(
String
name
,
Long
depotId
,
Long
materialId
,
Integer
offset
,
Integer
rows
)
throws
Exception
{
public
List
<
SerialNumber
>
getEnableSerialNumberList
(
String
name
,
Long
depotId
,
String
barCode
,
Integer
offset
,
Integer
rows
)
throws
Exception
{
List
<
SerialNumber
>
list
=
null
;
try
{
list
=
serialNumberMapperEx
.
getEnableSerialNumberList
(
StringUtil
.
toNull
(
name
),
depotId
,
materialId
,
offset
,
rows
);
list
=
serialNumberMapperEx
.
getEnableSerialNumberList
(
StringUtil
.
toNull
(
name
),
depotId
,
barCode
,
offset
,
rows
);
}
catch
(
Exception
e
){
JshException
.
readFail
(
logger
,
e
);
}
return
list
;
}
public
Long
getEnableSerialNumberCount
(
String
name
,
Long
depotId
,
Long
materialId
)
throws
Exception
{
public
Long
getEnableSerialNumberCount
(
String
name
,
Long
depotId
,
String
barCode
)
throws
Exception
{
Long
count
=
0L
;
try
{
count
=
serialNumberMapperEx
.
getEnableSerialNumberCount
(
StringUtil
.
toNull
(
name
),
depotId
,
materialId
);
count
=
serialNumberMapperEx
.
getEnableSerialNumberCount
(
StringUtil
.
toNull
(
name
),
depotId
,
barCode
);
}
catch
(
Exception
e
){
JshException
.
readFail
(
logger
,
e
);
}
return
count
;
}
public
void
addSerialNumberByBill
(
Long
materialId
,
Long
depotId
,
String
snList
)
throws
Exception
{
List
<
String
>
snArr
=
StringUtil
.
strToStringList
(
snList
);
for
(
String
sn:
snArr
)
{
SerialNumber
serialNumber
=
new
SerialNumber
();
serialNumber
.
setMaterialId
(
materialId
);
serialNumber
.
setDepotId
(
depotId
);
serialNumber
.
setSerialNumber
(
sn
);
Date
date
=
new
Date
();
serialNumber
.
setCreateTime
(
date
);
serialNumber
.
setUpdateTime
(
date
);
User
userInfo
=
userService
.
getCurrentUser
();
serialNumber
.
setCreator
(
userInfo
==
null
?
null
:
userInfo
.
getId
());
serialNumber
.
setUpdater
(
userInfo
==
null
?
null
:
userInfo
.
getId
());
serialNumberMapper
.
insertSelective
(
serialNumber
);
}
}
}
jshERP-boot/src/main/resources/mapper_xml/SerialNumberMapperEx.xml
View file @
ecb0edca
...
...
@@ -165,20 +165,15 @@
</if>
and is_sell != '1'
and ifnull(delete_flag,'0') !='1'
<if
test=
"count != null"
>
and id in
( select batchSN.id from
( select selFrom.id from jsh_serial_number selFrom
where 1=1
<if
test=
"materialId != null"
>
and selFrom.material_Id = #{materialId}
</if>
and selFrom.is_sell != '1'
and ifnull(selFrom.delete_flag,'0') !='1'
limit 0,#{count}
) batchSN
<if
test=
"snArray != null"
>
and serial_number
in (
<foreach
collection=
"snArray"
item=
"sn"
separator=
","
>
#{sn}
</foreach>
)
</if>
</update>
<update
id=
"cancelSerialNumber"
>
...
...
@@ -246,16 +241,18 @@
select
ser.id, ser.serial_number
FROM jsh_serial_number ser
where 1=1
left join jsh_material m on m.id=ser.material_id and ifnull(m.delete_flag, '0') != '1'
left join jsh_material_extend me on me.material_id=m.id and ifnull(me.delete_flag,'0') !='1'
where 1=1 and me.default_flag=1
<if
test=
"name != null"
>
<bind
name=
"bindName"
value=
"'%'+name+'%'"
/>
and ser.serial_number like #{bindName}
</if>
<if
test=
"depotId != null"
>
and ser.depot_id =#{depotId}
and ser.depot_id =
#{depotId}
</if>
<if
test=
"
materialId
!= null"
>
and
ser.material_id =#{materialId
}
<if
test=
"
barCode
!= null"
>
and
me.bar_code= #{barCode
}
</if>
and ser.is_sell = '0'
and ifnull(ser.delete_flag,'0') !='1'
...
...
@@ -268,16 +265,18 @@
select
count(1)
FROM jsh_serial_number ser
where 1=1
left join jsh_material m on m.id=ser.material_id and ifnull(m.delete_flag, '0') != '1'
left join jsh_material_extend me on me.material_id=m.id and ifnull(me.delete_flag,'0') !='1'
where 1=1 and me.default_flag=1
<if
test=
"name != null"
>
<bind
name=
"bindName"
value=
"'%'+name+'%'"
/>
and ser.serial_number like #{bindName}
</if>
<if
test=
"depotId != null"
>
and ser.depot_id =#{depotId}
and ser.depot_id =
#{depotId}
</if>
<if
test=
"
materialId
!= null"
>
and
ser.material_id =#{materialId
}
<if
test=
"
barCode
!= null"
>
and
me.bar_code= #{barCode
}
</if>
and ser.is_sell = '0'
and ifnull(ser.delete_flag,'0') !='1'
...
...
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