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
2f3ab06b
Commit
2f3ab06b
authored
Jan 03, 2024
by
box
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature/box/券包退款' into develop
parents
1f540623
8c6db0e2
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
484 additions
and
2 deletions
+484
-2
order-application-service/src/main/java/cn/freemud/service/RefundService.java
+36
-0
order-management/src/main/java/cn/freemud/management/entities/dto/request/coupon/CodeInfoQueryDto.java
+70
-0
order-management/src/main/java/cn/freemud/management/entities/dto/response/coupon/CouponBaseResponse.java
+2
-0
order-management/src/main/java/cn/freemud/management/enums/CouponStatus.java
+44
-0
order-management/src/main/java/cn/freemud/management/service/handle/CouponQueryHandle.java
+90
-0
order-management/src/main/java/cn/freemud/management/service/handle/OrderCouponHandle.java
+129
-0
order-management/src/main/java/cn/freemud/management/service/handle/OrderVerifyHandle.java
+4
-2
order-management/src/main/java/cn/freemud/management/service/impl/SaleCouponOrderMangerServiceImpl.java
+0
-0
order-management/src/main/java/cn/freemud/management/thirdparty/CouponOnlineClient.java
+10
-0
order-management/src/main/java/cn/freemud/management/thirdparty/CouponQueryClient.java
+36
-0
order-management/src/main/java/cn/freemud/management/thirdparty/request/coupon/CodeFreezeReq.java
+38
-0
order-management/src/main/java/cn/freemud/management/thirdparty/request/coupon/CodeInfoQueryReq.java
+22
-0
ordercenter-sdk/src/main/java/com/freemud/application/sdk/api/ordercenter/enums/OrderSettlementType.java
+3
-0
No files found.
order-application-service/src/main/java/cn/freemud/service/RefundService.java
View file @
2f3ab06b
...
@@ -5,6 +5,7 @@ import cn.freemud.adapter.OrderCancelReqAdapter;
...
@@ -5,6 +5,7 @@ import cn.freemud.adapter.OrderCancelReqAdapter;
import
cn.freemud.adapter.OrderPrintDtoAdapter
;
import
cn.freemud.adapter.OrderPrintDtoAdapter
;
import
cn.freemud.adapter.OrderTaskReqAdapter
;
import
cn.freemud.adapter.OrderTaskReqAdapter
;
import
cn.freemud.base.util.DateUtil
;
import
cn.freemud.base.util.DateUtil
;
import
cn.freemud.demoTest.enums.TradeBizTypeEnum
;
import
cn.freemud.entities.dto.delivery.QueryFreightRefundSupportedResponse
;
import
cn.freemud.entities.dto.delivery.QueryFreightRefundSupportedResponse
;
import
cn.freemud.entities.dto.delivery.QueryFreightRefundSupportedVo
;
import
cn.freemud.entities.dto.delivery.QueryFreightRefundSupportedVo
;
import
cn.freemud.entities.dto.ecology.SendMessageRequest
;
import
cn.freemud.entities.dto.ecology.SendMessageRequest
;
...
@@ -20,6 +21,8 @@ import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
...
@@ -20,6 +21,8 @@ import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import
cn.freemud.management.entities.dto.response.pay.PayRefundResponse
;
import
cn.freemud.management.entities.dto.response.pay.PayRefundResponse
;
import
cn.freemud.management.enums.AfterSalesRefunStateEnum
;
import
cn.freemud.management.enums.AfterSalesRefunStateEnum
;
import
cn.freemud.management.service.adapter.OrderManagerAdapter
;
import
cn.freemud.management.service.adapter.OrderManagerAdapter
;
import
cn.freemud.management.service.handle.CouponQueryHandle
;
import
cn.freemud.management.service.handle.OrderCouponHandle
;
import
cn.freemud.management.service.handle.OrderVerifyHandle
;
import
cn.freemud.management.service.handle.OrderVerifyHandle
;
import
cn.freemud.management.service.handle.PaymentHandle
;
import
cn.freemud.management.service.handle.PaymentHandle
;
import
cn.freemud.redis.RedisCache
;
import
cn.freemud.redis.RedisCache
;
...
@@ -41,6 +44,7 @@ import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
...
@@ -41,6 +44,7 @@ import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import
com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp
;
import
com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp
;
import
com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSalesOrderResp
;
import
com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSalesOrderResp
;
import
com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs
;
import
com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs
;
import
com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp
;
import
com.freemud.application.sdk.api.ordercenter.response.orderInfo.QueryByCodeResponse
;
import
com.freemud.application.sdk.api.ordercenter.response.orderInfo.QueryByCodeResponse
;
import
com.freemud.application.sdk.api.ordercenter.service.OrderSdkService
;
import
com.freemud.application.sdk.api.ordercenter.service.OrderSdkService
;
import
com.freemud.application.sdk.api.structure.request.PushMessageNoticeDto
;
import
com.freemud.application.sdk.api.structure.request.PushMessageNoticeDto
;
...
@@ -61,6 +65,7 @@ import java.math.BigDecimal;
...
@@ -61,6 +65,7 @@ import java.math.BigDecimal;
import
java.math.RoundingMode
;
import
java.math.RoundingMode
;
import
java.text.MessageFormat
;
import
java.text.MessageFormat
;
import
java.util.*
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
static
cn
.
freemud
.
constant
.
OrderRefundConstant
.
ALLOW_REFUND
;
import
static
cn
.
freemud
.
constant
.
OrderRefundConstant
.
ALLOW_REFUND
;
...
@@ -87,6 +92,8 @@ public class RefundService {
...
@@ -87,6 +92,8 @@ public class RefundService {
private
final
OrderManagerAdapter
orderManagerAdapter
;
private
final
OrderManagerAdapter
orderManagerAdapter
;
private
final
OrderVerifyHandle
orderVerifyHandle
;
private
final
OrderVerifyHandle
orderVerifyHandle
;
private
final
StoreManager
storeManager
;
private
final
StoreManager
storeManager
;
private
final
CouponQueryHandle
couponQueryHandle
;
private
final
OrderCouponHandle
orderCouponHandle
;
private
OrderInfoReqs
preValidRefund
(
String
partnerId
,
String
orderCode
,
Byte
refundMode
)
{
private
OrderInfoReqs
preValidRefund
(
String
partnerId
,
String
orderCode
,
Byte
refundMode
)
{
// 查询订单信息
// 查询订单信息
...
@@ -140,6 +147,11 @@ public class RefundService {
...
@@ -140,6 +147,11 @@ public class RefundService {
if
(!
orderVerifyHandle
.
getRefundConfig
(
order
))
if
(!
orderVerifyHandle
.
getRefundConfig
(
order
))
throw
new
ServiceException
(
"该门店不支持线上退款,请联系门店进行线下处理"
);
throw
new
ServiceException
(
"该门店不支持线上退款,请联系门店进行线下处理"
);
// 如果是买券订单,查询券是否已使用,如果没有使用,冻结券,否则不许退款
if
(
BizTypeEnum
.
SALE_COUPON
.
getBizType
().
equals
(
order
.
getBizType
()))
{
freezeCouponCode
(
partnerId
,
order
);
}
// 退款是否退配送费
// 退款是否退配送费
boolean
refundDeliveryFee
=
isRefundDeliveryFee
(
order
,
refundAmount
);
boolean
refundDeliveryFee
=
isRefundDeliveryFee
(
order
,
refundAmount
);
// 未接单
// 未接单
...
@@ -406,4 +418,28 @@ public class RefundService {
...
@@ -406,4 +418,28 @@ public class RefundService {
ErrorLog
.
errorConvertJson
(
this
.
getClass
(),
"打印退款小票异常"
,
e
);
ErrorLog
.
errorConvertJson
(
this
.
getClass
(),
"打印退款小票异常"
,
e
);
}
}
}
}
/**
* 校验券状态,如果没有核销则冻结券,否则抛异常
* <pre></pre>
* @param partnerId
* @param orderInfo
* @throws ServiceException
*/
private
void
freezeCouponCode
(
String
partnerId
,
OrderInfoReqs
orderInfo
)
{
List
<
String
>
couponCodes
=
Optional
.
ofNullable
(
orderInfo
.
getOrderSettlementDetailList
()).
orElse
(
new
ArrayList
<>()).
stream
()
.
filter
(
dto
->
Objects
.
equals
(
OrderSettlementType
.
SEND_COUPON
.
getIndex
(),
dto
.
getSettlementType
())
&&
StringUtils
.
isNotBlank
(
dto
.
getExternalObjectId
()))
.
map
(
OrderSettlementResp:
:
getExternalObjectId
)
.
collect
(
Collectors
.
toList
());
boolean
couponUsed
=
couponQueryHandle
.
isCouponUsed
(
partnerId
,
couponCodes
);
if
(
couponUsed
)
{
throw
new
ServiceException
(
"识别到您已使用过该券包中的部分或全部券,故不支持退款。"
);
}
// 冻结券
boolean
freeze
=
orderCouponHandle
.
freezeCodes
(
partnerId
,
orderInfo
.
getUserId
(),
couponCodes
,
"买券订单退款"
);
if
(!
freeze
)
{
throw
new
ServiceException
(
"优惠券校验失败,请稍后再试!"
);
}
}
}
}
order-management/src/main/java/cn/freemud/management/entities/dto/request/coupon/CodeInfoQueryDto.java
0 → 100644
View file @
2f3ab06b
package
cn
.
freemud
.
management
.
entities
.
dto
.
request
.
coupon
;
import
lombok.Data
;
import
org.springframework.lang.Nullable
;
/**
* © All rights Reserved, Designed By www.freemud.cn
*
* @author wénkǎi.zhāng 2023-05-30
* @since 1.0
*/
@Data
public
class
CodeInfoQueryDto
{
/**
* 券名称
*/
private
String
name
;
/**
* 券号,目前最长23个字符
*/
private
String
code
;
/**
* 券Logo
*/
private
String
logo
;
/**
* 券类型
*/
private
Integer
type
;
/**
* 券状态:0可用,1已核销,2部分核销
*/
private
Integer
state
;
/**
* 当前剩余可用次数
*/
private
Integer
leftAvailableTimes
;
/**
* 最大剩余可用次数
*/
private
Integer
maxLeftAvailableTimes
;
/**
* 优惠券使用限制相关配置
*/
private
CouponCodeUseRuleModel
couponUseRule
;
@Data
public
static
class
CouponCodeUseRuleModel
{
/**
* 最大可核销次数,大于1时为频次券, 默认1次
*/
private
int
maxRedeemTimes
=
1
;
/**
* 核销次数限制类型对应的可核销次数,频次券时有效,默认null不限
*/
@Nullable
private
Integer
limitedRedeemTimes
;
}
}
order-management/src/main/java/cn/freemud/management/entities/dto/response/coupon/CouponBaseResponse.java
View file @
2f3ab06b
package
cn
.
freemud
.
management
.
entities
.
dto
.
response
.
coupon
;
package
cn
.
freemud
.
management
.
entities
.
dto
.
response
.
coupon
;
import
com.fasterxml.jackson.annotation.JsonAlias
;
import
lombok.Data
;
import
lombok.Data
;
/**
/**
...
@@ -17,6 +18,7 @@ public class CouponBaseResponse<T> {
...
@@ -17,6 +18,7 @@ public class CouponBaseResponse<T> {
*/
*/
private
String
msg
;
private
String
msg
;
@JsonAlias
(
"data"
)
private
T
result
;
private
T
result
;
}
}
order-management/src/main/java/cn/freemud/management/enums/CouponStatus.java
0 → 100644
View file @
2f3ab06b
package
cn
.
freemud
.
management
.
enums
;
public
enum
CouponStatus
{
STATUS
(-
1
,
"未激活"
),
STATUS_0
(
0
,
"可用"
),
STATUS_1
(
1
,
"已使用"
),
STATUS_2
(
2
,
"部分使用"
),
STATUS_3
(
3
,
"取消"
),
STATUS_6
(
6
,
"已过期"
),
;
private
Integer
code
;
private
String
desc
;
CouponStatus
(
Integer
code
,
String
desc
)
{
this
.
code
=
code
;
this
.
desc
=
desc
;
}
public
static
CouponStatus
getByCode
(
Integer
code
)
{
for
(
CouponStatus
payType
:
values
())
{
if
(
payType
.
getCode
().
equals
(
code
))
{
return
payType
;
}
}
return
null
;
}
public
Integer
getCode
()
{
return
code
;
}
public
void
setCode
(
Integer
code
)
{
this
.
code
=
code
;
}
public
String
getDesc
()
{
return
desc
;
}
public
void
setDesc
(
String
desc
)
{
this
.
desc
=
desc
;
}
}
order-management/src/main/java/cn/freemud/management/service/handle/CouponQueryHandle.java
0 → 100644
View file @
2f3ab06b
package
cn
.
freemud
.
management
.
service
.
handle
;
import
cn.freemud.management.entities.dto.request.coupon.CodeInfoQueryDto
;
import
cn.freemud.management.entities.dto.response.coupon.CouponBaseResponse
;
import
cn.freemud.management.enums.CouponStatus
;
import
cn.freemud.management.thirdparty.CouponQueryClient
;
import
cn.freemud.management.thirdparty.request.coupon.CodeInfoQueryReq
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.application.sdk.api.log.ApiLog
;
import
com.google.common.collect.Lists
;
import
lombok.RequiredArgsConstructor
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.stereotype.Component
;
import
java.util.*
;
/**
* © All rights Reserved
*
* @author wénkǎi.zhāng 2024-01-02
* @since 1.0
*/
@Component
@RequiredArgsConstructor
public
class
CouponQueryHandle
{
private
final
CouponQueryClient
couponQueryClient
;
private
final
int
SUCCESS_CODE
=
100
;
/**
* 查询券信息
* <pre>
* 1. 本方法会忽略查询失败的券,因此可能传入的券号不一定都能在返回列表中找到与之对应的券信息
* 2. 同时,本方法会对入参中的codes去重,券码接口对已归档的券也不会返回,基于本条和上一条,
* 应注意传入集合的size可能和返回列表的size不同,也许是正常现象
* 3. 本方法不保证返回的券信息顺序和入参的券号顺序相同
* </pre>
* @param partnerId
* @param codes 券号列表,支持 非码券/微信商家券/支付宝商家券
* @return 对券号列表去重后,成功查到的券信息列表
*/
public
List
<
CodeInfoQueryDto
>
queryCodesInfo
(
String
partnerId
,
Collection
<
String
>
codes
)
{
List
<
CodeInfoQueryDto
>
result
=
new
ArrayList
<>();
CodeInfoQueryReq
request
=
new
CodeInfoQueryReq
();
request
.
setPartnerId
(
partnerId
);
// 券码接口最大支持每次10个券号
Lists
.
partition
(
new
ArrayList
<>(
new
HashSet
<>(
codes
)),
10
).
forEach
(
subList
->
{
// 注意:如果改成并发调用,这里不能直接复用request
request
.
setCodes
(
subList
);
try
{
CouponBaseResponse
<
List
<
CodeInfoQueryDto
>>
resp
=
couponQueryClient
.
queryCodesInfo
(
request
);
if
(!
Objects
.
equals
(
SUCCESS_CODE
,
resp
.
getStatusCode
())
||
CollectionUtils
.
isEmpty
(
resp
.
getResult
()))
{
ApiLog
.
warnMessage
(
"优惠券信息查询失败:{} {}"
,
JSONObject
.
toJSONString
(
request
),
JSONObject
.
toJSONString
(
resp
));
return
;
}
result
.
addAll
(
resp
.
getResult
());
}
catch
(
Throwable
e
)
{
ApiLog
.
warnMessage
(
"优惠券信息查询异常:{} {}"
,
e
.
getMessage
(),
JSONObject
.
toJSONString
(
request
));
}
});
return
result
;
}
/**
* 指定一组券号,判断这些券号中是否存在已使用的券
* <pre></pre>
* @param partnerId
* @param couponCodes
* @return 如果有一张或多张券没查到、或已使用、或已部分使用、或已锁定,返回true
*/
public
boolean
isCouponUsed
(
String
partnerId
,
Collection
<
String
>
couponCodes
)
{
boolean
used
;
List
<
CodeInfoQueryDto
>
codeInfoQueryDtos
=
this
.
queryCodesInfo
(
partnerId
,
couponCodes
);
// 以下条件任意一个成立,说明券已使用:
// 1. 返回的数量和查询的不一致
// 2. 存在已使用或者部分使用的券状态
// 3. 存在锁定的券(剩余核销次数!=总核销次数)
used
=
couponCodes
.
size
()
!=
codeInfoQueryDtos
.
size
()
||
codeInfoQueryDtos
.
stream
().
anyMatch
(
o
->
{
return
CouponStatus
.
STATUS_1
.
getCode
().
equals
(
o
.
getState
())
||
CouponStatus
.
STATUS_2
.
getCode
().
equals
(
o
.
getState
())
||
!
Objects
.
equals
(
o
.
getMaxLeftAvailableTimes
(),
o
.
getCouponUseRule
().
getMaxRedeemTimes
());
});
return
used
;
}
}
order-management/src/main/java/cn/freemud/management/service/handle/OrderCouponHandle.java
0 → 100644
View file @
2f3ab06b
package
cn
.
freemud
.
management
.
service
.
handle
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.management.entities.dto.request.order.OrderManagerRequest
;
import
cn.freemud.management.entities.dto.response.coupon.CouponBaseResponse
;
import
cn.freemud.management.enums.ResponseResult
;
import
cn.freemud.management.thirdparty.CouponOnlineClient
;
import
cn.freemud.management.thirdparty.request.coupon.BatchCouponDiscardReq
;
import
cn.freemud.management.thirdparty.request.coupon.CodeFreezeReq
;
import
cn.freemud.management.thirdparty.request.coupon.CouponUnFreezeReq
;
import
cn.freemud.management.util.ResponseUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.application.sdk.api.log.ApiLog
;
import
com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1
;
import
com.freemud.application.sdk.api.ordercenter.enums.BizTypeEnum
;
import
com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp
;
import
lombok.RequiredArgsConstructor
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* © All rights Reserved
*
* @author wénkǎi.zhāng 2024-01-02
* @since 1.0
*/
@Component
@RequiredArgsConstructor
public
class
OrderCouponHandle
{
@Value
(
"${coupon.partner.id:1983}"
)
private
String
couponPartnerId
;
private
final
CouponQueryHandle
couponQueryHandle
;
private
final
CouponOnlineClient
couponOnlineClient
;
public
BaseResponse
discardOrderCoupon
(
String
partnerId
,
OrderBeanV1
orderBean
)
{
if
(
BizTypeEnum
.
SALE_COUPON
.
getBizType
().
equals
(
orderBean
.
getBizType
()))
{
List
<
String
>
couponCodes
=
Optional
.
ofNullable
(
orderBean
.
getOrderSettlementDetailList
()).
orElse
(
new
ArrayList
<>()).
stream
()
// 216 = 买券订单的券信息
.
filter
(
dto
->
Objects
.
equals
(
216
,
dto
.
getSettlementType
())
&&
StringUtils
.
isNotBlank
(
dto
.
getExternalObjectId
()))
.
map
(
OrderSettlementResp:
:
getExternalObjectId
)
.
collect
(
Collectors
.
toList
());
if
(
couponCodes
.
isEmpty
())
{
return
ResponseUtil
.
error
(
ResponseResult
.
SYSTEM_ERROR
.
getCode
(),
"订单中优惠券数据为空。"
);
}
// // 校验券状态是否已被使用
// if (couponQueryHandle.isCouponUsed(partnerId, couponCodes)) {
// return ResponseUtil.error(ResponseResult.SYSTEM_ERROR.getCode(), "作废优惠券失败,部分券已被使用。");
// }
BatchCouponDiscardReq
discardReq
=
new
BatchCouponDiscardReq
();
discardReq
.
setCoupons
(
couponCodes
.
stream
().
map
(
code
->
{
return
new
BatchCouponDiscardReq
.
CouponInfo
(){{
setCode
(
code
);
setMemberId
(
orderBean
.
getUserId
());
}};
}).
collect
(
Collectors
.
toList
()));
discardReq
.
setPartnerId
(
partnerId
);
discardReq
.
setProviderId
(
couponPartnerId
);
discardReq
.
setCancelReason
(
"券包订单退款"
);
CouponBaseResponse
<
Object
>
discardResp
=
couponOnlineClient
.
batchDiscard
(
discardReq
);
if
(!
Objects
.
equals
(
discardResp
.
getStatusCode
(),
100
))
{
return
ResponseUtil
.
error
(
ResponseResult
.
SYSTEM_ERROR
.
getCode
(),
"作废优惠券失败"
);
}
}
return
ResponseUtil
.
success
();
}
/**
* 冻结券
* <pre></pre>
* @param partnerId
* @param memberId
* @param codes 注意所有券号尾号必须相同
* @param reason
* @return
*/
public
boolean
freezeCodes
(
String
partnerId
,
String
memberId
,
Collection
<
String
>
codes
,
String
reason
)
{
CodeFreezeReq
req
=
new
CodeFreezeReq
();
req
.
setPartnerId
(
partnerId
);
req
.
setReason
(
reason
);
req
.
setCoupons
(
codes
.
stream
().
map
(
code
->
{
return
new
CodeFreezeReq
.
CouponInfo
(){{
setCode
(
code
);
setMemberId
(
memberId
);
}};
}).
collect
(
Collectors
.
toList
()));
CouponBaseResponse
<
Object
>
freeze
=
couponOnlineClient
.
freeze
(
req
);
return
Objects
.
equals
(
freeze
.
getStatusCode
(),
100
);
}
/**
* 解冻券
* <pre></pre>
* @param partnerId
* @param orderBean
*/
public
void
unfreezeOrderCoupon
(
String
partnerId
,
OrderBeanV1
orderBean
)
{
if
(
BizTypeEnum
.
SALE_COUPON
.
getBizType
().
equals
(
orderBean
.
getBizType
()))
{
List
<
String
>
couponCodes
=
Optional
.
ofNullable
(
orderBean
.
getOrderSettlementDetailList
()).
orElse
(
new
ArrayList
<>()).
stream
()
// 216 = 买券订单的券信息
.
filter
(
dto
->
Objects
.
equals
(
216
,
dto
.
getSettlementType
())
&&
StringUtils
.
isNotBlank
(
dto
.
getExternalObjectId
()))
.
map
(
OrderSettlementResp:
:
getExternalObjectId
)
.
collect
(
Collectors
.
toList
());
if
(!
couponCodes
.
isEmpty
())
{
CouponUnFreezeReq
unFreezeReq
=
new
CouponUnFreezeReq
();
unFreezeReq
.
setCoupons
(
couponCodes
.
stream
().
map
(
code
->
{
return
new
CouponUnFreezeReq
.
CouponInfo
(){{
setCode
(
code
);
setMemberId
(
orderBean
.
getUserId
());
}};
}).
collect
(
Collectors
.
toList
()));
unFreezeReq
.
setPartnerId
(
partnerId
);
CouponBaseResponse
<
Object
>
unfreezeResp
=
couponOnlineClient
.
unfreeze
(
unFreezeReq
);
if
(!
Objects
.
equals
(
unfreezeResp
.
getStatusCode
(),
100
))
{
ApiLog
.
warnMessage
(
"refundReject 解冻券失败:{}"
,
JSONObject
.
toJSONString
(
unfreezeResp
));
}
}
}
}
}
order-management/src/main/java/cn/freemud/management/service/handle/OrderVerifyHandle.java
View file @
2f3ab06b
...
@@ -560,6 +560,9 @@ public class OrderVerifyHandle {
...
@@ -560,6 +560,9 @@ public class OrderVerifyHandle {
// 除 未支付 拒单 和 取消外,其他可退款
// 除 未支付 拒单 和 取消外,其他可退款
return
Stream
.
of
(
NewOrderStatus
.
PENDING_PAYMENT
,
NewOrderStatus
.
CLOSED
)
return
Stream
.
of
(
NewOrderStatus
.
PENDING_PAYMENT
,
NewOrderStatus
.
CLOSED
)
.
noneMatch
(
s
->
Objects
.
equals
(
order
.
getOrderState
(),
s
.
getIndex
()));
.
noneMatch
(
s
->
Objects
.
equals
(
order
.
getOrderState
(),
s
.
getIndex
()));
}
else
if
(
BizTypeEnum
.
SALE_COUPON
.
getBizType
().
equals
(
order
.
getBizType
()))
{
// 买券订单判断,买券订单不受配置限制
return
true
;
}
}
OrderExtInfoDto
extInfo
=
JSON
.
parseObject
(
order
.
getExtInfo
(),
OrderExtInfoDto
.
class
);
OrderExtInfoDto
extInfo
=
JSON
.
parseObject
(
order
.
getExtInfo
(),
OrderExtInfoDto
.
class
);
// 查询小程序配置的退款设置
// 查询小程序配置的退款设置
...
@@ -679,4 +682,4 @@ public class OrderVerifyHandle {
...
@@ -679,4 +682,4 @@ public class OrderVerifyHandle {
return
ResponseUtil
.
success
();
return
ResponseUtil
.
success
();
}
}
}
}
\ No newline at end of file
order-management/src/main/java/cn/freemud/management/service/impl/SaleCouponOrderMangerServiceImpl.java
View file @
2f3ab06b
This diff is collapsed.
Click to expand it.
order-management/src/main/java/cn/freemud/management/thirdparty/CouponOnlineClient.java
View file @
2f3ab06b
...
@@ -2,6 +2,7 @@ package cn.freemud.management.thirdparty;
...
@@ -2,6 +2,7 @@ package cn.freemud.management.thirdparty;
import
cn.freemud.management.entities.dto.response.coupon.CouponBaseResponse
;
import
cn.freemud.management.entities.dto.response.coupon.CouponBaseResponse
;
import
cn.freemud.management.thirdparty.request.coupon.BatchCouponDiscardReq
;
import
cn.freemud.management.thirdparty.request.coupon.BatchCouponDiscardReq
;
import
cn.freemud.management.thirdparty.request.coupon.CodeFreezeReq
;
import
cn.freemud.management.thirdparty.request.coupon.CouponUnFreezeReq
;
import
cn.freemud.management.thirdparty.request.coupon.CouponUnFreezeReq
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
...
@@ -21,6 +22,15 @@ public interface CouponOnlineClient {
...
@@ -21,6 +22,15 @@ public interface CouponOnlineClient {
CouponBaseResponse
<
Object
>
batchDiscard
(
BatchCouponDiscardReq
req
);
CouponBaseResponse
<
Object
>
batchDiscard
(
BatchCouponDiscardReq
req
);
/**
/**
* 冻结券,注意该接口入参券号尾号必须相同,券数量最多20
* <pre></pre>
* @param req
* @return
*/
@PostMapping
(
"/coupon/standard/ops/freeze"
)
CouponBaseResponse
<
Object
>
freeze
(
CodeFreezeReq
req
);
/**
* 解冻券,请求券号列表中,所有券号尾号必须一样
* 解冻券,请求券号列表中,所有券号尾号必须一样
* <pre></pre>
* <pre></pre>
* @param req
* @param req
...
...
order-management/src/main/java/cn/freemud/management/thirdparty/CouponQueryClient.java
0 → 100644
View file @
2f3ab06b
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: CouponQueryClient
* @Package cn.freemud.service.thirdparty
* @Description:
* @author: song.cai
* @date: 2019/2/20 16:42
* @version V1.0
* @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package
cn
.
freemud
.
management
.
thirdparty
;
import
cn.freemud.management.entities.dto.request.coupon.CodeInfoQueryDto
;
import
cn.freemud.management.entities.dto.response.coupon.CouponBaseResponse
;
import
cn.freemud.management.thirdparty.request.coupon.CodeInfoQueryReq
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
java.util.List
;
@FeignClient
(
name
=
"OPEN-STORE-COUPON-QUERY-SERVICE"
,
url
=
"${saas.coupon-query-service.feign.url:}"
)
@RequestMapping
(
produces
=
{
"application/json;charset=UTF-8"
})
public
interface
CouponQueryClient
{
/**
* 查询券信息
* <pre></pre>
* @param request
* @return
*/
@PostMapping
(
"coupon/query/info"
)
CouponBaseResponse
<
List
<
CodeInfoQueryDto
>>
queryCodesInfo
(
CodeInfoQueryReq
request
);
}
order-management/src/main/java/cn/freemud/management/thirdparty/request/coupon/CodeFreezeReq.java
0 → 100644
View file @
2f3ab06b
package
cn
.
freemud
.
management
.
thirdparty
.
request
.
coupon
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.Valid
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.Size
;
import
java.util.List
;
/**
* © All rights Reserved
*
* @author wénkǎi.zhāng 2023-12-27
* @since 1.0
*/
@Data
public
class
CodeFreezeReq
{
@Size
(
min
=
1
,
max
=
20
,
message
=
"操作的券信息不能为空且最多支持20张"
)
private
List
<
CouponInfo
>
coupons
;
@NotBlank
(
message
=
"商户编号不能为空"
)
private
String
partnerId
;
@ApiModelProperty
(
"冻结原因。默认储值卡退款"
)
private
String
reason
;
@Valid
@Data
public
static
class
CouponInfo
{
private
String
memberId
;
@NotBlank
(
message
=
"券号不能为空"
)
private
String
code
;
}
}
order-management/src/main/java/cn/freemud/management/thirdparty/request/coupon/CodeInfoQueryReq.java
0 → 100644
View file @
2f3ab06b
package
cn
.
freemud
.
management
.
thirdparty
.
request
.
coupon
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.List
;
/**
* © All rights Reserved, Designed By www.freemud.cn
*
* @author wénkǎi.zhāng 2023-05-30
* @since 1.0
*/
@Data
public
class
CodeInfoQueryReq
{
@ApiModelProperty
(
value
=
"商户号"
,
required
=
true
,
example
=
"1864"
)
private
String
partnerId
;
@ApiModelProperty
(
value
=
"券号列表,最多支持10张券,支持 非码券/微信商家券/支付宝商家券"
,
required
=
true
,
example
=
"[\"88600000001823678618\",\"88600000001823679226\"]"
)
private
List
<
String
>
codes
;
}
ordercenter-sdk/src/main/java/com/freemud/application/sdk/api/ordercenter/enums/OrderSettlementType.java
View file @
2f3ab06b
...
@@ -49,6 +49,9 @@ public enum OrderSettlementType {
...
@@ -49,6 +49,9 @@ public enum OrderSettlementType {
//待调整
//待调整
ONE_BY_ONE
(
207
,
"买一送一"
),
ONE_BY_ONE
(
207
,
"买一送一"
),
DISCOUNT_COUPON
(
208
,
"折扣券"
),
DISCOUNT_COUPON
(
208
,
"折扣券"
),
SEND_COUPON
(
216
,
"购买券包发的优惠券"
),
FULL_DISTRIBUTION_FEE
(
1014
,
"满减配送费"
),
FULL_DISTRIBUTION_FEE
(
1014
,
"满减配送费"
),
;
;
...
...
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