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
4348cad9
Commit
4348cad9
authored
Aug 23, 2021
by
ping.wu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
积分商品
parent
7c3d7528
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
417 additions
and
21 deletions
+417
-21
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/order/BaseCreateOrderRequest.java
+2
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/service/OrderCenterSdkService.java
+4
-1
order-application-service/src/main/java/cn/freemud/adapter/OrderAdapter.java
+3
-1
order-application-service/src/main/java/cn/freemud/service/business/OrderBusinessService.java
+6
-0
order-application-service/src/main/java/cn/freemud/service/business/impl/OrderBusinessServiceImpl.java
+399
-16
order-application-service/src/main/java/cn/freemud/service/impl/MallOrderServiceImpl.java
+1
-1
order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
+2
-2
No files found.
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/order/BaseCreateOrderRequest.java
View file @
4348cad9
...
...
@@ -117,6 +117,8 @@ public class BaseCreateOrderRequest extends BaseConfig {
* 实付金额
*/
private
Long
amount
;
private
Long
totalScore
;
//桌号
private
String
barCounter
;
/**
...
...
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/service/OrderCenterSdkService.java
View file @
4348cad9
...
...
@@ -15,11 +15,13 @@ public interface OrderCenterSdkService {
*
* @return
*/
public
CreateOrderResponse
createOrderFlow
(
CreateOrderRequest
createOrderRequest
);
@Deprecated
CreateOrderResponse
createOrderFlow
(
CreateOrderRequest
createOrderRequest
);
/**
* 创建父子订单
*/
@Deprecated
CreateFatherSonOrderResponse
createFatherSonOrder
(
CreateFatherSonOrderRequest
createFatherSonOrderRequest
);
CreateOrderResponse
createOrder
(
BaseCreateOrderRequest
baseCreateOrderRequest
);
...
...
@@ -27,6 +29,7 @@ public interface OrderCenterSdkService {
/**
* 订单支付确认 C端
*/
@Deprecated
PayAccessResponse
payAccess
(
ConfirmOrderRequest
confirmOrderRequest
);
/**
...
...
order-application-service/src/main/java/cn/freemud/adapter/OrderAdapter.java
View file @
4348cad9
...
...
@@ -176,7 +176,6 @@ public class OrderAdapter {
* @return
*/
public
BaseCreateOrderRequest
convent2CreateOrderDto
(
CreateOrderVo
createOrderVo
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
,
StoreResponse
.
BizVO
storeResponseDto
)
{
// UserDeliveryInfoDto deliveryInfoDto = createOrderVo.getUserDeliveryInfoDto();
BaseCreateOrderRequest
createOrderDto
=
getCreateOrderDto
(
createOrderVo
);
ArrayList
<
CreateOrderAccountRequest
>
orderAccountDtos
=
new
ArrayList
<>();
long
deliveryAmount
=
0
;
...
...
@@ -205,6 +204,9 @@ public class OrderAdapter {
discountDeliveryAmount
=
shoppingCartGoodsDto
.
getDeliveryAmount
()
==
null
?
0
:
shoppingCartGoodsDto
.
getDeliveryAmount
();
}
Long
packageAmount
=
shoppingCartGoodsDto
.
getPackageAmount
()
==
null
?
0L
:
shoppingCartGoodsDto
.
getPackageAmount
();
Long
totalScore
=
shoppingCartGoodsDto
.
getTotalScore
()
==
null
?
0L
:
shoppingCartGoodsDto
.
getTotalScore
();
createOrderDto
.
setTotalScore
(
totalScore
);
AppLogUtil
.
infoLog
(
"fisherman 计算discountDeliveryAmount 的操作 end"
,
deliveryAmount
,
discountDeliveryAmount
);
//商城实付无需加上配送费用和包装费
if
(
createOrderVo
.
getMenuType
().
equals
(
BusinessTypeEnum
.
SAAS_MALL
.
getCode
()))
{
...
...
order-application-service/src/main/java/cn/freemud/service/business/OrderBusinessService.java
View file @
4348cad9
...
...
@@ -2,6 +2,8 @@ package cn.freemud.service.business;
import
com.freemud.application.sdk.api.ordercenter.request.PaySuccessReq
;
import
com.freemud.sdk.api.assortment.order.request.order.ConfirmOrderRequest
;
import
com.freemud.sdk.api.assortment.order.request.order.CreateOrderRequest
;
import
com.freemud.sdk.api.assortment.order.response.order.CreateOrderResponse
;
import
com.freemud.sdk.api.assortment.order.response.order.PayAccessResponse
;
/**
...
...
@@ -14,4 +16,8 @@ public interface OrderBusinessService {
PayAccessResponse
payAccess
(
ConfirmOrderRequest
confirmOrderRequest
);
Integer
getPaySuccessTimeout
(
ConfirmOrderRequest
confirmOrderRequest
,
PaySuccessReq
request
);
CreateOrderResponse
createOrderFlow
(
CreateOrderRequest
createOrderRequest
);
}
order-application-service/src/main/java/cn/freemud/service/business/impl/OrderBusinessServiceImpl.java
View file @
4348cad9
package
cn
.
freemud
.
service
.
business
.
impl
;
import
cn.freemud.amqp.Header
;
import
cn.freemud.amqp.MQAction
;
import
cn.freemud.amqp.MQMessage
;
import
cn.freemud.amqp.MQService
;
import
cn.freemud.base.util.DateUtil
;
import
cn.freemud.entities.dto.GetMemberExtendInfoRequestDto
;
import
cn.freemud.entities.dto.GetMemberExtendInfoResponseDto
;
import
cn.freemud.service.business.OrderBusinessService
;
...
...
@@ -7,36 +12,56 @@ import cn.freemud.service.thirdparty.CustomerClient;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.application.sdk.api.base.BaseResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.request.CouponRequest
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponLockResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.service.OfflineCouponSdkService
;
import
com.freemud.application.sdk.api.log.ErrorLog
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.log.ThirdPartyLog
;
import
com.freemud.application.sdk.api.membercenter.request.GetMemberExtendInfoRequest
;
import
com.freemud.application.sdk.api.membercenter.request.UserScoreRequest
;
import
com.freemud.application.sdk.api.membercenter.response.GetMemberExtendInfoResponse
;
import
com.freemud.application.sdk.api.membercenter.service.MemberScoreService
;
import
com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType
;
import
com.freemud.application.sdk.api.ordercenter.enums.OrderSettlementType
;
import
com.freemud.application.sdk.api.ordercenter.request.OrderCancelReq
;
import
com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto
;
import
com.freemud.application.sdk.api.ordercenter.request.PaySuccessReq
;
import
com.freemud.application.sdk.api.ordercenter.request.create.OrderSettlementCreateReq
;
import
com.freemud.application.sdk.api.ordercenter.request.create.OrderTaskReq
;
import
com.freemud.application.sdk.api.ordercenter.response.PaySuccessResp
;
import
com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs
;
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.promotioncenter.request.promotion.ActivityUpdateStockRequest
;
import
com.freemud.application.sdk.api.promotioncenter.service.PromotionSdkService
;
import
com.freemud.application.sdk.api.stockapi.request.UpdateStocksRequest
;
import
com.freemud.application.sdk.api.stockapi.service.StockSdkService
;
import
com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest
;
import
com.freemud.application.sdk.api.storecenter.request.vo.GetOrgTreeListRequest
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
import
com.freemud.application.sdk.api.storecenter.response.vo.GetOrgTreeListResponse
;
import
com.freemud.application.sdk.api.storecenter.service.StoreCenterService
;
import
com.freemud.sdk.api.assortment.order.adapter.OrderSdkAdapter
;
import
com.freemud.sdk.api.assortment.order.
enums.OldOrderAccountType
;
import
com.freemud.sdk.api.assortment.order.
enums.OldOrderType
;
import
com.freemud.sdk.api.assortment.order.enums.
PaySuccessTimeoutEnum
;
import
com.freemud.sdk.api.assortment.order.request.order.
ConfirmOrderRequest
;
import
com.freemud.sdk.api.assortment.order.response.order.
PayAccessResponse
;
import
com.freemud.sdk.api.assortment.order.
response.order.QueryOrderByIdResponse
;
import
com.freemud.sdk.api.assortment.order.
constant.CommonConstant
;
import
com.freemud.sdk.api.assortment.order.
domain.ResponseCodeConstant
;
import
com.freemud.sdk.api.assortment.order.enums.
*
;
import
com.freemud.sdk.api.assortment.order.request.order.
*
;
import
com.freemud.sdk.api.assortment.order.response.order.
*
;
import
com.freemud.sdk.api.assortment.order.
util.AssortOrderLogUtil
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.ObjectUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
java.util.
ArrayList
;
import
java.util.
List
;
import
java.util.
*
;
import
java.util.
stream.Collectors
;
import
static
com
.
freemud
.
application
.
sdk
.
api
.
membercenter
.
constant
.
InterfaceAddressConstant
.
MEMBER_EXTEND_INFO
;
import
static
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
domain
.
ResponseCodeConstant
.
RESPONSE_SUCCESS
;
import
static
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
domain
.
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
;
/**
* @ClassName: OrderBusinessServiceImpl
...
...
@@ -55,6 +80,28 @@ public class OrderBusinessServiceImpl implements OrderBusinessService {
private
OrderSdkService
orderSdkService
;
@Autowired
private
CustomerClient
customerClient
;
@Autowired
private
StockSdkService
stockSdkService
;
@Autowired
private
PromotionSdkService
promotionSdkService
;
@Autowired
private
MemberScoreService
memberScoreService
;
@Autowired
private
OfflineCouponSdkService
offlineCouponSdkService
;
@Autowired
private
MQService
mqService
;
@Value
(
"${version.upgrade.weekDay:}"
)
private
List
<
Integer
>
weekDay
;
/**
* 规避 发版时间配置的双虎
*/
@Value
(
"${avoid.version.upgrade.config:}"
)
private
String
avoidVersionUpgradeConfig
;
@Override
public
PayAccessResponse
payAccess
(
ConfirmOrderRequest
confirmOrderRequest
)
{
...
...
@@ -129,14 +176,6 @@ public class OrderBusinessServiceImpl implements OrderBusinessService {
return
orderSdkAdapter
.
convent2PayAccessResponse
(
response
);
}
public
static
void
main
(
String
[]
args
)
{
BaseResponse
<
GetMemberExtendInfoResponseDto
>
extendInfo
=
new
BaseResponse
<>()
;
extendInfo
.
setData
(
new
GetMemberExtendInfoResponseDto
());
System
.
out
.
println
(
extendInfo
.
getData
().
getMemberGrade
()
!=
null
?
extendInfo
.
getData
().
getMemberGrade
().
getRuleName
():
""
);
}
@Override
public
Integer
getPaySuccessTimeout
(
ConfirmOrderRequest
confirmOrderRequest
,
PaySuccessReq
request
)
{
// 合阔pos 商户未接单退款超时时间
...
...
@@ -175,10 +214,354 @@ public class OrderBusinessServiceImpl implements OrderBusinessService {
return
timeout
;
}
@Override
public
CreateOrderResponse
createOrderFlow
(
CreateOrderRequest
config
)
{
com
.
freemud
.
application
.
sdk
.
api
.
ordercenter
.
request
.
create
.
CreateOrderRequest
request
=
orderSdkAdapter
.
convent2NEWCreateOrderRequest
(
config
.
getBaseCreateOrderRequest
());
// AssortOrderLogUtil.info("fisherman 请求基础服务,最终构建 04",config!=null?JSON.toJSONString(config):null);
com
.
freemud
.
application
.
sdk
.
api
.
ordercenter
.
response
.
BaseResponse
<
OrderInfoReqs
>
order
=
orderSdkService
.
createOrder
(
request
,
config
.
getTrackingNo
());
CreateOrderResponse
createOrderResponse
=
orderSdkAdapter
.
convent2NEWOrderInfoReqs
(
order
);
if
(!
RESPONSE_SUCCESS
.
equals
(
createOrderResponse
.
getErrcode
())
||
createOrderResponse
.
getData
()
==
null
)
{
return
getCreateOrderResponse
(
createOrderResponse
.
getErrcode
().
toString
(),
createOrderResponse
.
getErrmsg
(),
null
);
}
//更新库存等信息
BaseOrderResponse
baseOrderResponse
=
updateStockAndScore
(
createOrderResponse
.
getData
(),
config
.
getBaseCreateOrderRequest
().
getProducts
(),
config
.
getBaseCreateOrderRequest
().
getActivityUpdateStockRequest
(),
config
.
getBaseCreateOrderRequest
().
getAccounts
(),
config
.
getMqMessageRequest
(),
config
.
getBaseCreateOrderRequest
().
getMenuType
(),
config
.
getOpenId
(),
config
.
getBaseCreateOrderRequest
().
getTotalScore
());
if
(!
RESPONSE_SUCCESS
.
equals
(
baseOrderResponse
.
getErrcode
()))
{
return
getCreateOrderResponse
(
baseOrderResponse
.
getErrcode
().
toString
(),
baseOrderResponse
.
getErrmsg
(),
null
);
}
return
createOrderResponse
;
}
private
Integer
convertAssortmentSettlementTypeToNewOrderSettlementType
(
OldOrderAccountType
settlementType
)
{
if
(
settlementType
==
OldOrderAccountType
.
WEIXIN
)
{
return
OrderSettlementType
.
WEIXIN
.
getIndex
();
}
return
-
1
;
}
public
CreateOrderResponse
getCreateOrderResponse
(
String
code
,
String
message
,
QueryOrdersResponse
.
DataBean
.
OrderBean
data
)
{
CreateOrderResponse
baseOrderResponse
=
new
CreateOrderResponse
();
baseOrderResponse
.
setErrcode
(
Integer
.
valueOf
(
code
));
baseOrderResponse
.
setErrmsg
(
message
);
baseOrderResponse
.
setData
(
data
);
return
baseOrderResponse
;
}
/**
* 创建订单后扣减库存等操作
* @return
*/
private
BaseOrderResponse
updateStockAndScore
(
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
List
<
CreateOrderProductRequest
>
products
,
ActivityUpdateStockRequest
updateStockRequest
,
List
<
CreateOrderAccountRequest
>
accounts
,
MqMessageRequest
mqMessageRequest
,
String
menuType
,
String
openId
,
Long
totalScore
)
{
//TODO 转换获取库存信息,扣减库存
UpdateStocksRequest
updateStocksRequest
=
orderSdkAdapter
.
getUpdateProductStock
(
orderBean
,
products
,
StockChangeType
.
REDUCE
,
menuType
);
if
(
updateStocksRequest
!=
null
&&
CollectionUtils
.
isNotEmpty
(
updateStocksRequest
.
getProductStocks
()))
{
BaseResponse
baseResponse
=
stockSdkService
.
reducesStocks
(
updateStocksRequest
,
""
);
if
(!
ObjectUtils
.
equals
(
RESPONSE_SUCCESS_STR
,
baseResponse
.
getCode
()))
{
//TODO 失败取消订单
CancelOrderRequest
cancelOrderRequest
=
orderSdkAdapter
.
convent2CancelOrderRequest
(
orderBean
.
getOid
(),
orderBean
.
getCompanyId
(),
AfterSalesType
.
SYSTEM_CANCEL
,
"商品库存不足"
,
""
,
null
);
orderCancel
(
cancelOrderRequest
);
return
BaseOrderResponse
.
getErrorBaseOrderResponse
(
baseResponse
.
getCode
(),
"商品库存不足"
);
}
}
//TODO 扣减活动库存
ActivityUpdateStockRequest
activityUpdateStockRequest
=
orderSdkAdapter
.
convert2ActivityUpdateStockRequest
(
orderBean
,
updateStockRequest
);
// update by miaohui 20201030 for 【ID1018638】【C端服务端】活动库存接口调整对接
// 原逻辑只检测扣减库存不为空时调用,现改为扣减库存不为空或参加活动不为空时调用
if
(
activityUpdateStockRequest
!=
null
&&
(
CollectionUtils
.
isNotEmpty
(
activityUpdateStockRequest
.
getStock
())
||
CollectionUtils
.
isNotEmpty
(
activityUpdateStockRequest
.
getActivityList
())))
{
BaseResponse
activityResponse
=
promotionSdkService
.
subtractStock
(
activityUpdateStockRequest
,
""
);
if
(!
ObjectUtils
.
equals
(
RESPONSE_SUCCESS_STR
,
activityResponse
.
getCode
()))
{
//TODO 失败取消订单,异步冲正库存
CancelOrderRequest
cancelOrderRequest
=
orderSdkAdapter
.
convent2CancelOrderRequest
(
orderBean
.
getOid
(),
orderBean
.
getCompanyId
(),
AfterSalesType
.
SYSTEM_CANCEL
,
"活动库存不足"
,
""
,
null
);
orderCancel
(
cancelOrderRequest
);
//失败异步冲正库存,取消订单
backOrdersNotifyActivity
(
orderBean
,
mqMessageRequest
.
getBackOrdersNotifyActivityQueue
(),
mqMessageRequest
.
getBackOrdersNotifyActivityExchange
());
return
BaseOrderResponse
.
getErrorBaseOrderResponse
(
activityResponse
.
getCode
(),
"活动库存不足"
);
}
}
// 扣减积分,扣减失败冲正积分返回错误
if
(
totalScore
!=
null
)
{
UserScoreRequest
userScoreRequest
=
orderSdkAdapter
.
convent2UserScoreRequest
(
orderBean
,
accounts
,
true
);
BaseResponse
userScoreResponse
=
memberScoreService
.
useScore
(
userScoreRequest
,
""
);
if
(!
ObjectUtils
.
equals
(
RESPONSE_SUCCESS_STR
,
userScoreResponse
.
getCode
()))
{
//TODO 失败取消订单,异步冲正库存
CancelOrderRequest
cancelOrderRequest
=
orderSdkAdapter
.
convent2CancelOrderRequest
(
orderBean
.
getOid
(),
orderBean
.
getCompanyId
(),
AfterSalesType
.
SYSTEM_CANCEL
,
"积分不足"
,
""
,
null
);
orderCancel
(
cancelOrderRequest
);
//失败异步冲正库存,取消订单
backOrdersNotifyActivity
(
orderBean
,
mqMessageRequest
.
getBackOrdersNotifyActivityQueue
(),
mqMessageRequest
.
getBackOrdersNotifyActivityExchange
());
return
BaseOrderResponse
.
getErrorBaseOrderResponse
(
userScoreResponse
.
getCode
(),
"积分不足"
);
}
}
UserScoreRequest
userScoreRequest
=
orderSdkAdapter
.
convent2UserScoreRequest
(
orderBean
,
accounts
,
true
);
// 扣减积分,扣减失败冲正积分返回错误
if
(
userScoreRequest
!=
null
)
{
BaseResponse
userScoreResponse
=
memberScoreService
.
useScore
(
userScoreRequest
,
""
);
if
(!
ObjectUtils
.
equals
(
RESPONSE_SUCCESS_STR
,
userScoreResponse
.
getCode
()))
{
//TODO 失败取消订单,异步冲正库存
CancelOrderRequest
cancelOrderRequest
=
orderSdkAdapter
.
convent2CancelOrderRequest
(
orderBean
.
getOid
(),
orderBean
.
getCompanyId
(),
AfterSalesType
.
SYSTEM_CANCEL
,
"积分不足"
,
""
,
null
);
orderCancel
(
cancelOrderRequest
);
//失败异步冲正库存,取消订单
backOrdersNotifyActivity
(
orderBean
,
mqMessageRequest
.
getBackOrdersNotifyActivityQueue
(),
mqMessageRequest
.
getBackOrdersNotifyActivityExchange
());
return
BaseOrderResponse
.
getErrorBaseOrderResponse
(
userScoreResponse
.
getCode
(),
"积分不足"
);
}
}
// 下单成锁定劵,冻结失败提示下单失败并冲正库存积分等,判断支付渠道,积分和svc卡直接核销,无需锁定10102 = svc卡支付 || 支付金额小于等于0
//todo:统一流程 下单锁券再核销
CouponRequest
request
=
orderSdkAdapter
.
convert2PreCheckRequest
(
orderBean
,
accounts
,
openId
);
if
(
request
!=
null
)
{
request
.
setChannel_ids
(
getOrgCodes
(
orderBean
.
getCompanyId
(),
orderBean
.
getShopId
()));
BaseResponse
<
CouponLockResponse
>
couponLockResponseBaseResponse
=
offlineCouponSdkService
.
precheckAndLock
(
request
,
LogThreadLocal
.
getTrackingNo
());
if
(!
ObjectUtils
.
equals
(
RESPONSE_SUCCESS_STR
,
couponLockResponseBaseResponse
.
getCode
()))
{
CancelOrderRequest
cancelOrderRequest
=
orderSdkAdapter
.
convent2CancelOrderRequest
(
orderBean
.
getOid
(),
orderBean
.
getCompanyId
(),
AfterSalesType
.
SYSTEM_CANCEL
,
"锁定券码失败"
,
""
,
null
);
orderCancel
(
cancelOrderRequest
);
//失败异步冲正库存,取消订单
backOrdersNotifyActivity
(
orderBean
,
mqMessageRequest
.
getBackOrdersNotifyActivityQueue
(),
mqMessageRequest
.
getBackOrdersNotifyActivityExchange
());
return
BaseOrderResponse
.
getErrorBaseOrderResponse
(
couponLockResponseBaseResponse
.
getCode
(),
couponLockResponseBaseResponse
.
getMessage
());
}
}
return
BaseOrderResponse
.
getErrorBaseOrderResponse
(
RESPONSE_SUCCESS_STR
,
""
);
}
// @Override
public
BaseOrderResponse
orderCancel
(
CancelOrderRequest
cancelOrderRequest
)
{
OrderCancelReq
request
=
new
OrderCancelReq
();
//商户号必传
request
.
setPartnerId
(
cancelOrderRequest
.
getPartnerId
());
request
.
setOrderCode
(
cancelOrderRequest
.
getOrderId
());
request
.
setReqRemark
(
cancelOrderRequest
.
getReqRemark
());
//售后单类型 1:其他取消 2:用户取消 3:商户取消 4:未支付超时关单 5:商户接单超时取消 6:商家拒单
// 7:配送用户拒收 8:用户售后退货/售后退款 9:系统取消 10:客服取消 11:用户统一取消,
request
.
setAfterSalesType
(
cancelOrderRequest
.
getAfterSalesType
().
getIndex
()
==
null
?
1
:
cancelOrderRequest
.
getAfterSalesType
().
getIndex
());
request
.
setOrderClient
(
cancelOrderRequest
.
getOrderClient
());
request
.
setCancelReason
(
cancelOrderRequest
.
getReason
());
request
.
setAfterSalesReason
(
cancelOrderRequest
.
getReason
());
//若为4,默认做【创建】+【同意并退款完成】,售后单状态为【完成】
request
.
setCreateEvent
(
cancelOrderRequest
.
getCreateEvent
());
request
.
setAfterSerialNo
(
cancelOrderRequest
.
getRefundSerialNo
());
request
.
setOperator
(
cancelOrderRequest
.
getOperator
());
// 【华莱士20210510活动】新增加退款方式字段
if
(
Objects
.
nonNull
(
cancelOrderRequest
.
getExtInfoReq
())){
request
.
setExtInfo
(
JSON
.
toJSONString
(
cancelOrderRequest
.
getExtInfoReq
()));
}
//为空发起售后单
if
(
cancelOrderRequest
.
getCreateEvent
()
==
null
){
// 查询门店服务配置,退单模式为2为自动退款,判断自动退款时间,设置为0则不传入timeout,
StoreResponse
.
Configuration
configuration
=
getStoreAutoConfiguration
(
cancelOrderRequest
.
getPartnerId
(),
cancelOrderRequest
.
getStoreId
(),
cancelOrderRequest
.
getTrackingNo
());
if
(
configuration
!=
null
&&
ObjectUtils
.
equals
(
"2"
,
configuration
.
getAutoChargebackOrderType
())
&&
!
ObjectUtils
.
equals
(
"0"
,
configuration
.
getAutoChargebackOrderTime
()))
{
request
.
setTimeOut
(
AutoOrderConfigTime
.
getTime
(
configuration
.
getAutoChargebackOrderTime
()));
}
OrderTaskReq
orderTask
=
setAfterSalesOrderTimeOutTask
(
configuration
,
cancelOrderRequest
.
getPartnerId
());
request
.
setOrderTask
(
orderTask
);
}
request
.
setRefundDeliveryAmount
(
cancelOrderRequest
.
isRefundDeliveryAmount
());
com
.
freemud
.
application
.
sdk
.
api
.
ordercenter
.
response
.
BaseResponse
response
=
orderSdkService
.
cancelOrder
(
request
,
cancelOrderRequest
.
getTrackingNo
());
return
orderSdkAdapter
.
convent2BaseOrderResponse
(
response
);
}
private
void
backOrdersNotifyActivity
(
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
String
backOrdersChangeOrderStatusConsumerQueue
,
String
backOrdersNotifyActivityExchange
)
{
if
(
null
==
orderBean
||
backOrdersChangeOrderStatusConsumerQueue
==
null
||
backOrdersNotifyActivityExchange
==
null
)
{
return
;
}
String
oid
=
orderBean
.
getOid
();
Integer
status
=
orderBean
.
getStatus
();
if
(
StringUtils
.
isEmpty
(
oid
))
{
return
;
}
AssortOrderLogUtil
.
info
(
"backOrdersStatusChange"
,
oid
,
String
.
valueOf
(
status
));
OrderStatusChangeRequestDto
requestDto
=
new
OrderStatusChangeRequestDto
();
requestDto
.
setOid
(
oid
);
requestDto
.
setOrderStatus
(
status
);
try
{
Header
header
=
new
Header
(
MQAction
.
INSERT
.
getAction
(),
"backOrdersStatusChange"
,
oid
,
backOrdersChangeOrderStatusConsumerQueue
);
MQMessage
<
OrderStatusChangeRequestDto
>
message
=
new
MQMessage
<>(
header
,
requestDto
);
mqService
.
convertAndSend
(
backOrdersNotifyActivityExchange
,
backOrdersChangeOrderStatusConsumerQueue
,
message
);
}
catch
(
Exception
e
)
{
//TODO 邮件告警
ThirdPartyLog
.
infoConvertJson
(
System
.
currentTimeMillis
(),
System
.
currentTimeMillis
(),
"backOrdersStatusChangeNotify_error"
,
backOrdersNotifyActivityExchange
,
backOrdersChangeOrderStatusConsumerQueue
);
}
}
List
<
String
>
getOrgCodes
(
String
partnerId
,
String
storeCode
)
{
GetOrgTreeListRequest
request
=
new
GetOrgTreeListRequest
();
request
.
setPartnerId
(
partnerId
);
request
.
setStoreCode
(
storeCode
);
BaseResponse
<
GetOrgTreeListResponse
>
orgList
=
storeCenterService
.
getOrgTreeList
(
request
,
LogThreadLocal
.
getTrackingNo
());
if
(
orgList
!=
null
&&
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
.
equals
(
orgList
.
getCode
()))
{
List
<
GetOrgTreeListResponse
.
OrgList
>
orgResponseList
=
orgList
.
getData
().
getOrgList
();
if
(
CollectionUtils
.
isEmpty
(
orgResponseList
)){
return
null
;
}
return
orgResponseList
.
stream
().
map
(
org
->
org
.
getOrganizationId
()).
collect
(
Collectors
.
toList
());
}
return
null
;
}
/**
* 获取门店自动配置信息
*
* @param partnerId
* @param storeCode
* @param trackingNo
* @return
*/
private
StoreResponse
.
Configuration
getStoreAutoConfiguration
(
String
partnerId
,
String
storeCode
,
String
trackingNo
)
{
if
(
StringUtils
.
isEmpty
(
storeCode
))
{
return
null
;
}
StoreInfoRequest
storeInfoRequest
=
new
StoreInfoRequest
();
storeInfoRequest
.
setPartnerId
(
partnerId
);
storeInfoRequest
.
setStoreCode
(
storeCode
);
StoreResponse
storeResponse
=
storeCenterService
.
getStoreInfo
(
storeInfoRequest
,
trackingNo
);
if
(
storeResponse
==
null
||
storeResponse
.
getBizVO
()
==
null
||
storeResponse
.
getBizVO
().
getStoreConfig
()
==
null
)
{
return
null
;
}
return
storeResponse
.
getBizVO
().
getStoreConfig
();
}
/**
* 设置申请退款时间
* 如果时间的类型是2表示采用原来的48小时逻辑
* 如果时间的类型是1表示在指定的时间之后进行退款
* 为了防止同一时刻的退款量太大,需要将退款的订单分散到指定的时间后半小时内
*/
public
OrderTaskReq
setAfterSalesOrderTimeOutTask
(
StoreResponse
.
Configuration
configuration
,
String
partnerId
)
{
if
(
configuration
==
null
){
return
null
;
}
OrderTaskReq
orderTask
;
if
((
configuration
.
getTimeTypeOfRefund
()
!=
null
&&
configuration
.
getTimeTypeOfRefund
().
compareTo
(
2
)
==
0
)
||
configuration
.
getTimeTypeOfRefund
()
==
null
){
// 48小时之后
orderTask
=
new
OrderTaskReq
();
orderTask
.
setTaskType
(
4
);
orderTask
.
setTimeout
(
1
);
//1000*60*60*24*2 毫秒(48小时)
long
timeout
=
172800000
;
long
timeMillis
=
System
.
currentTimeMillis
();
Date
processingDate
=
new
Date
(
timeMillis
+
timeout
-
60000
);
Date
taskTime
=
new
Date
(
timeMillis
+
timeout
);
orderTask
.
setTaskTime
(
DateUtil
.
convert2String
(
taskTime
,
DateUtil
.
FORMAT_YYYY_MM_DD_HHMMSS
));
//处理时间,当前时间加48小时减1分钟
orderTask
.
setProcessingTime
(
DateUtil
.
convert2String
(
processingDate
,
DateUtil
.
FORMAT_YYYY_MM_DD_HHMMSS
));
}
else
if
(
configuration
.
getTimeTypeOfRefund
()
!=
null
&&
configuration
.
getTimeTypeOfRefund
().
compareTo
(
1
)
==
0
){
// 指定时间
orderTask
=
new
OrderTaskReq
();
orderTask
.
setTaskType
(
4
);
orderTask
.
setTimeout
(
1
);
// 获取门店配置的当天指定的退款时间
String
timeOfRefund
=
configuration
.
getTimeOfRefund
();
// 获取半小时的随机数
Random
r
=
new
Random
();
int
minute
=
r
.
ints
(
1
,
31
).
findFirst
().
getAsInt
()
*
60000
;
String
today
=
DateUtil
.
getCurrentDate
(
DateUtil
.
FORMAT_YMD
);
Date
configTime
=
DateUtil
.
convert2Date
(
today
+
" "
+
timeOfRefund
,
DateUtil
.
FORMAT_YYYY_MM_DD_HHMMSS
);
// 判断当前时间是否已经超过门店设置的截至时间
if
(
new
Date
().
after
(
configTime
)){
today
=
DateUtil
.
convert2String
(
DateUtil
.
addDays
(
new
Date
(),
1
),
DateUtil
.
FORMAT_YMD
);
configTime
=
DateUtil
.
convert2Date
(
today
+
" "
+
timeOfRefund
,
DateUtil
.
FORMAT_YYYY_MM_DD_HHMMSS
);
}
Date
processingDate
=
new
Date
(
configTime
.
getTime
()
+
minute
);
String
processingStr
=
DateUtil
.
convert2String
(
processingDate
,
DateUtil
.
FORMAT_YYYY_MM_DD_HHMMSS
);
orderTask
.
setTaskTime
(
processingStr
);
orderTask
.
setProcessingTime
(
processingStr
);
}
else
{
orderTask
=
null
;
}
// fisherman [KA-20210702] 规避版本升级
if
(
orderTask
!=
null
)
{
avoidVersionUpgrade
(
orderTask
,
partnerId
);
}
return
orderTask
;
}
/**
* fisherman 规避版本升级
* 周二周四晚 23:00开始发版, 服务器会存在宕机, 延迟定时器处理时间
* 1.校验时间
* 2.校验 apollo配置商户
* @param orderTask
*/
private
void
avoidVersionUpgrade
(
OrderTaskReq
orderTask
,
String
partnerId
)
{
if
(
Objects
.
isNull
(
partnerId
))
{
return
;
}
// 时间校验
boolean
checkResult
=
checkDate
(
orderTask
);
if
(
checkResult
&&
StringUtils
.
isNotBlank
(
avoidVersionUpgradeConfig
))
{
// 读取 是否商户配置
Map
<
String
,
Integer
>
map
=
JSON
.
parseObject
(
avoidVersionUpgradeConfig
,
Map
.
class
);
if
(
map
.
containsKey
(
partnerId
))
{
Integer
addHours
=
map
.
get
(
partnerId
);
// 增加 时间
String
processingTime
=
orderTask
.
getProcessingTime
();
Date
datet
=
DateUtil
.
convert2Date
(
processingTime
,
DateUtil
.
FORMAT_YYYY_MM_DD_HHMMSS
);
Date
date
=
DateUtil
.
addHours
(
datet
,
addHours
);
String
resultTime
=
DateUtil
.
convert2String
(
date
,
DateUtil
.
FORMAT_YYYY_MM_DD_HHMMSS
);
orderTask
.
setProcessingTime
(
resultTime
);
// 显示时间一起设置
processingTime
=
orderTask
.
getProcessingTime
();
datet
=
DateUtil
.
convert2Date
(
processingTime
,
DateUtil
.
FORMAT_YYYY_MM_DD_HHMMSS
);
date
=
DateUtil
.
addHours
(
datet
,
addHours
);
resultTime
=
DateUtil
.
convert2String
(
date
,
DateUtil
.
FORMAT_YYYY_MM_DD_HHMMSS
);
orderTask
.
setTaskTime
(
resultTime
);
}
}
}
private
boolean
checkDate
(
OrderTaskReq
orderTask
)
{
// 校验 是否 周二 周四
String
processingTime
=
orderTask
.
getProcessingTime
();
Calendar
cal
=
Calendar
.
getInstance
();
Date
datet
=
DateUtil
.
convert2Date
(
processingTime
,
DateUtil
.
FORMAT_YYYY_MM_DD_HHMMSS
);
if
(
datet
==
null
)
{
return
false
;
}
cal
.
setTime
(
datet
);
int
w
=
cal
.
get
(
Calendar
.
DAY_OF_WEEK
)
-
1
;
// 增加一个发版开关
if
(
CollectionUtils
.
isNotEmpty
(
weekDay
)
&&
weekDay
.
size
()>
0
)
{
if
(
weekDay
.
contains
(
w
))
{
// 校验时间 是否是 23:00 之后
int
hourOfDay
=
cal
.
get
(
Calendar
.
HOUR_OF_DAY
);
if
(
hourOfDay
>=
23
){
// 表示 设置时间为23点之后
return
true
;
}
}
}
else
{
if
(
CommonConstant
.
weekDay
.
contains
(
w
))
{
// 校验时间 是否是 23:00 之后
int
hourOfDay
=
cal
.
get
(
Calendar
.
HOUR_OF_DAY
);
if
(
hourOfDay
>=
23
){
// 表示 设置时间为23点之后
return
true
;
}
}
}
return
false
;
}
}
order-application-service/src/main/java/cn/freemud/service/impl/MallOrderServiceImpl.java
View file @
4348cad9
...
...
@@ -287,7 +287,7 @@ public class MallOrderServiceImpl implements MallOrderService {
createOrderRequest
.
setMqMessageRequest
(
mqMessageRequest
);
createOrderRequest
.
getBaseCreateOrderRequest
().
setUserName
(
userLoginInfoDto
.
getNickName
());
createOrderRequest
.
setTrackingNo
(
LogThreadLocal
.
getTrackingNo
());
return
order
CenterSdk
Service
.
createOrderFlow
(
createOrderRequest
);
return
order
Business
Service
.
createOrderFlow
(
createOrderRequest
);
});
//普通订单
...
...
order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
View file @
4348cad9
...
...
@@ -2752,7 +2752,7 @@ public class OrderServiceImpl implements Orderservice {
createOrderRequest
.
setMqMessageRequest
(
mqMessageRequest
);
createOrderRequest
.
setTrackingNo
(
LogThreadLocal
.
getTrackingNo
());
// AppLogUtil.debugLog("createOrder sessionId:{},createOrderVo:{}", createOrderVo.getSessionId(), JSON.toJSONString(createOrderRequest));
return
order
CenterSdk
Service
.
createOrderFlow
(
createOrderRequest
);
return
order
Business
Service
.
createOrderFlow
(
createOrderRequest
);
}
/**
...
...
@@ -3271,7 +3271,7 @@ public class OrderServiceImpl implements Orderservice {
createOrderRequest
.
setMqMessageRequest
(
mqMessageRequest
);
createOrderRequest
.
setOpenId
(
openId
);
createOrderRequest
.
setTrackingNo
(
LogThreadLocal
.
getTrackingNo
());
return
order
CenterSdk
Service
.
createOrderFlow
(
createOrderRequest
);
return
order
Business
Service
.
createOrderFlow
(
createOrderRequest
);
});
//创建父子订单
Function
<
Object
,
CreateFatherSonOrderResponse
>
createFatherSonOrder
=
(
var
->
{
...
...
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