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
1604a3fd
Commit
1604a3fd
authored
Sep 25, 2021
by
季圣华
Browse files
给采购和销售单据支持分批操作
parent
84847424
Changes
9
Hide whitespace changes
Inline
Side-by-side
jshERP-boot/src/main/java/com/jsh/erp/constants/BusinessConstants.java
View file @
1604a3fd
...
...
@@ -60,11 +60,12 @@ public class BusinessConstants {
public
static
final
String
ENABLE_SERIAL_NUMBER_ENABLED
=
"1"
;
public
static
final
String
ENABLE_SERIAL_NUMBER_NOT_ENABLED
=
"0"
;
/**
* 单据状态 billsStatus '0'未审核 '1'审核 '2'
已转
采购|销售
* 单据状态 billsStatus '0'未审核 '1'审核 '2'
完成采购|销售 '3'部分
采购|销售
* */
public
static
final
String
BILLS_STATUS_UN_AUDIT
=
"0"
;
public
static
final
String
BILLS_STATUS_AUDIT
=
"1"
;
public
static
final
String
BILLS_STATUS_SKIP
=
"2"
;
public
static
final
String
BILLS_STATUS_SKIPED
=
"2"
;
public
static
final
String
BILLS_STATUS_SKIPING
=
"3"
;
/**
* 出入库分类
*采购、采购退货、其它、零售、销售、调拨等
...
...
jshERP-boot/src/main/java/com/jsh/erp/constants/ExceptionConstants.java
View file @
1604a3fd
...
...
@@ -336,6 +336,9 @@ public class ExceptionConstants {
//单据反审核-只有已审核的单据才能反审核
public
static
final
int
DEPOT_HEAD_AUDIT_TO_UN_AUDIT_FAILED_CODE
=
8500013
;
public
static
final
String
DEPOT_HEAD_AUDIT_TO_UN_AUDIT_FAILED_MSG
=
"抱歉,只有已审核的单据才能反审核"
;
//单据录入-商品条码XXX的数量需要修改下
public
static
final
int
DEPOT_HEAD_NUMBER_NEED_EDIT_FAILED_CODE
=
85000014
;
public
static
final
String
DEPOT_HEAD_NUMBER_NEED_EDIT_FAILED_MSG
=
"商品条码%s的数量需要修改下"
;
/**
* 单据明细信息
* type = 90
...
...
jshERP-boot/src/main/java/com/jsh/erp/controller/DepotItemController.java
View file @
1604a3fd
...
...
@@ -197,6 +197,8 @@ public class DepotItemController {
item
.
put
(
"sku"
,
diEx
.
getSku
());
item
.
put
(
"operNumber"
,
diEx
.
getOperNumber
());
item
.
put
(
"basicNumber"
,
diEx
.
getBasicNumber
());
item
.
put
(
"preNumber"
,
diEx
.
getOperNumber
());
//原数量
item
.
put
(
"finishNumber"
,
depotItemService
.
getFinishNumber
(
diEx
.
getMaterialId
(),
diEx
.
getHeaderId
()));
//已入库|已出库
item
.
put
(
"unitPrice"
,
diEx
.
getUnitPrice
());
item
.
put
(
"taxUnitPrice"
,
diEx
.
getTaxUnitPrice
());
item
.
put
(
"allPrice"
,
diEx
.
getAllPrice
());
...
...
jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotHeadMapperEx.java
View file @
1604a3fd
...
...
@@ -22,7 +22,7 @@ public interface DepotHeadMapperEx {
@Param
(
"type"
)
String
type
,
@Param
(
"subType"
)
String
subType
,
@Param
(
"creatorArray"
)
String
[]
creatorArray
,
@Param
(
"status"
)
String
status
,
@Param
(
"status
Array
"
)
String
[]
status
Array
,
@Param
(
"number"
)
String
number
,
@Param
(
"beginTime"
)
String
beginTime
,
@Param
(
"endTime"
)
String
endTime
,
...
...
@@ -38,7 +38,7 @@ public interface DepotHeadMapperEx {
@Param
(
"type"
)
String
type
,
@Param
(
"subType"
)
String
subType
,
@Param
(
"creatorArray"
)
String
[]
creatorArray
,
@Param
(
"status"
)
String
status
,
@Param
(
"status
Array
"
)
String
[]
status
Array
,
@Param
(
"number"
)
String
number
,
@Param
(
"beginTime"
)
String
beginTime
,
@Param
(
"endTime"
)
String
endTime
,
...
...
jshERP-boot/src/main/java/com/jsh/erp/datasource/mappers/DepotItemMapperEx.java
View file @
1604a3fd
...
...
@@ -123,4 +123,9 @@ public interface DepotItemMapperEx {
int
findStockWarningCountTotal
(
@Param
(
"materialParam"
)
String
materialParam
,
@Param
(
"depotId"
)
Long
depotId
);
BigDecimal
getFinishNumber
(
@Param
(
"mId"
)
Long
mId
,
@Param
(
"linkNumber"
)
String
linkNumber
,
@Param
(
"goToType"
)
String
goToType
);
}
jshERP-boot/src/main/java/com/jsh/erp/service/depotHead/DepotHeadService.java
View file @
1604a3fd
...
...
@@ -107,11 +107,12 @@ public class DepotHeadService {
try
{
String
[]
depotArray
=
getDepotArray
(
subType
);
String
[]
creatorArray
=
getCreatorArray
(
roleType
);
String
[]
statusArray
=
StringUtil
.
isNotEmpty
(
status
)
?
status
.
split
(
","
)
:
null
;
Map
<
Long
,
String
>
personMap
=
personService
.
getPersonMap
();
Map
<
Long
,
String
>
accountMap
=
accountService
.
getAccountMap
();
beginTime
=
Tools
.
parseDayToTime
(
beginTime
,
BusinessConstants
.
DAY_FIRST_TIME
);
endTime
=
Tools
.
parseDayToTime
(
endTime
,
BusinessConstants
.
DAY_LAST_TIME
);
list
=
depotHeadMapperEx
.
selectByConditionDepotHead
(
type
,
subType
,
creatorArray
,
status
,
number
,
beginTime
,
endTime
,
list
=
depotHeadMapperEx
.
selectByConditionDepotHead
(
type
,
subType
,
creatorArray
,
status
Array
,
number
,
beginTime
,
endTime
,
materialParam
,
organId
,
creator
,
depotId
,
depotArray
,
offset
,
rows
);
if
(
null
!=
list
)
{
for
(
DepotHeadVo4List
dh
:
list
)
{
...
...
@@ -155,9 +156,10 @@ public class DepotHeadService {
try
{
String
[]
depotArray
=
getDepotArray
(
subType
);
String
[]
creatorArray
=
getCreatorArray
(
roleType
);
String
[]
statusArray
=
StringUtil
.
isNotEmpty
(
status
)
?
status
.
split
(
","
)
:
null
;
beginTime
=
Tools
.
parseDayToTime
(
beginTime
,
BusinessConstants
.
DAY_FIRST_TIME
);
endTime
=
Tools
.
parseDayToTime
(
endTime
,
BusinessConstants
.
DAY_LAST_TIME
);
result
=
depotHeadMapperEx
.
countsByDepotHead
(
type
,
subType
,
creatorArray
,
status
,
number
,
beginTime
,
endTime
,
result
=
depotHeadMapperEx
.
countsByDepotHead
(
type
,
subType
,
creatorArray
,
status
Array
,
number
,
beginTime
,
endTime
,
materialParam
,
organId
,
creator
,
depotId
,
depotArray
);
}
catch
(
Exception
e
){
JshException
.
readFail
(
logger
,
e
);
...
...
@@ -723,18 +725,6 @@ public class DepotHeadService {
/**入库和出库处理单据子表信息*/
depotItemService
.
saveDetials
(
rows
,
headId
,
request
);
}
/**如果关联单据号非空则更新订单的状态为2 (只操作采购订单和销售订单) */
if
(
depotHead
.
getLinkNumber
()!=
null
)
{
DepotHead
depotHeadOrders
=
new
DepotHead
();
depotHeadOrders
.
setStatus
(
BusinessConstants
.
BILLS_STATUS_SKIP
);
DepotHeadExample
example
=
new
DepotHeadExample
();
example
.
createCriteria
().
andNumberEqualTo
(
depotHead
.
getLinkNumber
()).
andTypeEqualTo
(
"其它"
);
try
{
depotHeadMapper
.
updateByExampleSelective
(
depotHeadOrders
,
example
);
}
catch
(
Exception
e
){
JshException
.
writeFail
(
logger
,
e
);
}
}
logService
.
insertLog
(
"单据"
,
new
StringBuffer
(
BusinessConstants
.
LOG_OPERATION_TYPE_ADD
).
append
(
depotHead
.
getNumber
()).
toString
(),
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
());
...
...
jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java
View file @
1604a3fd
...
...
@@ -320,6 +320,8 @@ public class DepotItemService {
}
//删除单据的明细
deleteDepotItemHeadId
(
headerId
);
//单据状态:是否全部完成 2-全部完成 3-部分完成(针对订单的分批出入库)
String
billStatus
=
BusinessConstants
.
BILLS_STATUS_SKIPED
;
JSONArray
rowArr
=
JSONArray
.
parseArray
(
rows
);
if
(
null
!=
rowArr
&&
rowArr
.
size
()>
0
)
{
for
(
int
i
=
0
;
i
<
rowArr
.
size
();
i
++)
{
...
...
@@ -351,6 +353,17 @@ public class DepotItemService {
depotItem
.
setBasicNumber
(
oNumber
);
//其他情况
}
}
//如果数量+已完成数量<原订单数量,代表该单据状态为未全部完成出入库
if
(
StringUtil
.
isExist
(
rowObj
.
get
(
"preNumber"
))
&&
StringUtil
.
isExist
(
rowObj
.
get
(
"finishNumber"
)))
{
BigDecimal
preNumber
=
rowObj
.
getBigDecimal
(
"preNumber"
);
BigDecimal
finishNumber
=
rowObj
.
getBigDecimal
(
"finishNumber"
);
if
(
depotItem
.
getOperNumber
().
add
(
finishNumber
).
compareTo
(
preNumber
)<
0
)
{
billStatus
=
BusinessConstants
.
BILLS_STATUS_SKIPING
;
}
else
if
(
depotItem
.
getOperNumber
().
add
(
finishNumber
).
compareTo
(
preNumber
)>
0
)
{
throw
new
BusinessRunTimeException
(
ExceptionConstants
.
DEPOT_HEAD_NUMBER_NEED_EDIT_FAILED_CODE
,
String
.
format
(
ExceptionConstants
.
DEPOT_HEAD_NUMBER_NEED_EDIT_FAILED_MSG
,
barCode
));
}
}
if
(
StringUtil
.
isExist
(
rowObj
.
get
(
"unitPrice"
)))
{
depotItem
.
setUnitPrice
(
rowObj
.
getBigDecimal
(
"unitPrice"
));
}
...
...
@@ -425,12 +438,37 @@ public class DepotItemService {
//更新当前库存
updateCurrentStock
(
depotItem
);
}
//如果关联单据号非空则更新订单的状态
if
(
StringUtil
.
isNotEmpty
(
depotHead
.
getLinkNumber
()))
{
changeBillStatus
(
depotHead
,
billStatus
);
}
}
else
{
throw
new
BusinessRunTimeException
(
ExceptionConstants
.
DEPOT_HEAD_ROW_FAILED_CODE
,
String
.
format
(
ExceptionConstants
.
DEPOT_HEAD_ROW_FAILED_MSG
));
}
}
/**
* 更新单据状态
* @param depotHead
* @param billStatus
*/
public
void
changeBillStatus
(
DepotHead
depotHead
,
String
billStatus
)
{
DepotHead
depotHeadOrders
=
new
DepotHead
();
depotHeadOrders
.
setStatus
(
billStatus
);
DepotHeadExample
example
=
new
DepotHeadExample
();
List
<
String
>
linkNumberList
=
StringUtil
.
strToStringList
(
depotHead
.
getLinkNumber
());
example
.
createCriteria
().
andNumberIn
(
linkNumberList
);
try
{
depotHeadMapper
.
updateByExampleSelective
(
depotHeadOrders
,
example
);
}
catch
(
Exception
e
){
logger
.
error
(
"异常码[{}],异常提示[{}],异常[{}]"
,
ExceptionConstants
.
DATA_WRITE_FAIL_CODE
,
ExceptionConstants
.
DATA_WRITE_FAIL_MSG
,
e
);
throw
new
BusinessRunTimeException
(
ExceptionConstants
.
DATA_WRITE_FAIL_CODE
,
ExceptionConstants
.
DATA_WRITE_FAIL_MSG
);
}
}
@Transactional
(
value
=
"transactionManager"
,
rollbackFor
=
Exception
.
class
)
public
void
deleteDepotItemHeadId
(
Long
headerId
)
throws
Exception
{
DepotItemExample
example
=
new
DepotItemExample
();
...
...
@@ -597,4 +635,19 @@ public class DepotItemService {
}
}
}
@Transactional
(
value
=
"transactionManager"
,
rollbackFor
=
Exception
.
class
)
public
BigDecimal
getFinishNumber
(
Long
mId
,
Long
headerId
)
{
String
goToType
=
""
;
DepotHead
depotHead
=
depotHeadMapper
.
selectByPrimaryKey
(
headerId
);
String
linkNumber
=
depotHead
.
getNumber
();
//订单号
if
(
BusinessConstants
.
SUB_TYPE_PURCHASE_ORDER
.
equals
(
depotHead
.
getSubType
()))
{
goToType
=
BusinessConstants
.
SUB_TYPE_PURCHASE
;
}
if
(
BusinessConstants
.
SUB_TYPE_SALES_ORDER
.
equals
(
depotHead
.
getSubType
()))
{
goToType
=
BusinessConstants
.
SUB_TYPE_SALES
;
}
BigDecimal
count
=
depotItemMapperEx
.
getFinishNumber
(
mId
,
linkNumber
,
goToType
);
return
count
;
}
}
jshERP-boot/src/main/resources/mapper_xml/DepotHeadMapperEx.xml
View file @
1604a3fd
...
...
@@ -61,8 +61,12 @@
<if
test=
"subType != null"
>
and dh.sub_type=#{subType}
</if>
<if
test=
"status != null"
>
and dh.status =#{status}
<if
test=
"statusArray != null and statusArray !=''"
>
and dh.status in (
<foreach
collection=
"statusArray"
item=
"status"
separator=
","
>
#{status}
</foreach>
)
</if>
<if
test=
"number != null"
>
<bind
name=
"bindNumber"
value=
"'%'+number+'%'"
/>
...
...
@@ -121,8 +125,12 @@
<if
test=
"subType != null"
>
and dh.sub_type=#{subType}
</if>
<if
test=
"status != null"
>
and dh.status =#{status}
<if
test=
"statusArray != null and statusArray !=''"
>
and dh.status in (
<foreach
collection=
"statusArray"
item=
"status"
separator=
","
>
#{status}
</foreach>
)
</if>
<if
test=
"number != null"
>
<bind
name=
"bindNumber"
value=
"'%'+number+'%'"
/>
...
...
jshERP-boot/src/main/resources/mapper_xml/DepotItemMapperEx.xml
View file @
1604a3fd
...
...
@@ -456,4 +456,21 @@
</if>
group by m.id,m.name, m.model, m.unit, m.color, u.name) tb
</select>
<select
id=
"getFinishNumber"
resultType=
"java.math.BigDecimal"
>
select ifnull(sum(di.basic_number),0) from jsh_depot_item di
where di.material_id=#{mId}
and ifnull(di.delete_flag,'0') !='1'
and di.header_id
in
(
select dh.id from jsh_depot_head dh
where
dh.link_number=#{linkNumber}
and ifnull(dh.delete_flag,'0') !='1'
<if
test=
"goToType != null"
>
and dh.sub_type=#{goToType}
</if>
)
</select>
</mapper>
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