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
79b5413c
Commit
79b5413c
authored
Aug 04, 2020
by
徐康
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
麦咖啡下单和支付成功
parent
80a616c1
Show whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
2811 additions
and
207 deletions
+2811
-207
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/entities/BatchQueryActivityInfoRequestDto.java
+29
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/entities/BatchQueryActivityInfoResponseDto.java
+20
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/entities/GetAppKeyRequestDto.java
+15
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/entities/GetAppKeyResponseDto.java
+24
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/enums/CouponReqTypeEnum.java
+58
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/enums/MCCafeChannelEnum.java
+65
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/coupon/MCCafeConponRequest.java
+108
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/coupon/MCCafeCouponLockRequest.java
+82
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/coupon/MCCafeProductRedeemVo.java
+32
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/coupon/MCCafeTransactionVo.java
+22
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/service/CouponClientService.java
+28
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/service/MCCafeOrderCenterSdkService.java
+23
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/service/order/CouponClientServiceImpl.java
+149
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/service/order/MCCafeOrderCenterSdkServiceImpl.java
+291
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/service/thirdparty/CardBinMCCafeClient.java
+30
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/service/thirdparty/CouponOfflineMCCafeClient.java
+31
-0
assortment-ordercenter-sdk/src/test/java/com/freemud/sdk/api/assortment/coupon/CouponSdkServiceTest.java
+0
-153
order-application-service/src/main/java/cn/freemud/OrderApplication.java
+1
-1
order-application-service/src/main/java/cn/freemud/controller/OrderController.java
+21
-0
order-application-service/src/main/java/cn/freemud/entities/dto/shoppingCart/MCCafeShoppingCartGoodsDto.java
+20
-0
order-application-service/src/main/java/cn/freemud/service/MCCafeOrderService.java
+33
-0
order-application-service/src/main/java/cn/freemud/service/OrderAdapterService.java
+12
-0
order-application-service/src/main/java/cn/freemud/service/impl/CheckOrder.java
+101
-0
order-application-service/src/main/java/cn/freemud/service/impl/MCCafeOrderServiceImpl.java
+1229
-0
order-application-service/src/main/java/cn/freemud/service/impl/OrderAdapterServiceImpl.java
+56
-14
order-application-service/src/test/java/cn.freemud/service/CouponActivityServiceTest.java
+157
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/CouponCodeMCCafeBaseDto.java
+53
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/CouponCodeVerificationMCCafeDto.java
+45
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/CouponService.java
+2
-12
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/CouponServiceImpl.java
+31
-3
shopping-cart-application-service/src/main/java/cn/freemud/service/thirdparty/CardBinMCCafeClient.java
+6
-6
shopping-cart-application-service/src/main/java/cn/freemud/service/thirdparty/CouponOfflineMCCafeClient.java
+26
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/thirdparty/CouponOnlineMCCafeClient.java
+4
-4
shopping-cart-application-service/src/test/java/cn.freemud/service/CouponServiceTest.java
+7
-14
No files found.
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/entities/BatchQueryActivityInfoRequestDto.java
0 → 100644
View file @
79b5413c
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
entities
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
BatchQueryActivityInfoRequestDto
{
/**
* 商户号
*/
private
Integer
partnerId
;
/**
* 活动号集合
*/
private
List
<
String
>
activeCode
;
/**
* 是否需要活动商品券相关数据 1:需要
*/
private
Integer
isProduct
;
/**
* 签名
*/
private
String
sign
;
}
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/entities/BatchQueryActivityInfoResponseDto.java
0 → 100644
View file @
79b5413c
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
entities
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
BatchQueryActivityInfoResponseDto
{
/**
* 状态码
*/
private
String
statusCode
;
/**
* 状态码描述
*/
private
String
msg
;
// private List<Active> activities;
}
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/entities/GetAppKeyRequestDto.java
0 → 100644
View file @
79b5413c
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
entities
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public
class
GetAppKeyRequestDto
{
private
String
partnerId
;
private
String
appId
;
}
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/entities/GetAppKeyResponseDto.java
0 → 100644
View file @
79b5413c
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
entities
;
import
lombok.Data
;
@Data
public
class
GetAppKeyResponseDto
{
/**
* 状态码(100:成功,101:失败,-101:无效参数,-1:系统错误)
*/
private
Integer
statusCode
;
/**
* 描述
*/
private
String
msg
;
private
Integer
ver
;
private
DataBean
data
;
@Data
public
static
class
DataBean
{
private
String
appKey
;
}
}
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/enums/CouponReqTypeEnum.java
0 → 100644
View file @
79b5413c
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
enums
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: PayRefundStatus
* @Package cn.freemud.enums
* @Description:
* @author: jiaxin.liu
* @date: 2019/5/27 15:09
* @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
public
enum
CouponReqTypeEnum
{
QUERY
(
0
,
"查询"
),
CANCEL_REDEEM
(
3
,
"冲正"
),
REDEEM
(
71
,
"核销"
),
LOCK
(
89
,
"锁定"
),
UNLOCK
(
90
,
"解锁"
),
;
private
Integer
code
;
private
String
desc
;
CouponReqTypeEnum
(
Integer
code
,
String
desc
)
{
this
.
code
=
code
;
this
.
desc
=
desc
;
}
public
static
CouponReqTypeEnum
getByCode
(
Integer
code
)
{
if
(
code
==
null
)
{
return
null
;
}
for
(
CouponReqTypeEnum
payStatus
:
values
())
{
if
(
payStatus
.
getCode
().
equals
(
code
))
{
return
payStatus
;
}
}
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
;
}
}
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/enums/MCCafeChannelEnum.java
0 → 100644
View file @
79b5413c
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: OrderChannelType
* @Package cn.freemud.enums
* @Description:
* @author: liming.guo
* @date: 2018/7/3 15:06
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
enums
;
public
enum
MCCafeChannelEnum
{
MOCOFFEE_WX
(
1
,
"mocoffee_wx"
,
"麦咖啡微信小程序"
),
MOCOFFEE_ZFB
(
2
,
"mocoffee_zfb"
,
"麦咖啡支付宝小程序"
),
;
private
int
code
;
private
String
name
;
private
String
desc
;
MCCafeChannelEnum
(
int
code
,
String
name
,
String
desc
)
{
this
.
code
=
code
;
this
.
name
=
name
;
this
.
desc
=
desc
;
}
public
static
MCCafeChannelEnum
getByCode
(
int
code
)
{
for
(
MCCafeChannelEnum
type
:
values
())
{
if
(
type
.
getCode
()
==
code
)
{
return
type
;
}
}
return
null
;
}
public
int
getCode
()
{
return
code
;
}
public
void
setCode
(
int
code
)
{
this
.
code
=
code
;
}
public
String
getDesc
()
{
return
desc
;
}
public
void
setDesc
(
String
desc
)
{
this
.
desc
=
desc
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
}
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/coupon/MCCafeConponRequest.java
0 → 100644
View file @
79b5413c
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
request
.
coupon
;
import
com.freemud.application.sdk.api.couponcenter.offline.domain.TransactionVO
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.hibernate.validator.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
java.util.List
;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public
class
MCCafeConponRequest
{
/**
* 接口版本
*/
@NotNull
private
Integer
ver
;
/**
* kdg.Y 开个店渠道且需要回调三方
* kgd.N 开个店渠道且不需要回调三方
*/
private
String
appFlag
;
/**
* 需要查询的券码,仅供查询券使用
*/
private
String
coupon
;
/**
* 请求操作类型,0是卡券查询,2是卡券交易查询,3是卡券冲正,71是卡券核销
*/
@NotNull
(
message
=
"操作不能为空"
)
private
Integer
reqtype
;
/**
* 商家门店号
*/
@NotBlank
(
message
=
"商家门店号不能为空"
)
private
String
store_id
;
/**
* 子品牌 ID 可以为空
*/
private
String
organize_id
;
/**
* 组织机构ID(注意和channle的区别)
*/
private
List
<
String
>
channel_ids
;
/**
* 组织机构code(注意和channle的区别)
*/
private
List
<
String
>
channel_codes
;
/**
* 商家POS机编号
*/
@NotBlank
(
message
=
"商家POS机编号不能为空"
)
private
String
station_id
;
/**
* 营业员编号
*/
@NotBlank
(
message
=
"营业员编号不能为空"
)
private
String
operator_id
;
/**
* 商户编号
*/
@NotNull
(
message
=
"商户编号不能为空"
)
private
Integer
partnerId
;
private
Integer
checkValue
;
private
Integer
clientReqCount
;
/**
* POS交易序号
*/
private
String
trans_id
;
/**
* 营业日
*/
private
String
business_date
;
/**
* 优惠券列表
*/
private
List
<
MCCafeTransactionVo
>
transactions
;
/**
* 签名
*/
private
String
sign
;
/**
* 追加key
*/
private
String
appSecret
;
private
String
openid
;
private
String
transactionuuid
;
private
String
status
;
private
Boolean
isManual
;
private
String
channel
;
}
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/coupon/MCCafeCouponLockRequest.java
0 → 100644
View file @
79b5413c
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
request
.
coupon
;
import
lombok.Data
;
import
java.util.List
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponCodeVerificationReqVO
* @Package cn.freemud.entities.dto
* @Description:
* @author: biao.zhang
* @date: 2018/7/17 14:45
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public
class
MCCafeCouponLockRequest
{
private
Integer
ver
;
/**
* 71 核销
* 89 锁定
* 90 解锁
*/
private
Integer
reqType
;
/**
* 核销渠道
* 1:线下Pos
* 2:线上
* 3:pickup:麦当劳点餐
* 4:delivery:麦当劳外送
* 5:mccafe:麦当劳咖啡
* 6:mc_dessert麦当劳甜品站
* 7:SOK
* 8:ECP/CMA
* 9:mcd_alipay:麦当劳支付宝点餐
*/
private
String
channel
;
//商户编号
private
String
partnerId
;
//商家门店号
private
String
storeId
;
//营业员编号
private
String
operatorId
;
//POS机编号
private
String
stationId
;
//交易序号
private
String
transId
;
//券编号
private
String
coupon
;
//三方券号
private
String
offerId
;
//锁定/解锁次数
private
String
number
;
private
String
appFlag
;
private
String
businessDate
;
//----非必传---
//预约订单时间,为空则为及时单,如:2020-06-17 12:00:00
private
String
advancedOrderTime
;
//签名
private
String
sign
;
private
List
<
MCCafeTransactionVo
>
transactions
;
}
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/coupon/MCCafeProductRedeemVo.java
0 → 100644
View file @
79b5413c
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
request
.
coupon
;
import
lombok.Data
;
import
java.math.BigDecimal
;
@Data
public
class
MCCafeProductRedeemVo
{
private
String
pid
;
/**
* 第三方商品编号 有的话会校验
*/
private
String
customer_code
;
private
Integer
seq
;
private
Integer
consume_num
;
private
Integer
gid
;
private
Integer
DiscountAmount
;
private
String
brand_code
;
private
String
pcata
;
private
BigDecimal
redeem_price
;
//键位商品编号
private
String
keyProductCode
;
}
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/coupon/MCCafeTransactionVo.java
0 → 100644
View file @
79b5413c
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
request
.
coupon
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
MCCafeTransactionVo
{
private
Integer
pay_amount
;
private
String
code
;
private
String
ebcode
;
/**
* 优惠总金额,由第三方计算,单位分
*/
private
Long
totalAmount
;
private
List
<
MCCafeProductRedeemVo
>
products
;
}
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/service/CouponClientService.java
0 → 100644
View file @
79b5413c
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
service
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponBaseResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponQueryResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedeemResponse
;
import
com.freemud.sdk.api.assortment.order.request.coupon.MCCafeConponRequest
;
import
com.freemud.sdk.api.assortment.order.request.coupon.MCCafeCouponLockRequest
;
import
com.freemud.sdk.api.assortment.order.request.order.CreateOrderAccountRequest
;
import
com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse
;
import
java.util.List
;
public
interface
CouponClientService
{
// CouponRedeemResponse redeem(QueryOrdersResponse.DataBean.OrderBean orderBean, List<CreateOrderAccountRequest> accounts);
CouponRedeemResponse
redeem
(
MCCafeConponRequest
mcCafeConponRequest
);
CouponRedeemResponse
redeemBatch
(
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
List
<
CreateOrderAccountRequest
>
accounts
);
CouponRedeemResponse
cancelRedeem
(
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
List
<
CreateOrderAccountRequest
>
accounts
);
CouponQueryResponse
query
(
MCCafeConponRequest
mcCafeConponRequest
);
CouponBaseResponse
lock
(
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
List
<
CreateOrderAccountRequest
>
accounts
);
CouponBaseResponse
unlock
(
MCCafeCouponLockRequest
mcCafeCouponLockRequest
);
}
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/service/MCCafeOrderCenterSdkService.java
0 → 100644
View file @
79b5413c
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
service
;
import
com.freemud.application.sdk.api.ordercenter.request.QueryAfterSalesOrderConditionsReq
;
import
com.freemud.application.sdk.api.ordercenter.response.AfterSalesListResp
;
import
com.freemud.sdk.api.assortment.order.request.order.*
;
import
com.freemud.sdk.api.assortment.order.response.order.*
;
public
interface
MCCafeOrderCenterSdkService
{
/**
* 创建麦咖啡订单
*
* @return
*/
CreateOrderResponse
createMCCafeOrderFlow
(
CreateOrderRequest
createOrderRequest
);
/**
* 创建麦咖啡父子订单
*/
CreateFatherSonOrderResponse
createMCCafeFatherSonOrder
(
CreateFatherSonOrderRequest
createFatherSonOrderRequest
);
}
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/service/order/CouponClientServiceImpl.java
0 → 100644
View file @
79b5413c
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
service
.
order
;
import
cn.freemud.base.constant.Version
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponBaseResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponQueryResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedeemResponse
;
import
com.freemud.application.sdk.api.ordercenter.enums.OrderClientType
;
import
com.freemud.sdk.api.assortment.order.enums.*
;
import
com.freemud.sdk.api.assortment.order.request.coupon.*
;
import
com.freemud.sdk.api.assortment.order.request.order.CreateOrderAccountRequest
;
import
com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse
;
import
com.freemud.sdk.api.assortment.order.service.CouponClientService
;
import
com.freemud.sdk.api.assortment.order.service.thirdparty.CouponOfflineMCCafeClient
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.*
;
import
java.util.stream.Collectors
;
@Service
public
class
CouponClientServiceImpl
implements
CouponClientService
{
@Autowired
private
CouponOfflineMCCafeClient
couponOfflineMCCafeClient
;
// @Override
// public CouponRedeemResponse redeem(QueryOrdersResponse.DataBean.OrderBean orderBean, List<CreateOrderAccountRequest> accounts) {
// if (null == orderBean || CollectionUtils.isEmpty(accounts)) {
// return null;
// }
// Optional<CreateOrderAccountRequest> accountRequest = accounts.stream().filter(
// account -> account.getAccountType().equals(QueryOrderAccountType.COUPON)
// || account.getAccountType().equals(QueryOrderAccountType.PRODUCT_COUPON)
// || account.getAccountType().equals(QueryOrderAccountType.DISCOUNT_COUPON)).findFirst();
// if (!accountRequest.isPresent() || accountRequest.get().getPrice() == 0) {
// return null;
// }
// CreateOrderAccountRequest accountBean = accountRequest.get();
// List<MCCafeProductRedeemVo> products = new ArrayList<>();
// //商品券核销核销参数
// if (QueryOrderAccountType.PRODUCT_COUPON.equals(accountBean.getAccountType())) {
// for (int i = 0; i < orderBean.getProductList().size(); i++) {
// QueryOrdersResponse.DataBean.OrderBean.ProductBean productBean = orderBean.getProductList().get(i);
// String pid = StringUtils.isNotBlank(productBean.getSpecification()) ? productBean.getSpecification() : productBean.getProductId();
// if (!org.springframework.util.CollectionUtils.isEmpty(orderBean.getProductList().get(i).getDiscountList())) {
// List<QueryOrdersResponse.DataBean.OrderBean.ProductBean.ProductDiscount> discounts = orderBean.getProductList().get(i).getDiscountList().stream().
// filter(productDiscount -> productDiscount.getDiscountId().equals(accountBean.getAccountId())).collect(Collectors.toList());
// for (QueryOrdersResponse.DataBean.OrderBean.ProductBean.ProductDiscount productDiscount : discounts) {
// if (productDiscount.getDiscountType() == null || productDiscount.getDiscountType() == 0) {
// continue;
// }
// MCCafeProductRedeemVo mcCafeProductRedeemVo = new MCCafeProductRedeemVo();
// mcCafeProductRedeemVo.setPid(pid);
// mcCafeProductRedeemVo.setKeyProductCode(productBean.getCustomerCode());
// mcCafeProductRedeemVo.setCustomer_code(productBean.getCustomerCode());
// mcCafeProductRedeemVo.setConsume_num(productDiscount.getDiscountQty());
// mcCafeProductRedeemVo.setSeq(i + 1);
// products.add(mcCafeProductRedeemVo);
// }
// }
// }
// }
// MCCafeConponRequest mcCafeConponRequest = new MCCafeConponRequest();
// mcCafeConponRequest.setVer(Integer.valueOf(Version.VERSION_1));
// mcCafeConponRequest.setReqtype(CouponReqTypeEnum.REDEEM.getCode());
// mcCafeConponRequest.setPartnerId(Integer.parseInt(orderBean.getCompanyId()));
// mcCafeConponRequest.setStore_id(orderBean.getShopId());
// mcCafeConponRequest.setStation_id("-1");
// mcCafeConponRequest.setOperator_id("-1");
// // 订单号
// mcCafeConponRequest.setTrans_id(orderBean.getOid());
// mcCafeConponRequest.setChannel(OrderClientType.ALIPAY.getIndex().toString().equals(orderBean.getOrderClient())?MCCafeChannelEnum.MOCOFFEE_ZFB.getName():MCCafeChannelEnum.MOCOFFEE_WX.getName());
// List<MCCafeTransactionVo> transactions = new ArrayList<>();
// MCCafeTransactionVo mcCafeTransactionVo = new MCCafeTransactionVo();
// mcCafeTransactionVo.setCode(accountBean.getAccountId());
// mcCafeTransactionVo.setTotalAmount(-accountBean.getPrice());
// if (CollectionUtils.isNotEmpty(products)) {
// mcCafeTransactionVo.setProducts(products);
// }
// transactions.add(mcCafeTransactionVo);
// mcCafeConponRequest.setTransactions(transactions);
// mcCafeConponRequest.setSign("skip");
//
// mcCafeConponRequest.setAppFlag("kgd.N");
// mcCafeConponRequest.setBusiness_date(cn.freemud.base.util.DateUtil.convert2Str(new Date(), cn.freemud.base.util.DateUtil.FORMAT_yyyyMMdd));
//
// return couponOfflineMCCafeClient.redeem(mcCafeConponRequest);
// }
@Override
public
CouponRedeemResponse
redeem
(
MCCafeConponRequest
mcCafeConponRequest
)
{
return
couponOfflineMCCafeClient
.
redeem
(
mcCafeConponRequest
);
}
@Override
public
CouponRedeemResponse
redeemBatch
(
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
List
<
CreateOrderAccountRequest
>
accounts
)
{
return
null
;
}
@Override
public
CouponRedeemResponse
cancelRedeem
(
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
List
<
CreateOrderAccountRequest
>
accounts
)
{
MCCafeConponRequest
mcCafeConponRequest
=
new
MCCafeConponRequest
();
return
couponOfflineMCCafeClient
.
cancelRedeem
(
mcCafeConponRequest
);
}
@Override
public
CouponQueryResponse
query
(
MCCafeConponRequest
mcCafeConponRequest
)
{
return
couponOfflineMCCafeClient
.
query
(
mcCafeConponRequest
);
}
@Override
public
CouponBaseResponse
lock
(
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
List
<
CreateOrderAccountRequest
>
accounts
)
{
if
(
null
==
orderBean
||
CollectionUtils
.
isEmpty
(
accounts
))
{
return
null
;
}
Optional
<
CreateOrderAccountRequest
>
accountRequest
=
accounts
.
stream
().
filter
(
account
->
account
.
getAccountType
().
equals
(
QueryOrderAccountType
.
COUPON
)
||
account
.
getAccountType
().
equals
(
QueryOrderAccountType
.
PRODUCT_COUPON
)
||
account
.
getAccountType
().
equals
(
QueryOrderAccountType
.
DISCOUNT_COUPON
)).
findFirst
();
if
(!
accountRequest
.
isPresent
()
||
accountRequest
.
get
().
getPrice
()
==
0
)
{
return
null
;
}
CreateOrderAccountRequest
accountBean
=
accountRequest
.
get
();
MCCafeCouponLockRequest
couponCodeVerificationDto
=
new
MCCafeCouponLockRequest
();
couponCodeVerificationDto
.
setVer
(
Integer
.
valueOf
(
Version
.
VERSION_1
));
couponCodeVerificationDto
.
setReqType
(
CouponReqTypeEnum
.
LOCK
.
getCode
());
couponCodeVerificationDto
.
setPartnerId
(
orderBean
.
getCompanyId
());
couponCodeVerificationDto
.
setStoreId
(
orderBean
.
getShopId
());
// 订单号
couponCodeVerificationDto
.
setTransId
(
orderBean
.
getOid
());
couponCodeVerificationDto
.
setCoupon
(
accountBean
.
getAccountId
());
couponCodeVerificationDto
.
setOfferId
(
accountBean
.
getAccountId
());
couponCodeVerificationDto
.
setNumber
(
"1"
);
couponCodeVerificationDto
.
setChannel
(
OrderClientType
.
ALIPAY
.
getIndex
().
toString
().
equals
(
orderBean
.
getOrderClient
())
?
MCCafeChannelEnum
.
MOCOFFEE_ZFB
.
getName
():
MCCafeChannelEnum
.
MOCOFFEE_WX
.
getName
());
couponCodeVerificationDto
.
setOperatorId
(
"-1"
);
couponCodeVerificationDto
.
setStationId
(
"-1"
);
couponCodeVerificationDto
.
setSign
(
"skip"
);
return
couponOfflineMCCafeClient
.
lock
(
couponCodeVerificationDto
);
}
@Override
public
CouponBaseResponse
unlock
(
MCCafeCouponLockRequest
mcCafeCouponLockRequest
)
{
return
couponOfflineMCCafeClient
.
unlock
(
mcCafeCouponLockRequest
);
}
}
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/service/order/MCCafeOrderCenterSdkServiceImpl.java
0 → 100644
View file @
79b5413c
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
service
.
order
;
import
cn.freemud.amqp.Header
;
import
cn.freemud.amqp.MQAction
;
import
cn.freemud.amqp.MQMessage
;
import
cn.freemud.amqp.MQService
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager
;
import
com.freemud.api.assortment.datamanager.meal.MealCacheManager
;
import
com.freemud.api.assortment.datamanager.order.config.ManagerOrderBeanConfig
;
import
com.freemud.api.assortment.datamanager.order.manager.AssortmentOrderManager
;
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.CouponBaseResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedeemResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.service.OfflineCouponSdkService
;
import
com.freemud.application.sdk.api.log.ApiLog
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.log.ThirdPartyLog
;
import
com.freemud.application.sdk.api.membercenter.request.UserScoreRequest
;
import
com.freemud.application.sdk.api.membercenter.service.MemberCenterService
;
import
com.freemud.application.sdk.api.membercenter.service.MemberPropertyService
;
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.request.create.CreateFatherSonOrderReq
;
import
com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs
;
import
com.freemud.application.sdk.api.ordercenter.service.OrderDownLoadSdkService
;
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.vo.GetOrgTreeListRequest
;
import
com.freemud.application.sdk.api.storecenter.service.StoreCenterService
;
import
com.freemud.application.sdk.api.structure.service.MessageCenterClient
;
import
com.freemud.sdk.api.assortment.order.adapter.ActivitySdkAdapter
;
import
com.freemud.sdk.api.assortment.order.adapter.MemberSdkAdapter
;
import
com.freemud.sdk.api.assortment.order.adapter.OrderSdkAdapter
;
import
com.freemud.sdk.api.assortment.order.enums.OldOrderType
;
import
com.freemud.sdk.api.assortment.order.enums.ResponseResult
;
import
com.freemud.sdk.api.assortment.order.enums.StockChangeType
;
import
com.freemud.sdk.api.assortment.order.request.order.*
;
import
com.freemud.sdk.api.assortment.order.response.order.BaseOrderResponse
;
import
com.freemud.sdk.api.assortment.order.response.order.CreateFatherSonOrderResponse
;
import
com.freemud.sdk.api.assortment.order.response.order.CreateOrderResponse
;
import
com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse
;
import
com.freemud.sdk.api.assortment.order.service.CouponClientService
;
import
com.freemud.sdk.api.assortment.order.service.MCCafeOrderCenterSdkService
;
import
com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService
;
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.context.annotation.Import
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
import
java.util.stream.Collectors
;
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
;
@Import
(
ManagerOrderBeanConfig
.
class
)
@Service
public
class
MCCafeOrderCenterSdkServiceImpl
implements
MCCafeOrderCenterSdkService
{
@Autowired
private
StockSdkService
stockSdkService
;
@Autowired
private
PromotionSdkService
promotionSdkService
;
@Autowired
private
OrderSdkAdapter
orderSdkAdapter
;
@Autowired
private
MemberSdkAdapter
memberSdkAdapter
;
@Autowired
private
ActivitySdkAdapter
activitySdkAdapter
;
@Autowired
private
MQService
mqService
;
@Autowired
private
MemberScoreService
memberScoreService
;
@Autowired
private
MemberPropertyService
memberPropertyService
;
@Autowired
private
OrderSdkService
orderSdkService
;
@Autowired
private
StoreCenterService
storeCenterService
;
@Autowired
private
OrderDownLoadSdkService
orderDownLoadSdkService
;
@Autowired
private
MealCacheManager
mealCacheManager
;
@Autowired
private
AssortmentOrderManager
assortmentOrderManager
;
@Autowired
(
required
=
false
)
private
MessageCenterClient
messageCenterClient
;
@Autowired
private
AssortmentCustomerInfoManager
assortmentCustomerInfoManager
;
@Autowired
private
MemberCenterService
memberCenterService
;
@Autowired
private
OfflineCouponSdkService
offlineCouponSdkService
;
@Autowired
private
OrderCenterSdkService
orderCenterSdkService
;
@Autowired
private
CouponClientService
couponClientService
;
@Override
public
CreateOrderResponse
createMCCafeOrderFlow
(
CreateOrderRequest
config
)
{
com
.
freemud
.
application
.
sdk
.
api
.
ordercenter
.
request
.
create
.
CreateOrderRequest
request
=
orderSdkAdapter
.
convent2NEWCreateOrderRequest
(
config
.
getBaseCreateOrderRequest
());
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
=
updateMCCafeStockAndScore
(
createOrderResponse
.
getData
(),
config
.
getBaseCreateOrderRequest
().
getProducts
(),
config
.
getBaseCreateOrderRequest
().
getActivityUpdateStockRequest
(),
config
.
getBaseCreateOrderRequest
().
getAccounts
(),
config
.
getMqMessageRequest
(),
config
.
getBaseCreateOrderRequest
().
getMenuType
());
if
(!
RESPONSE_SUCCESS
.
equals
(
baseOrderResponse
.
getErrcode
()))
{
return
getCreateOrderResponse
(
baseOrderResponse
.
getErrcode
().
toString
(),
baseOrderResponse
.
getErrmsg
(),
null
);
}
return
createOrderResponse
;
}
@Override
public
CreateFatherSonOrderResponse
createMCCafeFatherSonOrder
(
CreateFatherSonOrderRequest
createFatherSonOrderRequest
)
{
CreateFatherSonOrderReq
request
=
orderSdkAdapter
.
convent2NEWCreateFatherSonOrderRequest
(
createFatherSonOrderRequest
);
com
.
freemud
.
application
.
sdk
.
api
.
ordercenter
.
response
.
BaseResponse
<
List
<
OrderInfoReqs
>>
baseResponse
=
orderSdkService
.
createFatherSonOrder
(
request
,
createFatherSonOrderRequest
.
getTrackingNo
());
if
(!
RESPONSE_SUCCESS_STR
.
equals
(
baseResponse
.
getCode
())
||
baseResponse
.
getResult
()
==
null
)
{
return
CreateFatherSonOrderResponse
.
error
(
baseResponse
.
getCode
(),
baseResponse
.
getMessage
());
}
CreateFatherSonOrderResponse
createFatherSonOrderResponse
=
orderSdkAdapter
.
convent2NEWFatherOrderInfoReqs
(
baseResponse
);
List
<
QueryOrdersResponse
.
DataBean
.
OrderBean
>
productOrderInfo
=
createFatherSonOrderResponse
.
getOrderBeanList
().
stream
().
filter
(
orderBeanTemp
->
1
==
orderBeanTemp
.
getBizType
()).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
productOrderInfo
))
{
return
CreateFatherSonOrderResponse
.
error
(
"500"
,
""
);
}
CreateFatherSonOrderRequest
.
OrderInfo
productOrderRequest
=
createFatherSonOrderRequest
.
getOrderInfoList
().
stream
().
filter
(
orderBeanTemp
->
1
==
orderBeanTemp
.
getBizType
()).
collect
(
Collectors
.
toList
()).
get
(
0
);
BaseOrderResponse
baseOrderResponse
=
updateMCCafeStockAndScore
(
productOrderInfo
.
get
(
0
),
productOrderRequest
.
getProducts
(),
productOrderRequest
.
getActivityUpdateStockRequest
(),
productOrderRequest
.
getAccounts
(),
createFatherSonOrderRequest
.
getMqMessageRequest
(),
createFatherSonOrderRequest
.
getMenuType
());
if
(!
RESPONSE_SUCCESS
.
equals
(
baseOrderResponse
.
getErrcode
()))
{
return
CreateFatherSonOrderResponse
.
error
(
baseOrderResponse
.
getErrcode
().
toString
(),
baseOrderResponse
.
getErrmsg
());
}
return
createFatherSonOrderResponse
;
}
private
BaseOrderResponse
updateMCCafeStockAndScore
(
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
List
<
CreateOrderProductRequest
>
products
,
ActivityUpdateStockRequest
updateStockRequest
,
List
<
CreateOrderAccountRequest
>
accounts
,
MqMessageRequest
mqMessageRequest
,
String
menuType
)
{
//TODO 转换获取库存信息,扣减库存
UpdateStocksRequest
updateStocksRequest
=
orderSdkAdapter
.
getUpdateProductStock
(
orderBean
,
products
,
StockChangeType
.
REDUCE
,
menuType
);
if
(
updateStocksRequest
!=
null
&&
CollectionUtils
.
isNotEmpty
(
updateStocksRequest
.
getProductStocks
()))
{
BaseResponse
baseResponse
=
stockSdkService
.
reducesStocks
(
updateStocksRequest
,
""
);
ThirdPartyLog
.
infoConvertJson
(
System
.
currentTimeMillis
(),
System
.
currentTimeMillis
(),
"updateStock"
,
JSONObject
.
toJSONString
(
updateStocksRequest
),
JSONObject
.
toJSONString
(
baseResponse
));
if
(!
ObjectUtils
.
equals
(
RESPONSE_SUCCESS_STR
,
baseResponse
.
getCode
()))
{
//TODO 失败取消订单
CancelOrderRequest
cancelOrderRequest
=
orderSdkAdapter
.
convent2CancelOrderRequest
(
orderBean
.
getOid
(),
orderBean
.
getCompanyId
(),
AfterSalesType
.
SYSTEM_CANCEL
,
"商品库存不足"
,
""
,
null
);
orderCenterSdkService
.
orderCancel
(
cancelOrderRequest
);
return
BaseOrderResponse
.
getErrorBaseOrderResponse
(
baseResponse
.
getCode
(),
"商品库存不足"
);
}
}
//TODO 扣减活动库存
ActivityUpdateStockRequest
activityUpdateStockRequest
=
orderSdkAdapter
.
convert2ActivityUpdateStockRequest
(
orderBean
,
updateStockRequest
);
if
(
activityUpdateStockRequest
!=
null
&&
CollectionUtils
.
isNotEmpty
(
activityUpdateStockRequest
.
getStock
()))
{
BaseResponse
activityResponse
=
promotionSdkService
.
subtractStock
(
activityUpdateStockRequest
,
""
);
ThirdPartyLog
.
infoConvertJson
(
System
.
currentTimeMillis
(),
System
.
currentTimeMillis
(),
"subtractStock"
,
JSONObject
.
toJSONString
(
activityUpdateStockRequest
),
JSONObject
.
toJSONString
(
activityResponse
));
if
(!
ObjectUtils
.
equals
(
RESPONSE_SUCCESS_STR
,
activityResponse
.
getCode
()))
{
//TODO 失败取消订单,异步冲正库存
CancelOrderRequest
cancelOrderRequest
=
orderSdkAdapter
.
convent2CancelOrderRequest
(
orderBean
.
getOid
(),
orderBean
.
getCompanyId
(),
AfterSalesType
.
SYSTEM_CANCEL
,
"活动库存不足"
,
""
,
null
);
orderCenterSdkService
.
orderCancel
(
cancelOrderRequest
);
//失败异步冲正库存,取消订单
backOrdersNotifyActivity
(
orderBean
,
mqMessageRequest
.
getBackOrdersNotifyActivityQueue
(),
mqMessageRequest
.
getBackOrdersNotifyActivityExchange
());
return
BaseOrderResponse
.
getErrorBaseOrderResponse
(
activityResponse
.
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
);
orderCenterSdkService
.
orderCancel
(
cancelOrderRequest
);
//失败异步冲正库存,取消订单
backOrdersNotifyActivity
(
orderBean
,
mqMessageRequest
.
getBackOrdersNotifyActivityQueue
(),
mqMessageRequest
.
getBackOrdersNotifyActivityExchange
());
return
BaseOrderResponse
.
getErrorBaseOrderResponse
(
userScoreResponse
.
getCode
(),
"积分不足"
);
}
}
CouponBaseResponse
couponRedeemResponse
=
couponClientService
.
lock
(
orderBean
,
accounts
);
if
(
couponRedeemResponse
!=
null
){
if
(!
ObjectUtils
.
equals
(
RESPONSE_SUCCESS_STR
,
couponRedeemResponse
.
getStatusCode
()))
{
//TODO 失败取消订单,异步冲正库存
CancelOrderRequest
cancelOrderRequest
=
orderSdkAdapter
.
convent2CancelOrderRequest
(
orderBean
.
getOid
(),
orderBean
.
getCompanyId
(),
AfterSalesType
.
SYSTEM_CANCEL
,
"冻结券码失败"
,
""
,
null
);
orderCenterSdkService
.
orderCancel
(
cancelOrderRequest
);
//失败异步冲正库存,取消订单
backOrdersNotifyActivity
(
orderBean
,
mqMessageRequest
.
getBackOrdersNotifyActivityQueue
(),
mqMessageRequest
.
getBackOrdersNotifyActivityExchange
());
return
BaseOrderResponse
.
getErrorBaseOrderResponse
(
couponRedeemResponse
.
getStatusCode
(),
"冻结券码失败"
);
}
}
// 如果是自提,则冻结优惠券,失败提示下单失败并冲正库存积分等
// 如果是外卖,则核销优惠券,失败提示下单失败并冲正库存积分等
// if(OldOrderType.TAKE_OUT.getCode().equals(orderBean.getType())) {
// CouponRedeemResponse couponRedeemResponse = couponClientService.redeem(orderBean, accounts);
//
// if (couponRedeemResponse!=null){
//
// if (!ObjectUtils.equals(RESPONSE_SUCCESS_STR, couponRedeemResponse.getStatusCode())) {
// //TODO 失败取消订单,异步冲正库存
// CancelOrderRequest cancelOrderRequest = orderSdkAdapter.convent2CancelOrderRequest(orderBean.getOid(), orderBean.getCompanyId(),
// AfterSalesType.SYSTEM_CANCEL, "核销券码失败", "", null);
// orderCenterSdkService.orderCancel(cancelOrderRequest);
// //失败异步冲正库存,取消订单
// backOrdersNotifyActivity(orderBean, mqMessageRequest.getBackOrdersNotifyActivityQueue(), mqMessageRequest.getBackOrdersNotifyActivityExchange());
// return BaseOrderResponse.getErrorBaseOrderResponse(couponRedeemResponse.getStatusCode(), "核销券码失败");
// }
// }
// } else if(OldOrderType.COLLECT_GOODS.getCode().equals(orderBean.getType()) || OldOrderType.EAT_IN.getCode().equals(orderBean.getType())) {
// CouponRedeemResponse couponRedeemResponse = couponClientService.lock(orderBean, accounts);
//
// if (couponRedeemResponse!=null){
//
// if (!ObjectUtils.equals(RESPONSE_SUCCESS_STR, couponRedeemResponse.getStatusCode())) {
// //TODO 失败取消订单,异步冲正库存
// CancelOrderRequest cancelOrderRequest = orderSdkAdapter.convent2CancelOrderRequest(orderBean.getOid(), orderBean.getCompanyId(),
// AfterSalesType.SYSTEM_CANCEL, "冻结券码失败", "", null);
// orderCenterSdkService.orderCancel(cancelOrderRequest);
// //失败异步冲正库存,取消订单
// backOrdersNotifyActivity(orderBean, mqMessageRequest.getBackOrdersNotifyActivityQueue(), mqMessageRequest.getBackOrdersNotifyActivityExchange());
// return BaseOrderResponse.getErrorBaseOrderResponse(couponRedeemResponse.getStatusCode(), "冻结券码失败");
// }
// }
// }
return
BaseOrderResponse
.
getErrorBaseOrderResponse
(
RESPONSE_SUCCESS_STR
,
""
);
}
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
;
}
ApiLog
.
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
);
}
}
private
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
;
}
/**
* 查询门店的组织机构
* @param partnerId
* @param storeCode
* @return
*/
private
List
<
String
>
getOrgIds
(
String
partnerId
,
String
storeCode
)
{
GetOrgTreeListRequest
request
=
new
GetOrgTreeListRequest
();
request
.
setPartnerId
(
partnerId
);
request
.
setStoreCode
(
storeCode
);
BaseResponse
<
List
<
String
>>
orgList
=
storeCenterService
.
getOrgList
(
request
,
LogThreadLocal
.
getTrackingNo
());
if
(
orgList
!=
null
&&
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
orgList
.
getCode
()))
{
return
orgList
.
getData
();
}
return
null
;
}
}
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/service/thirdparty/CardBinMCCafeClient.java
0 → 100644
View file @
79b5413c
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
service
.
thirdparty
;
import
com.freemud.sdk.api.assortment.order.entities.BatchQueryActivityInfoRequestDto
;
import
com.freemud.sdk.api.assortment.order.entities.GetAppKeyRequestDto
;
import
org.springframework.cloud.netflix.feign.FeignClient
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
//测试环境:http://115.159.65.101:8082 生产环境:https://onlinecoupon.sandload.cn
@FeignClient
(
name
=
"CARDBINMCCafeCLIENT"
,
url
=
"fff"
)
@RequestMapping
(
produces
=
{
"application/json;charset=UTF-8"
})
public
interface
CardBinMCCafeClient
{
/**
* 获取麦咖啡券码密钥
* @param requestDto
* @return
*/
@PostMapping
(
"/mccafe/getAppKey"
)
GetAppKeyRequestDto
getMCCafeAppKey
(
GetAppKeyRequestDto
requestDto
);
/**
* 麦咖啡活动信息批量查询
* @param requestDto
* @return
*/
@PostMapping
(
value
=
"/mccafe/batchQueryActivityInfo"
)
BatchQueryActivityInfoRequestDto
batchQueryMCCafeActivityInfo
(
BatchQueryActivityInfoRequestDto
requestDto
);
}
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/service/thirdparty/CouponOfflineMCCafeClient.java
0 → 100644
View file @
79b5413c
package
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
service
.
thirdparty
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponBaseResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponQueryResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedeemResponse
;
import
com.freemud.sdk.api.assortment.order.request.coupon.MCCafeCouponLockRequest
;
import
com.freemud.sdk.api.assortment.order.request.coupon.MCCafeConponRequest
;
import
org.springframework.cloud.netflix.feign.FeignClient
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
@FeignClient
(
name
=
"COUPONMCCafe"
,
url
=
"http://coupon-api-gateway-koderover-dev-coupon.api-ingress.sandload.cn"
)
@RequestMapping
(
produces
=
{
"application/json;charset=UTF-8"
})
public
interface
CouponOfflineMCCafeClient
{
@PostMapping
(
"/mccafe/redeem"
)
CouponRedeemResponse
redeem
(
MCCafeConponRequest
mcCafeConponRequest
);
@PostMapping
(
"/mccafe/cancelRedeem"
)
CouponRedeemResponse
cancelRedeem
(
MCCafeConponRequest
mcCafeConponRequest
);
@PostMapping
(
"/mccafe/query"
)
CouponQueryResponse
query
(
MCCafeConponRequest
mcCafeConponRequest
);
@PostMapping
(
"/mccafe/lock"
)
CouponBaseResponse
lock
(
MCCafeCouponLockRequest
MCCafeCouponLockRequest
);
@PostMapping
(
"/mccafe/unlock"
)
CouponBaseResponse
unlock
(
MCCafeCouponLockRequest
MCCafeCouponLockRequest
);
}
assortment-ordercenter-sdk/src/test/java/com/freemud/sdk/api/assortment/coupon/CouponSdkServiceTest.java
deleted
100644 → 0
View file @
80a616c1
package
com
.
freemud
.
sdk
.
api
.
assortment
.
coupon
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.TypeReference
;
import
com.freemud.application.sdk.api.base.BaseRequest
;
import
com.freemud.application.sdk.api.base.BaseResponse
;
import
com.freemud.application.sdk.api.constant.FMStatusCode
;
import
com.freemud.application.sdk.api.couponcenter.config.CouponOfflineApiConstant
;
import
com.freemud.application.sdk.api.couponcenter.config.CouponOfflineCenterProperties
;
import
com.freemud.application.sdk.api.couponcenter.offline.domain.ProductRedeemVO
;
import
com.freemud.application.sdk.api.couponcenter.offline.domain.TransactionVO
;
import
com.freemud.application.sdk.api.couponcenter.offline.request.CouponRequest
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponQueryResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedeemResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.service.OfflineCouponSdkService
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.storecenter.request.vo.GetOrgTreeListRequest
;
import
com.freemud.application.sdk.api.storecenter.service.StoreCenterService
;
import
com.freemud.application.sdk.api.util.BaseRequestUtils
;
import
com.freemud.application.sdk.api.util.RequestThirdPartyUtils
;
import
com.freemud.application.sdk.api.util.ResponseUtils
;
import
com.freemud.application.sdk.api.util.ValidationUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.junit.Test
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.client.RestTemplate
;
import
java.util.*
;
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
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: OrderCenterSdkServiceImplTest
* @Package com.freemud.sdk.api.assortment.order.service.order
* @Description: 简单描述下这个类是做什么用的
* @author: dingda.li
* @date: 2019-07-25 11:19
* @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目的
*/
public
class
CouponSdkServiceTest
{
@Autowired
private
StoreCenterService
storeCenterService
;
@Autowired
private
RestTemplate
restTemplate
;
/**
* 券核销
*/
@Test
public
void
couponRedeem71
()
{
CouponRequest
couponRequest
=
new
CouponRequest
();
couponRequest
.
setReqtype
(
71
);
couponRequest
.
setStore_id
(
"111"
);
couponRequest
.
setStation_id
(
"222"
);
couponRequest
.
setTrans_id
(
"333"
);
couponRequest
.
setChannel
(
"5"
);
List
<
TransactionVO
>
transactionVOList
=
new
ArrayList
<>();
TransactionVO
transactionVO
=
new
TransactionVO
();
transactionVO
.
setCode
(
"9800gtx"
);
List
<
ProductRedeemVO
>
productRedeemVOList
=
new
ArrayList
<>();
ProductRedeemVO
productRedeemVO
=
new
ProductRedeemVO
();
productRedeemVO
.
setSeq
(
1
);
productRedeemVO
.
setConsume_num
(
10
);
productRedeemVO
.
setPid
(
"1000555"
);
productRedeemVOList
.
add
(
productRedeemVO
);
transactionVO
.
setProducts
(
productRedeemVOList
);
transactionVOList
.
add
(
transactionVO
);
couponRequest
.
setTransactions
(
transactionVOList
);
couponRequest
.
setVer
(
1
);
couponRequest
.
setPartnerId
(
1000
);
BaseResponse
validateResponse
=
ValidationUtils
.
validate
(
couponRequest
);
if
(!
ResponseUtils
.
isSuccess
(
validateResponse
))
{
System
.
out
.
println
(
JSON
.
toJSONString
(
validateResponse
));
return
;
}
BaseRequest
<
CouponRequest
>
request
=
new
BaseRequest
();
request
.
setRequestBody
(
couponRequest
);
request
.
setAppName
(
"Order"
);
request
.
setBaseUrl
(
""
);
request
.
setTrackingNo
(
UUID
.
randomUUID
().
toString
());
CouponQueryResponse
couponQueryResponse
=
RequestThirdPartyUtils
.
httpJsonReqComplex
(
restTemplate
,
CouponOfflineApiConstant
.
COUPON_API
,
request
,
new
TypeReference
<
CouponQueryResponse
>(){});
if
(
couponQueryResponse
.
getStatusCode
()
!=
RESPONSE_SUCCESS
)
{
System
.
out
.
println
(
couponQueryResponse
.
getMsg
());
return
;
}
System
.
out
.
println
(
couponQueryResponse
);
}
/**
* 券冲正
*/
@Test
public
void
couponRedeem3
()
{
CouponRequest
couponRequest
=
new
CouponRequest
();
couponRequest
.
setReqtype
(
3
);
couponRequest
.
setStore_id
(
"111"
);
couponRequest
.
setStation_id
(
"222"
);
couponRequest
.
setTrans_id
(
"333"
);
couponRequest
.
setChannel
(
"5"
);
List
<
TransactionVO
>
transactionVOList
=
new
ArrayList
<>();
TransactionVO
transactionVO
=
new
TransactionVO
();
transactionVO
.
setCode
(
"9800gtx"
);
List
<
ProductRedeemVO
>
productRedeemVOList
=
new
ArrayList
<>();
ProductRedeemVO
productRedeemVO
=
new
ProductRedeemVO
();
productRedeemVO
.
setSeq
(
1
);
productRedeemVO
.
setConsume_num
(
10
);
productRedeemVO
.
setPid
(
"1000555"
);
productRedeemVOList
.
add
(
productRedeemVO
);
transactionVO
.
setProducts
(
productRedeemVOList
);
transactionVOList
.
add
(
transactionVO
);
couponRequest
.
setTransactions
(
transactionVOList
);
couponRequest
.
setVer
(
1
);
couponRequest
.
setPartnerId
(
1000
);
BaseResponse
validateResponse
=
ValidationUtils
.
validate
(
couponRequest
);
if
(!
ResponseUtils
.
isSuccess
(
validateResponse
))
{
System
.
out
.
println
(
JSON
.
toJSONString
(
validateResponse
));
return
;
}
BaseRequest
<
CouponRequest
>
request
=
new
BaseRequest
();
request
.
setRequestBody
(
couponRequest
);
request
.
setAppName
(
"Order"
);
request
.
setBaseUrl
(
""
);
request
.
setTrackingNo
(
UUID
.
randomUUID
().
toString
());
CouponQueryResponse
couponQueryResponse
=
RequestThirdPartyUtils
.
httpJsonReqComplex
(
restTemplate
,
CouponOfflineApiConstant
.
COUPON_API
,
request
,
new
TypeReference
<
CouponQueryResponse
>(){});
if
(
couponQueryResponse
==
null
)
{
System
.
out
.
println
(
"查询券列表返回Null"
);
return
;
}
if
(
couponQueryResponse
.
getStatusCode
()
!=
RESPONSE_SUCCESS
)
{
System
.
out
.
println
(
couponQueryResponse
.
getMsg
());
return
;
}
System
.
out
.
println
(
couponQueryResponse
);
}
}
\ No newline at end of file
order-application-service/src/main/java/cn/freemud/OrderApplication.java
View file @
79b5413c
...
@@ -42,7 +42,7 @@ import tk.mybatis.spring.annotation.MapperScan;
...
@@ -42,7 +42,7 @@ import tk.mybatis.spring.annotation.MapperScan;
@ComponentScan
({
"cn.freemud"
,
"com.freemud"
})
@ComponentScan
({
"cn.freemud"
,
"com.freemud"
})
@MapperScan
({
"cn.freemud.*.dao"
,
"com.freemud.sdk.api.assortment.orderdistributor.mapper"
,
"com.freemud.api.assortment.datamanager.manager"
,
@MapperScan
({
"cn.freemud.*.dao"
,
"com.freemud.sdk.api.assortment.orderdistributor.mapper"
,
"com.freemud.api.assortment.datamanager.manager"
,
"com.freemud.api.assortment.datamanager.queue.dao"
,
"com.freemud.api.assortment.datamanager.rbac.dao"
,
"com.freemud.api.assortment.datamanager.queue.entity"
})
"com.freemud.api.assortment.datamanager.queue.dao"
,
"com.freemud.api.assortment.datamanager.rbac.dao"
,
"com.freemud.api.assortment.datamanager.queue.entity"
})
@EnableFeignClients
({
"cn.freemud.service.thirdparty"
,
"com.freemud.sdk.api.assortment.message"
})
@EnableFeignClients
({
"cn.freemud.service.thirdparty"
,
"com.freemud.sdk.api.assortment.message"
,
"com.freemud.sdk.api.assortment.order.service.thirdparty"
})
@EnableAutoConfiguration
@EnableAutoConfiguration
public
class
OrderApplication
{
public
class
OrderApplication
{
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
...
...
order-application-service/src/main/java/cn/freemud/controller/OrderController.java
View file @
79b5413c
...
@@ -19,6 +19,7 @@ import cn.freemud.entities.vo.encircle.EmptyTableNumberVo;
...
@@ -19,6 +19,7 @@ import cn.freemud.entities.vo.encircle.EmptyTableNumberVo;
import
cn.freemud.entities.vo.encircle.EncircleReserveBaseVo
;
import
cn.freemud.entities.vo.encircle.EncircleReserveBaseVo
;
import
cn.freemud.monitorcenter.tools.HealthUtil
;
import
cn.freemud.monitorcenter.tools.HealthUtil
;
import
cn.freemud.service.EncircleOrderService
;
import
cn.freemud.service.EncircleOrderService
;
import
cn.freemud.service.MCCafeOrderService
;
import
cn.freemud.service.OrderAdapterService
;
import
cn.freemud.service.OrderAdapterService
;
import
cn.freemud.service.Orderservice
;
import
cn.freemud.service.Orderservice
;
import
cn.freemud.utils.ResponseUtil
;
import
cn.freemud.utils.ResponseUtil
;
...
@@ -49,6 +50,8 @@ public class OrderController {
...
@@ -49,6 +50,8 @@ public class OrderController {
private
EncircleOrderService
encircleOrderService
;
private
EncircleOrderService
encircleOrderService
;
@Autowired
@Autowired
private
MallOrderServiceImpl
mallOrderService
;
private
MallOrderServiceImpl
mallOrderService
;
@Autowired
private
MCCafeOrderService
mcCafeOrderService
;
/**
/**
* 创建订单之前校验前面排队的订单数
* 创建订单之前校验前面排队的订单数
...
@@ -76,6 +79,15 @@ public class OrderController {
...
@@ -76,6 +79,15 @@ public class OrderController {
}
}
/**
/**
* 麦咖啡创建订单
*/
@ApiAnnotation
(
logMessage
=
"createMCCafeOrder"
)
@PostMapping
(
"/createMCCafeOrder"
)
public
BaseResponse
createOrderMCCafe
(
@Validated
@LogParams
@RequestBody
CreateOrderVo
createOrderVo
)
{
return
orderAdapterService
.
createMCCafeOrder
(
createOrderVo
);
}
/**
* 扫脸支付下单
* 扫脸支付下单
*/
*/
@ApiAnnotation
(
logMessage
=
"scanFaceCreateOrder"
)
@ApiAnnotation
(
logMessage
=
"scanFaceCreateOrder"
)
...
@@ -112,6 +124,15 @@ public class OrderController {
...
@@ -112,6 +124,15 @@ public class OrderController {
}
}
/**
/**
* 麦咖啡订单支付成功后通知
*/
@ApiAnnotation
(
logMessage
=
"mcCafePaySuccessCallback"
)
@PostMapping
({
"/mcCafePaySuccessCallback"
,
"/openStoreMCCafeQueryPaymentCallback"
})
public
String
mcCafePaySuccessCallback
(
@LogParams
@RequestBody
NewPaysuccessNoticeMessage
message
)
{
return
mcCafeOrderService
.
mcCafePaySuccessCallback
(
message
);
}
/**
* 退款回掉通知
* 退款回掉通知
*/
*/
@ApiAnnotation
(
logMessage
=
"refundNotifyCallback"
)
@ApiAnnotation
(
logMessage
=
"refundNotifyCallback"
)
...
...
order-application-service/src/main/java/cn/freemud/entities/dto/shoppingCart/MCCafeShoppingCartGoodsDto.java
0 → 100644
View file @
79b5413c
package
cn
.
freemud
.
entities
.
dto
.
shoppingCart
;
import
cn.freemud.entities.dto.OrderProductAddInfo
;
import
cn.freemud.entities.vo.SubtractStockVO
;
import
com.alibaba.fastjson.JSON
;
import
lombok.Builder
;
import
lombok.Data
;
import
org.apache.commons.collections4.CollectionUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.stream.Collectors
;
@Data
public
class
MCCafeShoppingCartGoodsDto
extends
ShoppingCartGoodsDto
{
private
String
thirdCouponCode
;
}
order-application-service/src/main/java/cn/freemud/service/MCCafeOrderService.java
0 → 100644
View file @
79b5413c
package
cn
.
freemud
.
service
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.entities.dto.ConfirmOrderDto
;
import
cn.freemud.entities.dto.QueryOrdersResponseDto
;
import
cn.freemud.entities.vo.*
;
import
java.util.Map
;
/**
* 订单服务
*
* @author liming.guo
* @date 2018/05/08
*/
public
interface
MCCafeOrderService
{
/**
* 创建麦咖啡订单
*/
BaseResponse
createMCCafeOrder
(
CreateOrderVo
createOrderVo
);
/**
* 麦咖啡支付成功回调
*/
String
mcCafePaySuccessCallback
(
NewPaysuccessNoticeMessage
message
);
/**
* 支付回调
*/
String
paySuccessCallback
(
PaysuccessNoticeMessage
message
,
ConfirmOrderDto
confirmOrderDto
,
Map
<
String
,
QueryOrdersResponseDto
.
DataBean
.
OrderBean
>
orderBeans
);
}
order-application-service/src/main/java/cn/freemud/service/OrderAdapterService.java
View file @
79b5413c
...
@@ -27,6 +27,13 @@ public interface OrderAdapterService {
...
@@ -27,6 +27,13 @@ public interface OrderAdapterService {
BaseResponse
createOrderNew
(
CreateOrderVo
createOrderVo
);
BaseResponse
createOrderNew
(
CreateOrderVo
createOrderVo
);
/**
/**
* 麦咖啡创建订单
* @param createOrderVo
* @return
*/
BaseResponse
createMCCafeOrder
(
CreateOrderVo
createOrderVo
);
/**
* 创建预支付
* 创建预支付
*/
*/
BaseResponse
createPrepay
(
CreatePrepayVo
createPrepayVo
);
BaseResponse
createPrepay
(
CreatePrepayVo
createPrepayVo
);
...
@@ -41,4 +48,9 @@ public interface OrderAdapterService {
...
@@ -41,4 +48,9 @@ public interface OrderAdapterService {
*/
*/
String
paySuccessCallback
(
PaysuccessNoticeMessage
message
);
String
paySuccessCallback
(
PaysuccessNoticeMessage
message
);
/**
* 支付回调处理
*/
String
mcCafePaySuccessCallback
(
PaysuccessNoticeMessage
message
);
}
}
order-application-service/src/main/java/cn/freemud/service/impl/CheckOrder.java
View file @
79b5413c
...
@@ -12,6 +12,7 @@
...
@@ -12,6 +12,7 @@
*/
*/
package
cn
.
freemud
.
service
.
impl
;
package
cn
.
freemud
.
service
.
impl
;
import
cn.freemud.base.constant.Version
;
import
cn.freemud.base.util.DateUtil
;
import
cn.freemud.base.util.DateUtil
;
import
cn.freemud.constant.ResponseCodeConstant
;
import
cn.freemud.constant.ResponseCodeConstant
;
import
cn.freemud.constant.StoreConstant
;
import
cn.freemud.constant.StoreConstant
;
...
@@ -34,7 +35,9 @@ import cn.freemud.service.CouponService;
...
@@ -34,7 +35,9 @@ import cn.freemud.service.CouponService;
import
cn.freemud.service.thirdparty.ShoppingCartClient
;
import
cn.freemud.service.thirdparty.ShoppingCartClient
;
import
cn.freemud.service.thirdparty.StockClient
;
import
cn.freemud.service.thirdparty.StockClient
;
import
cn.freemud.utils.LogUtil
;
import
cn.freemud.utils.LogUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.TypeReference
;
import
com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformIappWxappConfig
;
import
com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformIappWxappConfig
;
import
com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerStoreDeliveryConfig
;
import
com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerStoreDeliveryConfig
;
import
com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
;
import
com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
;
...
@@ -42,6 +45,7 @@ import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformIapp
...
@@ -42,6 +45,7 @@ import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformIapp
import
com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformPartnerStoreDeliveryConfigManager
;
import
com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformPartnerStoreDeliveryConfigManager
;
import
com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager
;
import
com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager
;
import
com.freemud.application.sdk.api.base.BaseResponse
;
import
com.freemud.application.sdk.api.base.BaseResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponQueryResponse
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.membercenter.request.QueryReceiveAddressRequest
;
import
com.freemud.application.sdk.api.membercenter.request.QueryReceiveAddressRequest
;
import
com.freemud.application.sdk.api.membercenter.request.StatisticalPropertyRequest
;
import
com.freemud.application.sdk.api.membercenter.request.StatisticalPropertyRequest
;
...
@@ -54,6 +58,9 @@ import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
...
@@ -54,6 +58,9 @@ import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
import
com.freemud.application.sdk.api.storecenter.response.QueryDeliverDetailResponse
;
import
com.freemud.application.sdk.api.storecenter.response.QueryDeliverDetailResponse
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
import
com.freemud.application.sdk.api.storecenter.service.StoreCenterService
;
import
com.freemud.application.sdk.api.storecenter.service.StoreCenterService
;
import
com.freemud.sdk.api.assortment.order.enums.CouponReqTypeEnum
;
import
com.freemud.sdk.api.assortment.order.request.coupon.MCCafeConponRequest
;
import
com.freemud.sdk.api.assortment.order.service.CouponClientService
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Lists
;
import
com.google.gson.Gson
;
import
com.google.gson.Gson
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
...
@@ -108,6 +115,8 @@ public class CheckOrder {
...
@@ -108,6 +115,8 @@ public class CheckOrder {
private
ItemServiceImpl
itemService
;
private
ItemServiceImpl
itemService
;
@Autowired
@Autowired
private
CouponService
couponService
;
private
CouponService
couponService
;
@Autowired
private
CouponClientService
couponClientService
;
private
static
Gson
gson
=
new
Gson
();
private
static
Gson
gson
=
new
Gson
();
/**
/**
* 下单会员相关校验
* 下单会员相关校验
...
@@ -498,6 +507,98 @@ public class CheckOrder {
...
@@ -498,6 +507,98 @@ public class CheckOrder {
return
shoppingCartGoodsDto
;
return
shoppingCartGoodsDto
;
}
}
public
ShoppingCartGoodsDto
getMCCafeShoppingCartGoodsDto
(
CreateOrderVo
createOrderVo
)
{
ShoppingCartInfoRequestVo
.
BuyMemberCard
buyMemberCard
=
null
;
if
(
createOrderVo
.
getBuyMemberCard
()
!=
null
)
{
buyMemberCard
=
new
ShoppingCartInfoRequestVo
.
BuyMemberCard
();
buyMemberCard
.
setPaidId
(
createOrderVo
.
getBuyMemberCard
().
getPaidId
());
buyMemberCard
.
setRuleId
(
createOrderVo
.
getBuyMemberCard
().
getRuleId
());
}
ShoppingCartInfoRequestVo
shoppingCartInfoRequestVo
=
ShoppingCartInfoRequestVo
.
builder
()
.
partnerId
(
createOrderVo
.
getPartnerId
())
.
shopId
(
createOrderVo
.
getShopId
())
.
version
(
createOrderVo
.
getVersion
())
.
sessionId
(
createOrderVo
.
getSessionId
())
.
orderType
(
createOrderVo
.
getOrderType
())
.
reachStoreType
(
createOrderVo
.
getReachStoreType
())
.
flag
(
CouponFlag
.
NO
.
getCode
())
.
receiveId
(
createOrderVo
.
getReceiveId
())
.
useCustomerScore
(
createOrderVo
.
getUseCustomerScore
())
.
buyMemberCard
(
buyMemberCard
)
.
menuType
(
createOrderVo
.
getMenuType
())
.
build
();
// 如果使用优惠券或者商品券,校验 couponCode
// if (StringUtils.isNotBlank(createOrderVo.getCouponCode())) {
// // 校验couponCode
// GetCouponDetailResponseDto getCouponDetailResponseDto = couponService.getMemberCoupon(GetMemberCouponRequestVo.builder()
// .partnerId(createOrderVo.getPartnerId())
// .couponCode(createOrderVo.getCouponCode()).build());
// if (Objects.equals(getCouponDetailResponseDto, null) || CollectionUtils.isEmpty(getCouponDetailResponseDto.getDetails())
// || getCouponDetailResponseDto.getDetails().get(0).getActive() == null
// || getCouponDetailResponseDto.getDetails().get(0).getActive().getActiveCode() == null) {
// if ((CollectionUtils.isNotEmpty(getCouponDetailResponseDto.getDetails().get(0).getActiveRestrictionVOS())
// && CollectionUtils.isEmpty(getCouponDetailResponseDto.getDetails().get(0).getActiveRestrictionVOS().stream()
// .filter(a -> Objects.equals(a.getStoreIdPartner(), createOrderVo.getShopId())).collect(Collectors.toList()))
// )) {
// throw new ServiceException(ResponseResult.COUPON_SHOP_NOTSUPPORT);
// } else {
// throw new ServiceException(ResponseResult.COUPON_GETINFO_INVAILD);
// }
// }
// String activeCode = getCouponDetailResponseDto.getDetails().get(0).getActive().getActiveCode();
// // 校验点餐方式,查询购物车接口内部已校验
// shoppingCartInfoRequestVo.setCouponCode(createOrderVo.getCouponCode());
// // 活动code
// shoppingCartInfoRequestVo.setActivityCode(activeCode);
// shoppingCartInfoRequestVo.setCardCode(createOrderVo.getCardCode());
// }
if
(
StringUtils
.
isNotBlank
(
createOrderVo
.
getCouponCode
()))
{
// 校验couponCode
CouponQueryResponse
couponQueryResponse
=
couponClientService
.
query
(
MCCafeConponRequest
.
builder
()
.
ver
(
Integer
.
valueOf
(
Version
.
VERSION_1
))
.
reqtype
(
CouponReqTypeEnum
.
QUERY
.
getCode
())
.
partnerId
(
Integer
.
parseInt
(
createOrderVo
.
getPartnerId
()))
.
store_id
(
createOrderVo
.
getShopId
())
.
station_id
(
"1"
)
.
operator_id
(
createOrderVo
.
getUserId
())
.
channel
(
createOrderVo
.
getChannel
())
.
coupon
(
createOrderVo
.
getCouponCode
())
.
sign
(
"skip"
)
.
build
());
if
(
couponQueryResponse
==
null
||
!
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
couponQueryResponse
.
getStatusCode
()))
{
throw
new
ServiceException
(
ResponseResult
.
COUPON_SHOP_NOTSUPPORT
);
}
String
activeCode
=
couponQueryResponse
.
getCodeInfo
().
getAct_id
();
// 校验点餐方式,查询购物车接口内部已校验
shoppingCartInfoRequestVo
.
setCouponCode
(
createOrderVo
.
getCouponCode
());
// 活动code
shoppingCartInfoRequestVo
.
setActivityCode
(
activeCode
);
shoppingCartInfoRequestVo
.
setCardCode
(
createOrderVo
.
getCardCode
());
}
// 通过购物车获取优惠信息
GetShoppingCartGoodsApportionDto
requestDto
=
new
GetShoppingCartGoodsApportionDto
();
requestDto
.
setShoppingCartInfoRequestVo
(
shoppingCartInfoRequestVo
);
//加价购商品 校验放购物车校验
requestDto
.
setPremiumExchangeActivity
(
createOrderVo
.
getPremiumExchangeActivity
());
// cn.freemud.base.entity.BaseResponse<ShoppingCartGoodsDto> apportionResponse = shoppingCartClient.getShoppingCartGoodsApportionNew(requestDto);
cn
.
freemud
.
base
.
entity
.
BaseResponse
<
ShoppingCartGoodsDto
>
apportionResponse
=
JSON
.
parseObject
(
"{\"code\":\"100\",\"message\":\"success\",\"result\":{\"activityDiscountsDtos\":[{\"activityCode\":\"MMJ2020080414450543441\",\"activityName\":\"231321313\",\"activityType\":11,\"discountAmount\":-200}],\"isDiscountDelivery\":false,\"originalTotalAmount\":1600,\"packageAmount\":2,\"products\":[{\"activityDiscountsDtos\":[{\"activityCode\":\"MMJ2020080414450543441\",\"activityName\":\"231321313\",\"activityType\":11,\"discountAmount\":124}],\"attributeNames\":\"{\\\"attributeNames\\\":\\\"微辣\\\"}\",\"classificationId\":\"\",\"customerCode\":\"144101061128506371\",\"extraList\":[{\"attributeId\":\"141178803539043623\",\"attributeName\":\"微辣\"}],\"hasProductCoupon\":false,\"materialList\":[{\"activityDiscountsDtos\":[{\"activityCode\":\"MMJ2020080414450543441\",\"activityName\":\"231321313\",\"activityType\":11,\"discountAmount\":13}],\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"extraList\":[],\"hasProductCoupon\":false,\"originalPrice\":100,\"spuId\":\"180924094892495124\",\"spuName\":\"红豆\",\"stockLimit\":false,\"totalDiscountAmount\":26},{\"activityDiscountsDtos\":[{\"activityCode\":\"MMJ2020080414450543441\",\"activityName\":\"231321313\",\"activityType\":11,\"discountAmount\":26}],\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"extraList\":[],\"hasProductCoupon\":false,\"originalPrice\":200,\"spuId\":\"180924005379756305\",\"spuName\":\"奶盖\",\"stockLimit\":false,\"totalDiscountAmount\":52}],\"originalPrice\":800,\"picture\":\"https://img10.sandload.cn/zfd0x0.jpg?timestamp=1593831027040\",\"productType\":88,\"qty\":2,\"skuId\":\"144101061128506371\",\"skuName\":\"红烧鱼块\",\"spuId\":\"144101061128506371\",\"spuName\":\"红烧鱼块\",\"stockLimit\":false,\"totalDiscountAmount\":202,\"unit\":\"\",\"weight\":0.0}],\"reduceScore\":140,\"scoreReduceAmount\":1400,\"stocks\":[{\"activityCode\":\"MMJ2020080414450543441\",\"activityStock\":1,\"activityType\":11,\"goodsStock\":[]}],\"totalAmount\":1400,\"totalDiscountAmount\":200},\"ver\":\"1\"}"
,
new
TypeReference
<
cn
.
freemud
.
base
.
entity
.
BaseResponse
<
ShoppingCartGoodsDto
>>(){}
);
if
(!
ObjectUtils
.
equals
(
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
,
apportionResponse
.
getCode
()))
{
ResponseResult
responseResult
=
ResponseResult
.
getResponseResult
(
apportionResponse
.
getCode
());
throw
new
ServiceException
(
responseResult
!=
null
?
responseResult
:
ResponseResult
.
SHOPPING_CART_GETINFO_ERROR
);
}
if
(
apportionResponse
.
getResult
()
==
null
||
CollectionUtils
.
isEmpty
(
apportionResponse
.
getResult
().
getProducts
()))
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_GETINFO_INVAILD
);
}
ShoppingCartGoodsDto
shoppingCartGoodsDto
=
apportionResponse
.
getResult
();
if
(
shoppingCartGoodsDto
.
getOriginalTotalAmount
()
==
null
)
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_GETINFO_INVAILD
);
}
return
shoppingCartGoodsDto
;
}
/**
/**
* 获取门店配送信息
* 获取门店配送信息
*/
*/
...
...
order-application-service/src/main/java/cn/freemud/service/impl/MCCafeOrderServiceImpl.java
0 → 100644
View file @
79b5413c
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: OrderServiceImpl
* @Package cn.freemud.service.impl
* @Description:
* @author: liming.guo
* @date: 2018/5/17 20:55
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package
cn
.
freemud
.
service
.
impl
;
import
cn.freemud.adapter.*
;
import
cn.freemud.amp.body.MessagePushNewMqBody
;
import
cn.freemud.amqp.Header
;
import
cn.freemud.amqp.MQAction
;
import
cn.freemud.amqp.MQMessage
;
import
cn.freemud.amqp.MQService
;
import
cn.freemud.base.constant.Version
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.base.log.LogTreadLocal
;
import
cn.freemud.base.util.DateUtil
;
import
cn.freemud.constant.OrderRefundConstant
;
import
cn.freemud.constant.RedisKeyConstant
;
import
cn.freemud.constant.ResponseCodeConstant
;
import
cn.freemud.entities.dto.PayAccessResponse
;
import
cn.freemud.entities.dto.*
;
import
cn.freemud.entities.dto.QueryOrdersResponseDto.DataBean.OrderBean
;
import
cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseDto
;
import
cn.freemud.entities.dto.activity.PayGitCheckAndJoinRequestDto
;
import
cn.freemud.entities.dto.order.CreateOrderOperateDto
;
import
cn.freemud.entities.dto.order.CreatePrepayRequestDto
;
import
cn.freemud.entities.dto.order.FacePayRequestDto
;
import
cn.freemud.entities.dto.order.FacePayResponseDto
;
import
cn.freemud.entities.dto.product.AttributeValue
;
import
cn.freemud.entities.dto.product.GroupDetail
;
import
cn.freemud.entities.dto.product.ProductAttributeGroup
;
import
cn.freemud.entities.dto.product.ProductGroup
;
import
cn.freemud.entities.dto.shoppingCart.NewShoppingCartClearDto
;
import
cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto
;
import
cn.freemud.entities.vo.*
;
import
cn.freemud.enums.*
;
import
cn.freemud.interceptor.ServiceException
;
import
cn.freemud.redis.RedisCache
;
import
cn.freemud.service.*
;
import
cn.freemud.service.thirdparty.*
;
import
cn.freemud.utils.BeanUtil
;
import
cn.freemud.utils.LogUtil
;
import
cn.freemud.utils.ResponseUtil
;
import
cn.freemud.utils.ValidationCode
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.api.assortment.datamanager.entity.db.*
;
import
com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
;
import
com.freemud.api.assortment.datamanager.enums.IappIdType
;
import
com.freemud.api.assortment.datamanager.manager.*
;
import
com.freemud.api.assortment.datamanager.manager.cache.CacheOpenPlatformPartnerWxappConfigManager
;
import
com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager
;
import
com.freemud.api.assortment.datamanager.meal.MealCacheManager
;
import
com.freemud.application.sdk.api.constant.ResponseConstant
;
import
com.freemud.application.sdk.api.constant.ResponseResultEnum
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponBaseResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedeemResponse
;
import
com.freemud.application.sdk.api.deliverycenter.response.DeliveryInfoDto
;
import
com.freemud.application.sdk.api.deliverycenter.response.DeliveryResponseDto
;
import
com.freemud.application.sdk.api.deliverycenter.service.DeliveryService
;
import
com.freemud.application.sdk.api.log.ApiLog
;
import
com.freemud.application.sdk.api.log.ErrorLog
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType
;
import
com.freemud.application.sdk.api.ordercenter.enums.OrderClientType
;
import
com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto
;
import
com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq
;
import
com.freemud.application.sdk.api.paymentcenter.client.request.CodePayRequest
;
import
com.freemud.application.sdk.api.paymentcenter.client.request.SVCCardAmountRequest
;
import
com.freemud.application.sdk.api.paymentcenter.client.response.CodePayResponse
;
import
com.freemud.application.sdk.api.paymentcenter.client.response.SVCCardAmountResponse
;
import
com.freemud.application.sdk.api.paymentcenter.client.service.PaymentNewService
;
import
com.freemud.application.sdk.api.storecenter.request.GetListByCodesRequest
;
import
com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest
;
import
com.freemud.application.sdk.api.storecenter.response.GetListByCodesResponse
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
import
com.freemud.application.sdk.api.storecenter.service.StoreCenterService
;
import
com.freemud.application.sdk.api.structure.request.PushMessageNoticeDto
;
import
com.freemud.application.sdk.api.structure.service.MessageCenterClient
;
import
com.freemud.sdk.api.assortment.message.config.MessageOfficialRefundPushMqConfig
;
import
com.freemud.sdk.api.assortment.message.entity.MpTemplateMsg
;
import
com.freemud.sdk.api.assortment.message.entity.MpTemplateMsgDataValue
;
import
com.freemud.sdk.api.assortment.message.enums.MessageEventType
;
import
com.freemud.sdk.api.assortment.message.request.MessagePushOrderTemplateRequest
;
import
com.freemud.sdk.api.assortment.message.request.MessageTemplateRequest
;
import
com.freemud.sdk.api.assortment.message.service.IMessageTemplatePushService
;
import
com.freemud.sdk.api.assortment.order.enums.CouponReqTypeEnum
;
import
com.freemud.sdk.api.assortment.order.enums.MCCafeChannelEnum
;
import
com.freemud.sdk.api.assortment.order.enums.OldOrderStatus
;
import
com.freemud.sdk.api.assortment.order.enums.QueryOrderAccountType
;
import
com.freemud.sdk.api.assortment.order.request.coupon.MCCafeConponRequest
;
import
com.freemud.sdk.api.assortment.order.request.coupon.MCCafeCouponLockRequest
;
import
com.freemud.sdk.api.assortment.order.request.coupon.MCCafeProductRedeemVo
;
import
com.freemud.sdk.api.assortment.order.request.coupon.MCCafeTransactionVo
;
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.response.payment.OrderPayResponse
;
import
com.freemud.sdk.api.assortment.order.service.CouponClientService
;
import
com.freemud.sdk.api.assortment.order.service.MCCafeOrderCenterSdkService
;
import
com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService
;
import
com.freemud.sdk.api.assortment.order.vo.ProductGroupVo
;
import
com.freemud.sdk.api.assortment.orderdistributor.entity.dto.PaymentMqMessageDto
;
import
com.freemud.sdk.api.assortment.orderdistributor.service.PaymentQueueService
;
import
com.freemud.sdk.api.assortment.payment.request.UnifiedOrderRequest
;
import
com.freemud.sdk.api.assortment.payment.response.OrderRefundResponse
;
import
com.freemud.sdk.api.assortment.payment.response.UnifiedOrderResponse
;
import
com.freemud.sdk.api.assortment.payment.service.StandardPaymentService
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
com.google.gson.Gson
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.ObjectUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.builder.ToStringBuilder
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
java.util.*
;
import
java.util.concurrent.TimeUnit
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
import
static
cn
.
freemud
.
constant
.
OrderRefundConstant
.
ALLOW_REFUND
;
import
static
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
domain
.
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
;
@Service
@Slf4j
public
class
MCCafeOrderServiceImpl
implements
MCCafeOrderService
{
private
final
Integer
RESPONSE_SUCCESS_CODE
=
100
;
private
static
Gson
gson
=
new
Gson
();
@Value
(
"${saas.reverseNotifyiDcUrl}"
)
private
String
reverseNotifyiDcUrl
;
@Value
(
"${program.backorders_change_order_status_consumer_queue}"
)
private
String
backOrdersChangeOrderStatusConsumerQueue
;
@Value
(
"${program.backorders_notify_activity_exchange}"
)
private
String
backOrdersNotifyActivityExchange
;
@Value
(
"${mq.queue.cloud_print_queue}"
)
private
String
cloudPrintQueue
;
@Value
(
"${mq.cloud_print_exchange}"
)
private
String
cloud_print_exchange
;
@Autowired
private
AssortmentCloudPrinterManager
cloudPrinterManager
;
@Autowired
private
FMAssistantCloudPrintClient
fmAssistantCloudPrintClient
;
@Autowired
private
MessageCenterClient
messageNoticeClient
;
@Autowired
private
PromotionActivityClient
promotionActivityClient
;
@Autowired
private
ShoppingCartClient
shoppingCartClient
;
@Autowired
private
CustomerApplicationClient
customerApplicationClient
;
@Autowired
private
ItemServiceImpl
itemService
;
@Autowired
private
BuriedPointService
buriedPointService
;
@Autowired
private
CouponActivityService
couponActivityService
;
@Autowired
private
MessageNoticeAdapter
messageNoticeAdapter
;
@Autowired
private
OrderAdapter
orderAdapter
;
@Autowired
private
ActivityAdapter
activityAdapter
;
@Autowired
private
CouponAdapter
couponAdapter
;
@Autowired
private
MealCacheManager
mealCacheManager
;
//聚合订单服务
@Autowired
private
OrderCenterSdkService
orderCenterSdkService
;
@Autowired
private
MCCafeOrderCenterSdkService
mcCafeOrderCenterSdkService
;
@Autowired
private
StandardPaymentService
standardPaymentService
;
//门店SDK
@Autowired
private
StoreCenterService
storeCenterService
;
@Autowired
private
DeliveryService
deliveryService
;
@Autowired
private
MQService
mqService
;
@Autowired
@Qualifier
(
"messageTemplatePushOrderService"
)
private
IMessageTemplatePushService
<
MessagePushOrderTemplateRequest
>
messageTemplatePushService
;
@Autowired
private
AssortmentOpenPlatformWxappManager
openPlatformWxappManager
;
@Autowired
private
AssortmentOpenPlatformPartnerConfigManager
openPlatformPartnerConfigManager
;
@Autowired
private
AssortmentCustomerInfoManager
customerInfoManager
;
@Autowired
private
CheckOrder
checkOrder
;
@Autowired
private
RedisCache
redisCache
;
@Autowired
private
PaymentQueueService
paymentQueueService
;
@Autowired
private
PaymentNewService
paymentNewService
;
@Autowired
private
ActivityApplicationClient
activityApplicationClient
;
@Autowired
private
AssortmentOpenPlatformWxappAuthorizerManager
wxappAuthorizerManager
;
@Autowired
private
PaymentNewClient
paymentNewClient
;
@Autowired
private
CacheOpenPlatformPartnerWxappConfigManager
cacheOpenPlatformPartnerWxappConfigManager
;
@Autowired
private
OrderAdapterService
orderAdapterService
;
@Autowired
private
AssortmentOpenPlatformPartnerManager
assortmentOpenPlatformPartnerManager
;
@Autowired
private
CouponClientService
couponClientService
;
@Override
public
BaseResponse
createMCCafeOrder
(
CreateOrderVo
createOrderVo
)
{
String
trackingNo
=
LogThreadLocal
.
getTrackingNo
();
// 查询用户信息、校验svc卡,余额购物车校验
AssortmentCustomerInfoVo
userLoginInfoDto
=
checkOrder
.
checkOrderByMember
(
createOrderVo
,
trackingNo
);
// 查询门店信息 营业时间、营业状态,服务器当前时间在营业时间内 点餐桌号
StoreResponse
.
BizVO
storeResponseDto
=
checkOrder
.
checkOrderByStore
(
createOrderVo
,
trackingNo
);
// 查询购物车(内部校验券点餐方式,券是否可用) 校验当前订单类型的下单参数
ShoppingCartGoodsDto
shoppingCartGoodsDto
=
checkOrder
.
getMCCafeShoppingCartGoodsDto
(
createOrderVo
);
// 查询小程序自提外卖配置信息 校验当前订单类型的下单参数 校验外卖是否满足起送条件
Integer
pushOrderTime
=
checkOrder
.
checkOrderByOrderType
(
createOrderVo
,
userLoginInfoDto
,
storeResponseDto
,
shoppingCartGoodsDto
,
trackingNo
);
OrderExtInfoDto
extInfo
=
getExtInfo
(
userLoginInfoDto
,
storeResponseDto
,
pushOrderTime
,
createOrderVo
);
//1.9.2套餐需求同步优化创建订单代码
BaseResponse
createOrderOperateDtoResponse
=
this
.
sdkCreateOrder
(
createOrderVo
,
storeResponseDto
,
shoppingCartGoodsDto
,
userLoginInfoDto
);
if
(
createOrderOperateDtoResponse
==
null
||
!
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
createOrderOperateDtoResponse
.
getCode
())
||
createOrderOperateDtoResponse
.
getResult
()
==
null
)
{
return
createOrderOperateDtoResponse
;
}
CreateOrderOperateDto
createOrderOperateDto
=
(
CreateOrderOperateDto
)
createOrderOperateDtoResponse
.
getResult
();
//创建支付
CreatePrepayRequestDto
createPrepayRequestDto
=
orderAdapter
.
convertToCreatePrepayRequestDto
(
userLoginInfoDto
,
createOrderVo
,
createOrderOperateDto
,
extInfo
);
return
this
.
createPrepayOrder
(
createPrepayRequestDto
);
}
/**
* 获取预支付成功,将信息放入死心队列,当支付成功没有回掉的时候处理
*
* @param partnerId
* @param storeId
* @param fmId
* @param orderId
*/
public
void
putDelMq
(
String
partnerId
,
String
storeId
,
String
fmId
,
String
orderId
)
{
PaymentMqMessageDto
dto
=
new
PaymentMqMessageDto
();
try
{
dto
.
setFmId
(
fmId
);
dto
.
setOrderId
(
orderId
);
dto
.
setPartnerId
(
partnerId
);
dto
.
setStoreId
(
storeId
);
dto
.
setTrackingNo
(
LogThreadLocal
.
getTrackingNo
());
paymentQueueService
.
paymentCallback
(
dto
);
}
catch
(
Exception
e
)
{
log
.
info
(
"paymentQueueService.paymentCallback"
+
dto
+
" error"
+
e
);
}
}
@Override
public
String
mcCafePaySuccessCallback
(
NewPaysuccessNoticeMessage
newMessage
)
{
PaysuccessNoticeMessage
message
=
new
PaysuccessNoticeMessage
();
message
.
setResult_code
(
StringUtils
.
isBlank
(
newMessage
.
getResultCode
())
?
0
:
Integer
.
valueOf
(
newMessage
.
getResultCode
()));
message
.
setOut_trade_no
(
StringUtils
.
isBlank
(
newMessage
.
getTransactionCode
())
?
""
:
newMessage
.
getTransactionCode
());
message
.
setTrans_id
(
StringUtils
.
isBlank
(
newMessage
.
getTransId
())
?
""
:
newMessage
.
getTransId
());
message
.
setTotal_fee
(
newMessage
.
getTotalAmount
()
==
null
?
0
:
newMessage
.
getTotalAmount
());
message
.
setOpenid
(
StringUtils
.
isBlank
(
newMessage
.
getOpenId
())
?
""
:
newMessage
.
getOpenId
());
message
.
setPlatform_coupon
(
newMessage
.
getPlatformCoupon
()
==
null
?
0
:
newMessage
.
getPlatformCoupon
());
message
.
setMerchant_coupon
(
newMessage
.
getPlatformCoupon
()
==
null
?
0
:
newMessage
.
getPlatformCoupon
());
message
.
setPaid_no
(
newMessage
.
getThirdPartTradeNo
());
message
.
setEndTransId
(
newMessage
.
getEndTransId
());
message
.
setPlatformMchId
(
newMessage
.
getPlatformMchId
());
message
.
setTerminalId
(
newMessage
.
getAppId
());
message
.
setRuleId
(
newMessage
.
getRuleId
());
String
res
=
orderAdapterService
.
mcCafePaySuccessCallback
(
message
);
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
res
);
if
(
jsonObject
.
containsKey
(
"code"
))
{
Integer
code
=
(
Integer
)
jsonObject
.
get
(
"code"
);
if
(
Objects
.
equals
(
ResponseCodeConstant
.
RESPONSE_SUCCESS_0
,
code
)
||
Objects
.
equals
(
ResponseCodeConstant
.
RESPONSE_SUCCESS
,
code
))
{
// 新版支付成功的情况下code为100
return
newSendPaySuccessNoticeMessage
();
}
else
{
return
newSendPayFaileMessage
();
}
}
return
newSendPayFaileMessage
();
}
public
QueryRelationOrderByIdResponseDto
getQueryRelationOrderByIdResponseDto
(
String
oid
)
{
QueryRelatedOrderByCodeRequest
baseQueryOrderRequest
=
new
QueryRelatedOrderByCodeRequest
();
baseQueryOrderRequest
.
setOrderCode
(
oid
);
baseQueryOrderRequest
.
setTrackingNo
(
LogTreadLocal
.
getTrackingNo
());
QueryRelatedOrderByCodeResp
queryOrderByIdResponse
;
queryOrderByIdResponse
=
orderCenterSdkService
.
queryRelatedOrderByCode
(
baseQueryOrderRequest
);
String
string
=
JSONObject
.
toJSONString
(
queryOrderByIdResponse
);
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
string
);
QueryRelationOrderByIdResponseDto
queryOrderByIdResponseDto
=
jsonObject
.
toJavaObject
(
QueryRelationOrderByIdResponseDto
.
class
);
String
orderString
=
JSONObject
.
toJSONString
(
queryOrderByIdResponse
.
getOrderBeanList
());
queryOrderByIdResponseDto
.
setData
(
JSONArray
.
parseArray
(
orderString
,
OrderBean
.
class
));
return
queryOrderByIdResponseDto
;
}
public
void
backOrdersStatusChange
(
String
oid
,
Integer
orderStatus
)
{
if
(
StringUtils
.
isEmpty
(
oid
))
{
return
;
}
ApiLog
.
info
(
"backOrdersStatusChange"
,
oid
,
String
.
valueOf
(
orderStatus
));
OrderStatusChangeRequestDto
requestDto
=
new
OrderStatusChangeRequestDto
();
requestDto
.
setOid
(
oid
);
requestDto
.
setOrderStatus
(
orderStatus
);
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
)
{
LogUtil
.
error
(
"ActivityReverse"
,
JSON
.
toJSONString
(
requestDto
),
""
,
e
);
}
}
private
QueryOrderByIdResponseDto
getQueryOrderByIdResponseDto
(
String
oid
)
{
BaseQueryOrderRequest
baseQueryOrderRequest
=
new
BaseQueryOrderRequest
();
baseQueryOrderRequest
.
setOrderId
(
oid
);
baseQueryOrderRequest
.
setTrackingNo
(
LogTreadLocal
.
getTrackingNo
());
QueryOrderByIdResponse
queryOrderByIdResponse
=
orderCenterSdkService
.
queryOrderById
(
baseQueryOrderRequest
);
String
string
=
JSONObject
.
toJSONString
(
queryOrderByIdResponse
);
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
string
);
return
jsonObject
.
toJavaObject
(
QueryOrderByIdResponseDto
.
class
);
}
/**
* 支付后通知确认返回信息
*/
public
String
newSendPaySuccessNoticeMessage
()
{
Map
<
String
,
Object
>
map
=
Maps
.
newTreeMap
();
map
.
put
(
"code"
,
100
);
map
.
put
(
"message"
,
"success"
);
return
gson
.
toJson
(
map
);
}
/**
* 支付后通知失败返回信息
*/
public
String
newSendPayFaileMessage
()
{
Map
<
String
,
Object
>
map
=
Maps
.
newTreeMap
();
map
.
put
(
"code"
,
500
);
map
.
put
(
"message"
,
"failed"
);
return
gson
.
toJson
(
map
);
}
/**
* 发送模板消息
*
* @param orderBean
* @param messageEventType
*/
private
void
sendMessage
(
OrderBean
orderBean
,
MessageEventType
messageEventType
)
{
MessageTemplateRequest
<
MessagePushOrderTemplateRequest
>
messageTemplateRequest
=
null
;
try
{
messageTemplateRequest
=
messageNoticeAdapter
.
convent2MessageTemplateRequest
(
orderBean
);
messageTemplateRequest
.
setMessageEventType
(
messageEventType
);
this
.
messageTemplatePushService
.
sendTemplateMsg
(
messageTemplateRequest
);
}
catch
(
Exception
e
)
{
LogUtil
.
error
(
"sendTemplateMsg_error"
,
JSONObject
.
toJSONString
(
orderBean
),
JSONObject
.
toJSONString
(
messageTemplateRequest
),
e
);
}
}
/**
* 获取父子订单商品第三方商品编号
*
* @param
* @return
*/
private
CreateFatherSonOrderRequest
getProductCustomerCodeNew
(
CreateFatherSonOrderRequest
fatherSonOrderRequest
)
{
List
<
String
>
pids
=
new
ArrayList
<>();
List
<
CreateFatherSonOrderRequest
.
OrderInfo
>
productOrderInfoList
=
fatherSonOrderRequest
.
getOrderInfoList
().
stream
().
filter
(
orderInfo
->
orderInfo
.
getProducts
()
!=
null
).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
productOrderInfoList
))
{
return
fatherSonOrderRequest
;
}
for
(
CreateOrderProductRequest
productDto
:
productOrderInfoList
.
get
(
0
).
getProducts
())
{
pids
.
add
(
productDto
.
getProductId
());
}
Map
<
String
,
GetProductsVo
>
products
=
itemService
.
getSpuProducts
(
pids
,
fatherSonOrderRequest
.
getPartnerId
(),
productOrderInfoList
.
get
(
0
).
getShopId
(),
fatherSonOrderRequest
.
getMenuType
());
if
(
products
.
isEmpty
())
{
return
fatherSonOrderRequest
;
}
for
(
CreateOrderProductRequest
productDto
:
productOrderInfoList
.
get
(
0
).
getProducts
())
{
if
(
StringUtils
.
isNotEmpty
(
productDto
.
getSpecification
())
&&
products
.
get
(
productDto
.
getSpecification
())
!=
null
)
{
productDto
.
setCustomerCode
(
products
.
get
(
productDto
.
getSpecification
()).
getCustomerCode
());
productDto
.
setProductCode
(
products
.
get
(
productDto
.
getSpecification
()).
getProductCode
());
productDto
.
setThirdProductSpecId
(
products
.
get
(
productDto
.
getSpecification
()).
getThirdProductSpecId
());
productDto
.
setThirdProductPropertyId
(
getThirdPropertyId
(
products
.
get
(
productDto
.
getSpecification
()).
getProductAttributeGroupList
(),
productDto
.
getAddInfo
()));
}
else
{
productDto
.
setCustomerCode
(
""
);
productDto
.
setProductCode
(
""
);
LogUtil
.
error
(
"getProducts_exception"
,
JSONObject
.
toJSONString
(
pids
),
JSONObject
.
toJSONString
(
products
));
}
//套餐子商品
if
(
CollectionUtils
.
isNotEmpty
(
productDto
.
getComboProduct
())){
for
(
CreateOrderProductRequest
comboProduct
:
productDto
.
getComboProduct
()){
String
comboSkuId
=
comboProduct
.
getSpecification
();
if
(
products
.
get
(
comboSkuId
)
!=
null
)
{
comboProduct
.
setCustomerCode
(
products
.
get
(
comboSkuId
).
getCustomerCode
());
comboProduct
.
setProductCode
(
products
.
get
(
comboSkuId
).
getProductCode
());
comboProduct
.
setThirdProductSpecId
(
products
.
get
(
comboSkuId
).
getThirdProductSpecId
());
comboProduct
.
setThirdProductPropertyId
(
getThirdPropertyId
(
products
.
get
(
comboSkuId
).
getProductAttributeGroupList
(),
comboProduct
.
getAddInfo
()));
}
else
{
comboProduct
.
setCustomerCode
(
""
);
comboProduct
.
setProductCode
(
""
);
LogUtil
.
error
(
"getProducts_exception"
,
JSONObject
.
toJSONString
(
comboSkuId
),
JSONObject
.
toJSONString
(
products
),
null
);
}
}
}
}
return
fatherSonOrderRequest
;
}
/**
* 获取商品第三方商品编号
*
* @param createOrderDto
* @return
*/
private
BaseCreateOrderRequest
getProductCustomerCode
(
BaseCreateOrderRequest
createOrderDto
)
{
List
<
String
>
spuIds
=
new
ArrayList
<>();
for
(
CreateOrderProductRequest
productDto
:
createOrderDto
.
getProducts
())
{
spuIds
.
add
(
productDto
.
getProductId
());
}
Map
<
String
,
GetProductsVo
>
products
=
itemService
.
getSpuProducts
(
spuIds
,
createOrderDto
.
getCompanyId
(),
createOrderDto
.
getShopId
(),
createOrderDto
.
getMenuType
());
if
(
products
.
isEmpty
())
{
return
createOrderDto
;
}
for
(
CreateOrderProductRequest
productDto
:
createOrderDto
.
getProducts
())
{
String
skuId
=
productDto
.
getSpecification
();
if
(
products
.
get
(
skuId
)
!=
null
)
{
productDto
.
setCustomerCode
(
products
.
get
(
skuId
).
getCustomerCode
());
productDto
.
setProductCode
(
products
.
get
(
skuId
).
getProductCode
());
productDto
.
setThirdProductSpecId
(
products
.
get
(
productDto
.
getSpecification
()).
getThirdProductSpecId
());
productDto
.
setThirdProductPropertyId
(
getThirdPropertyId
(
products
.
get
(
productDto
.
getSpecification
()).
getProductAttributeGroupList
(),
productDto
.
getAddInfo
()));
// todo 商品组信息
setProductGroupInfo
(
products
.
get
(
skuId
).
getProductGroupList
(),
productDto
);
}
else
{
productDto
.
setCustomerCode
(
""
);
productDto
.
setProductCode
(
""
);
LogUtil
.
error
(
"getProducts_exception"
,
JSONObject
.
toJSONString
(
skuId
),
JSONObject
.
toJSONString
(
products
),
null
);
}
//套餐子商品
if
(
CollectionUtils
.
isNotEmpty
(
productDto
.
getComboProduct
())){
for
(
CreateOrderProductRequest
comboProduct
:
productDto
.
getComboProduct
()){
String
comboSkuId
=
comboProduct
.
getSpecification
();
System
.
out
.
println
(
comboSkuId
);
if
(
products
.
get
(
comboSkuId
)
!=
null
)
{
comboProduct
.
setCustomerCode
(
products
.
get
(
comboSkuId
).
getCustomerCode
());
comboProduct
.
setProductCode
(
products
.
get
(
comboSkuId
).
getProductCode
());
comboProduct
.
setThirdProductSpecId
(
products
.
get
(
comboSkuId
).
getThirdProductSpecId
());
comboProduct
.
setThirdProductPropertyId
(
getThirdPropertyId
(
products
.
get
(
comboSkuId
).
getProductAttributeGroupList
(),
comboProduct
.
getAddInfo
()));
comboProduct
.
setStapleFood
(
products
.
get
(
comboSkuId
).
getStapleFood
());
// todo 套餐商品的商品组信息
setProductGroupInfo
(
products
.
get
(
comboSkuId
).
getProductGroupList
(),
comboProduct
);
}
else
{
comboProduct
.
setCustomerCode
(
""
);
comboProduct
.
setProductCode
(
""
);
LogUtil
.
error
(
"getProducts_exception"
,
JSONObject
.
toJSONString
(
skuId
),
JSONObject
.
toJSONString
(
products
),
null
);
}
}
}
}
return
createOrderDto
;
}
/**
* 设置商品组信息
* @param productGroupList
* @param product
*/
private
void
setProductGroupInfo
(
List
<
ProductGroup
>
productGroupList
,
CreateOrderProductRequest
product
)
{
if
(
CollectionUtils
.
isEmpty
(
productGroupList
))
return
;
List
<
ProductGroupVo
>
targetGroupList
=
Lists
.
newArrayList
();
for
(
ProductGroup
productGroup
:
productGroupList
)
{
for
(
GroupDetail
groupDetail
:
productGroup
.
getGroupDetail
())
{
ProductGroupVo
productGroupVo
=
ProductGroupVo
.
builder
()
.
groupId
(
groupDetail
.
getGroupId
()).
groupName
(
productGroup
.
getName
())
.
thirdGroupId
(
productGroup
.
getGroupCode
()).
build
();
if
(!
targetGroupList
.
contains
(
productGroupVo
))
{
targetGroupList
.
add
(
productGroupVo
);
}
}
}
product
.
setProductGroupList
(
targetGroupList
);
}
private
String
getThirdPropertyId
(
List
<
ProductAttributeGroup
>
productAttributeGroups
,
String
addInfo
)
{
String
thirdProductPropertyId
=
""
;
if
(
StringUtils
.
isBlank
(
addInfo
)
||
CollectionUtils
.
isEmpty
(
productAttributeGroups
)
){
return
thirdProductPropertyId
;
}
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
addInfo
);
String
attributeNames
=
(
String
)
jsonObject
.
get
(
"attributeNames"
);
List
<
String
>
list
=
new
ArrayList
<>();
String
[]
split
=
attributeNames
.
split
(
"/"
);
List
<
AttributeValue
>
attributeValues
=
new
ArrayList
<>();
for
(
ProductAttributeGroup
attributeGroup
:
productAttributeGroups
){
attributeValues
.
addAll
(
attributeGroup
.
getAttributeValues
());
}
for
(
int
i
=
0
;
i
<
split
.
length
;
i
++){
for
(
AttributeValue
attributeValue
:
attributeValues
){
if
(
attributeValue
.
getAttributeValue
().
equals
(
split
[
i
])){
list
.
add
(
attributeValue
.
getCustomerCode
());
break
;
}
}
}
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
thirdProductPropertyId
=
StringUtils
.
join
(
list
,
","
);
}
return
thirdProductPropertyId
;
}
/**
* 创建订单调用集成,不区分订单类型
*
* @return
*/
public
BaseResponse
sdkCreateOrder
(
CreateOrderVo
createOrderVo
,
StoreResponse
.
BizVO
storeResponseDto
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
,
AssortmentCustomerInfoVo
userLoginInfoDto
)
{
CreateOrderOperateDto
response
=
new
CreateOrderOperateDto
();
OrderExtendedReq
orderExtendedReq
=
orderAdapter
.
saveStoreInfo
(
storeResponseDto
);
OrderClientType
orderClient
=
OrderClientType
.
SAAS
;
String
appId
=
userLoginInfoDto
.
getWxAppId
();
if
(
UserLoginChannelEnum
.
ALIPAY
.
getCode
().
equals
(
userLoginInfoDto
.
getChannel
())
){
orderClient
=
OrderClientType
.
ALIPAY
;
}
else
if
(
UserLoginChannelEnum
.
APP
.
getCode
().
equals
(
userLoginInfoDto
.
getChannel
()))
{
orderClient
=
OrderClientType
.
APP
;
}
long
totalAmount
=
0
;
int
cardAmount
=
0
;
QueryOrdersResponse
.
DataBean
.
OrderBean
fatherBeanListOne
=
new
QueryOrdersResponse
.
DataBean
.
OrderBean
();
QueryOrdersResponse
.
DataBean
.
OrderBean
productBeanListOne
=
new
QueryOrdersResponse
.
DataBean
.
OrderBean
();
if
(
createOrderVo
.
getBuyMemberCard
()
!=
null
&&
StringUtils
.
isNotEmpty
(
createOrderVo
.
getBuyMemberCard
().
getRuleId
())
&&
StringUtils
.
isNotEmpty
(
createOrderVo
.
getBuyMemberCard
().
getPaidId
()))
{
//父子订单
int
cardOriginalAmount
=
shoppingCartGoodsDto
.
getCardOriginalAmount
()
==
null
?
0
:
shoppingCartGoodsDto
.
getCardOriginalAmount
();
int
cardDiscountAmount
=
shoppingCartGoodsDto
.
getCardDiscountAmount
()
==
null
?
0
:
shoppingCartGoodsDto
.
getCardDiscountAmount
();
cardAmount
=
cardOriginalAmount
-
cardDiscountAmount
;
CreateFatherSonOrderResponse
createFatherSonOrderResponse
=
createFatherSonOrder
(
createOrderVo
,
storeResponseDto
,
shoppingCartGoodsDto
,
orderExtendedReq
,
appId
);
if
(
ObjectUtils
.
notEqual
(
Integer
.
valueOf
(
ResponseResult
.
SUCCESS
.
getCode
()),
createFatherSonOrderResponse
.
getErrcode
()))
{
return
ResponseUtil
.
error
(
createFatherSonOrderResponse
.
getErrcode
().
toString
(),
createFatherSonOrderResponse
.
getErrmsg
());
}
List
<
QueryOrdersResponse
.
DataBean
.
OrderBean
>
orderBeanList
=
createFatherSonOrderResponse
.
getOrderBeanList
();
List
<
QueryOrdersResponse
.
DataBean
.
OrderBean
>
fatherBeanList
=
orderBeanList
.
stream
().
filter
(
orderBeanTemp
->
orderBeanTemp
.
getIsParent
()).
collect
(
Collectors
.
toList
());
List
<
QueryOrdersResponse
.
DataBean
.
OrderBean
>
productBeanList
=
orderBeanList
.
stream
().
filter
(
orderBeanTemp
->
1
==
orderBeanTemp
.
getBizType
()).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isNotEmpty
(
fatherBeanList
))
fatherBeanListOne
=
fatherBeanList
.
get
(
0
);
if
(
CollectionUtils
.
isNotEmpty
(
productBeanList
))
productBeanListOne
=
productBeanList
.
get
(
0
);
//订单总金额 商品+会员卡
totalAmount
=
orderBeanList
.
stream
().
mapToLong
(
QueryOrdersResponse
.
DataBean
.
OrderBean
::
getAmount
).
count
();
fatherBeanList
.
get
(
0
).
setShopId
(
storeResponseDto
.
getStoreCode
());
fatherBeanList
.
get
(
0
).
setCompanyId
(
createOrderVo
.
getPartnerId
());
}
else
{
//普通订单
CreateOrderResponse
createOrderFlowResponse
=
createOrder
(
createOrderVo
,
storeResponseDto
,
shoppingCartGoodsDto
,
orderExtendedReq
,
orderClient
,
appId
);
if
(
ObjectUtils
.
notEqual
(
Integer
.
valueOf
(
ResponseResult
.
SUCCESS
.
getCode
()),
createOrderFlowResponse
.
getErrcode
()))
{
return
ResponseUtil
.
error
(
createOrderFlowResponse
.
getErrcode
().
toString
(),
createOrderFlowResponse
.
getErrmsg
());
}
fatherBeanListOne
=
createOrderFlowResponse
.
getData
();
productBeanListOne
=
createOrderFlowResponse
.
getData
();
totalAmount
=
createOrderFlowResponse
.
getData
().
getAmount
();
}
response
.
setTotalAmount
(
totalAmount
);
response
.
setCardAmount
(
cardAmount
);
response
.
setFatherOrderBean
(
fatherBeanListOne
);
response
.
setProductOrderBean
(
productBeanListOne
);
return
ResponseUtil
.
success
(
response
);
}
/**
* 创建预支付订单
*/
public
BaseResponse
createPrepayOrder
(
CreatePrepayRequestDto
createPrepayRequestDto
)
{
CreateOrderResponseVo
createOrderResponse
;
OrderPayResponse
orderPayResponse
=
null
;
PaymentRequest
paymentRequest
=
orderBodyConvertToPaymentBody
(
createPrepayRequestDto
.
getOpenId
(),
createPrepayRequestDto
.
getPartnerId
(),
createPrepayRequestDto
.
getWxAppId
(),
createPrepayRequestDto
.
getPayCode
());
long
totalAmount
=
createPrepayRequestDto
.
getTotalAmount
();
String
cardCode
=
createPrepayRequestDto
.
getCardCode
();
String
transId
=
createPrepayRequestDto
.
getTransId
();
if
(
totalAmount
<
0
)
{
throw
new
ServiceException
(
ResponseResult
.
PAY_AMOUNT_ERROR
);
}
else
if
(
totalAmount
>
0
&&
StringUtils
.
isBlank
(
cardCode
))
{
orderPayResponse
=
getPreOrderPay
(
createPrepayRequestDto
.
getFatherOrderBean
(),
paymentRequest
,
LogThreadLocal
.
getTrackingNo
(),
createPrepayRequestDto
.
getCardAmount
(),
transId
);
}
else
if
(
totalAmount
>
0
&&
StringUtils
.
isNotBlank
(
cardCode
))
{
//svc卡支付
orderPayResponse
=
svcPay
(
cardCode
,
createPrepayRequestDto
.
getFatherOrderBean
(),
paymentRequest
,
transId
,
LogThreadLocal
.
getTrackingNo
());
}
else
{
// 0元订单如果不需要支付,自定义支付单号
orderPayResponse
=
getOrderPayResponse
(
paymentRequest
,
createPrepayRequestDto
.
getFatherOrderBean
());
}
if
(
orderPayResponse
==
null
)
{
return
failPreOrderPay
(
LogThreadLocal
.
getTrackingNo
(),
createPrepayRequestDto
.
getProductOrderBean
(),
cardCode
,
createPrepayRequestDto
.
getOrderClient
());
}
createOrderResponse
=
orderAdapter
.
convent2CreateFatherSonOrderResponseVo
(
orderPayResponse
,
createPrepayRequestDto
.
getProductOrderBean
());
BaseResponse
baseEditResponse
=
this
.
updateOrderInfo
(
orderPayResponse
,
createPrepayRequestDto
.
getOrderExtInfoDTO
(),
createPrepayRequestDto
.
getProductOrderBean
(),
LogThreadLocal
.
getTrackingNo
());
if
(
baseEditResponse
!=
null
)
{
return
baseEditResponse
;
}
if
(
totalAmount
>
0
&&
StringUtils
.
isBlank
(
cardCode
))
{
createOrderResponse
.
setPaySuccess
(
false
);
}
else
{
createOrderResponse
.
setPaySuccess
(
true
);
}
// 推荐优惠插件用户下单数据上报
//wechatPushProcessor.statusOrderCreate(userLoginInfoDto, createOrderResponse.getOid(), createOrderVo.getPartnerId());
if
(!
createOrderResponse
.
getPaySuccess
())
{
return
ResponseUtil
.
success
(
createOrderResponse
);
}
else
{
//如果是商品券支付0元,调用回调接口
PaysuccessNoticeMessage
message
=
new
PaysuccessNoticeMessage
();
message
.
setResult_code
(
100
);
message
.
setOut_trade_no
(
createOrderResponse
.
getFmId
());
message
.
setTrans_id
(
createOrderResponse
.
getOid
());
message
.
setTotal_fee
(
0
);
message
.
setOpenid
(
createPrepayRequestDto
.
getOpenId
());
message
.
setPlatform_coupon
(
0
);
message
.
setMerchant_coupon
(
0
);
orderAdapterService
.
paySuccessCallback
(
message
);
return
ResponseUtil
.
success
(
createOrderResponse
);
}
}
/**
* 创建普通订单
*/
public
CreateOrderResponse
createOrder
(
CreateOrderVo
createOrderVo
,
StoreResponse
.
BizVO
storeResponseDto
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
,
OrderExtendedReq
orderExtendedReq
,
OrderClientType
orderClient
,
String
appId
)
{
BaseCreateOrderRequest
baseCreateOrderRequest
=
orderAdapter
.
convent2CreateOrderDto
(
createOrderVo
,
shoppingCartGoodsDto
,
storeResponseDto
);
//查询第三方商品编号
baseCreateOrderRequest
=
getProductCustomerCode
(
baseCreateOrderRequest
);
//保存门店渠道信息
baseCreateOrderRequest
.
setOrderExtended
(
orderExtendedReq
);
baseCreateOrderRequest
.
setOrderClient
(
orderClient
);
baseCreateOrderRequest
.
setAppId
(
appId
);
CreateOrderRequest
createOrderRequest
=
new
CreateOrderRequest
();
baseCreateOrderRequest
.
setTrackingNo
(
LogThreadLocal
.
getTrackingNo
());
createOrderRequest
.
setBaseCreateOrderRequest
(
baseCreateOrderRequest
);
MqMessageRequest
mqMessageRequest
=
new
MqMessageRequest
();
mqMessageRequest
.
setBackOrdersNotifyActivityExchange
(
backOrdersNotifyActivityExchange
);
mqMessageRequest
.
setBackOrdersNotifyActivityQueue
(
backOrdersChangeOrderStatusConsumerQueue
);
createOrderRequest
.
setMqMessageRequest
(
mqMessageRequest
);
createOrderRequest
.
setTrackingNo
(
LogThreadLocal
.
getTrackingNo
());
return
mcCafeOrderCenterSdkService
.
createMCCafeOrderFlow
(
createOrderRequest
);
}
/**
* 创建父子订单
*/
public
CreateFatherSonOrderResponse
createFatherSonOrder
(
CreateOrderVo
createOrderVo
,
StoreResponse
.
BizVO
storeResponseDto
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
,
OrderExtendedReq
orderExtendedReq
,
String
appId
)
{
CreateFatherSonOrderRequest
createFatherSonOrderRequest
=
orderAdapter
.
convertFatherSonOrderRequest
(
createOrderVo
,
shoppingCartGoodsDto
,
orderExtendedReq
,
storeResponseDto
,
appId
);
//查询第三方商品编号
createFatherSonOrderRequest
=
getProductCustomerCodeNew
(
createFatherSonOrderRequest
);
MqMessageRequest
mqMessageRequest
=
new
MqMessageRequest
();
mqMessageRequest
.
setBackOrdersNotifyActivityExchange
(
backOrdersNotifyActivityExchange
);
mqMessageRequest
.
setBackOrdersNotifyActivityQueue
(
backOrdersChangeOrderStatusConsumerQueue
);
createFatherSonOrderRequest
.
setMqMessageRequest
(
mqMessageRequest
);
return
mcCafeOrderCenterSdkService
.
createMCCafeFatherSonOrder
(
createFatherSonOrderRequest
);
}
private
OrderPayResponse
getOrderPayResponse
(
PaymentRequest
paymentRequest
,
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
)
{
OrderPayResponse
orderPayResponse
;
String
fmId
=
"SPAY"
+
ValidationCode
.
getRandomUuid
();
orderPayResponse
=
orderAdapter
.
getOrderPayResponse
(
orderBean
.
getCompanyId
(),
paymentRequest
,
orderBean
.
getOid
(),
fmId
);
return
orderPayResponse
;
}
private
BaseResponse
failPreOrderPay
(
String
trackingNo
,
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
String
cardCode
,
OrderClientType
orderClient
)
{
List
<
OrderClientType
>
notCancelOrderClientList
=
Lists
.
newArrayList
(
OrderClientType
.
APP
);
if
(!
notCancelOrderClientList
.
contains
(
orderClient
))
{
//失败冲正库存,冲正活动库存,取消订单
CancelOrderRequest
cancelOrderRequest
=
orderAdapter
.
convent2CancelOrderRequest
(
orderBean
.
getOid
(),
orderBean
.
getCompanyId
(),
AfterSalesType
.
SYSTEM_CANCEL
,
"获取预支付失败"
,
trackingNo
,
null
);
orderCenterSdkService
.
orderCancel
(
cancelOrderRequest
);
// TODO: 2019/9/10 hubowen mq推送变更
backOrdersStatusChange
(
orderBean
.
getOid
(),
orderBean
.
getStatus
());
}
//svc 卡支付失败
if
(
StringUtils
.
isNotBlank
(
cardCode
))
{
return
ResponseUtil
.
error
(
ResponseResultEnum
.
PAY_BACKEND_CONFIG_ERROR
.
getCode
(),
ResponseResultEnum
.
PAY_BACKEND_CONFIG_ERROR
.
getMessage
(),
null
);
}
return
ResponseUtil
.
error
(
ResponseResultEnum
.
PAY_UNIFIED_ORDER_ERROR
.
getCode
(),
ResponseResultEnum
.
PAY_UNIFIED_ORDER_ERROR
.
getMessage
(),
null
);
}
public
OrderPayResponse
getPreOrderPay
(
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
PaymentRequest
paymentRequest
,
String
trackingNo
,
Integer
cardAmount
,
String
transId
)
{
try
{
UnifiedOrderRequest
request
=
orderAdapter
.
convent2UnifiedOrderRequest
(
orderBean
,
paymentRequest
,
orderBean
.
getAmount
(),
cardAmount
,
transId
);
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
UnifiedOrderResponse
>
responseBase
=
standardPaymentService
.
unifiedOrder
(
request
,
trackingNo
);
if
(!
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
.
equals
(
responseBase
.
getCode
()))
{
log
.
error
(
"支付SDK返回信息错误,trackingNo:{} request:{} response:{}"
,
trackingNo
,
JSONObject
.
toJSONString
(
request
),
JSONObject
.
toJSONString
(
responseBase
));
return
null
;
}
putDelMq
(
request
.
getPartnerId
(),
request
.
getStoreId
(),
responseBase
.
getData
().
getFmId
(),
orderBean
.
getOid
());
OrderPayResponse
orderPayResponse
=
orderAdapter
.
convent2OrderPayResponse
(
responseBase
.
getData
());
orderPayResponse
.
setWxAppid
(
paymentRequest
.
getWxAppId
());
orderPayResponse
.
setOpenId
(
paymentRequest
.
getOpenId
());
orderPayResponse
.
setPartnerId
(
orderBean
.
getCompanyId
());
orderPayResponse
.
setOrderId
(
orderBean
.
getOid
());
return
orderPayResponse
;
}
catch
(
Exception
e
)
{
LogUtil
.
error
(
"getPreOrderPay_error"
,
JSONObject
.
toJSONString
(
orderBean
),
JSONObject
.
toJSONString
(
paymentRequest
));
//TODO 邮件告警
return
null
;
}
}
public
OrderPayResponse
svcPay
(
String
cardCode
,
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
PaymentRequest
paymentRequest
,
String
transId
,
String
trackingNo
)
{
CodePayRequest
request
=
new
CodePayRequest
();
String
partnerId
=
orderBean
.
getCompanyId
();
request
.
setBody
(
orderBean
.
getShopName
());
request
.
setBusinessDate
(
DateUtil
.
convert2String
(
new
Date
(),
DateUtil
.
FORMAT_YYYY_MM_DD_HHMMSS
));
request
.
setCode
(
cardCode
);
request
.
setPartnerId
(
partnerId
);
request
.
setStoreId
(
orderBean
.
getShopId
());
request
.
setAmount
(
orderBean
.
getAmount
());
request
.
setTransId
(
transId
);
request
.
setStationId
(
"1"
);
request
.
setOperatorId
(
"1"
);
request
.
setVer
(
"2"
);
SVCCardAmountRequest
svcRequest
=
new
SVCCardAmountRequest
();
svcRequest
.
setPartnerId
(
partnerId
);
svcRequest
.
setCardCodes
(
Arrays
.
asList
(
cardCode
));
//查询svc卡余额
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
SVCCardAmountResponse
>
svcCardAmountResponseBaseResponse
=
paymentNewService
.
querySVCCardAmount
(
svcRequest
,
trackingNo
);
if
(
svcCardAmountResponseBaseResponse
==
null
||
!
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
.
equals
(
svcCardAmountResponseBaseResponse
.
getCode
())
||
svcCardAmountResponseBaseResponse
.
getData
().
getData
()
==
null
||
CollectionUtils
.
isEmpty
(
svcCardAmountResponseBaseResponse
.
getData
().
getData
().
getCardSimpleInfos
()))
{
return
null
;
}
Integer
amount
=
svcCardAmountResponseBaseResponse
.
getData
().
getData
().
getCardSimpleInfos
().
get
(
0
).
getAmount
();
Integer
vamount
=
svcCardAmountResponseBaseResponse
.
getData
().
getData
().
getCardSimpleInfos
().
get
(
0
).
getVamount
();
if
(
amount
+
vamount
<
orderBean
.
getAmount
())
{
return
null
;
}
//svc卡支付
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
CodePayResponse
>
responseBase
=
paymentNewService
.
codePay
(
request
,
trackingNo
);
if
(
responseBase
==
null
||
!
ResponseCodeConstant
.
RESPONSE_SUCCESS_STR
.
equals
(
responseBase
.
getCode
())
||
responseBase
.
getData
().
getData
()
==
null
)
{
return
null
;
}
OrderPayResponse
orderPayResponse
=
new
OrderPayResponse
();
CodePayResponse
.
CodePayDate
codePayResponse
=
responseBase
.
getData
().
getData
();
orderPayResponse
.
setFmId
(
codePayResponse
.
getFmId
());
orderPayResponse
.
setPayTransId
(
codePayResponse
.
getPayTransId
());
orderPayResponse
.
setWxAppid
(
paymentRequest
.
getWxAppId
());
orderPayResponse
.
setOpenId
(
paymentRequest
.
getOpenId
());
orderPayResponse
.
setPartnerId
(
orderBean
.
getCompanyId
());
orderPayResponse
.
setOrderId
(
orderBean
.
getOid
());
return
orderPayResponse
;
}
private
PaymentRequest
orderBodyConvertToPaymentBody
(
String
openId
,
String
partnerId
,
String
appId
,
String
payCode
)
{
//设置支付信息
PaymentRequest
paymentRequest
=
new
PaymentRequest
();
paymentRequest
.
setOpenId
(
openId
);
paymentRequest
.
setWxAppId
(
appId
);
AssortmentOpenPlatformWxapp
wxApp
=
openPlatformWxappManager
.
findByPartnerIdAndWxappId
(
partnerId
,
appId
);
AssortmentOpenPlatformPartner
platformPartner
=
null
;
if
(
wxApp
==
null
)
{
platformPartner
=
assortmentOpenPlatformPartnerManager
.
selectOpenPlatformPartner
(
partnerId
);
}
paymentRequest
.
setPrincipalName
(
wxApp
!=
null
?
wxApp
.
getPrincipalName
()
:
platformPartner
!=
null
?
platformPartner
.
getCompanyName
()
:
"上海非码网络科技有限公司"
);
paymentRequest
.
setReverseNotifyiDcUrl
(
reverseNotifyiDcUrl
);
paymentRequest
.
setPayCode
(
payCode
);
return
paymentRequest
;
}
private
OrderExtInfoDto
getExtInfo
(
AssortmentCustomerInfoVo
userLoginInfoDto
,
StoreResponse
.
BizVO
storeResponseDto
,
Integer
pushOrderTime
,
CreateOrderVo
createOrderVo
)
{
Integer
serviceTime
=
storeResponseDto
.
getServiceTime
();
String
sessionId
=
createOrderVo
.
getSessionId
();
String
version
=
createOrderVo
.
getVersion
();
CreateOrderVo
.
BuyMemberCard
memberCard
=
createOrderVo
.
getBuyMemberCard
();
String
deliveryHoursDayStart
=
""
;
String
deliveryHoursDayEnd
=
""
;
if
(
StringUtils
.
isNotBlank
(
storeResponseDto
.
getDeliveryHoursDay
()))
{
String
[]
days
=
storeResponseDto
.
getDeliveryHoursDay
().
split
(
"-"
);
if
(
days
.
length
==
2
)
{
deliveryHoursDayStart
=
DateUtil
.
convert2String
(
new
Date
(),
DateUtil
.
FORMAT_yyyyMMdd_date
)
+
" "
+
days
[
0
]
+
":00"
;
// deliveryHoursDayEnd = DateUtil.convert2String(new Date(), DateUtil.FORMAT_yyyyMMdd_date) + " " + days[1] + ":00";
}
}
OrderExtInfoDto
orderExtInfoDto
=
new
OrderExtInfoDto
();
orderExtInfoDto
.
setDeliveryHoursDayStart
(
deliveryHoursDayStart
);
orderExtInfoDto
.
setDeliveryHoursDayEnd
(
deliveryHoursDayEnd
);
orderExtInfoDto
.
setOpenid
(
userLoginInfoDto
.
getOpenId
());
orderExtInfoDto
.
setAppid
(
userLoginInfoDto
.
getWxAppId
());
orderExtInfoDto
.
setSessionId
(
sessionId
);
if
(
Objects
.
equals
(
serviceTime
,
null
))
{
serviceTime
=
50
;
}
orderExtInfoDto
.
setServiceTime
(
serviceTime
);
orderExtInfoDto
.
setPushOrderTime
(
pushOrderTime
);
orderExtInfoDto
.
setVersion
(
version
);
if
(
memberCard
!=
null
&&
memberCard
.
getRuleId
()
!=
null
)
{
orderExtInfoDto
.
setRuleId
(
memberCard
.
getRuleId
());
}
// 扩展字段中存储 sessionKey
orderExtInfoDto
.
setSessionKey
(
createOrderVo
.
getSessionKey
());
orderExtInfoDto
.
setFormId
(
createOrderVo
.
getFormId
());
orderExtInfoDto
.
setFromAppId
(
userLoginInfoDto
.
getWxAppId
());
if
(
StringUtils
.
isNotBlank
(
createOrderVo
.
getScene
()))
{
orderExtInfoDto
.
setScene
(
createOrderVo
.
getScene
());
}
return
orderExtInfoDto
;
}
/**
* 编辑订单,保持预支付信息
*/
public
BaseResponse
updateOrderInfo
(
OrderPayResponse
orderPayResponse
,
OrderExtInfoDto
orderExtInfo
,
QueryOrdersResponse
.
DataBean
.
OrderBean
orderBean
,
String
trackingNo
)
{
orderExtInfo
.
setOpenid
(
orderPayResponse
.
getOpenId
());
orderExtInfo
.
setFmId
(
orderPayResponse
.
getFmId
());
orderExtInfo
.
setAppid
(
orderPayResponse
.
getWxAppid
());
String
prepayId
=
""
;
OrderPayResponse
.
PayOrderBean
payOrder
=
orderPayResponse
.
getPayOrder
();
// StringUtils 依赖修改
if
(
payOrder
!=
null
&&
!
StringUtils
.
isEmpty
(
payOrder
.
getPackageX
()))
{
String
[]
prepayIds
=
payOrder
.
getPackageX
().
split
(
"="
);
prepayId
=
prepayIds
.
length
>
1
?
prepayIds
[
1
]
:
""
;
}
//支付宝保存交易流水号发送支付宝模板消息
if
(
payOrder
!=
null
&&
!
StringUtils
.
isEmpty
(
payOrder
.
getAliPayOrder
()))
{
prepayId
=
payOrder
.
getAliPayOrder
();
}
orderExtInfo
.
setPrepayId
(
prepayId
);
OrderEditRequest
orderEditRequest
=
new
OrderEditRequest
(
orderPayResponse
.
getPayTransId
(),
JSONObject
.
toJSONString
(
orderExtInfo
));
orderEditRequest
.
setOrderId
(
orderBean
.
getOid
());
orderEditRequest
.
setTrackingNo
(
trackingNo
);
BaseOrderResponse
baseOrderResponse
=
orderCenterSdkService
.
orderEdit
(
orderEditRequest
);
if
(!
ObjectUtils
.
equals
(
ResponseCodeConstant
.
RESPONSE_SUCCESS
,
baseOrderResponse
.
getErrcode
()))
{
CancelOrderRequest
cancelOrderRequest
=
orderAdapter
.
convent2CancelOrderRequest
(
orderBean
.
getOid
(),
orderBean
.
getCompanyId
(),
AfterSalesType
.
SYSTEM_CANCEL
,
"编辑订单支付信息失败"
,
trackingNo
,
null
);
orderCenterSdkService
.
orderCancel
(
cancelOrderRequest
);
//如果编辑订单支付信息失败,冲正
backOrdersStatusChange
(
orderBean
.
getOid
(),
orderBean
.
getStatus
());
return
ResponseUtil
.
error
(
baseOrderResponse
.
getErrcode
().
toString
(),
baseOrderResponse
.
getErrmsg
());
}
return
null
;
}
@Override
public
String
paySuccessCallback
(
PaysuccessNoticeMessage
message
,
ConfirmOrderDto
confirmOrderDto
,
Map
<
String
,
QueryOrdersResponseDto
.
DataBean
.
OrderBean
>
orderBeans
)
{
OrderBean
orderBean
=
orderBeans
.
get
(
OrderBeanType
.
SAASORDER
.
getCode
());
String
oid
=
StringUtils
.
isNotEmpty
(
orderBean
.
getParentCode
())
&&
!
"0"
.
equals
(
orderBean
.
getParentCode
())
?
orderBean
.
getParentCode
()
:
orderBean
.
getOid
();
String
partnerId
=
orderBean
.
getCompanyId
();
String
userId
=
orderBean
.
getUserId
();
String
storeId
=
orderBean
.
getShopId
();
orderBean
.
setPayVoucher
(
message
.
getOut_trade_no
());
//编辑订单信息,获取openid,用于退款
String
extInfo
=
orderBean
.
getExtInfo
();
OrderExtInfoDto
orderExtInfoDto
=
null
;
String
wxappid
=
""
;
String
sessionId
=
""
;
String
openid
=
""
;
String
ruleId
=
""
;
String
payCode
=
""
;
if
(
StringUtils
.
isNotBlank
(
extInfo
))
{
orderExtInfoDto
=
gson
.
fromJson
(
extInfo
,
OrderExtInfoDto
.
class
);
if
(
orderExtInfoDto
!=
null
&&
StringUtils
.
isNotBlank
(
orderExtInfoDto
.
getOpenid
()))
{
openid
=
orderExtInfoDto
.
getOpenid
();
wxappid
=
orderExtInfoDto
.
getAppid
();
sessionId
=
orderExtInfoDto
.
getSessionId
();
ruleId
=
orderExtInfoDto
.
getRuleId
();
}
if
(
orderExtInfoDto
!=
null
&&
StringUtils
.
isNotBlank
(
orderExtInfoDto
.
getPayCode
())
&&
Arrays
.
asList
(
PayChannel
.
ALIPAY
.
getCode
(),
PayChannel
.
WXPAY
.
getCode
()).
contains
(
orderExtInfoDto
.
getPayCode
()))
{
payCode
=
orderExtInfoDto
.
getPayCode
();
}
}
// 如果订单状态不是未支付,返回信息
if
(!
PayStatus
.
NOT_PAY
.
getCode
().
equals
(
orderBean
.
getPayStatus
())
||
!
OrderStatus
.
WAIT_PAY
.
getCode
().
equals
(
orderBean
.
getStatus
()))
{
return
sendPaySuccessNoticeMessage
();
}
//核销优惠券
MCCafeConponRequest
mcCafeConponRequest
=
convertOrderBean2CouponLockRequest
(
orderBean
);
if
(
null
!=
mcCafeConponRequest
)
{
CouponRedeemResponse
couponRedeemResponse
=
couponClientService
.
redeem
(
mcCafeConponRequest
);
//失败则取消订单并解锁优惠券
if
(!
RESPONSE_SUCCESS_CODE
.
equals
(
couponRedeemResponse
.
getStatusCode
()))
{
//异步冲正库存积分等
//TODO trackingNo来源
CancelOrderRequest
cancelOrderRequest
=
orderAdapter
.
convent2CancelOrderRequest
(
orderBean
.
getOid
(),
orderBean
.
getCompanyId
(),
AfterSalesType
.
SYSTEM_CANCEL
,
"支付核销优惠券失败"
,
""
,
null
);
orderCenterSdkService
.
orderCancel
(
cancelOrderRequest
);
backOrdersStatusChange
(
orderBean
.
getOid
(),
orderBean
.
getStatus
());
throw
new
ServiceException
(
ResponseResult
.
COUPON_VERIFICATION_FAIL
);
}
}
//若该订单使用了优惠券,则移除卡包,移除失败也不退款
couponActivityService
.
callbackNotify
(
orderBean
);
// 订单失败后 发消息重试 待实现
String
takeCode
;
String
daySeq
;
PayAccessResponse
payAccessResponse
;
ConfirmOrderRequest
var1
=
LightApplicationConvertToAssortmentSdkAdapter
.
confirmOrderDtoConvertToConfirmOrderRequest
(
confirmOrderDto
,
orderBeans
.
get
(
OrderBeanType
.
MERMBERORDER
.
getCode
()));
var1
.
setPartnerId
(
partnerId
);
var1
.
setStoreId
(
storeId
);
var1
.
setOrderType
(
orderBean
.
getType
());
var1
.
setProductOrderCode
(
orderBean
.
getOid
());
var1
.
setPayDate
(
DateUtil
.
convert2String
(
new
Date
(),
"yyyy-MM-dd HH:mm:ss"
));
var1
.
setPayTransId
(
message
.
getOut_trade_no
());
var1
.
setOperator
(
orderBean
.
getUserName
());
var1
.
setEndTransId
(
message
.
getEndTransId
());
if
(
StringUtils
.
isNotBlank
(
payCode
))
{
var1
.
setPayChannel
(
payCode
);
var1
.
setPayChannelName
(
PayChannel
.
getByCode
(
payCode
).
getDesc
());
}
if
(
orderBean
.
getGmtExpect
()
!=
null
&&
orderBean
.
getGmtExpect
()
!=
0
)
{
var1
.
setExpectTime
(
DateUtil
.
convert2String
(
new
Date
(
orderBean
.
getGmtExpect
()),
DateUtil
.
FORMAT_YYYY_MM_DD_HHMMSS
));
}
// 订单支付成功
com
.
freemud
.
sdk
.
api
.
assortment
.
order
.
response
.
order
.
PayAccessResponse
payAccessRes
=
orderCenterSdkService
.
payAccess
(
var1
);
String
string2
=
JSONObject
.
toJSONString
(
payAccessRes
);
JSONObject
jsonObject2
=
JSONObject
.
parseObject
(
string2
);
payAccessResponse
=
jsonObject2
.
toJavaObject
(
PayAccessResponse
.
class
);
// 添加幂等处理,若订单是已支付成功状态,直接返回成功
if
(!
RESPONSE_SUCCESS_CODE
.
equals
(
payAccessResponse
.
getErrcode
()))
{
OrderBean
saasOrder
=
getOrderBeanByOrderId
(
confirmOrderDto
.
getOrderId
()).
get
(
OrderBeanType
.
SAASORDER
.
getCode
());
if
(
saasOrder
!=
null
&&
(!
PayStatus
.
NOT_PAY
.
getCode
().
equals
(
saasOrder
.
getPayStatus
())
||
!
OrderStatus
.
WAIT_PAY
.
getCode
().
equals
(
saasOrder
.
getStatus
())))
{
return
sendPaySuccessNoticeMessage
();
}
LogUtil
.
error
(
"paySuccessCallback_payAccess_faild"
,
gson
.
toJson
(
confirmOrderDto
),
gson
.
toJson
(
payAccessResponse
));
//orderRefund(orderBean, "订单异常退款", openid, oid);
return
gson
.
toJson
(
message
);
}
// TODO 订单序号替换取餐码显示
takeCode
=
payAccessResponse
.
getData
().
getTakeCode
();
daySeq
=
payAccessResponse
.
getData
().
getDaySeq
();
//TODO 清空购物车
NewShoppingCartClearDto
newShoppingCartClearDto
=
new
NewShoppingCartClearDto
();
newShoppingCartClearDto
.
setPartnerId
(
partnerId
);
newShoppingCartClearDto
.
setShopId
(
storeId
);
newShoppingCartClearDto
.
setUserId
(
userId
);
newShoppingCartClearDto
.
setAppId
(
wxappid
);
newShoppingCartClearDto
.
setSessionId
(
sessionId
);
newShoppingCartClearDto
.
setOperationType
(
1
);
shoppingCartClient
.
clearShoppingCart
(
newShoppingCartClearDto
);
if
(
StringUtils
.
isNotBlank
(
daySeq
)
&&
orderExtInfoDto
!=
null
&&
!
OrderType
.
TAKE_OUT
.
getCode
().
equals
(
orderBean
.
getType
()))
{
String
storeAddress
=
StringUtils
.
isNotBlank
(
orderBean
.
getAddress
())
?
orderBean
.
getAddress
()
:
""
;
orderBean
.
setAddress
(
storeAddress
);
orderBean
.
setOtherCode
(
takeCode
);
//发送支付成功模板消息
this
.
sendPaySuccessMessage
(
orderBean
);
}
// 有云打印机 打印小票,杯贴
try
{
List
<
AssortmentCloudPrinter
>
storePrinters
=
cloudPrinterManager
.
getStorePrinters
(
partnerId
,
storeId
);
if
(
null
!=
storePrinters
&&
storePrinters
.
size
()
>
0
)
{
boolean
printerStatus
=
false
;
for
(
AssortmentCloudPrinter
cloudPrinter
:
storePrinters
)
{
if
(
null
!=
cloudPrinter
.
getStatus
()
&&
cloudPrinter
.
getStatus
()
==
1
)
{
printerStatus
=
true
;
}
}
//在线打印
if
(
printerStatus
)
{
OrderPrintDto
orderPrintDto
=
orderAdapter
.
convert2OrderPrintDto
(
orderBean
);
orderPrintDto
.
setDaySeq
(
daySeq
);
orderPrintDto
.
setOtherCode
(
takeCode
);
asynchronousPrint
(
orderPrintDto
);
}
}
}
catch
(
Exception
e
)
{
LogUtil
.
error
(
"cloudPrint_error"
,
null
,
null
,
e
);
}
//TODO 埋点支付行为
BuriedPointPaymentRequestDto
requestDto
=
new
BuriedPointPaymentRequestDto
();
requestDto
.
setStoreId
(
storeId
);
requestDto
.
setPartnerId
(
partnerId
);
requestDto
.
setWxAppId
(
wxappid
);
requestDto
.
setSessionId
(
sessionId
);
requestDto
.
setOpenId
(
orderExtInfoDto
!=
null
?
orderExtInfoDto
.
getOpenid
()
:
""
);
buriedPointService
.
BuriedPointPayment
(
requestDto
,
orderBean
);
// 开通会员卡
if
(
StringUtils
.
isNotBlank
(
ruleId
))
{
this
.
activateMemberCard
(
partnerId
,
ruleId
,
oid
,
userId
);
}
//支付回掉成功标记
redisCache
.
save
(
RedisKeyConstant
.
KGD_PAYMENT_CALLBACK_FMID
+
message
.
getOut_trade_no
(),
message
.
getOut_trade_no
(),
10L
,
TimeUnit
.
MINUTES
);
return
sendPaySuccessNoticeMessage
();
}
private
List
<
CreateOrderAccountRequest
>
convertOrderBean2Accounts
(
OrderBean
orderBean
)
{
List
<
CreateOrderAccountRequest
>
list
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
orderBean
.
getAccountList
()))
{
orderBean
.
getAccountList
().
forEach
(
o
->
{
CreateOrderAccountRequest
createOrderAccountDto
=
CreateOrderAccountRequest
.
builder
()
.
accountId
(
o
.
getAccountId
())
.
name
(
o
.
getName
())
.
price
(
o
.
getPrice
())
.
accountType
(
orderAdapter
.
getQueryOrderAccountType
(
orderAdapter
.
getOrderAccountType
(
o
.
getType
())))
.
sequence
(
o
.
getSequence
())
.
orderId
(
o
.
getOrderId
())
.
build
();
list
.
add
(
createOrderAccountDto
);
});
}
return
list
;
}
private
MCCafeConponRequest
convertOrderBean2CouponLockRequest
(
OrderBean
orderBean
)
{
if
(
null
==
orderBean
||
CollectionUtils
.
isEmpty
(
orderBean
.
getAccountList
()))
{
return
null
;
}
Optional
<
OrderBean
.
AccountBean
>
accountRequest
=
orderBean
.
getAccountList
().
stream
().
filter
(
account
->
orderAdapter
.
getQueryOrderAccountType
(
orderAdapter
.
getOrderAccountType
(
account
.
getType
())).
equals
(
QueryOrderAccountType
.
COUPON
)
||
orderAdapter
.
getQueryOrderAccountType
(
orderAdapter
.
getOrderAccountType
(
account
.
getType
())).
equals
(
QueryOrderAccountType
.
PRODUCT_COUPON
)
||
orderAdapter
.
getQueryOrderAccountType
(
orderAdapter
.
getOrderAccountType
(
account
.
getType
())).
equals
(
QueryOrderAccountType
.
DISCOUNT_COUPON
)).
findFirst
();
if
(!
accountRequest
.
isPresent
()
||
accountRequest
.
get
().
getPrice
()
==
0
)
{
return
null
;
}
OrderBean
.
AccountBean
accountBean
=
accountRequest
.
get
();
List
<
MCCafeProductRedeemVo
>
products
=
new
ArrayList
<>();
//商品券核销核销参数
if
(
QueryOrderAccountType
.
PRODUCT_COUPON
.
equals
(
orderAdapter
.
getQueryOrderAccountType
(
orderAdapter
.
getOrderAccountType
(
accountBean
.
getType
()))))
{
for
(
int
i
=
0
;
i
<
orderBean
.
getProductList
().
size
();
i
++)
{
OrderBean
.
ProductBean
productBean
=
orderBean
.
getProductList
().
get
(
i
);
String
pid
=
StringUtils
.
isNotBlank
(
productBean
.
getSpecification
())
?
productBean
.
getSpecification
()
:
productBean
.
getProductId
();
if
(!
org
.
springframework
.
util
.
CollectionUtils
.
isEmpty
(
orderBean
.
getProductList
().
get
(
i
).
getDiscountList
()))
{
List
<
OrderBean
.
ProductBean
.
ProductDiscount
>
discounts
=
orderBean
.
getProductList
().
get
(
i
).
getDiscountList
().
stream
().
filter
(
productDiscount
->
productDiscount
.
getDiscountId
().
equals
(
accountBean
.
getAccountId
())).
collect
(
Collectors
.
toList
());
for
(
OrderBean
.
ProductBean
.
ProductDiscount
productDiscount
:
discounts
)
{
if
(
productDiscount
.
getDiscountType
()
==
null
||
productDiscount
.
getDiscountType
()
==
0
)
{
continue
;
}
MCCafeProductRedeemVo
mcCafeProductRedeemVo
=
new
MCCafeProductRedeemVo
();
mcCafeProductRedeemVo
.
setPid
(
pid
);
mcCafeProductRedeemVo
.
setKeyProductCode
(
productBean
.
getCustomerCode
());
mcCafeProductRedeemVo
.
setCustomer_code
(
productBean
.
getCustomerCode
());
mcCafeProductRedeemVo
.
setConsume_num
(
productDiscount
.
getDiscountQty
());
mcCafeProductRedeemVo
.
setSeq
(
i
+
1
);
products
.
add
(
mcCafeProductRedeemVo
);
}
}
}
}
MCCafeConponRequest
mcCafeConponRequest
=
new
MCCafeConponRequest
();
mcCafeConponRequest
.
setVer
(
Integer
.
valueOf
(
Version
.
VERSION_1
));
mcCafeConponRequest
.
setReqtype
(
CouponReqTypeEnum
.
REDEEM
.
getCode
());
mcCafeConponRequest
.
setPartnerId
(
Integer
.
parseInt
(
orderBean
.
getCompanyId
()));
mcCafeConponRequest
.
setStore_id
(
orderBean
.
getShopId
());
mcCafeConponRequest
.
setStation_id
(
"-1"
);
mcCafeConponRequest
.
setOperator_id
(
"-1"
);
// 订单号
mcCafeConponRequest
.
setTrans_id
(
orderBean
.
getOid
());
mcCafeConponRequest
.
setChannel
(
OrderSourceType
.
ALIPAY
.
getCode
().
equals
(
orderBean
.
getSource
())?
MCCafeChannelEnum
.
MOCOFFEE_ZFB
.
getName
():
MCCafeChannelEnum
.
MOCOFFEE_WX
.
getName
());
List
<
MCCafeTransactionVo
>
transactions
=
new
ArrayList
<>();
MCCafeTransactionVo
mcCafeTransactionVo
=
new
MCCafeTransactionVo
();
mcCafeTransactionVo
.
setCode
(
accountBean
.
getAccountId
());
mcCafeTransactionVo
.
setTotalAmount
(-
accountBean
.
getPrice
());
if
(
CollectionUtils
.
isNotEmpty
(
products
))
{
mcCafeTransactionVo
.
setProducts
(
products
);
}
transactions
.
add
(
mcCafeTransactionVo
);
mcCafeConponRequest
.
setTransactions
(
transactions
);
mcCafeConponRequest
.
setSign
(
"skip"
);
mcCafeConponRequest
.
setAppFlag
(
"kgd.N"
);
mcCafeConponRequest
.
setBusiness_date
(
cn
.
freemud
.
base
.
util
.
DateUtil
.
convert2Str
(
new
Date
(),
cn
.
freemud
.
base
.
util
.
DateUtil
.
FORMAT_yyyyMMdd
));
return
mcCafeConponRequest
;
}
private
MCCafeCouponLockRequest
convertOrderBean2CouponUnlockRequest
(
OrderBean
orderBean
)
{
if
(
null
==
orderBean
||
CollectionUtils
.
isEmpty
(
orderBean
.
getAccountList
()))
{
return
null
;
}
Optional
<
OrderBean
.
AccountBean
>
accountRequest
=
orderBean
.
getAccountList
().
stream
().
filter
(
account
->
orderAdapter
.
getQueryOrderAccountType
(
orderAdapter
.
getOrderAccountType
(
account
.
getType
())).
equals
(
QueryOrderAccountType
.
COUPON
)
||
orderAdapter
.
getQueryOrderAccountType
(
orderAdapter
.
getOrderAccountType
(
account
.
getType
())).
equals
(
QueryOrderAccountType
.
PRODUCT_COUPON
)
||
orderAdapter
.
getQueryOrderAccountType
(
orderAdapter
.
getOrderAccountType
(
account
.
getType
())).
equals
(
QueryOrderAccountType
.
DISCOUNT_COUPON
)).
findFirst
();
if
(!
accountRequest
.
isPresent
()
||
accountRequest
.
get
().
getPrice
()
==
0
)
{
return
null
;
}
OrderBean
.
AccountBean
accountBean
=
accountRequest
.
get
();
MCCafeCouponLockRequest
mcCafeCouponLockRequest
=
new
MCCafeCouponLockRequest
();
mcCafeCouponLockRequest
.
setVer
(
Integer
.
valueOf
(
Version
.
VERSION_1
));
mcCafeCouponLockRequest
.
setReqType
(
CouponReqTypeEnum
.
UNLOCK
.
getCode
());
mcCafeCouponLockRequest
.
setPartnerId
(
orderBean
.
getCompanyId
());
mcCafeCouponLockRequest
.
setStoreId
(
orderBean
.
getShopId
());
// 订单号
mcCafeCouponLockRequest
.
setTransId
(
orderBean
.
getOid
());
mcCafeCouponLockRequest
.
setCoupon
(
accountBean
.
getAccountId
());
mcCafeCouponLockRequest
.
setOfferId
(
accountBean
.
getAccountId
());
mcCafeCouponLockRequest
.
setNumber
(
"1"
);
mcCafeCouponLockRequest
.
setChannel
(
OrderSourceType
.
ALIPAY
.
getCode
().
equals
(
orderBean
.
getSource
())?
MCCafeChannelEnum
.
MOCOFFEE_ZFB
.
getName
():
MCCafeChannelEnum
.
MOCOFFEE_WX
.
getName
());
mcCafeCouponLockRequest
.
setOperatorId
(
"-1"
);
mcCafeCouponLockRequest
.
setStationId
(
"-1"
);
mcCafeCouponLockRequest
.
setSign
(
"skip"
);
return
mcCafeCouponLockRequest
;
}
/**
* 支付后通知确认返回信息
*/
public
String
sendPaySuccessNoticeMessage
()
{
Map
<
String
,
Object
>
map
=
Maps
.
newTreeMap
();
map
.
put
(
"code"
,
0
);
map
.
put
(
"message"
,
"success"
);
return
gson
.
toJson
(
map
);
}
public
Map
<
String
,
OrderBean
>
getOrderBeanByOrderId
(
String
orderId
)
{
// 订单查询:若结果集只有一个orderBean,则为普通订单,否则为会员卡订单(父子订单)
Map
<
String
,
OrderBean
>
result
=
new
HashMap
<>();
QueryRelationOrderByIdResponseDto
queryOrderByIdResponseDto
=
getQueryRelationOrderByIdResponseDto
(
orderId
);
if
(
CollectionUtils
.
isEmpty
(
queryOrderByIdResponseDto
.
getData
()))
{
return
result
;
}
if
(
1
==
queryOrderByIdResponseDto
.
getData
().
size
())
{
result
.
put
(
OrderBeanType
.
SAASORDER
.
getCode
(),
queryOrderByIdResponseDto
.
getData
().
get
(
0
));
}
else
{
List
<
OrderBean
>
saasOrderBeans
=
queryOrderByIdResponseDto
.
getData
().
stream
().
filter
(
order
->
order
.
getBizType
().
equals
(
1
)).
collect
(
Collectors
.
toList
());
List
<
OrderBean
>
memberOrderBeans
=
queryOrderByIdResponseDto
.
getData
().
stream
().
filter
(
order
->
order
.
getBizType
().
equals
(
3
)
&&
!
order
.
isParent
()).
collect
(
Collectors
.
toList
());
List
<
OrderBean
>
fatherOrderBeans
=
queryOrderByIdResponseDto
.
getData
().
stream
().
filter
(
order
->
order
.
getBizType
().
equals
(
2
)
&&
order
.
isParent
()).
collect
(
Collectors
.
toList
());
result
.
put
(
OrderBeanType
.
SAASORDER
.
getCode
(),
CollectionUtils
.
isNotEmpty
(
saasOrderBeans
)
?
saasOrderBeans
.
get
(
0
)
:
null
);
result
.
put
(
OrderBeanType
.
MERMBERORDER
.
getCode
(),
CollectionUtils
.
isNotEmpty
(
memberOrderBeans
)
?
memberOrderBeans
.
get
(
0
)
:
null
);
result
.
put
(
OrderBeanType
.
FATHERORDER
.
getCode
(),
CollectionUtils
.
isNotEmpty
(
fatherOrderBeans
)
?
fatherOrderBeans
.
get
(
0
)
:
null
);
}
return
result
;
}
/**
* 发送支付成功模板消息
*
* @param orderBean
*/
private
void
sendPaySuccessMessage
(
QueryOrdersResponseDto
.
DataBean
.
OrderBean
orderBean
)
{
Long
gmtExpect
=
orderBean
.
getGmtExpect
();
if
(
gmtExpect
!=
null
)
{
// 预约下单
this
.
sendMessage
(
orderBean
,
MessageEventType
.
PAYORDEREXPECT
);
}
else
{
// 非预约下单
this
.
sendMessage
(
orderBean
,
MessageEventType
.
PAYORDER
);
}
}
/**
* 发MQ去打印
*
* @param request
*/
public
void
asynchronousPrint
(
OrderPrintDto
request
)
{
LogUtil
.
debug
(
"OrderPrintDto"
,
JSONObject
.
toJSONString
(
request
),
null
);
Header
header
=
new
Header
(
MQAction
.
INSERT
.
getAction
(),
"asynchronous-print-api"
,
request
.
getOid
()
+
""
,
cloudPrintQueue
);
MQMessage
<
OrderPrintDto
>
message
=
new
MQMessage
<>(
header
,
request
);
mqService
.
convertAndSend
(
cloud_print_exchange
,
cloudPrintQueue
,
message
);
}
/**
* 开通会员卡
*
* @param partnerId 商户号
* @param ruleId 会员规则ID
* @param oid 订单号
* @param userId 用户ID
*/
private
void
activateMemberCard
(
String
partnerId
,
String
ruleId
,
String
oid
,
String
userId
)
{
PurchasePaidRequestDto
purchasePaidRequestDto
=
new
PurchasePaidRequestDto
();
purchasePaidRequestDto
.
setPartnerId
(
partnerId
);
purchasePaidRequestDto
.
setOperatorType
(
0
);
purchasePaidRequestDto
.
setRuleId
(
ruleId
);
purchasePaidRequestDto
.
setOrderId
(
oid
);
purchasePaidRequestDto
.
setMemberId
(
userId
);
// 尝试三次开通会员卡,中途成功则跳出
int
count
=
3
;
for
(
int
i
=
1
;
i
<=
count
;
i
++)
{
BaseResponse
baseResponse
=
customerApplicationClient
.
purchasePaid
(
purchasePaidRequestDto
);
// 不以响应码为判断是否开通会员卡成功的标准
if
(
baseResponse
!=
null
&&
"SUCCESS"
.
equals
(
baseResponse
.
getResult
()))
{
break
;
}
// 尝试开通会员卡失败三次
if
(
i
>=
count
)
{
LogUtil
.
error
(
"尝试开通会员卡失败"
+
count
+
"次"
,
JSON
.
toJSONString
(
purchasePaidRequestDto
),
JSON
.
toJSONString
(
baseResponse
));
}
}
}
}
order-application-service/src/main/java/cn/freemud/service/impl/OrderAdapterServiceImpl.java
View file @
79b5413c
...
@@ -55,6 +55,8 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
...
@@ -55,6 +55,8 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
@Autowired
@Autowired
private
OrderServiceImpl
orderService
;
private
OrderServiceImpl
orderService
;
@Autowired
@Autowired
private
MCCafeOrderService
mcCafeOrderService
;
@Autowired
private
AssortmentCustomerInfoManager
assortmentCustomerInfoManager
;
private
AssortmentCustomerInfoManager
assortmentCustomerInfoManager
;
@Autowired
@Autowired
private
MallOrderService
mallOrderService
;
private
MallOrderService
mallOrderService
;
...
@@ -125,6 +127,24 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
...
@@ -125,6 +127,24 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
return
orderService
.
createOrderNew
(
createOrderVo
);
return
orderService
.
createOrderNew
(
createOrderVo
);
}
}
@Override
public
BaseResponse
createMCCafeOrder
(
CreateOrderVo
createOrderVo
)
{
AssortmentCustomerInfoVo
assortmentCustomerInfoVo
=
assortmentCustomerInfoManager
.
getCustomerInfoByObject
(
createOrderVo
.
getSessionId
());
if
(
assortmentCustomerInfoVo
==
null
||
StringUtils
.
isEmpty
(
assortmentCustomerInfoVo
.
getMemberId
()))
{
return
ResponseUtil
.
error
(
ResponseResult
.
NOT_LOGIN
);
}
// 扩展字段中存储 sessionKey
createOrderVo
.
setSessionKey
(
assortmentCustomerInfoVo
.
getSessionKey
());
//原标准点餐程序逻辑处理
BaseResponse
baseResponse
=
this
.
checkStandardParamInfo
(
createOrderVo
);
if
(
ObjectUtils
.
notEqual
(
baseResponse
.
getCode
(),
ResponseResult
.
SUCCESS
.
getCode
())){
return
baseResponse
;
}
return
mcCafeOrderService
.
createMCCafeOrder
(
createOrderVo
);
}
@Override
@Override
public
BaseResponse
createPrepay
(
CreatePrepayVo
createPrepayVo
)
{
public
BaseResponse
createPrepay
(
CreatePrepayVo
createPrepayVo
)
{
AssortmentCustomerInfoVo
assortmentCustomerInfoVo
=
assortmentCustomerInfoManager
.
getCustomerInfoByObject
(
createPrepayVo
.
getSessionId
());
AssortmentCustomerInfoVo
assortmentCustomerInfoVo
=
assortmentCustomerInfoManager
.
getCustomerInfoByObject
(
createPrepayVo
.
getSessionId
());
...
@@ -161,23 +181,45 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
...
@@ -161,23 +181,45 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
if
(!
PayStatus
.
NOT_PAY
.
getCode
().
equals
(
orderBean
.
getPayStatus
())){
if
(!
PayStatus
.
NOT_PAY
.
getCode
().
equals
(
orderBean
.
getPayStatus
())){
return
orderAdapter
.
sendPaySuccessNoticeMessage
();
return
orderAdapter
.
sendPaySuccessNoticeMessage
();
}
}
/**
//买券虚拟订单
* 围餐处理
if
(
orderBean
.
getBizType
()
==
6
)
{
*/
return
sellCouponOrderService
.
paySuccessCallback
(
message
,
confirmOrderDto
,
orderBeans
);
if
(
"meals"
.
equals
(
orderBean
.
getSource
()))
{
return
orderCommonService
.
paySuccessCallback
(
message
,
confirmOrderDto
,
orderBeans
);
}
}
/**
/**
*
微商城
处理
*
默认点餐
处理
*/
*/
if
(
OrderSourceType
.
SAASMALL
.
getCode
().
equals
(
orderBean
.
getSource
()))
{
return
orderService
.
paySuccessCallback
(
message
,
confirmOrderDto
,
orderBeans
);
return
mallOrderService
.
paySuccessCallback
(
message
,
confirmOrderDto
,
orderBeans
);
}
catch
(
Exception
e
)
{
throw
e
;
}
finally
{
//删除分布式锁
redisCache
.
delete
(
"saas:lockAfter:"
+
paySuccessKey
);
}
}
/**
}
* app订单处理
*/
@Override
if
(
OrderSourceType
.
APP
.
getCode
().
equals
(
orderBean
.
getSource
()))
{
public
String
mcCafePaySuccessCallback
(
PaysuccessNoticeMessage
message
)
{
return
appOrderService
.
paySuccessCallback
(
message
,
confirmOrderDto
,
orderBeans
);
//添加分布式锁,如果没有取得锁直接返回失败;整个方法执行完毕后会删掉该锁
String
paySuccessKey
=
PAY_SUCCESS_KEY
+
message
.
getTrans_id
();
if
(!
LockUtils
.
lockAfter
(
redisCache
.
getRedisTemplate
(),
paySuccessKey
)){
return
orderAdapter
.
newSendPayFaileMessage
();
}
try
{
ConfirmOrderDto
confirmOrderDto
=
orderAdapter
.
convent2ConfirmOrderDto
(
message
);
// 通过交易号从缓存中拿订单号,如果有数据则实际订单号为其value值
String
orderId
=
redisCache
.
getValue
(
RedisUtil
.
getPaymentTransIdOrderKey
(
confirmOrderDto
.
getOrderId
()));
if
(
StringUtils
.
isNotBlank
(
orderId
))
{
log
.
info
(
"从缓存中获取的订单数据,trackingNo:{},transId:{},orderId:{}"
,
LogTreadLocal
.
getTrackingNo
(),
confirmOrderDto
.
getOrderId
(),
orderId
);
confirmOrderDto
.
setOrderId
(
orderId
);
}
Map
<
String
,
QueryOrdersResponseDto
.
DataBean
.
OrderBean
>
orderBeans
=
orderService
.
getOrderBeanByOrderId
(
confirmOrderDto
.
getOrderId
());
if
(
MapUtils
.
isEmpty
(
orderBeans
))
{
log
.
error
(
"paySuccessCallback_queryOrderById_faild, trackingNo:{},PaysuccessNoticeMessage:{}"
,
LogTreadLocal
.
getTrackingNo
(),
gson
.
toJson
(
message
));
return
gson
.
toJson
(
message
);
}
QueryOrdersResponseDto
.
DataBean
.
OrderBean
orderBean
=
orderBeans
.
get
(
OrderBeanType
.
SAASORDER
.
getCode
());
if
(!
PayStatus
.
NOT_PAY
.
getCode
().
equals
(
orderBean
.
getPayStatus
())){
return
orderAdapter
.
sendPaySuccessNoticeMessage
();
}
}
//买券虚拟订单
//买券虚拟订单
if
(
orderBean
.
getBizType
()
==
6
)
{
if
(
orderBean
.
getBizType
()
==
6
)
{
...
@@ -186,7 +228,7 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
...
@@ -186,7 +228,7 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
/**
/**
* 默认点餐处理
* 默认点餐处理
*/
*/
return
o
rderService
.
paySuccessCallback
(
message
,
confirmOrderDto
,
orderBeans
);
return
mcCafeO
rderService
.
paySuccessCallback
(
message
,
confirmOrderDto
,
orderBeans
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
throw
e
;
throw
e
;
}
finally
{
}
finally
{
...
...
order-application-service/src/test/java/cn.freemud/service/CouponActivityServiceTest.java
View file @
79b5413c
package
cn
.
freemud
.
service
;
import
cn.freemud.OrderApplication
;
import
cn.freemud.base.constant.Version
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponBaseResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponQueryResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedeemResponse
;
import
com.freemud.sdk.api.assortment.order.enums.CouponReqTypeEnum
;
import
com.freemud.sdk.api.assortment.order.request.coupon.*
;
import
com.freemud.sdk.api.assortment.order.service.thirdparty.CouponOfflineMCCafeClient
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
java.util.ArrayList
;
import
java.util.List
;
@RunWith
(
SpringRunner
.
class
)
@SpringBootTest
(
classes
=
OrderApplication
.
class
)
public
class
CouponActivityServiceTest
{
@Autowired
private
CouponOfflineMCCafeClient
offlineMCCafeClient
;
@Test
public
void
redeemTest
()
{
MCCafeConponRequest
couponCodeVerificationDto
=
new
MCCafeConponRequest
();
couponCodeVerificationDto
.
setVer
(
Integer
.
valueOf
(
Version
.
VERSION_1
));
couponCodeVerificationDto
.
setReqtype
(
CouponReqTypeEnum
.
REDEEM
.
getCode
());
couponCodeVerificationDto
.
setPartnerId
(
1205
);
couponCodeVerificationDto
.
setStore_id
(
"khl-12345"
);
couponCodeVerificationDto
.
setStation_id
(
"1"
);
couponCodeVerificationDto
.
setOperator_id
(
"1"
);
// 订单号
couponCodeVerificationDto
.
setTrans_id
(
"testRedeem0729009"
);
couponCodeVerificationDto
.
setChannel
(
"mocoffee_wx"
);
List
<
MCCafeTransactionVo
>
transactions
=
new
ArrayList
<>();
MCCafeTransactionVo
mcCafeTransactionVo
=
new
MCCafeTransactionVo
();
mcCafeTransactionVo
.
setCode
(
"281168656683188"
);
List
<
MCCafeProductRedeemVo
>
products
=
new
ArrayList
<>();
MCCafeProductRedeemVo
mcCafeProductRedeemVo
=
new
MCCafeProductRedeemVo
();
mcCafeProductRedeemVo
.
setConsume_num
(
1
);
mcCafeProductRedeemVo
.
setPid
(
"100057810020870000"
);
mcCafeProductRedeemVo
.
setCustomer_code
(
"11"
);
mcCafeProductRedeemVo
.
setKeyProductCode
(
"11"
);
mcCafeProductRedeemVo
.
setSeq
(
1
);
products
.
add
(
mcCafeProductRedeemVo
);
mcCafeTransactionVo
.
setProducts
(
products
);
transactions
.
add
(
mcCafeTransactionVo
);
couponCodeVerificationDto
.
setTransactions
(
transactions
);
couponCodeVerificationDto
.
setSign
(
"skip"
);
System
.
out
.
println
(
JSON
.
toJSONString
(
couponCodeVerificationDto
));
CouponRedeemResponse
couponCodeResponseDto
=
offlineMCCafeClient
.
redeem
(
couponCodeVerificationDto
);
System
.
out
.
println
(
couponCodeResponseDto
);
}
@Test
public
void
cancelRedeemTest
()
{
MCCafeConponRequest
couponCodeVerificationDto
=
new
MCCafeConponRequest
();
couponCodeVerificationDto
.
setVer
(
Integer
.
valueOf
(
Version
.
VERSION_1
));
couponCodeVerificationDto
.
setReqtype
(
CouponReqTypeEnum
.
CANCEL_REDEEM
.
getCode
());
couponCodeVerificationDto
.
setPartnerId
(
1205
);
couponCodeVerificationDto
.
setStore_id
(
"khl-12345"
);
couponCodeVerificationDto
.
setStation_id
(
"1"
);
couponCodeVerificationDto
.
setOperator_id
(
"1"
);
// 订单号
couponCodeVerificationDto
.
setTrans_id
(
"testRedeem0729009"
);
couponCodeVerificationDto
.
setChannel
(
"mocoffee_wx"
);
List
<
MCCafeTransactionVo
>
transactions
=
new
ArrayList
<>();
MCCafeTransactionVo
mcCafeTransactionVo
=
new
MCCafeTransactionVo
();
mcCafeTransactionVo
.
setCode
(
"297330216254368"
);
List
<
MCCafeProductRedeemVo
>
products
=
new
ArrayList
<>();
MCCafeProductRedeemVo
mcCafeProductRedeemVo
=
new
MCCafeProductRedeemVo
();
mcCafeProductRedeemVo
.
setConsume_num
(
1
);
mcCafeProductRedeemVo
.
setPid
(
"100057810020870000"
);
mcCafeProductRedeemVo
.
setCustomer_code
(
"11"
);
mcCafeProductRedeemVo
.
setKeyProductCode
(
"11"
);
mcCafeProductRedeemVo
.
setSeq
(
1
);
products
.
add
(
mcCafeProductRedeemVo
);
mcCafeTransactionVo
.
setProducts
(
products
);
transactions
.
add
(
mcCafeTransactionVo
);
couponCodeVerificationDto
.
setTransactions
(
transactions
);
couponCodeVerificationDto
.
setSign
(
"skip"
);
System
.
out
.
println
(
JSON
.
toJSONString
(
couponCodeVerificationDto
));
CouponRedeemResponse
couponCodeResponseDto
=
offlineMCCafeClient
.
cancelRedeem
(
couponCodeVerificationDto
);
System
.
out
.
println
(
couponCodeResponseDto
);
}
@Test
public
void
queryTest
()
{
MCCafeConponRequest
couponCodeVerificationDto
=
new
MCCafeConponRequest
();
couponCodeVerificationDto
.
setVer
(
Integer
.
valueOf
(
Version
.
VERSION_1
));
couponCodeVerificationDto
.
setReqtype
(
CouponReqTypeEnum
.
QUERY
.
getCode
());
couponCodeVerificationDto
.
setPartnerId
(
1205
);
couponCodeVerificationDto
.
setStore_id
(
"khl-12345"
);
couponCodeVerificationDto
.
setStation_id
(
"1"
);
couponCodeVerificationDto
.
setOperator_id
(
"1"
);
couponCodeVerificationDto
.
setChannel
(
"mocoffee_wx"
);
couponCodeVerificationDto
.
setCoupon
(
"281168656683188"
);
couponCodeVerificationDto
.
setSign
(
"skip"
);
System
.
out
.
println
(
JSON
.
toJSONString
(
couponCodeVerificationDto
));
CouponQueryResponse
couponQueryResponse
=
offlineMCCafeClient
.
query
(
couponCodeVerificationDto
);
System
.
out
.
println
(
JSON
.
toJSONString
(
couponQueryResponse
));
}
@Test
public
void
lockTest
()
{
MCCafeCouponLockRequest
couponCodeVerificationDto
=
new
MCCafeCouponLockRequest
();
couponCodeVerificationDto
.
setVer
(
Integer
.
valueOf
(
Version
.
VERSION_1
));
couponCodeVerificationDto
.
setReqType
(
89
);
couponCodeVerificationDto
.
setPartnerId
(
"1205"
);
couponCodeVerificationDto
.
setStoreId
(
"99992"
);
// 订单号
couponCodeVerificationDto
.
setTransId
(
"00000002"
);
couponCodeVerificationDto
.
setOfferId
(
"281168656683188"
);
couponCodeVerificationDto
.
setCoupon
(
"281168656683188"
);
couponCodeVerificationDto
.
setNumber
(
"1"
);
couponCodeVerificationDto
.
setChannel
(
"mocoffee_wx"
);
couponCodeVerificationDto
.
setOperatorId
(
"1"
);
couponCodeVerificationDto
.
setStationId
(
"1"
);
couponCodeVerificationDto
.
setSign
(
"ss"
);
System
.
out
.
println
(
JSON
.
toJSONString
(
couponCodeVerificationDto
));
CouponBaseResponse
couponCodeResponseDto
=
offlineMCCafeClient
.
lock
(
couponCodeVerificationDto
);
System
.
out
.
println
(
couponCodeResponseDto
);
}
@Test
public
void
unlockTest
()
{
MCCafeCouponLockRequest
couponCodeVerificationDto
=
new
MCCafeCouponLockRequest
();
couponCodeVerificationDto
.
setVer
(
Integer
.
valueOf
(
Version
.
VERSION_1
));
couponCodeVerificationDto
.
setReqType
(
90
);
couponCodeVerificationDto
.
setPartnerId
(
"1205"
);
couponCodeVerificationDto
.
setStoreId
(
"khl-12345"
);
// 订单号
couponCodeVerificationDto
.
setTransId
(
"00000002"
);
couponCodeVerificationDto
.
setOfferId
(
"281168656683188"
);
couponCodeVerificationDto
.
setCoupon
(
"281168656683188"
);
couponCodeVerificationDto
.
setNumber
(
"1"
);
couponCodeVerificationDto
.
setChannel
(
"mocoffee_wx"
);
couponCodeVerificationDto
.
setOperatorId
(
"1"
);
couponCodeVerificationDto
.
setStationId
(
"1"
);
couponCodeVerificationDto
.
setSign
(
"ss"
);
System
.
out
.
println
(
JSON
.
toJSONString
(
couponCodeVerificationDto
));
CouponBaseResponse
couponCodeResponseDto
=
offlineMCCafeClient
.
unlock
(
couponCodeVerificationDto
);
System
.
out
.
println
(
couponCodeResponseDto
);
}
}
\ No newline at end of file
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/CouponCodeMCCafeBaseDto.java
0 → 100644
View file @
79b5413c
package
cn
.
freemud
.
entities
.
dto
;
import
lombok.Data
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponCodeBaseReqVO
* @Package cn.freemud.entities.dto
* @Description:
* @author: biao.zhang
* @date: 2018/11/19 16:07
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public
class
CouponCodeMCCafeBaseDto
{
private
Integer
ver
;
/**
* 71 核销
* 89 锁定
* 90 解锁
*/
private
Integer
reqType
;
/**
* 核销渠道
* 1:线下Pos
* 2:线上
* 3:pickup:麦当劳点餐
* 4:delivery:麦当劳外送
* 5:mccafe:麦当劳咖啡
* 6:mc_dessert麦当劳甜品站
* 7:SOK
* 8:ECP/CMA
* 9:mcd_alipay:麦当劳支付宝点餐
*/
private
String
channel
;
//商户编号
private
String
partnerId
;
//商家门店号
private
String
storeId
;
//营业员编号
private
String
operatorId
;
//POS机编号
private
String
stationId
;
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/CouponCodeVerificationMCCafeDto.java
0 → 100644
View file @
79b5413c
package
cn
.
freemud
.
entities
.
dto
;
import
lombok.Data
;
import
java.util.List
;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: CouponCodeVerificationReqVO
* @Package cn.freemud.entities.dto
* @Description:
* @author: biao.zhang
* @date: 2018/7/17 14:45
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public
class
CouponCodeVerificationMCCafeDto
extends
CouponCodeMCCafeBaseDto
{
//交易序号
private
String
transId
;
//券编号
private
String
coupon
;
//三方券号
private
String
offerId
;
//锁定/解锁次数
private
String
number
;
//----非必传---
//预约订单时间,为空则为及时单,如:2020-06-17 12:00:00
private
String
advancedOrderTime
;
//签名
private
String
sign
;
private
List
<
CouponCodeVerificationTransDto
>
transactions
;
}
shopping-cart-application-service/src/main/java/cn/freemud/service/CouponService.java
View file @
79b5413c
...
@@ -64,17 +64,7 @@ public interface CouponService {
...
@@ -64,17 +64,7 @@ public interface CouponService {
* @param requestVo
* @param requestVo
* @return
* @return
*/
*/
GetCouponDetailResponseDto
getMCDMemberCoupon
(
GetMemberCouponRequestVo
requestVo
);
GetCouponDetailResponseDto
getMCCafeMemberCoupon
(
GetMemberCouponRequestVo
requestVo
);
/**
* 批次查询麦咖啡券详情
*
* @param partnerId
* @param storeId
* @param codes
* @return
*/
List
<
GetCouponDetailResponseDto
.
Details
>
getMCDMemberCoupons
(
String
partnerId
,
String
storeId
,
List
<
String
>
codes
);
/**
/**
* 同步券到会员卡包(投放会员卡包)
* 同步券到会员卡包(投放会员卡包)
...
@@ -100,7 +90,7 @@ public interface CouponService {
...
@@ -100,7 +90,7 @@ public interface CouponService {
/**
/**
* 获取卡券服务麦咖啡商户密钥
* 获取卡券服务麦咖啡商户密钥
*/
*/
String
get
AppSecretMCD
(
String
partnerId
);
String
get
MCCafeAppSecret
(
String
partnerId
);
/**
/**
* 通过code校验券是否存在,返回商品券信息pid、price、code
* 通过code校验券是否存在,返回商品券信息pid、price、code
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/CouponServiceImpl.java
View file @
79b5413c
...
@@ -86,6 +86,8 @@ public class CouponServiceImpl implements CouponService {
...
@@ -86,6 +86,8 @@ public class CouponServiceImpl implements CouponService {
@Autowired
@Autowired
private
CouponOnlineClient
couponOnlineClient
;
private
CouponOnlineClient
couponOnlineClient
;
@Autowired
@Autowired
private
CouponOnlineMCCafeClient
couponOnlineMCCafeClient
;
@Autowired
private
CouponAvailableService
couponAvailableService
;
private
CouponAvailableService
couponAvailableService
;
@Value
(
"${coupon.app.id}"
)
@Value
(
"${coupon.app.id}"
)
private
String
appid
;
private
String
appid
;
...
@@ -94,7 +96,7 @@ public class CouponServiceImpl implements CouponService {
...
@@ -94,7 +96,7 @@ public class CouponServiceImpl implements CouponService {
@Autowired
@Autowired
private
CardBinClient
cardBinClient
;
private
CardBinClient
cardBinClient
;
@Autowired
@Autowired
private
CardBinMC
DClient
cardBinMCD
Client
;
private
CardBinMC
CafeClient
cardBinMCCafe
Client
;
@Autowired
@Autowired
private
StoreItemClient
storeItemClient
;
private
StoreItemClient
storeItemClient
;
@Autowired
@Autowired
...
@@ -251,6 +253,32 @@ public class CouponServiceImpl implements CouponService {
...
@@ -251,6 +253,32 @@ public class CouponServiceImpl implements CouponService {
return
null
;
return
null
;
}
}
@Override
public
GetCouponDetailResponseDto
getMCCafeMemberCoupon
(
GetMemberCouponRequestVo
requestVo
)
{
log
.
info
(
"getMemberCoupon:"
+
gson
.
toJson
(
requestVo
));
//TODO 券详情查券服务
Map
<
String
,
String
>
map
=
new
TreeMap
<
String
,
String
>();
if
(
StringUtils
.
isBlank
(
requestVo
.
getPartnerId
())
||
StringUtils
.
isBlank
(
requestVo
.
getCouponCode
()))
{
return
null
;
}
map
.
put
(
Finals
.
CODES
,
requestVo
.
getCouponCode
());
map
.
put
(
Finals
.
PARTNER_ID
,
requestVo
.
getPartnerId
());
map
.
put
(
Finals
.
MERCHANT_ID
,
requestVo
.
getPartnerId
());
map
.
put
(
Finals
.
ACTION
,
"code.allDetails"
);
// 券码接口新增参数:组织机构(多个用英文逗号分离)
String
channelIds
=
commonService
.
getOrgIdsAsString
(
requestVo
.
getPartnerId
(),
requestVo
.
getStoreId
());
map
.
put
(
Finals
.
CHANNEL_CODE_LIST
,
channelIds
);
String
appSecret
=
getMCCafeAppSecret
(
requestVo
.
getPartnerId
());
String
sign
=
SignUtil
.
createMD5Sign
(
map
,
appSecret
);
map
.
put
(
Finals
.
SIGN
,
sign
);
GetCouponDetailResponseDto
responseDto
=
couponOnlineMCCafeClient
.
getMCCafeCouponDetails
(
map
);
LogUtil
.
info
(
"couponOnlineClient.getCouponDetails****"
,
map
,
gson
.
toJson
(
responseDto
));
if
(
ResponseCodeConstant
.
RESPONSE_SUCCESS_1
.
equals
(
responseDto
.
getResult
()))
{
return
responseDto
;
}
return
null
;
}
/**
/**
* 批次查询
* 批次查询
*/
*/
...
@@ -307,12 +335,12 @@ public class CouponServiceImpl implements CouponService {
...
@@ -307,12 +335,12 @@ public class CouponServiceImpl implements CouponService {
}
}
@Override
@Override
public
String
get
AppSecretMCD
(
String
partnerId
)
{
public
String
get
MCCafeAppSecret
(
String
partnerId
)
{
// 获取券服务的密钥
// 获取券服务的密钥
String
couponAppSecret
=
RedisUtil
.
getCouponAppSecret
(
partnerId
);
String
couponAppSecret
=
RedisUtil
.
getCouponAppSecret
(
partnerId
);
String
appSecret
=
redisCache
.
getValue
(
couponAppSecret
);
String
appSecret
=
redisCache
.
getValue
(
couponAppSecret
);
if
(
StringUtils
.
isBlank
(
appSecret
))
{
if
(
StringUtils
.
isBlank
(
appSecret
))
{
GetAppKeyResponseDto
getAppKeyResponseDto
=
cardBinMC
DClient
.
get
AppKey
(
GetAppKeyRequestDto
.
builder
().
partnerId
(
partnerId
).
appId
(
appid
).
build
());
GetAppKeyResponseDto
getAppKeyResponseDto
=
cardBinMC
CafeClient
.
getMCCafe
AppKey
(
GetAppKeyRequestDto
.
builder
().
partnerId
(
partnerId
).
appId
(
appid
).
build
());
if
(
Objects
.
equals
(
String
.
valueOf
(
getAppKeyResponseDto
.
getStatusCode
()),
ResponseResult
.
SUCCESS
.
getCode
())
if
(
Objects
.
equals
(
String
.
valueOf
(
getAppKeyResponseDto
.
getStatusCode
()),
ResponseResult
.
SUCCESS
.
getCode
())
&&
getAppKeyResponseDto
.
getData
()
!=
null
)
{
&&
getAppKeyResponseDto
.
getData
()
!=
null
)
{
redisCache
.
save
(
couponAppSecret
,
getAppKeyResponseDto
.
getData
().
getAppKey
());
redisCache
.
save
(
couponAppSecret
,
getAppKeyResponseDto
.
getData
().
getAppKey
());
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/thirdparty/CardBinMC
D
Client.java
→
shopping-cart-application-service/src/main/java/cn/freemud/service/thirdparty/CardBinMC
Cafe
Client.java
View file @
79b5413c
...
@@ -9,24 +9,24 @@ import org.springframework.web.bind.annotation.PostMapping;
...
@@ -9,24 +9,24 @@ import org.springframework.web.bind.annotation.PostMapping;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
//测试环境:http://115.159.65.101:8082 生产环境:https://onlinecoupon.sandload.cn
//测试环境:http://115.159.65.101:8082 生产环境:https://onlinecoupon.sandload.cn
@FeignClient
(
name
=
"CARDBIN
CLIENT"
,
url
=
"${saas.cardbinclient.feign.url}
"
)
@FeignClient
(
name
=
"CARDBIN
MCCafeCLIENT"
,
url
=
"fff
"
)
@RequestMapping
(
produces
=
{
"application/json;charset=UTF-8"
})
@RequestMapping
(
produces
=
{
"application/json;charset=UTF-8"
})
public
interface
CardBinMC
D
Client
{
public
interface
CardBinMC
Cafe
Client
{
/**
/**
* 获取麦咖啡券码密钥
* 获取麦咖啡券码密钥
* @param requestDto
* @param requestDto
* @return
* @return
*/
*/
@PostMapping
(
"/getAppKey"
)
@PostMapping
(
"/
mccafe/
getAppKey"
)
GetAppKeyResponseDto
getAppKey
(
GetAppKeyRequestDto
requestDto
);
GetAppKeyResponseDto
get
MCCafe
AppKey
(
GetAppKeyRequestDto
requestDto
);
/**
/**
* 麦咖啡活动信息批量查询
* 麦咖啡活动信息批量查询
* @param requestDto
* @param requestDto
* @return
* @return
*/
*/
@PostMapping
(
value
=
"/batchQueryActivityInfo"
)
@PostMapping
(
value
=
"/
mccafe/
batchQueryActivityInfo"
)
BatchQueryActivityInfoResponseDto
batchQueryActivityInfo
(
BatchQueryActivityInfoRequestDto
requestDto
);
BatchQueryActivityInfoResponseDto
batchQuery
MCCafe
ActivityInfo
(
BatchQueryActivityInfoRequestDto
requestDto
);
}
}
shopping-cart-application-service/src/main/java/cn/freemud/service/thirdparty/CouponOfflineMCCafeClient.java
0 → 100644
View file @
79b5413c
package
cn
.
freemud
.
service
.
thirdparty
;
import
cn.freemud.entities.dto.CouponCodeResponseDto
;
import
cn.freemud.entities.dto.CouponCodeVerificationMCCafeDto
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedeemResponse
;
import
org.springframework.cloud.netflix.feign.FeignClient
;
import
org.springframework.web.bind.annotation.PostMapping
;
@FeignClient
(
name
=
"COUPONMCCafe"
,
url
=
"http://coupon-api-gateway-koderover-dev-coupon.api-ingress.sandload.cn"
)
public
interface
CouponOfflineMCCafeClient
{
@PostMapping
(
"/mccafe/redeem"
)
CouponRedeemResponse
redeem
(
CouponCodeVerificationMCCafeDto
couponCodeVerificationMCCafeDto
);
@PostMapping
(
"/mccafe/cancelRedeem"
)
CouponRedeemResponse
cancelRedeem
(
CouponCodeVerificationMCCafeDto
couponCodeVerificationMCCafeDto
);
@PostMapping
(
"/mccafe/query"
)
CouponRedeemResponse
query
(
CouponCodeVerificationMCCafeDto
couponCodeVerificationMCCafeDto
);
@PostMapping
(
"/mccafe/lock"
)
CouponRedeemResponse
lock
(
CouponCodeVerificationMCCafeDto
couponCodeVerificationMCCafeDto
);
@PostMapping
(
"/mccafe/unlock"
)
CouponRedeemResponse
unlock
(
CouponCodeVerificationMCCafeDto
couponCodeVerificationMCCafeDto
);
}
shopping-cart-application-service/src/main/java/cn/freemud/service/thirdparty/CouponOnlineMC
D
Client.java
→
shopping-cart-application-service/src/main/java/cn/freemud/service/thirdparty/CouponOnlineMC
Cafe
Client.java
View file @
79b5413c
...
@@ -12,14 +12,14 @@ import org.springframework.web.bind.annotation.RequestBody;
...
@@ -12,14 +12,14 @@ import org.springframework.web.bind.annotation.RequestBody;
import
java.util.Map
;
import
java.util.Map
;
//@IgnoreFeignLogAnnotation
//@IgnoreFeignLogAnnotation
@FeignClient
(
name
=
"COUPONOLINE
"
,
url
=
"${saas.coupononlineclient.feign.url}
"
,
configuration
=
FormSupportConfig
.
class
)
@FeignClient
(
name
=
"COUPONOLINE
MCCafe"
,
url
=
"fffff
"
,
configuration
=
FormSupportConfig
.
class
)
public
interface
CouponOnlineMC
D
Client
{
public
interface
CouponOnlineMC
Cafe
Client
{
/**
/**
* 查询券详情
* 查询券详情
*/
*/
@PostMapping
(
value
=
"/code_v4"
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
,
@PostMapping
(
value
=
"/
mccafe/
code_v4"
,
produces
=
MediaType
.
APPLICATION_JSON_UTF8_VALUE
,
consumes
=
{
MediaType
.
APPLICATION_FORM_URLENCODED_VALUE
}
consumes
=
{
MediaType
.
APPLICATION_FORM_URLENCODED_VALUE
}
)
)
GetCouponDetailResponseDto
getCouponDetails
(
@RequestBody
Map
<
String
,
?>
map
);
GetCouponDetailResponseDto
get
MCCafe
CouponDetails
(
@RequestBody
Map
<
String
,
?>
map
);
}
}
shopping-cart-application-service/src/test/java/cn.freemud/service/CouponServiceTest.java
View file @
79b5413c
...
@@ -175,24 +175,17 @@ public class CouponServiceTest {
...
@@ -175,24 +175,17 @@ public class CouponServiceTest {
*/
*/
@Test
@Test
public
void
couponCodeV4
()
{
public
void
couponCodeV4
()
{
Map
<
String
,
String
>
map
=
new
TreeMap
<
String
,
String
>();
GetMemberCouponRequestVo
getMemberCouponRequestVo
=
new
GetMemberCouponRequestVo
();
map
.
put
(
Finals
.
CODES
,
""
);
getMemberCouponRequestVo
.
setCouponCode
(
""
);
map
.
put
(
Finals
.
PARTNER_ID
,
""
);
getMemberCouponRequestVo
.
setPartnerId
(
""
);
map
.
put
(
Finals
.
MERCHANT_ID
,
""
);
getMemberCouponRequestVo
.
setStoreId
(
""
);
map
.
put
(
Finals
.
ACTION
,
"code.allDetails"
);
GetCouponDetailResponseDto
responseDto
=
couponService
.
getMCCafeMemberCoupon
(
getMemberCouponRequestVo
);
// 券码接口新增参数:组织机构(多个用英文逗号分离)
System
.
out
.
println
(
JSON
.
toJSONString
(
responseDto
));
String
channelIds
=
commonService
.
getOrgIdsAsString
(
""
,
""
);
map
.
put
(
Finals
.
CHANNEL_CODE_LIST
,
channelIds
);
String
appSecret
=
getAppSecret
(
""
);
String
sign
=
SignUtil
.
createMD5Sign
(
map
,
appSecret
);
map
.
put
(
Finals
.
SIGN
,
sign
);
// GetCouponDetailResponseDto responseDto = couponOnlineClient.getCouponDetails(map);
// System.out.println(JSON.toJSONString(responseDto));
}
}
@Test
@Test
public
String
getAppSecret
(
String
partner
)
{
public
String
getAppSecret
(
String
partner
)
{
String
appSecret
=
couponService
.
get
AppSecretMCD
(
partner
);
String
appSecret
=
couponService
.
get
MCCafeAppSecret
(
partner
);
System
.
out
.
println
(
appSecret
);
System
.
out
.
println
(
appSecret
);
return
appSecret
;
return
appSecret
;
}
}
...
...
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