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
0ab2b0a3
Commit
0ab2b0a3
authored
Jan 12, 2021
by
徐康
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
11
parent
1a4bf2c3
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
1052 additions
and
4 deletions
+1052
-4
order-application-service/src/main/java/cn/freemud/adapter/CreateOrderAdapter.java
+41
-0
order-application-service/src/main/java/cn/freemud/controller/OrderController.java
+11
-0
order-application-service/src/main/java/cn/freemud/entities/vo/CreateOrderBaseVo.java
+379
-0
order-application-service/src/main/java/cn/freemud/entities/vo/CreateOrderSaasVo.java
+19
-0
order-application-service/src/main/java/cn/freemud/enums/CreateOrderSceneEnum.java
+32
-0
order-application-service/src/main/java/cn/freemud/manager/MemberPropertyManager.java
+35
-0
order-application-service/src/main/java/cn/freemud/manager/ShoppingCartInfoManager.java
+6
-0
order-application-service/src/main/java/cn/freemud/manager/StoreInfoManager.java
+23
-0
order-application-service/src/main/java/cn/freemud/service/OrderAdapterService.java
+9
-0
order-application-service/src/main/java/cn/freemud/service/impl/OrderAdapterServiceImpl.java
+63
-4
order-application-service/src/main/java/cn/freemud/service/universal/UniversalOrderService.java
+320
-0
order-application-service/src/main/java/cn/freemud/service/universal/factory/CreateOrderServiceFactory.java
+43
-0
order-application-service/src/main/java/cn/freemud/service/universal/impl/SaasOrderService.java
+71
-0
No files found.
order-application-service/src/main/java/cn/freemud/adapter/CreateOrderAdapter.java
0 → 100644
View file @
0ab2b0a3
package
cn
.
freemud
.
adapter
;
import
cn.freemud.entities.dto.order.CreateOrderOperateDto
;
import
cn.freemud.entities.dto.order.CreatePrepayRequestDto
;
import
cn.freemud.entities.vo.CreateOrderBaseVo
;
import
cn.freemud.entities.vo.CreateOrderVo
;
import
com.alibaba.fastjson.JSON
;
import
com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
;
import
com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto
;
import
lombok.Data
;
import
org.springframework.stereotype.Component
;
import
java.util.HashMap
;
import
java.util.Map
;
@Component
public
class
CreateOrderAdapter
{
public
CreatePrepayRequestDto
convertToCreatePrepayRequestDto
(
AssortmentCustomerInfoVo
userLoginInfoDto
,
CreateOrderBaseVo
createOrderBaseVo
,
CreateOrderOperateDto
createOrderOperateDto
,
OrderExtInfoDto
orderExtInfoDTO
){
CreatePrepayRequestDto
requestDto
=
new
CreatePrepayRequestDto
();
requestDto
.
setPartnerId
(
createOrderBaseVo
.
getPartnerId
());
requestDto
.
setWxAppId
(
userLoginInfoDto
.
getWxAppId
());
requestDto
.
setOpenId
(
userLoginInfoDto
.
getOpenId
());
requestDto
.
setFaceCode
(
createOrderBaseVo
.
getCardCode
());
requestDto
.
setCardCode
(
createOrderBaseVo
.
getCardCode
());
requestDto
.
setPayCode
(
null
);
requestDto
.
setFatherOrderBean
(
createOrderOperateDto
.
getFatherOrderBean
());
requestDto
.
setProductOrderBean
(
createOrderOperateDto
.
getProductOrderBean
());
requestDto
.
setTotalAmount
(
createOrderOperateDto
.
getTotalAmount
());
requestDto
.
setCardAmount
(
createOrderOperateDto
.
getCardAmount
());
requestDto
.
setOrderExtInfoDTO
(
orderExtInfoDTO
);
requestDto
.
setTransId
(
createOrderOperateDto
.
getFatherOrderBean
().
getOid
());
requestDto
.
setOrderClient
(
null
);
requestDto
.
setUnionPayCard
(
createOrderBaseVo
.
getUnionPayCard
());
requestDto
.
setStoreId
(
createOrderBaseVo
.
getShopId
());
requestDto
.
setChannel
(
createOrderBaseVo
.
getChannel
());
return
requestDto
;
}
}
\ No newline at end of file
order-application-service/src/main/java/cn/freemud/controller/OrderController.java
View file @
0ab2b0a3
...
@@ -31,6 +31,8 @@ import org.springframework.beans.factory.annotation.Autowired;
...
@@ -31,6 +31,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.Map
;
@Slf4j
@Slf4j
@RequestMapping
(
"/order"
)
@RequestMapping
(
"/order"
)
@RestController
@RestController
...
@@ -74,6 +76,15 @@ public class OrderController {
...
@@ -74,6 +76,15 @@ public class OrderController {
}
}
/**
/**
* 通用创建订单
*/
@ApiAnnotation
(
logMessage
=
"createOrderUniversal"
)
@PostMapping
(
"/createOrderUniversal"
)
public
BaseResponse
createOrderUniversal
(
@Validated
@LogParams
@RequestBody
Map
<
String
,
Object
>
param
)
{
return
orderAdapterService
.
createOrderUniversal
(
param
);
}
/**
* 麦咖啡创建订单
* 麦咖啡创建订单
*/
*/
@ApiAnnotation
(
logMessage
=
"createMCCafeOrder"
)
@ApiAnnotation
(
logMessage
=
"createMCCafeOrder"
)
...
...
order-application-service/src/main/java/cn/freemud/entities/vo/CreateOrderBaseVo.java
0 → 100644
View file @
0ab2b0a3
package
cn
.
freemud
.
entities
.
vo
;
import
cn.freemud.entities.dto.UserDeliveryInfoDto
;
import
cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Builder
;
import
lombok.Data
;
import
org.hibernate.validator.constraints.NotEmpty
;
import
javax.validation.Valid
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.Pattern
;
import
java.util.List
;
@Data
public
class
CreateOrderBaseVo
{
@NotEmpty
(
message
=
"sessionId 不能为空"
)
private
String
sessionId
;
//@NotEmpty(message = "门店ID 不能为空") //本次需要根据业务做校验
private
String
shopId
;
private
String
thirdShopId
;
/**
* 就餐人数
*/
private
Integer
peopleNumber
;
/**
* 操作标识
*/
private
Integer
operation
;
/**
* 购物车版本号
*/
private
Integer
carVer
;
/**
* 下单版本号
*/
private
Integer
orderUpdateVer
;
private
String
partnerId
;
private
String
storeName
;
//入参不需要传
private
String
storeAddress
;
private
String
userId
;
private
String
userName
;
private
String
mobile
;
/**
* 渠道 1 saas 2 img 爱马哥 默认saas 3. iwc i围餐
*/
private
String
channel
;
/**
* 订单类型 1 到店自取 2 外卖 枚举CreateOrderType
*/
//@NotNull(message = "下单类型不能为空")
private
Integer
orderType
;
/**
* 订单特殊类型 1:普通订单 2:拼团订单 3:秒杀订单 4:拼单订单
*/
private
Byte
marketingType
;
/**
* 到店类型 orderType 传1的时候 如果reachStoreTyp为空转成订单类型4 如果不为空存储4(打包带走)和5(店内就餐)
*/
private
Integer
reachStoreType
;
/**
* 桌号
*/
private
String
tableNumber
;
/**
* 取餐时间
*/
private
String
takeMealTime
;
/**
* 预约时间 格式yyyy-MM-dd HH:mm:ss
* 麦咖啡返回的是yyyy-MM-dd HH:mm
*/
private
String
expectTime
;
/**
* 取餐标识 0=我已到店、尽快送出 1预约单
*/
private
String
takeMealFlag
;
/**
* 是否外带 ,打包 1 是 0 否
*/
private
Integer
takeOut
;
/**
* 订单备注
*/
private
String
orderRemark
;
/**
* 收货地址ID
*/
private
String
receiveId
;
/**
* 收货办公楼
*/
private
String
officeName
;
/**
* 收货地址
*/
private
String
receiveAddress
;
/**
* 收货用户名
*/
private
String
receiveUsername
;
/**
* 收货电话
*/
@Pattern
(
regexp
=
"^1[3|4|5|6|7|8|9][0-9]{9}$"
,
message
=
"手机号码格式不正确"
)
private
String
receiveMobile
;
/**
* 收货人性别 sexType 1 男 2 女 0 未知
*/
private
Integer
sex
;
/**
* 用户定义纬度
*/
private
String
latitude
;
/**
* 用户定义经度
*/
private
String
longitude
;
/**
* 券码
*/
private
String
couponCode
;
/**
* 券码列表
*/
private
List
<
CreateOrderVo
.
couponCode
>
couponCodes
;
/**
* 版本号
*/
private
String
version
;
/**
* form_id 用于金额是0的情况 现在只支持商品券,前端参数
*/
private
String
formId
;
/**
* 用户收货地址信息 ,入参不需要传,通过校验receiveId获取
*/
public
UserDeliveryInfoDto
userDeliveryInfoDto
;
/**
* 下单支付渠道类型
*/
private
Byte
payChannelType
;
@Valid
private
CreateOrderVo
.
PremiumExchangeActivity
premiumExchangeActivity
;
/**
* 买一赠一选择的商品
*/
private
List
<
CreateOrderVo
.
ChooseGood
>
chooseGoods
;
/**
* 是否使用用户积分
* 1=不显示积分
* 2=显示积分但不扣减
* 3=显示积分且扣减
*/
private
Integer
useCustomerScore
;
/**
* 会员卡信息
*/
private
BuyMemberCard
buyMemberCard
;
/**
* svc 卡支付使用
*/
private
String
cardCode
;
/**
* 扫脸支付使用
*/
private
String
faceCode
;
@ApiModelProperty
(
hidden
=
true
)
private
String
sessionKey
;
// 存储sessionKey,异常补退使用
@ApiModelProperty
(
hidden
=
true
)
private
String
scene
;
// 打开小程序的场景值
@Builder
.
Default
private
String
menuType
=
"saas"
;
/**
* 渠道类型 OrderChannelType
*/
private
String
channelType
;
/**
* 是否使用电子风味卡,如果不为空则为使用
*/
@Valid
@ApiModelProperty
(
value
=
"电子风味卡"
)
private
CreateOrderVo
.
UnionPayCard
unionPayCard
;
/**
* 电子风味卡
*/
@Data
@ApiModel
(
value
=
"电子风味卡"
,
description
=
"如果传了电子风味卡字段,此类中属性必传"
)
public
static
class
UnionPayCard
{
@NotNull
(
message
=
"电子风味卡手机号必传"
)
@ApiModelProperty
(
value
=
"电子风味卡卡号(手机号)"
,
required
=
true
)
private
String
code
;
@NotNull
(
message
=
"电子风味卡密码必传"
)
@ApiModelProperty
(
value
=
"电子风味卡密码"
,
required
=
true
)
private
String
password
;
}
/**
* 微信配送地址信息
*/
private
WeixinDeliveryAddressDto
weixinDeliveryAddress
;
@Data
public
static
class
PremiumExchangeActivity
{
@NotNull
(
message
=
"activityCode 不能为空"
)
private
String
activityCode
;
@NotNull
(
message
=
"activityName 不能为空"
)
private
String
activityName
;
/**
* 加价购sku商品信息
*/
@Valid
private
List
<
CreateOrderVo
.
PremiumExchangeActivity
.
Product
>
products
;
@Data
public
static
class
Product
{
/**
* spuId 商品原始id
*/
@NotNull
(
message
=
"spuId不能为空"
)
private
String
spuId
;
/**
* skuId 如果是多规格 skuId 不能为空
*/
@NotNull
(
message
=
"skuId不能为空"
)
private
String
skuId
;
/**
* 商品名称
*/
@NotNull
(
message
=
"商品名称不能为空"
)
private
String
skuName
;
@NotNull
(
message
=
"商品数量不能为空"
)
private
Integer
qty
;
/**
* 图片
*/
private
String
picture
;
/**
* 原价 入参不需要传,做对象组装使用
*/
private
Long
originalPrice
;
/**
* 现价 入参不需要传,做对象组装使用
*/
private
Long
nowPrice
;
@Valid
private
List
<
CreateOrderVo
.
PremiumExchangeActivity
.
Product
.
Attribute
>
attributes
;
@Data
public
static
class
Attribute
{
/**
* 属性ID
*/
private
String
attributeId
;
/**
* 属性名称
*/
private
String
attributeValue
;
}
}
}
@Data
public
final
static
class
BuyMemberCard
{
/**
* 付费会员卡ID
*/
private
String
paidId
;
/**
* 规则ID
*/
private
String
ruleId
;
}
@Data
public
static
class
ChooseGood
{
/**
* 活动类型
*/
private
Integer
activeType
;
/**
* 活动号
*/
private
String
activeCode
;
/**
* 赠送商品id
*/
private
String
goodsId
;
/**
* 赠送商品名称
*/
private
String
goodsName
;
/**
* 赠送商品数量
*/
private
Integer
qty
;
/**
* 可兑换商品券编号
*/
private
String
couponCode
;
/**
* 商品券兑换数量
*/
private
Integer
couponQty
;
/**
* 是否已选择寄杯
*/
private
Boolean
sendCoupon
;
}
@Data
public
final
static
class
couponCode
{
/**
* 优惠券
*/
private
String
couponCode
;
/**
* 活动号
*/
private
String
activityCode
;
/**
* 顺序
*/
private
Integer
index
;
}
}
order-application-service/src/main/java/cn/freemud/entities/vo/CreateOrderSaasVo.java
0 → 100644
View file @
0ab2b0a3
package
cn
.
freemud
.
entities
.
vo
;
import
cn.freemud.entities.dto.UserDeliveryInfoDto
;
import
cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Builder
;
import
lombok.Data
;
import
org.hibernate.validator.constraints.NotEmpty
;
import
javax.validation.Valid
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.Pattern
;
import
java.util.List
;
@Data
public
class
CreateOrderSaasVo
extends
CreateOrderBaseVo
{
}
order-application-service/src/main/java/cn/freemud/enums/CreateOrderSceneEnum.java
0 → 100644
View file @
0ab2b0a3
package
cn
.
freemud
.
enums
;
public
enum
CreateOrderSceneEnum
{
SAAS
(
1
,
"saas"
),
;
private
Integer
code
;
private
String
desc
;
CreateOrderSceneEnum
(
Integer
code
,
String
desc
)
{
this
.
code
=
code
;
this
.
desc
=
desc
;
}
public
Integer
getCode
()
{
return
code
;
}
public
void
setCode
(
Integer
code
)
{
this
.
code
=
code
;
}
public
String
getDesc
()
{
return
desc
;
}
public
void
setDesc
(
String
desc
)
{
this
.
desc
=
desc
;
}
}
order-application-service/src/main/java/cn/freemud/manager/MemberPropertyManager.java
0 → 100644
View file @
0ab2b0a3
package
cn
.
freemud
.
manager
;
import
cn.freemud.entities.vo.CreateOrderBaseVo
;
import
cn.freemud.enums.ResponseResult
;
import
cn.freemud.interceptor.ServiceException
;
import
com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.membercenter.request.StatisticalPropertyRequest
;
import
com.freemud.application.sdk.api.membercenter.response.GetSvcInfoByMemberIdResponse
;
import
com.freemud.application.sdk.api.membercenter.service.MemberPropertyService
;
import
com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
import
com.freemud.application.sdk.api.storecenter.service.StoreCenterService
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
@Service
public
class
MemberPropertyManager
{
@Autowired
private
MemberPropertyService
memberPropertyService
;
public
List
<
GetSvcInfoByMemberIdResponse
>
getSvcInfoByMemberId
(
StatisticalPropertyRequest
request
,
String
trackingNo
)
{
com
.
freemud
.
application
.
sdk
.
api
.
base
.
BaseResponse
<
List
<
GetSvcInfoByMemberIdResponse
>>
responseDTO
=
memberPropertyService
.
getSvcInfoByMemberId
(
request
,
LogThreadLocal
.
getTrackingNo
());
if
(!
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
responseDTO
.
getCode
())
||
responseDTO
.
getData
()
==
null
||
responseDTO
.
getData
().
size
()
==
0
)
{
throw
new
ServiceException
(
ResponseResult
.
USER_SVC_CARD_ERROR
);
}
return
responseDTO
.
getData
();
}
}
order-application-service/src/main/java/cn/freemud/manager/ShoppingCartInfoManager.java
0 → 100644
View file @
0ab2b0a3
package
cn
.
freemud
.
manager
;
public
class
ShoppingCartInfoManager
{
}
order-application-service/src/main/java/cn/freemud/manager/StoreInfoManager.java
0 → 100644
View file @
0ab2b0a3
package
cn
.
freemud
.
manager
;
import
com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
import
com.freemud.application.sdk.api.storecenter.service.StoreCenterService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
@Service
public
class
StoreInfoManager
{
@Autowired
StoreCenterService
storeCenterService
;
/**
* 查询门店信息
*/
public
StoreResponse
getStoreInfo
(
String
partnerId
,
String
shopId
,
String
trackingNo
)
{
// 获取门店信息
StoreInfoRequest
storeInfoRequest
=
new
StoreInfoRequest
(
partnerId
,
shopId
,
null
);
return
storeCenterService
.
getStoreInfo
(
storeInfoRequest
,
trackingNo
);
}
}
order-application-service/src/main/java/cn/freemud/service/OrderAdapterService.java
View file @
0ab2b0a3
...
@@ -6,6 +6,8 @@ import cn.freemud.entities.vo.CreateOrderVo;
...
@@ -6,6 +6,8 @@ import cn.freemud.entities.vo.CreateOrderVo;
import
cn.freemud.entities.vo.CreatePrepayVo
;
import
cn.freemud.entities.vo.CreatePrepayVo
;
import
cn.freemud.entities.vo.PaysuccessNoticeMessage
;
import
cn.freemud.entities.vo.PaysuccessNoticeMessage
;
import
java.util.Map
;
/**
/**
* All rights Reserved, Designed By www.freemud.cn
* All rights Reserved, Designed By www.freemud.cn
*
*
...
@@ -27,6 +29,13 @@ public interface OrderAdapterService {
...
@@ -27,6 +29,13 @@ public interface OrderAdapterService {
BaseResponse
createOrderNew
(
CreateOrderVo
createOrderVo
);
BaseResponse
createOrderNew
(
CreateOrderVo
createOrderVo
);
/**
/**
* 创建订单
* @param param
* @return
*/
BaseResponse
createOrderUniversal
(
Map
<
String
,
Object
>
param
);
/**
* 麦咖啡创建订单
* 麦咖啡创建订单
* @param createOrderVo
* @param createOrderVo
* @return
* @return
...
...
order-application-service/src/main/java/cn/freemud/service/impl/OrderAdapterServiceImpl.java
View file @
0ab2b0a3
...
@@ -6,17 +6,17 @@ import cn.freemud.base.log.LogTreadLocal;
...
@@ -6,17 +6,17 @@ import cn.freemud.base.log.LogTreadLocal;
import
cn.freemud.constant.ResponseCodeConstant
;
import
cn.freemud.constant.ResponseCodeConstant
;
import
cn.freemud.entities.dto.ConfirmOrderDto
;
import
cn.freemud.entities.dto.ConfirmOrderDto
;
import
cn.freemud.entities.dto.QueryOrdersResponseDto
;
import
cn.freemud.entities.dto.QueryOrdersResponseDto
;
import
cn.freemud.entities.vo.AppCreateOrderVo
;
import
cn.freemud.entities.vo.*
;
import
cn.freemud.entities.vo.CreateOrderVo
;
import
cn.freemud.entities.vo.CreatePrepayVo
;
import
cn.freemud.entities.vo.PaysuccessNoticeMessage
;
import
cn.freemud.entities.vo.encircle.CreateReserveOrderVo
;
import
cn.freemud.entities.vo.encircle.CreateReserveOrderVo
;
import
cn.freemud.enums.*
;
import
cn.freemud.enums.*
;
import
cn.freemud.interceptor.ServiceException
;
import
cn.freemud.interceptor.ServiceException
;
import
cn.freemud.redis.RedisCache
;
import
cn.freemud.redis.RedisCache
;
import
cn.freemud.service.*
;
import
cn.freemud.service.*
;
import
cn.freemud.service.universal.UniversalOrderService
;
import
cn.freemud.service.universal.factory.CreateOrderServiceFactory
;
import
cn.freemud.utils.RedisUtil
;
import
cn.freemud.utils.RedisUtil
;
import
cn.freemud.utils.ResponseUtil
;
import
cn.freemud.utils.ResponseUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
;
import
com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
;
import
com.freemud.api.assortment.datamanager.enums.IappIdType
;
import
com.freemud.api.assortment.datamanager.enums.IappIdType
;
import
com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager
;
import
com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager
;
...
@@ -24,15 +24,23 @@ import com.freemud.sdk.api.assortment.order.enums.OrderSourceType;
...
@@ -24,15 +24,23 @@ import com.freemud.sdk.api.assortment.order.enums.OrderSourceType;
import
com.freemud.sdk.api.assortment.order.util.LockUtils
;
import
com.freemud.sdk.api.assortment.order.util.LockUtils
;
import
com.google.gson.Gson
;
import
com.google.gson.Gson
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.MapUtils
;
import
org.apache.commons.collections4.MapUtils
;
import
org.apache.commons.lang.ObjectUtils
;
import
org.apache.commons.lang.ObjectUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.hibernate.validator.HibernateValidator
;
import
org.hibernate.validator.HibernateValidatorConfiguration
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
javax.validation.ConstraintViolation
;
import
javax.validation.Validation
;
import
javax.validation.ValidatorFactory
;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
java.util.Iterator
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.Set
;
/**
/**
* All rights Reserved, Designed By www.freemud.cn
* All rights Reserved, Designed By www.freemud.cn
...
@@ -73,6 +81,10 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
...
@@ -73,6 +81,10 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
private
OrderServiceImpl
orderService
;
private
OrderServiceImpl
orderService
;
@Autowired
@Autowired
private
MCCafeOrderService
mcCafeOrderService
;
private
MCCafeOrderService
mcCafeOrderService
;
private
UniversalOrderService
universalOrderService
;
@Autowired
private
CreateOrderServiceFactory
createOrderServiceFactory
;
@Autowired
@Autowired
private
AssortmentCustomerInfoManager
assortmentCustomerInfoManager
;
private
AssortmentCustomerInfoManager
assortmentCustomerInfoManager
;
@Autowired
@Autowired
...
@@ -89,6 +101,8 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
...
@@ -89,6 +101,8 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
private
SellCouponOrderServiceImpl
sellCouponOrderService
;
private
SellCouponOrderServiceImpl
sellCouponOrderService
;
@Value
(
"${saas.autoRefund.client}"
)
@Value
(
"${saas.autoRefund.client}"
)
private
String
autoRefundClient
;
private
String
autoRefundClient
;
@Override
@Override
public
BaseResponse
createOrderNew
(
CreateOrderVo
createOrderVo
)
{
public
BaseResponse
createOrderNew
(
CreateOrderVo
createOrderVo
)
{
AssortmentCustomerInfoVo
assortmentCustomerInfoVo
=
assortmentCustomerInfoManager
.
getCustomerInfoByObject
(
createOrderVo
.
getSessionId
());
AssortmentCustomerInfoVo
assortmentCustomerInfoVo
=
assortmentCustomerInfoManager
.
getCustomerInfoByObject
(
createOrderVo
.
getSessionId
());
...
@@ -159,6 +173,51 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
...
@@ -159,6 +173,51 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
//LockUtils.unlock(redisCache.getRedisTemplate(),createOrderKey);
//LockUtils.unlock(redisCache.getRedisTemplate(),createOrderKey);
}
}
}
}
@Override
public
BaseResponse
createOrderUniversal
(
Map
<
String
,
Object
>
param
)
{
String
sessionId
=
(
String
)
param
.
get
(
"sessionId"
);
if
(
StringUtils
.
isBlank
(
sessionId
))
{
throw
new
ServiceException
(
ResponseResult
.
SESSION_INVAILD
);
}
AssortmentCustomerInfoVo
assortmentCustomerInfoVo
=
assortmentCustomerInfoManager
.
getCustomerInfoByObject
(
sessionId
);
if
(
assortmentCustomerInfoVo
==
null
||
StringUtils
.
isEmpty
(
assortmentCustomerInfoVo
.
getMemberId
()))
{
return
ResponseUtil
.
error
(
ResponseResult
.
NOT_LOGIN
);
}
CreateOrderSceneEnum
createOrderScene
=
createOrderServiceFactory
.
getCreateOrderScene
(
param
,
assortmentCustomerInfoVo
);
CreateOrderBaseVo
createOrderBaseVo
=
createOrderServiceFactory
.
getCreateOrderVo
(
param
,
createOrderScene
);
// 添加分布式锁,如果没有取得锁直接返回失败;整个方法执行完毕后会删掉该锁
// 锁定秒数从apollo获取,如果apollo没有设置,默认5秒
String
createOrderKey
=
CREATE_ORDER_KEY
+
assortmentCustomerInfoVo
.
getMemberId
();
try
{
Long
expire
=
Long
.
valueOf
(
createOrderKeyExpire
);
if
(!
LockUtils
.
lock
(
redisCache
.
getRedisTemplate
(),
createOrderKey
,
expire
)){
return
ResponseUtil
.
error
(
ResponseResult
.
ORDER_NOT_CREATE_ERROR
);
}
return
createOrderServiceFactory
.
getCreateOrderService
(
createOrderScene
).
createOrder
(
createOrderBaseVo
,
assortmentCustomerInfoVo
);
}
catch
(
Exception
e
)
{
throw
e
;
}
finally
{
//LockUtils.unlock(redisCache.getRedisTemplate(),createOrderKey);
}
}
private
BaseResponse
validateParam
(
CreateOrderBaseVo
createOrderBaseVo
)
{
HibernateValidatorConfiguration
configuration
=
Validation
.
byProvider
(
HibernateValidator
.
class
)
.
configure
()
.
failFast
(
false
);
ValidatorFactory
validatorFactory
=
configuration
.
buildValidatorFactory
();
Set
<
ConstraintViolation
<
CreateOrderBaseVo
>>
set
=
validatorFactory
.
getValidator
().
validate
(
createOrderBaseVo
);
if
(
CollectionUtils
.
isNotEmpty
(
set
))
{
Iterator
<
ConstraintViolation
<
CreateOrderBaseVo
>>
iterator
=
set
.
iterator
();
if
(
iterator
.
hasNext
())
{
ConstraintViolation
<
CreateOrderBaseVo
>
constraintViolation
=
iterator
.
next
();
return
ResponseUtil
.
error
(
ResponseResult
.
PARAMETER_MISSING
.
getCode
(),
constraintViolation
.
getMessage
());
}
}
return
ResponseUtil
.
success
();
}
@Override
@Override
...
...
order-application-service/src/main/java/cn/freemud/service/universal/UniversalOrderService.java
0 → 100644
View file @
0ab2b0a3
package
cn
.
freemud
.
service
.
universal
;
import
cn.freemud.adapter.CreateOrderAdapter
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.base.util.DateUtil
;
import
cn.freemud.constant.ResponseCodeConstant
;
import
cn.freemud.entities.dto.ConfirmOrderDto
;
import
cn.freemud.entities.dto.QueryOrdersResponseDto
;
import
cn.freemud.entities.dto.order.CreateOrderOperateDto
;
import
cn.freemud.entities.dto.order.CreatePrepayRequestDto
;
import
cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto
;
import
cn.freemud.entities.vo.*
;
import
cn.freemud.enums.PaySuccessSource
;
import
cn.freemud.enums.ResponseResult
;
import
cn.freemud.interceptor.ServiceException
;
import
cn.freemud.manager.MemberPropertyManager
;
import
cn.freemud.manager.StoreInfoManager
;
import
cn.freemud.service.OrderAdapterService
;
import
cn.freemud.service.adapter.OrderCheckAdapter
;
import
cn.freemud.utils.ResponseUtil
;
import
com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.membercenter.request.StatisticalPropertyRequest
;
import
com.freemud.application.sdk.api.membercenter.response.GetSvcInfoByMemberIdResponse
;
import
com.freemud.application.sdk.api.membercenter.service.MemberPropertyService
;
import
com.freemud.application.sdk.api.ordercenter.enums.PayChannelType
;
import
com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
import
com.freemud.sdk.api.assortment.order.request.order.PaymentRequest
;
import
com.freemud.sdk.api.assortment.order.response.payment.OrderPayResponse
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.hibernate.validator.HibernateValidator
;
import
org.hibernate.validator.HibernateValidatorConfiguration
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
javax.validation.ConstraintViolation
;
import
javax.validation.Validation
;
import
javax.validation.ValidatorFactory
;
import
java.util.*
;
/**
* 订单服务
*
* @author liming.guo
* @date 2018/05/08
*/
public
abstract
class
UniversalOrderService
{
@Autowired
private
MemberPropertyManager
memberPropertyManager
;
@Autowired
private
StoreInfoManager
storeInfoManager
;
@Autowired
private
CreateOrderAdapter
createOrderAdapter
;
@Autowired
private
OrderAdapterService
orderAdapterService
;
/**
* 创建订单
*/
public
final
BaseResponse
createOrder
(
CreateOrderBaseVo
createOrderBaseVo
,
AssortmentCustomerInfoVo
userLoginInfoDto
)
{
String
trackingNo
=
LogThreadLocal
.
getTrackingNo
();
validParam
(
createOrderBaseVo
);
//校验会员svc卡信息
checkCardCode
(
createOrderBaseVo
,
userLoginInfoDto
);
// 查询门店信息 营业时间、营业状态,服务器当前时间在营业时间内 点餐桌号
StoreResponse
.
BizVO
storeResponseDto
=
checkOrderByStore
(
createOrderBaseVo
,
trackingNo
);
// 查询购物车(内部校验券点餐方式,券是否可用) 校验当前订单类型的下单参数
ShoppingCartGoodsDto
shoppingCartGoodsDto
=
checkShoppingCartGoodsDto
(
createOrderBaseVo
);
// 查询小程序自提外卖配置信息 校验当前订单类型的下单参数 校验外卖是否满足起送条件
Integer
pushOrderTime
=
checkOrderByOrderType
(
createOrderBaseVo
,
userLoginInfoDto
,
storeResponseDto
,
shoppingCartGoodsDto
,
trackingNo
);
Map
<
String
,
Object
>
customParam
=
getCustomParam
(
createOrderBaseVo
,
userLoginInfoDto
,
storeResponseDto
,
shoppingCartGoodsDto
);
customCheck
(
customParam
);
OrderExtInfoDto
extInfo
=
getExtInfo
(
userLoginInfoDto
,
storeResponseDto
,
pushOrderTime
,
createOrderBaseVo
,
shoppingCartGoodsDto
,
customParam
);
//1.9.2套餐需求同步优化创建订单代码
BaseResponse
createOrderOperateDtoResponse
=
this
.
createSharedOrder
(
createOrderBaseVo
,
storeResponseDto
,
shoppingCartGoodsDto
,
userLoginInfoDto
,
customParam
);
if
(
createOrderOperateDtoResponse
==
null
||
!
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
createOrderOperateDtoResponse
.
getCode
())
||
createOrderOperateDtoResponse
.
getResult
()
==
null
)
{
return
createOrderOperateDtoResponse
;
}
CreateOrderOperateDto
createOrderOperateDto
=
(
CreateOrderOperateDto
)
createOrderOperateDtoResponse
.
getResult
();
//创建支付
CreatePrepayRequestDto
createPrepayRequestDto
=
createOrderAdapter
.
convertToCreatePrepayRequestDto
(
userLoginInfoDto
,
createOrderBaseVo
,
createOrderOperateDto
,
extInfo
);
handleCustomParam
(
createPrepayRequestDto
,
customParam
);
return
createPrepayOrder
(
createPrepayRequestDto
);
}
public
abstract
void
handleCustomParam
(
CreatePrepayRequestDto
requestDto
,
Map
<
String
,
Object
>
customParam
);
public
abstract
void
validParam
(
CreateOrderBaseVo
createOrderBaseVo
);
public
abstract
BaseResponse
createSharedOrder
(
CreateOrderBaseVo
createOrderBaseVo
,
StoreResponse
.
BizVO
storeResponseDto
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
,
AssortmentCustomerInfoVo
userLoginInfoDto
,
Map
<
String
,
Object
>
customParam
);
public
abstract
Map
<
String
,
Object
>
getCustomParam
(
CreateOrderBaseVo
createOrderBaseVo
,
AssortmentCustomerInfoVo
userLoginInfoDto
,
StoreResponse
.
BizVO
storeResponseDto
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
);
public
abstract
void
customCheck
(
Map
<
String
,
Object
>
customParam
);
public
void
checkCardCode
(
CreateOrderBaseVo
createOrderBaseVo
,
AssortmentCustomerInfoVo
userLoginInfoDto
)
{
if
(
StringUtils
.
isBlank
(
createOrderBaseVo
.
getCardCode
()))
{
return
;
}
StatisticalPropertyRequest
request
=
new
StatisticalPropertyRequest
();
request
.
setPartnerId
(
createOrderBaseVo
.
getPartnerId
());
request
.
setMemberId
(
userLoginInfoDto
.
getMemberId
());
List
<
GetSvcInfoByMemberIdResponse
>
svcInfoList
=
memberPropertyManager
.
getSvcInfoByMemberId
(
request
,
LogThreadLocal
.
getTrackingNo
());
//svc卡无效
boolean
b
=
true
;
for
(
GetSvcInfoByMemberIdResponse
getSvcInfoByMemberIdResponse
:
svcInfoList
)
{
if
(
createOrderBaseVo
.
getCardCode
().
equals
(
getSvcInfoByMemberIdResponse
.
getCardCode
())
&&
getSvcInfoByMemberIdResponse
.
getStatusFlag
()
==
0
)
{
b
=
false
;
}
}
if
(
b
)
{
throw
new
ServiceException
(
ResponseResult
.
USER_SVC_CARD_ERROR
);
}
createOrderBaseVo
.
setUserId
(
userLoginInfoDto
.
getMemberId
());
}
/**
* 下单门店相关校验
*/
public
StoreResponse
.
BizVO
checkOrderByStore
(
CreateOrderBaseVo
createOrderBaseVo
,
String
trackingNo
)
{
String
partnerId
=
createOrderBaseVo
.
getPartnerId
();
String
shopId
=
createOrderBaseVo
.
getShopId
();
// 获取门店信息
StoreResponse
storeResponse
=
storeInfoManager
.
getStoreInfo
(
partnerId
,
shopId
,
trackingNo
);
if
(
storeResponse
==
null
||
storeResponse
.
getBizVO
()
==
null
)
{
throw
new
ServiceException
(
ResponseResult
.
STORE_NOT_FOUND
);
}
//订单预约单检查
CreateOrderVo
vo
=
new
CreateOrderVo
();
BeanUtils
.
copyProperties
(
createOrderBaseVo
,
vo
);
OrderCheckAdapter
.
check
(
vo
,
storeResponse
);
StoreResponse
.
BizVO
storeResponseDto
=
storeResponse
.
getBizVO
();
// 校验门店是否停业 1 营业 2 停业 3 繁忙置休
if
(
storeResponseDto
.
getActiveFlag
()
==
null
||
storeResponseDto
.
getActiveFlag
()
!=
1
)
{
throw
new
ServiceException
(
ResponseResult
.
STORE_ITEM_STOP_BUSINESS
);
}
createOrderBaseVo
.
setStoreName
(
storeResponseDto
.
getStoreName
());
createOrderBaseVo
.
setStoreAddress
(
storeResponseDto
.
getAddress
());
createOrderBaseVo
.
setThirdShopId
(
storeResponseDto
.
getThirdPartCode
());
return
storeResponseDto
;
}
public
ShoppingCartGoodsDto
checkShoppingCartGoodsDto
(
CreateOrderBaseVo
createOrderBaseVo
)
{
ShoppingCartGoodsDto
shoppingCartGoodsDto
=
getShoppingCartGoodsDto
(
createOrderBaseVo
);
checkShoppingCartGoods
(
createOrderBaseVo
,
shoppingCartGoodsDto
);
return
null
;
}
public
ShoppingCartGoodsDto
getShoppingCartGoodsDto
(
CreateOrderBaseVo
createOrderBaseVo
)
{
return
null
;
}
public
abstract
ShoppingCartGoodsDto
checkShoppingCartGoods
(
CreateOrderBaseVo
createOrderBaseVo
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
);
/**
* 下单订单类型校验
*/
public
Integer
checkOrderByOrderType
(
CreateOrderBaseVo
createOrderBaseVo
,
AssortmentCustomerInfoVo
userLoginInfoDto
,
StoreResponse
.
BizVO
storeResponseDto
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
,
String
trackingNo
)
{
Integer
pushTime
=
checkOrderByOrderTypeUniversal
(
createOrderBaseVo
,
userLoginInfoDto
,
storeResponseDto
,
shoppingCartGoodsDto
,
trackingNo
);
checkOrderByOrderTypeCustom
(
createOrderBaseVo
,
userLoginInfoDto
,
storeResponseDto
,
shoppingCartGoodsDto
,
trackingNo
);
return
pushTime
;
}
public
Integer
checkOrderByOrderTypeUniversal
(
CreateOrderBaseVo
createOrderBaseVo
,
AssortmentCustomerInfoVo
userLoginInfoDto
,
StoreResponse
.
BizVO
storeResponseDto
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
,
String
trackingNo
)
{
return
0
;
}
public
void
checkOrderByOrderTypeCustom
(
CreateOrderBaseVo
createOrderBaseVo
,
AssortmentCustomerInfoVo
userLoginInfoDto
,
StoreResponse
.
BizVO
storeResponseDto
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
,
String
trackingNo
)
{
}
public
OrderExtInfoDto
getExtInfo
(
AssortmentCustomerInfoVo
userLoginInfoDto
,
StoreResponse
.
BizVO
storeResponseDto
,
Integer
pushOrderTime
,
CreateOrderBaseVo
createOrderBaseVo
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
,
Map
<
String
,
Object
>
customParam
)
{
Integer
serviceTime
=
storeResponseDto
.
getServiceTime
();
String
sessionId
=
createOrderBaseVo
.
getSessionId
();
String
version
=
createOrderBaseVo
.
getVersion
();
CreateOrderBaseVo
.
BuyMemberCard
memberCard
=
createOrderBaseVo
.
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"
;
}
}
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
(
createOrderBaseVo
.
getSessionKey
());
orderExtInfoDto
.
setFormId
(
createOrderBaseVo
.
getFormId
());
orderExtInfoDto
.
setFromAppId
(
userLoginInfoDto
.
getWxAppId
());
if
(
StringUtils
.
isNotBlank
(
createOrderBaseVo
.
getScene
()))
{
orderExtInfoDto
.
setScene
(
createOrderBaseVo
.
getScene
());
}
if
(
null
!=
shoppingCartGoodsDto
&&
null
!=
shoppingCartGoodsDto
.
getSendPoint
())
{
ShoppingCartGoodsDto
.
SendPoint
sendPoint
=
shoppingCartGoodsDto
.
getSendPoint
();
orderExtInfoDto
.
setSendPointValidityDateDays
(
sendPoint
.
getValidityDateDays
());
orderExtInfoDto
.
setSendPointMaxNum
(
sendPoint
.
getMaxNum
());
orderExtInfoDto
.
setSendPointActivityCode
(
sendPoint
.
getActivityCode
());
orderExtInfoDto
.
setSendPointEndTime
(
sendPoint
.
getEndTime
().
getTime
()
+
""
);
orderExtInfoDto
.
setSendPointSendPoint
(
sendPoint
.
getSendPoint
());
orderExtInfoDto
.
setSendPointStoreLevel
(
sendPoint
.
getStoreLevel
());
}
return
orderExtInfoDto
;
}
/**
* 创建预支付订单
*/
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
&&
Objects
.
nonNull
(
createPrepayRequestDto
.
getUnionPayCard
()))
{
// 电子风味卡支付
orderPayResponse
=
uSvcPay
(
createPrepayRequestDto
.
getFatherOrderBean
(),
paymentRequest
,
transId
,
LogThreadLocal
.
getTrackingNo
(),
createPrepayRequestDto
.
getUnionPayCard
());
}
else
if
(
totalAmount
>
0
&&
StringUtils
.
isBlank
(
cardCode
))
{
String
partnerPayOvertime
=
this
.
getPartnerPayOvertime
(
createPrepayRequestDto
.
getPartnerId
());
orderPayResponse
=
getPreOrderPay
(
createPrepayRequestDto
.
getFatherOrderBean
(),
paymentRequest
,
LogThreadLocal
.
getTrackingNo
(),
createPrepayRequestDto
.
getCardAmount
(),
transId
,
partnerPayOvertime
,
createPrepayRequestDto
.
getOrderExtInfoDTO
());
}
//混合支付+svc卡
else
if
(
totalAmount
>
0
&&
StringUtils
.
isNotBlank
(
cardCode
))
{
orderPayResponse
=
switchSvcOrComb
(
totalAmount
,
cardCode
,
createPrepayRequestDto
.
getFatherOrderBean
(),
paymentRequest
,
transId
,
createPrepayRequestDto
.
getChannel
(),
createPrepayRequestDto
.
getStoreId
(),
LogThreadLocal
.
getTrackingNo
());
}
else
{
// 0元订单如果不需要支付,自定义支付单号
orderPayResponse
=
getOrderPayResponse
(
paymentRequest
,
createPrepayRequestDto
.
getFatherOrderBean
());
}
if
(
orderPayResponse
==
null
||
Objects
.
isNull
(
orderPayResponse
.
getFmId
()))
{
BaseResponse
baseResponse
=
failPreOrderPay
(
LogThreadLocal
.
getTrackingNo
(),
createPrepayRequestDto
.
getProductOrderBean
(),
cardCode
,
createPrepayRequestDto
.
getOrderClient
(),
Objects
.
isNull
(
orderPayResponse
)
?
null
:
orderPayResponse
.
getMsg
());
// 电子风味卡需要给用户特殊的返回
if
(
totalAmount
>
0
&&
Objects
.
nonNull
(
createPrepayRequestDto
.
getUnionPayCard
()))
{
baseResponse
.
setMessage
(
Objects
.
nonNull
(
orderPayResponse
)
&&
(
ResponseCodeConstant
.
PASSWORD_WRONG
.
equals
(
orderPayResponse
.
getPayTransId
())
||
ResponseCodeConstant
.
NOT_SUFFICIENT_FUND
.
equals
(
orderPayResponse
.
getPayTransId
()))
?
orderPayResponse
.
getMsg
()
:
"支付失败"
);
}
return
baseResponse
;
}
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
)
&&
Objects
.
isNull
(
createPrepayRequestDto
.
getUnionPayCard
()))
{
createOrderResponse
.
setPaySuccess
(
false
);
}
else
if
(
StringUtils
.
isNotBlank
(
orderPayResponse
.
getPayMode
())
&&
PayChannelType
.
COMB
.
getEbcode
().
equals
(
orderPayResponse
.
getPayMode
()))
{
createOrderResponse
.
setPaySuccess
(
false
);
}
else
if
(
StringUtils
.
isNotBlank
(
orderPayResponse
.
getPayMode
())
&&
PayChannelType
.
SVC
.
getEbcode
().
equals
(
orderPayResponse
.
getPayMode
()))
{
createOrderResponse
.
setPaySuccess
(
true
);
}
else
{
createOrderResponse
.
setPaySuccess
(
true
);
}
// 推荐优惠插件用户下单数据上报
//wechatPushProcessor.statusOrderCreate(userLoginInfoDto, createOrderResponse.getOid(), createOrderVo.getPartnerId());
if
(!
createOrderResponse
.
getPaySuccess
())
{
return
ResponseUtil
.
success
(
createOrderResponse
);
}
else
{
//如果是商品券支付0元,调用回调接口
/**
* - 老的svc卡或是0元订单下单成功直接核销 这里不处理
* - 混合支付纯svc支付 需要直接内部核销 其他支付方式需依靠外部回调
* -
*/
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
);
message
.
setSource
(
PaySuccessSource
.
OUTSIDE
.
getSource
());
/*
if (StringUtils.isNotBlank(orderPayResponse.getPayMode()) && PayChannelType.SVC.getEbcode().equals(orderPayResponse.getPayMode())) {
message.setSource(PaySuccessSource.OUTSIDE.getSource());
}
*/
orderAdapterService
.
paySuccessCallback
(
message
);
return
ResponseUtil
.
success
(
createOrderResponse
);
}
}
}
order-application-service/src/main/java/cn/freemud/service/universal/factory/CreateOrderServiceFactory.java
0 → 100644
View file @
0ab2b0a3
package
cn
.
freemud
.
service
.
universal
.
factory
;
import
cn.freemud.entities.vo.CreateOrderBaseVo
;
import
cn.freemud.entities.vo.CreateOrderSaasVo
;
import
cn.freemud.enums.CreateOrderSceneEnum
;
import
cn.freemud.service.universal.UniversalOrderService
;
import
cn.freemud.service.universal.impl.SaasOrderService
;
import
com.alibaba.fastjson.JSON
;
import
com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.stereotype.Service
;
import
java.util.Map
;
@Service
public
class
CreateOrderServiceFactory
{
@Autowired
private
ApplicationContext
applicationContext
;
public
CreateOrderSceneEnum
getCreateOrderScene
(
Map
<
String
,
Object
>
param
,
AssortmentCustomerInfoVo
assortmentCustomerInfoVo
)
{
return
CreateOrderSceneEnum
.
SAAS
;
}
public
CreateOrderBaseVo
getCreateOrderVo
(
Map
<
String
,
Object
>
param
,
CreateOrderSceneEnum
createOrderSceneEnum
)
{
switch
(
createOrderSceneEnum
)
{
case
SAAS:
return
JSON
.
parseObject
(
JSON
.
toJSONString
(
param
),
CreateOrderSaasVo
.
class
);
default
:
return
JSON
.
parseObject
(
JSON
.
toJSONString
(
param
),
CreateOrderSaasVo
.
class
);
}
}
public
UniversalOrderService
getCreateOrderService
(
CreateOrderSceneEnum
createOrderSceneEnum
)
{
switch
(
createOrderSceneEnum
)
{
case
SAAS:
return
applicationContext
.
getBean
(
"SaasOrderService"
,
SaasOrderService
.
class
);
default
:
return
applicationContext
.
getBean
(
"SaasOrderService"
,
SaasOrderService
.
class
);
}
}
}
order-application-service/src/main/java/cn/freemud/service/universal/impl/SaasOrderService.java
0 → 100644
View file @
0ab2b0a3
package
cn
.
freemud
.
service
.
universal
.
impl
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.entities.dto.order.CreatePrepayRequestDto
;
import
cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto
;
import
cn.freemud.entities.vo.CreateOrderBaseVo
;
import
cn.freemud.entities.vo.CreateOrderSaasVo
;
import
cn.freemud.enums.ResponseResult
;
import
cn.freemud.interceptor.ServiceException
;
import
cn.freemud.service.universal.UniversalOrderService
;
import
cn.freemud.utils.ResponseUtil
;
import
com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.hibernate.validator.HibernateValidator
;
import
org.hibernate.validator.HibernateValidatorConfiguration
;
import
org.springframework.stereotype.Service
;
import
javax.validation.ConstraintViolation
;
import
javax.validation.Validation
;
import
javax.validation.ValidatorFactory
;
import
java.util.Iterator
;
import
java.util.Map
;
import
java.util.Set
;
@Service
public
class
SaasOrderService
extends
UniversalOrderService
{
@Override
public
void
handleCustomParam
(
CreatePrepayRequestDto
requestDto
,
Map
<
String
,
Object
>
customParam
)
{
}
@Override
public
void
validParam
(
CreateOrderBaseVo
createOrderBaseVo
)
{
CreateOrderSaasVo
createOrderSaasVo
=
(
CreateOrderSaasVo
)
createOrderBaseVo
;
HibernateValidatorConfiguration
configuration
=
Validation
.
byProvider
(
HibernateValidator
.
class
)
.
configure
()
.
failFast
(
false
);
ValidatorFactory
validatorFactory
=
configuration
.
buildValidatorFactory
();
Set
<
ConstraintViolation
<
CreateOrderBaseVo
>>
set
=
validatorFactory
.
getValidator
().
validate
(
createOrderSaasVo
);
if
(
CollectionUtils
.
isNotEmpty
(
set
))
{
Iterator
<
ConstraintViolation
<
CreateOrderBaseVo
>>
iterator
=
set
.
iterator
();
if
(
iterator
.
hasNext
())
{
ConstraintViolation
<
CreateOrderBaseVo
>
constraintViolation
=
iterator
.
next
();
throw
new
ServiceException
(
ResponseResult
.
PARAMETER_MISSING
,
constraintViolation
.
getMessage
());
}
}
}
@Override
public
BaseResponse
createSharedOrder
(
CreateOrderBaseVo
createOrderBaseVo
,
StoreResponse
.
BizVO
storeResponseDto
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
,
AssortmentCustomerInfoVo
userLoginInfoDto
,
Map
<
String
,
Object
>
customParam
)
{
return
null
;
}
@Override
public
Map
<
String
,
Object
>
getCustomParam
(
CreateOrderBaseVo
createOrderBaseVo
,
AssortmentCustomerInfoVo
userLoginInfoDto
,
StoreResponse
.
BizVO
storeResponseDto
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
)
{
return
null
;
}
@Override
public
void
customCheck
(
Map
<
String
,
Object
>
customParam
)
{
}
@Override
public
ShoppingCartGoodsDto
checkShoppingCartGoods
(
CreateOrderBaseVo
createOrderBaseVo
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
)
{
return
null
;
}
}
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