Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
O
order-group
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
order-group-application
order-group
Commits
c40355cb
Commit
c40355cb
authored
Sep 18, 2021
by
陈斌
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
发票校验逻辑
parent
7d04bff1
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
98 additions
and
11 deletions
+98
-11
order-application-service/src/main/java/cn/freemud/adapter/OrderInvoiceAdapter.java
+38
-7
order-application-service/src/main/java/cn/freemud/entities/dto/order/QueryInvoiceByCodesResponse.java
+19
-0
order-application-service/src/main/java/cn/freemud/entities/dto/pay/QueryInvoiceByCodesRequest.java
+23
-0
order-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
+2
-0
order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
+7
-4
order-application-service/src/main/java/cn/freemud/service/thirdparty/OrderServiceClient.java
+9
-0
No files found.
order-application-service/src/main/java/cn/freemud/adapter/OrderInvoiceAdapter.java
View file @
c40355cb
...
...
@@ -3,17 +3,23 @@ package cn.freemud.adapter;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.constant.CommonsConstant
;
import
cn.freemud.entities.dto.order.InvoiceCreateResponse
;
import
cn.freemud.entities.dto.order.QueryInvoiceByCodesResponse
;
import
cn.freemud.entities.dto.pay.InvoiceCreateRequest
;
import
cn.freemud.entities.dto.pay.InvoiceProductDetailRequest
;
import
cn.freemud.entities.dto.pay.OrderInvoiceRequest
;
import
cn.freemud.entities.dto.pay.QueryInvoiceByCodesRequest
;
import
cn.freemud.entities.vo.order.CreateOrderInvoiceRequest
;
import
cn.freemud.enums.InvoiceTypeCodeEnum
;
import
cn.freemud.enums.OrderStatus
;
import
cn.freemud.enums.ResponseResult
;
import
cn.freemud.service.thirdparty.OrderServiceClient
;
import
cn.freemud.utils.ResponseUtil
;
import
com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
;
import
com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
...
...
@@ -22,12 +28,17 @@ import java.util.List;
import
java.util.UUID
;
import
java.util.stream.Collectors
;
@Component
public
class
OrderInvoiceAdapter
{
@Autowired
OrderServiceClient
orderServiceClient
;
// 开票参数
public
static
final
String
INVOICE_PRODUCTCODE
=
"3070401000000000000"
;
public
static
final
String
INVOICE_PRODUCTNAME
=
"餐饮类商品"
;
public
static
final
String
INVOICE_TAXRATE
=
"0.06"
;
public
static
final
String
INVOICE_CONTENT
=
"非码订单开票"
;
// 单张发票订单数量限制
public
static
final
Integer
ORDER_INVOICE_NUM_LIMIT
=
30
;
...
...
@@ -41,7 +52,7 @@ public class OrderInvoiceAdapter {
* 校验订单开票数据
* @return
*/
public
static
BaseResponse
checkOrderOpenInvoiceData
(
List
<
OrderBeanV1
>
orders
,
CreateOrderInvoiceRequest
request
){
public
BaseResponse
checkOrderOpenInvoiceData
(
List
<
OrderBeanV1
>
orders
,
CreateOrderInvoiceRequest
request
,
AssortmentCustomerInfoVo
userLoginInfoDto
){
// 【1】 前端传的订单有误,部分订单查不到详情
if
(
orders
.
size
()
!=
request
.
getOrderCodes
().
size
()){
return
ResponseUtil
.
error
(
ResponseResult
.
ORDER_QUERY_ANY_ERR
);
...
...
@@ -51,7 +62,8 @@ public class OrderInvoiceAdapter {
return
ResponseUtil
.
error
(
ResponseResult
.
ORDER_INVOINVE_LIMIT_30
);
}
// 【3】 过滤订单状态&&实付金额是否符合开票原则
List
<
OrderBeanV1
>
orderBeanV1List
=
orders
.
stream
().
filter
(
x
->
canOpenOrderInvoiceStatus
.
contains
(
x
.
getStatus
()))
List
<
OrderBeanV1
>
orderBeanV1List
=
orders
.
stream
()
.
filter
(
x
->
canOpenOrderInvoiceStatus
.
contains
(
x
.
getStatus
()))
.
filter
(
x
->
x
.
getActualPayAmount
()
!=
null
).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
orderBeanV1List
)){
return
ResponseUtil
.
error
(
ResponseResult
.
ORDER_INVOICE_OPEN_ERR
);
...
...
@@ -71,13 +83,28 @@ public class OrderInvoiceAdapter {
if
(
actualPayAmount2yuan
>
CommonsConstant
.
CONSTANTS_ONE_THOUSAND
){
return
ResponseUtil
.
error
(
ResponseResult
.
ACTUALPAYAMOUNT_OUT_OF_ONE_THOUSAND
);
}
// 【7】 单张发票金额最小限制???元,低于最小限制不能开票
// 【7】 查询请求订单号是否开过发票,如果存在订单已开过发票,不予处理
QueryInvoiceByCodesRequest
queryInvoiceByCodesRequest
=
new
QueryInvoiceByCodesRequest
();
queryInvoiceByCodesRequest
.
setPartnerId
(
request
.
getPartnerId
());
queryInvoiceByCodesRequest
.
setOrderCodes
(
request
.
getOrderCodes
());
queryInvoiceByCodesRequest
.
setUserId
(
userLoginInfoDto
.
getMemberId
());
BaseResponse
<
QueryInvoiceByCodesResponse
>
queryInvoiceResponse
=
orderServiceClient
.
queryInvoiceByCodes
(
queryInvoiceByCodesRequest
);
if
(!
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
queryInvoiceResponse
.
getCode
())){
return
ResponseUtil
.
error
(
queryInvoiceResponse
.
getCode
(),
queryInvoiceResponse
.
getMessage
());
}
if
(
null
==
queryInvoiceResponse
.
getResult
()){
return
ResponseUtil
.
error
(
ResponseResult
.
ORDER_INVOICE_QUERY_ERROR
);
}
QueryInvoiceByCodesResponse
orderInvoice
=
queryInvoiceResponse
.
getResult
();
if
(!
orderInvoice
.
getCheckPass
()
||
CollectionUtils
.
isNotEmpty
(
orderInvoice
.
getInvoicedList
())){
return
ResponseUtil
.
error
(
ResponseResult
.
ORDER_INVOICE_IS_OPENED
);
}
return
ResponseUtil
.
success
();
}
public
static
InvoiceCreateRequest
convert2InvoiceCreateRequest
(
List
<
OrderBeanV1
>
orders
,
CreateOrderInvoiceRequest
createRequest
){
public
InvoiceCreateRequest
convert2InvoiceCreateRequest
(
List
<
OrderBeanV1
>
orders
,
CreateOrderInvoiceRequest
createRequest
){
InvoiceCreateRequest
request
=
new
InvoiceCreateRequest
();
request
.
setPartnerId
(
createRequest
.
getPartnerId
());
request
.
setInvoiceTerminalCode
(
CommonsConstant
.
CONSTANTS_TWO_STRING
);
...
...
@@ -116,12 +143,12 @@ public class OrderInvoiceAdapter {
return
request
;
}
public
static
OrderInvoiceRequest
convert2OrderInvoiceRequest
(
InvoiceCreateRequest
invoiceCreateRequest
public
OrderInvoiceRequest
convert2OrderInvoiceRequest
(
InvoiceCreateRequest
invoiceCreateRequest
,
List
<
String
>
orderCodes
,
String
scanUrl
,
String
memberId
){
OrderInvoiceRequest
request
=
new
OrderInvoiceRequest
();
request
.
setPartnerId
(
invoiceCreateRequest
.
getPartnerId
());
request
.
setInvoiceType
(
CommonsConstant
.
CONSTANTS_TWO_INTEGER
);
request
.
setContent
(
"test"
);
// todo
request
.
setContent
(
INVOICE_CONTENT
);
request
.
setAmount
(
invoiceCreateRequest
.
getProductDetailList
().
get
(
0
).
getGoodsTotalPrice
().
multiply
(
new
BigDecimal
(
100
)).
intValue
());
request
.
setInvoiceUrl
(
scanUrl
);
request
.
setUserId
(
memberId
);
...
...
@@ -130,7 +157,11 @@ public class OrderInvoiceAdapter {
return
request
;
}
public
static
void
handleInvoiceData
(
InvoiceCreateResponse
response
){
/**
* 发票格式处理
* @param response
*/
public
void
handleInvoiceData
(
InvoiceCreateResponse
response
){
if
(
null
==
response
||
StringUtils
.
isEmpty
(
response
.
getScanUrl
())){
return
;
}
...
...
order-application-service/src/main/java/cn/freemud/entities/dto/order/QueryInvoiceByCodesResponse.java
0 → 100644
View file @
c40355cb
package
cn
.
freemud
.
entities
.
dto
.
order
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
QueryInvoiceByCodesResponse
{
@ApiModelProperty
(
"true全都未开票,false有开票订单号,默认值false"
)
private
Boolean
checkPass
=
false
;
@ApiModelProperty
(
"未开票订单号"
)
private
List
<
String
>
unInvoicedList
;
@ApiModelProperty
(
"开过票订单号"
)
private
List
<
String
>
invoicedList
;
}
order-application-service/src/main/java/cn/freemud/entities/dto/pay/QueryInvoiceByCodesRequest.java
0 → 100644
View file @
c40355cb
package
cn
.
freemud
.
entities
.
dto
.
pay
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
java.util.List
;
@Data
public
class
QueryInvoiceByCodesRequest
{
@ApiModelProperty
(
"用户Id"
)
@NotBlank
(
message
=
"用户Id不能为空"
)
private
String
userId
;
@ApiModelProperty
(
"商户号"
)
@NotBlank
(
message
=
"商户号不能为空"
)
private
String
partnerId
;
@ApiModelProperty
(
"订单号集合"
)
@NotNull
(
message
=
"订单号集合不能为空"
)
private
List
<
String
>
orderCodes
;
}
order-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
View file @
c40355cb
...
...
@@ -186,6 +186,8 @@ public enum ResponseResult {
ACTUALPAYAMOUNT_IS_ERROR
(
"45079"
,
"实际支付金额有误,不予开票"
,
""
),
ORDER_QUERY_ANY_ERR
(
"45080"
,
"部分订单查询失败"
,
""
),
ORDER_INVOICE_OPEN_ERR
(
"45081"
,
"订单状态不符合开票原则"
,
""
),
ORDER_INVOICE_QUERY_ERROR
(
"45082"
,
"订单发票查询失败"
,
""
),
ORDER_INVOICE_IS_OPENED
(
"45083"
,
"存在选中的订单已开过发票,请重新选择"
,
""
),
/**
* 售后单
...
...
order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
View file @
c40355cb
...
...
@@ -331,6 +331,9 @@ public class OrderServiceImpl implements Orderservice {
@Autowired
private
OrderServiceClient
orderServiceClient
;
@Autowired
OrderInvoiceAdapter
orderInvoiceAdapter
;
@Override
public
BaseResponse
checkBeforeCreateOrder
(
CheckBeforeCreateOrderRequestVo
requestVo
)
{
...
...
@@ -4390,23 +4393,23 @@ public class OrderServiceImpl implements Orderservice {
}
// 【2】. 校验订单开票数据
BaseResponse
checkResponse
=
OrderInvoiceAdapter
.
checkOrderOpenInvoiceData
(
dataBean
.
getOrders
(),
request
);
BaseResponse
checkResponse
=
orderInvoiceAdapter
.
checkOrderOpenInvoiceData
(
dataBean
.
getOrders
(),
request
,
userLoginInfoDto
);
if
(!
Objects
.
equals
(
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
,
checkResponse
.
getCode
()))
{
return
checkResponse
;
}
// 【3】. 调用支付接口开订单发票,非码支付系统内部再调用三方-百望系统开票
InvoiceCreateRequest
invoiceCreateRequest
=
O
rderInvoiceAdapter
.
convert2InvoiceCreateRequest
(
dataBean
.
getOrders
(),
request
);
InvoiceCreateRequest
invoiceCreateRequest
=
o
rderInvoiceAdapter
.
convert2InvoiceCreateRequest
(
dataBean
.
getOrders
(),
request
);
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
InvoiceCreateResponse
>
invoiceResponse
=
paymentNewClient
.
createInvoice
(
invoiceCreateRequest
);
if
(!
Objects
.
equals
(
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
,
invoiceResponse
.
getCode
())
||
null
==
invoiceResponse
.
getData
())
{
return
ResponseUtil
.
error
(
invoiceResponse
.
getCode
(),
invoiceResponse
.
getMessage
());
}
// 【3.1】.发票格式处理
O
rderInvoiceAdapter
.
handleInvoiceData
(
invoiceResponse
.
getData
());
o
rderInvoiceAdapter
.
handleInvoiceData
(
invoiceResponse
.
getData
());
// 【4】. 录入发票记录,修改订单发票状态
OrderInvoiceRequest
orderInvoiceRequest
=
O
rderInvoiceAdapter
.
convert2OrderInvoiceRequest
(
invoiceCreateRequest
,
request
.
getOrderCodes
()
OrderInvoiceRequest
orderInvoiceRequest
=
o
rderInvoiceAdapter
.
convert2OrderInvoiceRequest
(
invoiceCreateRequest
,
request
.
getOrderCodes
()
,
invoiceResponse
.
getData
().
getScanUrl
()
,
userLoginInfoDto
.
getMemberId
());
BaseResponse
orderInvoiceResponse
=
orderServiceClient
.
createInvoice
(
orderInvoiceRequest
);
if
(!
Objects
.
equals
(
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
,
orderInvoiceResponse
.
getCode
()))
{
...
...
order-application-service/src/main/java/cn/freemud/service/thirdparty/OrderServiceClient.java
View file @
c40355cb
...
...
@@ -2,7 +2,9 @@ package cn.freemud.service.thirdparty;
import
cn.freemud.annotations.LogIgnoreFeign
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.entities.dto.order.QueryInvoiceByCodesResponse
;
import
cn.freemud.entities.dto.pay.OrderInvoiceRequest
;
import
cn.freemud.entities.dto.pay.QueryInvoiceByCodesRequest
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.http.MediaType
;
import
org.springframework.web.bind.annotation.PostMapping
;
...
...
@@ -18,4 +20,11 @@ public interface OrderServiceClient {
@LogIgnoreFeign
(
logMessage
=
"createInvoice"
)
@PostMapping
(
"/order/v2/invoice/create"
)
BaseResponse
createInvoice
(
@RequestBody
OrderInvoiceRequest
orderCounts
);
/**
* 查询用户订单号是否已开票
*/
@LogIgnoreFeign
(
logMessage
=
"queryByCodes"
)
@PostMapping
(
"/order/v2/invoice/queryByCodes"
)
BaseResponse
<
QueryInvoiceByCodesResponse
>
queryInvoiceByCodes
(
@RequestBody
QueryInvoiceByCodesRequest
request
);
}
Write
Preview
Markdown
is supported
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