记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
Project
Project
Details
Activity
Releases
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
董敬伟
liquidnet-bus-v1
Commits
7c02bbe6
Commit
7c02bbe6
authored
Mar 23, 2022
by
jiangxiulong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
copy first
parent
c0a15062
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
1885 additions
and
34 deletions
+1885
-34
GoblinNtfPayResultVo.java
...liquidnet/service/goblin/dto/vo/GoblinNtfPayResultVo.java
+56
-0
GoblinNtfOrderPayAgainParam.java
...net/service/goblin/param/GoblinNtfOrderPayAgainParam.java
+34
-0
GoblinNtfOrderPayCallbackParam.java
.../service/goblin/param/GoblinNtfOrderPayCallbackParam.java
+52
-0
GoblinNtfOrderPayParam.java
...iquidnet/service/goblin/param/GoblinNtfOrderPayParam.java
+52
-0
GoblinNtfOrderRefundCallbackParam.java
...rvice/goblin/param/GoblinNtfOrderRefundCallbackParam.java
+47
-0
IGoblinNftOrderService.java
...uidnet/service/goblin/service/IGoblinNftOrderService.java
+15
-0
GoblinNftOrderRefundServiceImpl.java
.../goblin/service/impl/GoblinNftOrderRefundServiceImpl.java
+0
-17
GoblinNftOrderServiceImpl.java
...ervice/goblin/service/impl/GoblinNftOrderServiceImpl.java
+0
-17
GoblinNftOrderController.java
...et/service/order/controller/GoblinNftOrderController.java
+74
-0
GoblinNftOrderServiceImpl.java
...service/order/service/impl/GoblinNftOrderServiceImpl.java
+1014
-0
GoblinNtfOrderUtils.java
...om/liquidnet/service/order/utils/GoblinNtfOrderUtils.java
+541
-0
No files found.
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/dto/vo/GoblinNtfPayResultVo.java
0 → 100644
View file @
7c02bbe6
package
com
.
liquidnet
.
service
.
goblin
.
dto
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
@ApiModel
(
value
=
"GoblinNtfPayResultVo"
,
description
=
"下单唤起支付参数信息"
)
@Data
public
class
GoblinNtfPayResultVo
implements
Serializable
,
Cloneable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
position
=
14
,
value
=
"状态"
)
private
Integer
status
;
@ApiModelProperty
(
position
=
15
,
value
=
"订单ID"
)
private
String
orderId
;
@ApiModelProperty
(
position
=
11
,
value
=
"code"
)
private
String
code
;
@ApiModelProperty
(
position
=
12
,
value
=
"orderCode"
)
private
String
orderCode
;
@ApiModelProperty
(
position
=
13
,
value
=
"orderMasterCode"
)
private
String
orderMasterCode
;
@ApiModelProperty
(
position
=
19
,
value
=
"金额"
)
private
BigDecimal
price
;
@ApiModelProperty
(
position
=
16
,
value
=
"支付类型"
)
private
String
payType
;
@ApiModelProperty
(
position
=
17
,
value
=
"showUrl"
)
private
String
showUrl
;
@ApiModelProperty
(
position
=
18
,
value
=
"returnUrl"
)
private
String
returnUrl
;
@ApiModelProperty
(
position
=
20
,
value
=
"payData"
)
private
Object
payData
;
private
static
final
GoblinNtfPayResultVo
obj
=
new
GoblinNtfPayResultVo
();
public
static
GoblinNtfPayResultVo
getNew
()
{
try
{
return
(
GoblinNtfPayResultVo
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
return
new
GoblinNtfPayResultVo
();
}
}
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/param/GoblinNtfOrderPayAgainParam.java
0 → 100644
View file @
7c02bbe6
package
com
.
liquidnet
.
service
.
goblin
.
param
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
@ApiModel
(
value
=
"GoblinNtfOrderPayAgainParam"
,
description
=
"再次支付所需参数"
)
@Data
public
class
GoblinNtfOrderPayAgainParam
{
@ApiModelProperty
(
value
=
"openId"
)
private
String
openId
;
@ApiModelProperty
(
value
=
"订单id"
)
@NotNull
(
message
=
"订单ID不能为空"
)
private
String
orderId
;
@ApiModelProperty
(
value
=
"支付类型"
)
@NotNull
(
message
=
"支付类型不能为空"
)
private
String
payType
;
@ApiModelProperty
(
value
=
"支付来源"
)
@NotNull
(
message
=
"支付来源不能为空"
)
private
String
deviceFrom
;
@ApiModelProperty
(
value
=
"showUrl"
)
private
String
showUrl
;
@ApiModelProperty
(
value
=
"returnUrl"
)
private
String
returnUrl
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/param/GoblinNtfOrderPayCallbackParam.java
0 → 100644
View file @
7c02bbe6
package
com
.
liquidnet
.
service
.
goblin
.
param
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.math.BigDecimal
;
@ApiModel
(
value
=
"GoblinNtfOrderPayCallbackParam"
,
description
=
"支付成功回调所需参数"
)
@Data
public
class
GoblinNtfOrderPayCallbackParam
implements
Cloneable
{
@ApiModelProperty
(
value
=
"支付状态[1-成功|0-失败]"
)
private
Integer
status
;
@ApiModelProperty
(
value
=
"订单ID"
)
private
String
orderId
;
@ApiModelProperty
(
value
=
"masterOrderCode"
)
private
String
orderCode
;
@ApiModelProperty
(
value
=
"不用管"
)
private
String
orderCodeId
;
@ApiModelProperty
(
value
=
"[写死]HUIFU_PAY_CODE"
)
private
String
code
;
@ApiModelProperty
(
value
=
"不用管"
)
private
BigDecimal
price
;
@ApiModelProperty
(
value
=
"不用管"
)
private
String
type
;
@ApiModelProperty
(
value
=
"汇付相关id"
)
private
String
paymentId
;
@ApiModelProperty
(
value
=
"[写死]huifu"
)
private
String
paymentType
;
@ApiModelProperty
(
value
=
"支付时间"
)
private
String
paymentAt
;
private
static
final
GoblinNtfOrderPayCallbackParam
obj
=
new
GoblinNtfOrderPayCallbackParam
();
public
static
GoblinNtfOrderPayCallbackParam
getNew
()
{
try
{
return
(
GoblinNtfOrderPayCallbackParam
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
return
new
GoblinNtfOrderPayCallbackParam
();
}
}
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/param/GoblinNtfOrderPayParam.java
0 → 100644
View file @
7c02bbe6
package
com
.
liquidnet
.
service
.
goblin
.
param
;
import
com.liquidnet.service.goblin.dto.manage.AddressVo
;
import
com.liquidnet.service.goblin.dto.manage.GoblinOrderStoreParam
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
import
java.util.ArrayList
;
import
java.util.List
;
@ApiModel
(
value
=
"GoblinNtfOrderPayParam"
,
description
=
"下单所需参数"
)
@Data
public
class
GoblinNtfOrderPayParam
{
@ApiModelProperty
(
value
=
"openId"
)
private
String
openId
;
@ApiModelProperty
(
value
=
"用户id"
)
private
String
uid
;
@ApiModelProperty
(
value
=
"扫码枪code"
)
private
String
authCode
;
@ApiModelProperty
(
value
=
"支付类型"
)
@NotNull
(
message
=
"支付类型不能为空"
)
private
String
payType
;
@ApiModelProperty
(
value
=
"支付来源 [新增micropay-微信扫码支付]"
)
@NotNull
(
message
=
"支付来源不能为空"
)
private
String
deviceFrom
;
@ApiModelProperty
(
value
=
"代理id"
)
private
String
agentId
;
@ApiModelProperty
(
value
=
"收货地址id[虚拟物品不需要]"
)
private
ArrayList
<
String
>
addressIds
;
@ApiModelProperty
(
value
=
"入场人地址vo"
)
private
AddressVo
addressesVo
;
@ApiModelProperty
(
value
=
"showUrl"
)
private
String
showUrl
;
@ApiModelProperty
(
value
=
"returnUrl"
)
private
String
returnUrl
;
@ApiModelProperty
(
value
=
"商品相关参数集合"
)
private
List
<
GoblinOrderStoreParam
>
goblinOrderStoreParamList
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/param/GoblinNtfOrderRefundCallbackParam.java
0 → 100644
View file @
7c02bbe6
package
com
.
liquidnet
.
service
.
goblin
.
param
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
/**
* <p>
* 退款回掉参数
* </p>
*
* @author jiangxiulong
* @since 2021-05-31 11:19 上午
*/
@ApiModel
(
value
=
"GoblinNtfOrderRefundCallbackParam"
,
description
=
"退款回调所需参数"
)
@Data
public
class
GoblinNtfOrderRefundCallbackParam
implements
Serializable
{
@ApiModelProperty
(
value
=
"状态 1成功 0失败"
)
private
Integer
status
;
@ApiModelProperty
(
value
=
"退款金额"
)
private
BigDecimal
refundPrice
;
@ApiModelProperty
(
value
=
"PAY"
)
private
String
refundCode
;
@ApiModelProperty
(
value
=
"业务方自己生成的退款标识 比如订单ID加000"
)
private
String
orderRefundCode
;
@ApiModelProperty
(
value
=
"refundId"
)
private
String
refundId
;
@ApiModelProperty
(
value
=
"refundType"
)
private
String
refundType
;
@ApiModelProperty
(
value
=
"退款时间"
)
private
String
refundAt
;
@ApiModelProperty
(
value
=
"退款失败错误信息"
)
private
String
refundError
;
}
liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/service/IGoblinNftOrderService.java
View file @
7c02bbe6
package
com
.
liquidnet
.
service
.
goblin
.
service
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.goblin.dto.vo.GoblinNtfPayResultVo
;
import
com.liquidnet.service.goblin.param.GoblinNtfOrderPayAgainParam
;
import
com.liquidnet.service.goblin.param.GoblinNtfOrderPayCallbackParam
;
import
com.liquidnet.service.goblin.param.GoblinNtfOrderPayParam
;
import
com.liquidnet.service.goblin.param.GoblinNtfOrderRefundCallbackParam
;
/**
* <p>
* NFT订单表 服务类
...
...
@@ -9,5 +16,13 @@ package com.liquidnet.service.goblin.service;
* @since 2022-03-23
*/
public
interface
IGoblinNftOrderService
{
ResponseDto
<
GoblinNtfPayResultVo
>
checkOrder
(
GoblinNtfOrderPayParam
param
,
String
uid
);
ResponseDto
<
GoblinNtfPayResultVo
>
payAgain
(
GoblinNtfOrderPayAgainParam
param
);
ResponseDto
<
Integer
>
checkOrderResult
(
String
orderId
);
String
syncOrder
(
GoblinNtfOrderPayCallbackParam
syncOrderParam
);
String
refundSyncOrder
(
GoblinNtfOrderRefundCallbackParam
refundCallbackParam
);
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/GoblinNftOrderRefundServiceImpl.java
deleted
100644 → 0
View file @
c0a15062
package
com
.
liquidnet
.
service
.
goblin
.
service
.
impl
;
import
com.liquidnet.service.goblin.service.IGoblinNftOrderRefundService
;
import
org.springframework.stereotype.Service
;
/**
* <p>
* NFT订单退款表 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2022-03-23
*/
@Service
public
class
GoblinNftOrderRefundServiceImpl
implements
IGoblinNftOrderRefundService
{
}
liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/src/main/java/com/liquidnet/service/goblin/service/impl/GoblinNftOrderServiceImpl.java
deleted
100644 → 0
View file @
c0a15062
package
com
.
liquidnet
.
service
.
goblin
.
service
.
impl
;
import
com.liquidnet.service.goblin.service.IGoblinNftOrderService
;
import
org.springframework.stereotype.Service
;
/**
* <p>
* NFT订单表 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2022-03-23
*/
@Service
public
class
GoblinNftOrderServiceImpl
implements
IGoblinNftOrderService
{
}
liquidnet-bus-service/liquidnet-service-order/liquidnet-service-order-impl/src/main/java/com/liquidnet/service/order/controller/GoblinNftOrderController.java
0 → 100644
View file @
7c02bbe6
package
com
.
liquidnet
.
service
.
order
.
controller
;
import
com.liquidnet.commons.lang.util.CurrentUtil
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.base.codec.vo.EncryptedReq
;
import
com.liquidnet.service.goblin.dto.vo.GoblinNtfPayResultVo
;
import
com.liquidnet.service.goblin.param.GoblinNtfOrderPayAgainParam
;
import
com.liquidnet.service.goblin.param.GoblinNtfOrderPayCallbackParam
;
import
com.liquidnet.service.goblin.param.GoblinNtfOrderPayParam
;
import
com.liquidnet.service.goblin.param.GoblinNtfOrderRefundCallbackParam
;
import
com.liquidnet.service.goblin.service.IGoblinNftOrderService
;
import
io.swagger.annotations.*
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
javax.validation.Valid
;
@Api
(
tags
=
"NFT-支付相关"
)
@RestController
@RequestMapping
(
"/goblin/nft"
)
public
class
GoblinNftOrderController
{
@Autowired
IGoblinNftOrderService
iGoblinNftOrderService
;
@PostMapping
(
"pre"
)
@ApiOperation
(
"下单(加密)"
)
@ApiResponse
(
code
=
200
,
message
=
"接口返回对象参数"
)
public
ResponseDto
<
GoblinNtfPayResultVo
>
checkOrder
(
@RequestBody
EncryptedReq
<
GoblinNtfOrderPayParam
>
param
)
{
GoblinNtfOrderPayParam
payOrderParam
=
param
.
getData
();
String
uid
=
CurrentUtil
.
getCurrentUid
();
return
iGoblinNftOrderService
.
checkOrder
(
payOrderParam
,
uid
);
}
@PostMapping
(
"fc7bce6d6c2213b866f76493f92224b8"
)
@ApiOperation
(
"下单(非加密)"
)
@ApiResponse
(
code
=
200
,
message
=
"接口返回对象参数"
)
public
ResponseDto
<
GoblinNtfPayResultVo
>
checkOrder
(
@RequestBody
GoblinNtfOrderPayParam
param
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
return
iGoblinNftOrderService
.
checkOrder
(
param
,
uid
);
}
@PostMapping
(
"payAgain"
)
@ApiOperation
(
"再次支付"
)
@ApiResponse
(
code
=
200
,
message
=
"接口返回对象参数"
)
public
ResponseDto
<
GoblinNtfPayResultVo
>
payAgain
(
@RequestBody
@Valid
GoblinNtfOrderPayAgainParam
param
)
{
return
iGoblinNftOrderService
.
payAgain
(
param
);
}
@PostMapping
(
"checkPayment"
)
@ApiOperation
(
"订单状态"
)
@ApiResponse
(
code
=
200
,
message
=
"接口返回对象参数"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"form"
,
required
=
true
,
dataType
=
"String"
,
name
=
"orderId"
,
value
=
"订单id"
,
example
=
"1"
),
})
public
ResponseDto
<
Integer
>
checkOrderResult
(
@RequestParam
(
"orderId"
)
@Valid
String
orderId
)
{
return
iGoblinNftOrderService
.
checkOrderResult
(
orderId
);
}
@PostMapping
(
"syncOrder"
)
@ApiOperation
(
"支付回调"
)
@ApiResponse
(
code
=
200
,
message
=
"接口返回对象参数"
)
public
String
syncOrder
(
@ModelAttribute
@Valid
GoblinNtfOrderPayCallbackParam
syncOrderParam
)
{
return
iGoblinNftOrderService
.
syncOrder
(
syncOrderParam
);
}
@ApiOperation
(
value
=
"退款回调"
)
@PostMapping
(
value
=
"refundSyncOrder"
)
@ApiResponse
(
code
=
200
,
message
=
"接口返回对象参数"
)
public
String
refundSyncOrder
(
GoblinNtfOrderRefundCallbackParam
refundCallbackParam
)
{
return
iGoblinNftOrderService
.
refundSyncOrder
(
refundCallbackParam
);
}
}
liquidnet-bus-service/liquidnet-service-order/liquidnet-service-order-impl/src/main/java/com/liquidnet/service/order/service/impl/GoblinNftOrderServiceImpl.java
0 → 100644
View file @
7c02bbe6
package
com
.
liquidnet
.
service
.
order
.
service
.
impl
;
import
com.alibaba.fastjson.JSON
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.liquidnet.commons.lang.util.*
;
import
com.liquidnet.service.base.ErrorMapping
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.base.SqlMapping
;
import
com.liquidnet.service.base.UserPathDto
;
import
com.liquidnet.service.base.constant.MQConst
;
import
com.liquidnet.service.goblin.constant.GoblinStatusConst
;
import
com.liquidnet.service.goblin.dto.manage.AddressVo
;
import
com.liquidnet.service.goblin.dto.manage.GoblinOrderSkuParam
;
import
com.liquidnet.service.goblin.dto.manage.GoblinOrderStoreParam
;
import
com.liquidnet.service.goblin.dto.vo.*
;
import
com.liquidnet.service.goblin.entity.GoblinOrderAttr
;
import
com.liquidnet.service.goblin.entity.GoblinOrderSku
;
import
com.liquidnet.service.goblin.entity.GoblinStoreOrder
;
import
com.liquidnet.service.goblin.param.*
;
import
com.liquidnet.service.goblin.service.IGoblinNftOrderService
;
import
com.liquidnet.service.order.utils.*
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.LinkedMultiValueMap
;
import
org.springframework.util.MultiValueMap
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.time.format.DateTimeFormatter
;
import
java.util.HashMap
;
import
java.util.LinkedList
;
import
java.util.List
;
import
java.util.Map
;
import
static
com
.
liquidnet
.
commons
.
lang
.
util
.
DateUtil
.
DTF_YMD_HMS
;
import
static
com
.
liquidnet
.
commons
.
lang
.
util
.
DateUtil
.
getNowTime
;
@Service
@Slf4j
public
class
GoblinNftOrderServiceImpl
implements
IGoblinNftOrderService
{
@Autowired
GoblinRedisUtils
redisUtils
;
@Autowired
GoblinMongoUtils
mongoUtils
;
@Autowired
QueueUtils
queueUtils
;
@Autowired
GoblinOrderUtils
orderUtils
;
@Autowired
GoblinNtfOrderUtils
ntfOrderUtils
;
@Value
(
"${liquidnet.service.order.url-pay.pay}"
)
private
String
payUrl
;
@Value
(
"${liquidnet.service.order.url-pay.check}"
)
private
String
checkUrl
;
@Value
(
"${liquidnet.service.order.url-pay.goblinUrl}"
)
private
String
synUrl
;
@Override
public
ResponseDto
<
GoblinNtfPayResultVo
>
checkOrder
(
GoblinNtfOrderPayParam
param
,
String
uid
)
{
List
<
String
>
skuAndPreListAndNumber
=
CollectionUtil
.
arrayListString
();
List
<
String
>
platformCodeList
=
CollectionUtil
.
arrayListString
();
List
<
String
>
storeCodeList
=
CollectionUtil
.
arrayListString
();
List
<
GoblinOrderSqlParam
>
orderSqlParams
=
ObjectUtil
.
getGoblinOrderSqlParamArrayListList
();
String
orderMasterCode
=
IDGenerator
.
storeMasterCode
();
//总订单id
GoblinOrderPreParam
preParam
=
GoblinOrderPreParam
.
getNew
();
preParam
.
setAuthCode
(
param
.
getAuthCode
());
preParam
.
setPayType
(
param
.
getPayType
());
preParam
.
setDeviceFrom
(
param
.
getDeviceFrom
());
preParam
.
setOpenId
(
param
.
getOpenId
());
preParam
.
setReturnUrl
(
param
.
getReturnUrl
());
preParam
.
setShowUrl
(
param
.
getShowUrl
());
preParam
.
setOrderMasterCode
(
orderMasterCode
);
preParam
.
setExpireTime
(
5
);
preParam
.
setPriceActual
(
BigDecimal
.
ZERO
);
preParam
.
setStoreName
(
""
);
preParam
.
setSkuName
(
""
);
preParam
.
setOrderIdList
(
""
);
try
{
List
<
GoblinOrderStoreParam
>
goblinOrderStoreParamList
=
param
.
getGoblinOrderStoreParamList
();
//分订单
boolean
isMember
;
AddressVo
addressesVo
=
null
;
if
(
orderUtils
.
noZhengzaiOrder
(
uid
))
{
addressesVo
=
param
.
getAddressesVo
();
if
(
orderUtils
.
getMember
(
uid
)
!=
null
)
{
isMember
=
true
;
}
else
{
isMember
=
false
;
}
}
else
{
isMember
=
false
;
}
for
(
GoblinOrderStoreParam
storeParam
:
goblinOrderStoreParamList
)
{
//商铺维度循环
String
orderId
=
IDGenerator
.
nextSnowId
();
String
orderCode
=
IDGenerator
.
storeCode
(
orderId
);
for
(
GoblinOrderSkuParam
skuParam
:
storeParam
.
getGoblinOrderSkuParamArrayList
())
{
//商品维度循环
String
skuId
=
skuParam
.
getSkuId
();
int
number
=
skuParam
.
getNumber
();
String
pre
=
GoblinStatusConst
.
MarketPreStatus
.
getPre
(
skuId
);
int
surplusGeneral
=
redisUtils
.
decrSkuStock
(
pre
,
skuId
,
number
);
skuAndPreListAndNumber
.
add
(
skuId
+
","
+
pre
+
","
+
number
);
//库存回滚
if
(
surplusGeneral
<
0
)
{
return
ntfOrderUtils
.
orderException
(
skuAndPreListAndNumber
,
platformCodeList
,
storeCodeList
,
uid
,
"库存不足"
);
// throw new Exception("库存不足");
}
}
//GoblinOrderSkuParam
//下单
GoblinOrderPreParam
pre
=
order
(
param
,
storeParam
,
uid
,
isMember
,
addressesVo
,
orderMasterCode
,
orderId
,
orderCode
,
platformCodeList
,
storeCodeList
);
preParam
.
setPriceActual
(
preParam
.
getPriceActual
().
add
(
pre
.
getPriceActual
()));
preParam
.
setStoreName
(
pre
.
getStoreName
()
+
","
+
preParam
.
getStoreName
());
preParam
.
setSkuName
(
preParam
.
getSkuName
()
+
","
+
pre
.
getSkuName
());
preParam
.
setOrderIdList
(
preParam
.
getOrderIdList
()
+
","
+
pre
.
getOrderIdList
());
preParam
.
setPlatformSpuIds
(
pre
.
getPlatformSpuIds
());
preParam
.
setStoreSpuIds
(
pre
.
getStoreSpuIds
());
GoblinOrderSqlParam
sqlParam
=
GoblinOrderSqlParam
.
getNew
();
sqlParam
.
setStoreOrder
(
pre
.
getStoreOrder
());
sqlParam
.
setOrderAttr
(
pre
.
getOrderAttr
());
sqlParam
.
setOrderSkuList
(
pre
.
getOrderSkuList
());
orderSqlParams
.
add
(
sqlParam
);
}
//GoblinOrderStoreParam
if
(
preParam
.
getOrderIdList
().
equals
(
""
))
{
return
ntfOrderUtils
.
orderException
(
skuAndPreListAndNumber
,
platformCodeList
,
storeCodeList
,
uid
,
"参数异常"
);
// throw new Exception("参数异常");
}
return
payOrder
(
preParam
,
orderSqlParams
,
uid
);
}
catch
(
Exception
e
)
{
log
.
error
(
"Kylin Order Pay Error = {}"
,
e
);
Long
time3
=
System
.
currentTimeMillis
();
//回顾限购 回滚库存
for
(
String
item
:
skuAndPreListAndNumber
)
{
String
[]
array
=
item
.
split
(
","
);
String
skuId
=
array
[
0
];
String
pre
=
array
[
1
];
int
number
=
Integer
.
parseInt
(
array
[
2
]);
redisUtils
.
incrSkuStock
(
pre
,
skuId
,
number
);
if
(
orderUtils
.
noZhengzaiOrder
(
uid
))
{
redisUtils
.
decrSkuCountByUid
(
uid
,
skuId
,
number
);
}
}
//回退平台券
for
(
String
platformCode
:
platformCodeList
)
{
orderUtils
.
backCoupon
(
platformCode
,
uid
);
}
//回退店铺券
List
<
BackCouponParam
>
params
=
ObjectUtil
.
getBackCouponParam
();
for
(
String
storeCode
:
storeCodeList
)
{
BackCouponParam
backCouponParam
=
BackCouponParam
.
getNew
();
backCouponParam
.
setuCouponIds
(
storeCode
);
backCouponParam
.
setUid
(
uid
);
params
.
add
(
backCouponParam
);
}
if
(
params
.
size
()
>
0
)
{
orderUtils
.
backStoreCoupon
(
params
);
}
if
(
e
.
getMessage
()
==
null
)
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20018"
));
//乱七八糟异常
}
else
if
(
e
.
getMessage
().
equals
(
"平台券不可用"
))
{
return
ResponseDto
.
failure
(
e
.
getMessage
());
}
else
if
(
e
.
getMessage
().
equals
(
"无权购买"
))
{
return
ResponseDto
.
failure
(
e
.
getMessage
());
}
else
if
(
e
.
getMessage
().
equals
(
"平台券店铺券不可一起使用"
))
{
return
ResponseDto
.
failure
(
e
.
getMessage
());
}
else
if
(
e
.
getMessage
().
equals
(
"平台券店铺券不可一起使用"
))
{
return
ResponseDto
.
failure
(
e
.
getMessage
());
}
else
if
(
e
.
getMessage
().
equals
(
"跨店铺购物平台券不可用"
))
{
return
ResponseDto
.
failure
(
e
.
getMessage
());
}
else
if
(
e
.
getMessage
().
equals
(
"店铺券不可用"
))
{
return
ResponseDto
.
failure
(
e
.
getMessage
());
}
else
if
(
e
.
getMessage
().
equals
(
"不可购买"
))
{
return
ResponseDto
.
failure
(
e
.
getMessage
());
}
else
if
(
e
.
getMessage
().
equals
(
"参数异常"
))
{
return
ResponseDto
.
failure
(
e
.
getMessage
());
}
else
if
(
e
.
getMessage
().
equals
(
"库存不足"
))
{
return
ResponseDto
.
failure
(
e
.
getMessage
());
}
else
if
(
e
.
getMessage
().
equals
(
"已超出限购数量"
))
{
return
ResponseDto
.
failure
(
e
.
getMessage
());
}
else
if
(
e
.
getMessage
().
equals
(
"非法参数"
))
{
return
ResponseDto
.
failure
(
e
.
getMessage
());
}
else
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20018"
));
//乱七八糟异常
}
}
}
private
GoblinOrderPreParam
order
(
GoblinNtfOrderPayParam
param
,
GoblinOrderStoreParam
storeParam
,
String
uid
,
boolean
isMember
,
AddressVo
addressesVo
,
String
orderMasterCode
,
String
orderId
,
String
orderCode
,
List
<
String
>
platformCodeList
,
List
<
String
>
storeCodeList
)
throws
Exception
{
String
platVoucherCode
=
storeParam
.
getPlatVoucherCode
();
String
storeVoucherCode
=
storeParam
.
getStoreVoucherCode
();
String
storeId
=
storeParam
.
getStoreId
();
Map
token
=
CurrentUtil
.
getTokenClaims
();
String
headerCliSource
=
CurrentUtil
.
getHeaderCliSource
(),
headerCliVersion
=
CurrentUtil
.
getHeaderCliVersion
();
String
source
=
headerCliSource
==
null
?
""
:
headerCliSource
;
String
version
=
headerCliVersion
==
null
?
""
:
headerCliVersion
;
LocalDateTime
now
=
LocalDateTime
.
now
();
String
skuName
=
""
;
BigDecimal
price
;
//sku应付价格
BigDecimal
priceBase
;
//sku原价
BigDecimal
storeTotalPrice
=
BigDecimal
.
ZERO
;
//订单总金额
String
writeOffCode
=
""
;
//取货码
List
<
GoblinOrderSku
>
goblinOrderSkuList
=
ObjectUtil
.
getGoblinOrderSkuArrayList
();
List
<
String
>
storeSpuIds
=
CollectionUtil
.
linkedListString
();
List
<
String
>
platformSpuIds
=
CollectionUtil
.
linkedListString
();
String
marketId
=
""
;
String
marketType
=
""
;
for
(
GoblinOrderSkuParam
skuParam
:
storeParam
.
getGoblinOrderSkuParamArrayList
())
{
String
pre
=
GoblinStatusConst
.
MarketPreStatus
.
getPre
(
skuParam
.
getSkuId
());
GoblinGoodsSkuInfoVo
skuVo
=
redisUtils
.
getGoodsSkuInfoVo
(
skuParam
.
getSkuId
());
GoblinGoodsInfoVo
spuVo
=
redisUtils
.
getGoodsInfoVo
(
skuParam
.
getSpuId
());
if
(!
spuVo
.
getStoreId
().
equals
(
storeParam
.
getStoreId
())
||
!
skuVo
.
getStoreId
().
equals
(
storeParam
.
getStoreId
()))
{
throw
new
Exception
(
"非法参数"
);
}
if
(!(
skuVo
.
getStatus
().
equals
(
"3"
)
&&
skuVo
.
getShelvesStatus
().
equals
(
"3"
))
||
skuVo
.
getDelFlg
().
equals
(
"1"
))
{
throw
new
Exception
(
"不可购买"
);
}
// 判断库存
int
limitCount
=
skuVo
.
getBuyLimit
()
==
0
?
Integer
.
MAX_VALUE
:
skuVo
.
getBuyLimit
();
//判断限购
if
(
orderUtils
.
noZhengzaiOrder
(
uid
))
{
String
res1
=
orderUtils
.
judgeOrderLimit
(
uid
,
skuParam
.
getSkuId
(),
skuParam
.
getNumber
(),
limitCount
);
if
(!
res1
.
equals
(
""
))
{
throw
new
Exception
(
"已超出限购数量"
);
}
//权限限购
Boolean
res2
=
orderUtils
.
judgeOrderRose
(
isMember
,
skuParam
.
getSkuId
(),
StringUtils
.
defaultString
(((
String
)
CurrentUtil
.
getTokenClaims
().
get
(
"mobile"
)),
""
),
Integer
.
parseInt
(
skuVo
.
getBuyFactor
()));
if
(!
res2
)
{
throw
new
Exception
(
"无权购买"
);
}
}
marketId
=
spuVo
.
getMarketId
();
marketType
=
pre
;
skuName
=
skuName
.
concat
(
skuVo
.
getName
()).
concat
(
","
);
if
(
pre
!=
null
&&
pre
.
equals
(
GoblinStatusConst
.
MarketPreStatus
.
MARKET_PRE_ZHENGZAI
.
getValue
()))
{
writeOffCode
=
"EMPTY"
;
}
//获得 活动原价
price
=
skuVo
.
getPrice
();
if
(
isMember
)
{
price
=
skuVo
.
getPriceMember
();
}
//活动价格
// if (pre != null) {
// GoblinGoodsSkuInfoVo skuMarketVo = redisUtils.getGoodsSkuInfoVo(skuParam.getSkuId().split(pre)[0]);
// priceBase = skuMarketVo.getPrice();
// if (isMember) {
// priceBase = skuMarketVo.getPriceMember();
// }
// } else {
priceBase
=
skuVo
.
getPrice
();
if
(
isMember
)
{
priceBase
=
skuVo
.
getPriceMember
();
}
// }
//todo
//获得活动优惠价格
// priceBase = priceBase.multiply(BigDecimal.valueOf(skuParam.getNumber()));
price
=
price
.
multiply
(
BigDecimal
.
valueOf
(
skuParam
.
getNumber
()));
storeTotalPrice
=
storeTotalPrice
.
add
(
price
);
//订单sku
GoblinOrderSku
orderSku
=
GoblinOrderSku
.
getNew
();
orderSku
.
setOrderSkuId
(
IDGenerator
.
nextTimeId2
());
orderSku
.
setOrderId
(
orderId
);
orderSku
.
setStatus
(
GoblinStatusConst
.
Status
.
ORDER_STATUS_0
.
getValue
());
orderSku
.
setSpuId
(
skuParam
.
getSpuId
());
orderSku
.
setSpuName
(
spuVo
.
getName
());
orderSku
.
setSkuId
(
skuParam
.
getSkuId
());
orderSku
.
setNum
(
skuParam
.
getNumber
());
orderSku
.
setSkuPrice
(
priceBase
);
orderSku
.
setSkuPriceActual
(
price
);
orderSku
.
setSkuName
(
skuVo
.
getName
());
orderSku
.
setSkuNo
(
skuVo
.
getSkuNo
());
orderSku
.
setSkuImage
(
skuVo
.
getSkuPic
());
orderSku
.
setSkuSpecs
(
JSON
.
toJSONString
(
skuVo
.
getSkuSpecList
()));
orderSku
.
setPriceVoucher
(
BigDecimal
.
ZERO
);
// orderSku.setPriceVoucher(priceBase.subtract(price));
orderSku
.
setCreatedAt
(
now
);
orderSku
.
setSpuName
(
spuVo
.
getName
());
orderSku
.
setSpuPic
(
spuVo
.
getCoverPic
());
goblinOrderSkuList
.
add
(
orderSku
);
}
if
((
platVoucherCode
!=
null
&&
!
platVoucherCode
.
equals
(
""
))
&&
(
storeVoucherCode
!=
null
&&
!
storeVoucherCode
.
equals
(
""
)))
{
throw
new
Exception
(
"平台券店铺券不可一起使用"
);
}
if
(
param
.
getGoblinOrderStoreParamList
().
size
()
>
1
&&
(
platVoucherCode
!=
null
&&
!
platVoucherCode
.
equals
(
""
)))
{
throw
new
Exception
(
"跨店铺购物平台券不可用"
);
}
//优惠券
BigDecimal
voucherPrice
=
BigDecimal
.
ZERO
;
if
(
platVoucherCode
!=
null
&&
!
platVoucherCode
.
equals
(
""
))
{
String
spuIds
=
""
;
for
(
GoblinOrderSkuParam
item
:
storeParam
.
getGoblinOrderSkuParamArrayList
())
{
String
pre
=
GoblinStatusConst
.
MarketPreStatus
.
getPre
(
item
.
getSpuId
());
if
(
pre
!=
null
)
{
spuIds
=
spuIds
.
concat
(
item
.
getSpuId
().
split
(
pre
)[
0
]
+
","
);
}
else
{
spuIds
=
spuIds
.
concat
(
item
.
getSpuId
()
+
","
);
}
}
HashMap
<
String
,
Object
>
hashMap
=
orderUtils
.
useCoupon
(
platVoucherCode
,
"购买商品["
+
orderCode
+
"]"
,
storeTotalPrice
,
spuIds
,
uid
,
goblinOrderSkuList
);
if
(
hashMap
!=
null
)
{
voucherPrice
=
(
BigDecimal
)
hashMap
.
get
(
"voucher"
);
Integer
typeVoucher
=
(
Integer
)
hashMap
.
get
(
"type"
);
if
(
typeVoucher
.
equals
(-
1
))
{
throw
new
Exception
(
"平台券不可用"
);
}
else
{
platformCodeList
.
add
(
platVoucherCode
);
platformSpuIds
=
(
List
<
String
>)
hashMap
.
get
(
"spuIds"
);
}
}
}
//商铺券
BigDecimal
storeVoucherPrice
=
BigDecimal
.
ZERO
;
if
(
storeVoucherCode
!=
null
&&
!
storeVoucherCode
.
equals
(
""
))
{
GoblinUseResultVo
storeCouponVo
=
orderUtils
.
useStoreCoupon
(
storeVoucherCode
,
"购买商品["
+
orderCode
+
"]"
,
storeTotalPrice
,
goblinOrderSkuList
,
uid
);
String
typeVoucher
;
if
(
storeCouponVo
!=
null
)
{
storeVoucherPrice
=
storeCouponVo
.
getValue
();
typeVoucher
=
storeCouponVo
.
getCouType
();
if
(
typeVoucher
.
equals
(
"-1"
))
{
throw
new
Exception
(
"店铺券不可用"
);
}
else
{
storeCodeList
.
add
(
storeVoucherCode
);
storeSpuIds
=
storeCouponVo
.
getSpuIds
();
}
}
}
GoblinStoreInfoVo
storeInfoVo
=
redisUtils
.
getStoreInfoVo
(
storeId
);
//生成订单
GoblinStoreOrder
storeOrder
=
GoblinStoreOrder
.
getNew
();
storeOrder
.
setMasterOrderCode
(
orderMasterCode
);
storeOrder
.
setOrderId
(
orderId
);
storeOrder
.
setStoreId
(
storeId
);
storeOrder
.
setStoreName
(
storeInfoVo
.
getStoreName
());
storeOrder
.
setOrderCode
(
orderCode
);
storeOrder
.
setUserId
(
uid
);
storeOrder
.
setUserName
(
StringUtils
.
defaultString
(((
String
)
token
.
get
(
"nickname"
)),
""
));
storeOrder
.
setUserMobile
(
StringUtils
.
defaultString
(((
String
)
token
.
get
(
"mobile"
)),
""
));
if
(
addressesVo
==
null
)
{
storeOrder
.
setPriceExpress
(
BigDecimal
.
ZERO
);
}
else
{
storeOrder
.
setPriceExpress
(
BigDecimal
.
TEN
);
}
storeOrder
.
setPriceTotal
(
storeTotalPrice
.
add
(
storeOrder
.
getPriceExpress
()));
BigDecimal
priceActual
=
storeOrder
.
getPriceTotal
().
subtract
(
voucherPrice
).
subtract
(
storeVoucherPrice
);
if
(
priceActual
.
compareTo
(
storeOrder
.
getPriceExpress
())
<
0
)
{
priceActual
=
storeOrder
.
getPriceExpress
();
}
storeOrder
.
setPriceActual
(
priceActual
.
compareTo
(
BigDecimal
.
ZERO
)
<
0
?
BigDecimal
.
ZERO
:
priceActual
);
storeOrder
.
setPriceRefund
(
BigDecimal
.
ZERO
);
storeOrder
.
setPriceCoupon
(
voucherPrice
);
storeOrder
.
setStorePriceCoupon
(
storeVoucherPrice
);
storeOrder
.
setPriceVoucher
(
voucherPrice
.
add
(
storeVoucherPrice
));
storeOrder
.
setStatus
(
0
);
storeOrder
.
setUcouponId
(
platVoucherCode
);
storeOrder
.
setStoreCouponId
(
storeVoucherCode
);
storeOrder
.
setPayType
(
param
.
getPayType
());
storeOrder
.
setDeviceFrom
(
param
.
getDeviceFrom
());
storeOrder
.
setSource
(
source
);
storeOrder
.
setVersion
(
version
);
storeOrder
.
setIsMember
(
isMember
?
1
:
0
);
storeOrder
.
setOrderType
(
0
);
storeOrder
.
setWriteOffCode
(
writeOffCode
);
if
(
marketType
!=
null
&&
marketType
.
equals
(
GoblinStatusConst
.
MarketPreStatus
.
MARKET_PRE_ZHENGZAI
.
getValue
()))
{
storeOrder
.
setPayCountdownMinute
(
1
);
}
else
{
storeOrder
.
setPayCountdownMinute
(
5
);
}
storeOrder
.
setIpAddress
(
CurrentUtil
.
getCliIpAddr
());
storeOrder
.
setCreatedAt
(
now
);
storeOrder
.
setMarketId
(
marketId
);
storeOrder
.
setMarketType
(
marketType
);
//订单attr
GoblinOrderAttr
orderAttr
=
GoblinOrderAttr
.
getNew
();
orderAttr
.
setOrderAttrId
(
IDGenerator
.
nextTimeId2
());
orderAttr
.
setOrderId
(
orderId
);
if
(!
writeOffCode
.
equals
(
"EMPTY"
))
{
orderAttr
.
setExpressContacts
(
addressesVo
.
getName
());
orderAttr
.
setExpressAddress
(
addressesVo
.
getProvince
()
+
","
+
addressesVo
.
getCounty
()
+
","
+
addressesVo
.
getCity
());
orderAttr
.
setExpressAddressDetail
(
addressesVo
.
getAddress
());
orderAttr
.
setExpressPhone
(
addressesVo
.
getPhone
());
orderAttr
.
setExpressType
(
1
);
orderAttr
.
setCreatedAt
(
now
);
}
//返回值
GoblinOrderPreParam
preParam
=
GoblinOrderPreParam
.
getNew
();
preParam
.
setPriceActual
(
storeOrder
.
getPriceActual
());
preParam
.
setStoreName
(
storeInfoVo
.
getStoreName
());
preParam
.
setSkuName
(
skuName
);
preParam
.
setOrderIdList
(
storeOrder
.
getOrderId
());
preParam
.
setStoreOrder
(
storeOrder
);
preParam
.
setOrderAttr
(
orderAttr
);
preParam
.
setOrderSkuList
(
goblinOrderSkuList
);
preParam
.
setStoreSpuIds
(
storeSpuIds
);
preParam
.
setPlatformSpuIds
(
platformSpuIds
);
return
preParam
;
}
private
ResponseDto
<
GoblinNtfPayResultVo
>
payOrder
(
GoblinOrderPreParam
preParam
,
List
<
GoblinOrderSqlParam
>
sqlParams
,
String
uid
)
{
//是否免费
boolean
isFree
=
false
;
GoblinNtfPayResultVo
ntfPayResultVo
;
String
payCode
;
if
(
preParam
.
getPriceActual
().
compareTo
(
BigDecimal
.
valueOf
(
0
))
>
0
&&
!
preParam
.
getPayType
().
equals
(
"huifu"
))
{
// 调用支付
LinkedMultiValueMap
<
String
,
String
>
httpData
=
CollectionUtil
.
linkedMultiValueMapStringString
();
httpData
.
add
(
"type"
,
"PRODUCT"
);
httpData
.
add
(
"price"
,
preParam
.
getPriceActual
().
toString
());
// httpData.add("price","0.01");
httpData
.
add
(
"name"
,
preParam
.
getStoreName
());
httpData
.
add
(
"detail"
,
preParam
.
getSkuName
());
httpData
.
add
(
"orderCode"
,
preParam
.
getOrderMasterCode
());
httpData
.
add
(
"orderId"
,
preParam
.
getOrderIdList
().
substring
(
1
));
httpData
.
add
(
"clientIp"
,
CurrentUtil
.
getCliIpAddr
());
httpData
.
add
(
"notifyUrl"
,
synUrl
);
httpData
.
add
(
"createDate"
,
LocalDateTime
.
now
().
format
(
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
)));
httpData
.
add
(
"expireTime"
,
preParam
.
getExpireTime
()
+
""
);
httpData
.
add
(
"payType"
,
preParam
.
getPayType
());
httpData
.
add
(
"deviceFrom"
,
preParam
.
getDeviceFrom
());
if
(
preParam
.
getDeviceFrom
().
equals
(
"micropay"
))
{
httpData
.
add
(
"authCode"
,
preParam
.
getAuthCode
());
}
if
(
preParam
.
getDeviceFrom
().
equals
(
"js"
)
||
preParam
.
getDeviceFrom
().
equals
(
"applet"
))
{
httpData
.
add
(
"openId"
,
preParam
.
getOpenId
());
}
// if (preParam.getPayType().equals("alipay") && preParam.getDeviceFrom().equals("wap")) {
// httpData.add("showUrl", preParam.getShowUrl() + preParam.getOrderMasterCode());
// httpData.add("returnUrl", preParam.getReturnUrl() + preParam.getOrderMasterCode());
// }
// if (preParam.getPayType().equals("douyinpay")) {
// httpData.add("showUrl", preParam.getShowUrl() + preParam.getOrderMasterCode());
// httpData.add("returnUrl", preParam.getReturnUrl() + preParam.getOrderMasterCode());
// }
// if (preParam.getPayType().equals("unionpay")) {
// httpData.add("returnUrl", preParam.getReturnUrl() + preParam.getOrderMasterCode());
// }
httpData
.
add
(
"showUrl"
,
preParam
.
getShowUrl
()
+
preParam
.
getOrderMasterCode
());
httpData
.
add
(
"returnUrl"
,
preParam
.
getReturnUrl
()
+
preParam
.
getOrderMasterCode
());
LinkedMultiValueMap
<
String
,
String
>
header
=
CollectionUtil
.
linkedMultiValueMapStringString
();
header
.
add
(
"Accept"
,
"application/json;charset=UTF-8"
);
String
returnData
=
HttpUtil
.
post
(
payUrl
,
httpData
,
header
);
log
.
info
(
"调用 DRAGON 结果 = "
+
returnData
);
ResponseDto
<
GoblinPayInnerResultVo
>
dto
=
JsonUtils
.
fromJson
(
returnData
,
new
TypeReference
<
ResponseDto
<
GoblinPayInnerResultVo
>>()
{
});
ntfPayResultVo
=
GoblinNtfPayResultVo
.
getNew
();
ntfPayResultVo
.
setCode
(
dto
.
getData
().
getCode
());
ntfPayResultVo
.
setOrderCode
(
dto
.
getData
().
getOrderCode
());
ntfPayResultVo
.
setPayData
(
dto
.
getData
().
getPayData
());
ntfPayResultVo
.
setPayType
(
preParam
.
getPayType
());
ntfPayResultVo
.
setPrice
(
preParam
.
getPriceActual
());
payCode
=
ntfPayResultVo
.
getCode
();
ntfPayResultVo
.
setShowUrl
(
preParam
.
getShowUrl
());
ntfPayResultVo
.
setReturnUrl
(
preParam
.
getReturnUrl
());
}
else
if
(
preParam
.
getPayType
()
==
null
)
{
isFree
=
true
;
preParam
.
setPayType
(
"FREE"
);
payCode
=
"FREE_PAY_CODE"
;
ntfPayResultVo
=
GoblinNtfPayResultVo
.
getNew
();
ntfPayResultVo
.
setPrice
(
BigDecimal
.
valueOf
(
0
));
ntfPayResultVo
.
setPayType
(
preParam
.
getPayType
());
}
else
if
(
preParam
.
getPayType
().
equals
(
"huifu"
))
{
isFree
=
true
;
preParam
.
setPayType
(
"huifu"
);
payCode
=
"HUIFU_PAY_CODE"
;
ntfPayResultVo
=
GoblinNtfPayResultVo
.
getNew
();
ntfPayResultVo
.
setPrice
(
preParam
.
getPriceActual
());
ntfPayResultVo
.
setPayType
(
preParam
.
getPayType
());
}
else
{
isFree
=
true
;
preParam
.
setPayType
(
"FREE"
);
payCode
=
"FREE_PAY_CODE"
;
ntfPayResultVo
=
GoblinNtfPayResultVo
.
getNew
();
ntfPayResultVo
.
setPrice
(
BigDecimal
.
valueOf
(
0
));
ntfPayResultVo
.
setPayType
(
preParam
.
getPayType
());
}
ntfPayResultVo
.
setOrderMasterCode
(
preParam
.
getOrderMasterCode
());
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
sqls
.
add
(
SqlMapping
.
get
(
"goblin.order.create.sku_insert"
));
sqls
.
add
(
SqlMapping
.
get
(
"goblin.order.create.order_insert"
));
sqls
.
add
(
SqlMapping
.
get
(
"goblin.order.create.attr_insert"
));
LinkedList
<
Object
[]>
sqlDataSku
=
CollectionUtil
.
linkedListObjectArr
();
LinkedList
<
Object
[]>
sqlDataOrder
=
CollectionUtil
.
linkedListObjectArr
();
LinkedList
<
Object
[]>
sqlDataAttr
=
CollectionUtil
.
linkedListObjectArr
();
List
<
GoblinStoreOrderVo
>
orderVoList
=
ObjectUtil
.
getGoblinStoreOrderVoArrayList
();
List
<
GoblinOrderSkuVo
>
skuVoList
=
ObjectUtil
.
getGoblinOrderSkuVoArrayList
();
for
(
GoblinOrderSqlParam
item
:
sqlParams
)
{
List
<
String
>
goblinOrderSkuIdList
=
CollectionUtil
.
linkedListString
();
BigDecimal
restVoucherPrice
=
item
.
getStoreOrder
().
getPriceVoucher
();
for
(
int
i
=
0
;
i
<
item
.
getOrderSkuList
().
size
();
i
++)
{
GoblinOrderSku
orderSku
=
item
.
getOrderSkuList
().
get
(
i
);
if
(
item
.
getStoreOrder
().
getPriceVoucher
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
)
{
if
(
preParam
.
getStoreSpuIds
().
size
()
>
0
||
preParam
.
getPlatformSpuIds
().
size
()
>
0
)
{
//指定范围商品券
String
spuId
=
orderSku
.
getSpuId
();
String
pre
=
GoblinStatusConst
.
MarketPreStatus
.
getPre
(
spuId
);
if
(
pre
!=
null
)
{
spuId
=
spuId
.
split
(
pre
)[
0
];
}
if
(
preParam
.
getStoreSpuIds
().
contains
(
spuId
)
||
preParam
.
getPlatformSpuIds
().
contains
(
spuId
))
{
if
(
restVoucherPrice
.
compareTo
(
BigDecimal
.
ZERO
)
<=
0
)
{
restVoucherPrice
=
BigDecimal
.
ZERO
;
}
if
(
restVoucherPrice
.
compareTo
(
BigDecimal
.
ZERO
)
>
0
)
{
restVoucherPrice
=
restVoucherPrice
.
subtract
(
orderSku
.
getSkuPrice
());
if
(
restVoucherPrice
.
compareTo
(
BigDecimal
.
ZERO
)
>=
0
)
{
orderSku
.
setPriceVoucher
(
orderSku
.
getSkuPrice
());
}
else
{
orderSku
.
setPriceVoucher
(
restVoucherPrice
.
add
(
orderSku
.
getSkuPrice
()));
}
BigDecimal
skuPriceActual
=
orderSku
.
getSkuPrice
().
subtract
(
orderSku
.
getPriceVoucher
());
orderSku
.
setSkuPriceActual
(
skuPriceActual
.
compareTo
(
BigDecimal
.
ZERO
)
>
0
?
skuPriceActual
:
BigDecimal
.
ZERO
);
}
else
if
(
restVoucherPrice
.
compareTo
(
BigDecimal
.
ZERO
)
==
0
)
{
orderSku
.
setPriceVoucher
(
BigDecimal
.
ZERO
);
BigDecimal
skuPriceActual
=
orderSku
.
getSkuPrice
().
subtract
(
orderSku
.
getPriceVoucher
());
orderSku
.
setSkuPriceActual
(
skuPriceActual
.
compareTo
(
BigDecimal
.
ZERO
)
>
0
?
skuPriceActual
:
BigDecimal
.
ZERO
);
}
else
{
orderSku
.
setPriceVoucher
(
restVoucherPrice
.
add
(
orderSku
.
getSkuPrice
()));
BigDecimal
skuPriceActual
=
orderSku
.
getSkuPrice
().
subtract
(
orderSku
.
getPriceVoucher
());
orderSku
.
setSkuPriceActual
(
skuPriceActual
.
compareTo
(
BigDecimal
.
ZERO
)
>
0
?
skuPriceActual
:
BigDecimal
.
ZERO
);
}
}
}
else
{
//全部商品券
if
(
restVoucherPrice
.
compareTo
(
BigDecimal
.
ZERO
)
<=
0
)
{
restVoucherPrice
=
BigDecimal
.
ZERO
;
}
if
(
restVoucherPrice
.
compareTo
(
BigDecimal
.
ZERO
)
>
0
)
{
restVoucherPrice
=
restVoucherPrice
.
subtract
(
orderSku
.
getSkuPrice
());
if
(
restVoucherPrice
.
compareTo
(
BigDecimal
.
ZERO
)
>=
0
)
{
orderSku
.
setPriceVoucher
(
orderSku
.
getSkuPrice
());
}
else
{
orderSku
.
setPriceVoucher
(
restVoucherPrice
.
add
(
orderSku
.
getSkuPrice
()));
}
BigDecimal
skuPriceActual
=
orderSku
.
getSkuPrice
().
subtract
(
orderSku
.
getPriceVoucher
());
orderSku
.
setSkuPriceActual
(
skuPriceActual
.
compareTo
(
BigDecimal
.
ZERO
)
>
0
?
skuPriceActual
:
BigDecimal
.
ZERO
);
}
else
if
(
restVoucherPrice
.
compareTo
(
BigDecimal
.
ZERO
)
==
0
)
{
orderSku
.
setPriceVoucher
(
BigDecimal
.
ZERO
);
BigDecimal
skuPriceActual
=
orderSku
.
getSkuPrice
().
subtract
(
orderSku
.
getPriceVoucher
());
orderSku
.
setSkuPriceActual
(
skuPriceActual
.
compareTo
(
BigDecimal
.
ZERO
)
>
0
?
skuPriceActual
:
BigDecimal
.
ZERO
);
}
else
{
orderSku
.
setPriceVoucher
(
restVoucherPrice
.
add
(
orderSku
.
getSkuPrice
()));
BigDecimal
skuPriceActual
=
orderSku
.
getSkuPrice
().
subtract
(
orderSku
.
getPriceVoucher
());
orderSku
.
setSkuPriceActual
(
skuPriceActual
.
compareTo
(
BigDecimal
.
ZERO
)
>
0
?
skuPriceActual
:
BigDecimal
.
ZERO
);
}
}
}
sqlDataSku
.
add
(
new
Object
[]{
orderSku
.
getOrderSkuId
(),
orderSku
.
getOrderId
(),
orderSku
.
getSpuId
(),
orderSku
.
getSpuName
(),
orderSku
.
getSpuPic
(),
orderSku
.
getSkuId
(),
orderSku
.
getNum
(),
orderSku
.
getSkuPrice
(),
orderSku
.
getSkuPriceActual
(),
orderSku
.
getSkuName
(),
orderSku
.
getSkuNo
(),
orderSku
.
getSkuImage
(),
orderSku
.
getSkuSpecs
(),
orderSku
.
getPriceVoucher
(),
orderSku
.
getCreatedAt
()
});
//订单 orderSku Vo
GoblinOrderSkuVo
orderSkuVo
=
GoblinOrderSkuVo
.
getNew
().
copy
(
orderSku
);
redisUtils
.
setGoblinOrderSku
(
orderSkuVo
.
getOrderSkuId
(),
orderSkuVo
);
goblinOrderSkuIdList
.
add
(
orderSkuVo
.
getOrderSkuId
());
skuVoList
.
add
(
orderSkuVo
);
}
GoblinStoreOrder
storeOrder
=
item
.
getStoreOrder
();
storeOrder
.
setPayCode
(
payCode
);
sqlDataOrder
.
add
(
new
Object
[]{
storeOrder
.
getMasterOrderCode
(),
storeOrder
.
getOrderId
(),
storeOrder
.
getStoreId
(),
storeOrder
.
getStoreName
(),
storeOrder
.
getOrderCode
(),
storeOrder
.
getUserId
(),
storeOrder
.
getUserName
(),
storeOrder
.
getUserMobile
(),
storeOrder
.
getPriceTotal
(),
storeOrder
.
getPayCode
(),
storeOrder
.
getPriceActual
(),
storeOrder
.
getPriceRefund
(),
storeOrder
.
getPriceExpress
(),
storeOrder
.
getPriceCoupon
(),
storeOrder
.
getStorePriceCoupon
(),
storeOrder
.
getPriceVoucher
(),
storeOrder
.
getStatus
(),
storeOrder
.
getUcouponId
(),
storeOrder
.
getStoreCouponId
(),
storeOrder
.
getPayType
(),
storeOrder
.
getDeviceFrom
(),
storeOrder
.
getSource
(),
storeOrder
.
getVersion
(),
storeOrder
.
getIsMember
(),
storeOrder
.
getOrderType
(),
storeOrder
.
getWriteOffCode
(),
storeOrder
.
getPayCountdownMinute
(),
storeOrder
.
getIpAddress
(),
storeOrder
.
getMarketId
(),
storeOrder
.
getMarketType
(),
storeOrder
.
getCreatedAt
()
});
GoblinOrderAttr
orderAttr
=
item
.
getOrderAttr
();
sqlDataAttr
.
add
(
new
Object
[]{
orderAttr
.
getOrderAttrId
(),
orderAttr
.
getOrderId
(),
orderAttr
.
getExpressContacts
(),
orderAttr
.
getExpressAddress
(),
orderAttr
.
getExpressAddressDetail
(),
orderAttr
.
getExpressPhone
(),
orderAttr
.
getExpressType
(),
orderAttr
.
getCreatedAt
()
});
//订单vo
GoblinStoreOrderVo
orderVo
=
GoblinStoreOrderVo
.
getNew
().
copy
(
storeOrder
);
//订单attr vo
GoblinOrderAttrVo
orderAttrVo
=
GoblinOrderAttrVo
.
getNew
().
copy
(
orderAttr
);
//待支付发送队列
queueUtils
.
sendMsgByRedisGoblinStock
(
orderVo
.
getMasterOrderCode
(),
storeOrder
.
getCreatedAt
());
//redis 赋值
orderVo
.
setOrderAttrVo
(
orderAttrVo
);
orderVo
.
setOrderSkuVoIds
(
goblinOrderSkuIdList
);
orderVo
.
setCreatedAt
(
getNowTime
());
redisUtils
.
setGoblinOrder
(
orderVo
.
getOrderId
(),
orderVo
);
redisUtils
.
setMasterCode
(
orderVo
.
getMasterOrderCode
(),
preParam
.
getOrderIdList
().
substring
(
1
));
orderVoList
.
add
(
orderVo
);
//redis 订单列表
if
(
orderUtils
.
noZhengzaiOrder
(
uid
))
{
if
(
orderVo
.
getMarketType
()
==
null
)
{
redisUtils
.
addOrderList
(
uid
,
orderVo
.
getOrderId
());
}
else
if
(
orderVo
.
getMarketType
().
equals
(
GoblinStatusConst
.
MarketPreStatus
.
MARKET_PRE_ZHENGZAI
.
getValue
()))
{
redisUtils
.
addZhengzaiOrderList
(
uid
,
orderVo
.
getOrderId
());
}
}
}
mongoUtils
.
insertGoblinOrderSkuVoList
(
skuVoList
);
mongoUtils
.
insertGoblinStoreOrderVos
(
orderVoList
);
//mysql 执行sql
String
sqlData
=
SqlMapping
.
gets
(
sqls
,
sqlDataSku
,
sqlDataOrder
,
sqlDataAttr
);
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
GOBLIN_ORDER_CREATE_PAY
.
getKey
(),
sqlData
);
log
.
info
(
UserPathDto
.
setData
(
"下单(唤起支付)"
,
preParam
,
ntfPayResultVo
));
if
(
isFree
&&
preParam
.
getPayType
().
equals
(
"huifu"
))
{
// SyncOrderParam syncOrderParam = SyncOrderParam.getNew();
// syncOrderParam.setOrderCode(preParam.getOrderMasterCode());
// syncOrderParam.setPaymentAt(DateUtil.format(LocalDateTime.now(), DateUtil.Formatter.yyyyMMddHHmmss));
// syncOrderParam.setCode(payCode);
// syncOrderParam.setPrice(preParam.getPriceActual());
// syncOrderParam.setPaymentId("FREE_PAYMENT_ID");
// syncOrderParam.setPaymentType(null);
// syncOrderParam.setStatus(1);
// syncOrder(syncOrderParam);
return
ResponseDto
.
success
(
ntfPayResultVo
);
}
else
if
(
isFree
)
{
GoblinNtfOrderPayCallbackParam
ntfOrderPayCallbackParam
=
GoblinNtfOrderPayCallbackParam
.
getNew
();
ntfOrderPayCallbackParam
.
setOrderCode
(
preParam
.
getOrderMasterCode
());
ntfOrderPayCallbackParam
.
setPaymentAt
(
DateUtil
.
format
(
LocalDateTime
.
now
(),
DateUtil
.
Formatter
.
yyyyMMddHHmmss
));
ntfOrderPayCallbackParam
.
setCode
(
payCode
);
ntfOrderPayCallbackParam
.
setPrice
(
preParam
.
getPriceActual
());
ntfOrderPayCallbackParam
.
setPaymentId
(
"FREE_PAYMENT_ID"
);
ntfOrderPayCallbackParam
.
setPaymentType
(
null
);
ntfOrderPayCallbackParam
.
setStatus
(
1
);
syncOrder
(
ntfOrderPayCallbackParam
);
return
ResponseDto
.
success
(
ntfPayResultVo
);
}
else
{
return
ResponseDto
.
success
(
ntfPayResultVo
);
}
}
@Override
public
ResponseDto
<
GoblinNtfPayResultVo
>
payAgain
(
GoblinNtfOrderPayAgainParam
param
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
LocalDateTime
now
=
LocalDateTime
.
now
();
//检查订单时间 是否关闭
GoblinStoreOrderVo
storeOrderVo
=
redisUtils
.
getGoblinOrder
(
param
.
getOrderId
());
if
(
storeOrderVo
==
null
)
{
return
ResponseDto
.
failure
(
"订单不存在"
);
}
if
(!
storeOrderVo
.
getUserId
().
equals
(
uid
))
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20003"
));
}
if
(
storeOrderVo
.
getStatus
()
!=
GoblinStatusConst
.
Status
.
ORDER_STATUS_0
.
getValue
())
{
return
ResponseDto
.
failure
(
"订单无法支付"
);
//订单
}
MultiValueMap
<
String
,
String
>
header
=
CollectionUtil
.
linkedMultiValueMapStringString
();
header
.
add
(
"Accept"
,
"application/json;charset=UTF-8"
);
String
returnCheckData
=
HttpUtil
.
get
(
checkUrl
+
"?code="
+
storeOrderVo
.
getPayCode
(),
null
,
header
);
ResponseDto
<
GoblinPayInnerResultVo
>
checkVo
=
JsonUtils
.
fromJson
(
returnCheckData
,
new
TypeReference
<
ResponseDto
<
GoblinPayInnerResultVo
>>()
{
});
if
(
checkVo
.
getData
().
getStatus
()
==
1
)
{
return
ResponseDto
.
failure
(
"订单已支付"
);
}
BigDecimal
price
=
BigDecimal
.
ZERO
;
String
[]
orderIds
=
redisUtils
.
getMasterCode
(
storeOrderVo
.
getMasterOrderCode
());
for
(
String
orderId
:
orderIds
)
{
GoblinStoreOrderVo
orderVo
=
redisUtils
.
getGoblinOrder
(
orderId
);
price
=
price
.
add
(
orderVo
.
getPriceActual
());
}
GoblinNtfPayResultVo
ntfPayResultVo
=
GoblinNtfPayResultVo
.
getNew
();
// if (!storeOrderVo.getPayType().equals("FREE") && storeOrderVo.getPayType().equals(param.getPayType()) && storeOrderVo.getDeviceFrom().equals(param.getDeviceFrom())) {
// payInnerResultVo.setCode(checkVo.getData().getCode());
// payInnerResultVo.setOrderCode(checkVo.getData().getOrderCode());
// payInnerResultVo.setPayData(checkVo.getData().getPayData());
// payInnerResultVo.setOrderId(param.getOrderId());
// payInnerResultVo.setPayType(param.getPayType());
// payInnerResultVo.setPrice(storeOrderVo.getPriceActual());
// storeOrderVo.setPayCode(payInnerResultVo.getCode());
// payInnerResultVo.setShowUrl(param.getShowUrl() + storeOrderVo.getOrderId());
// payInnerResultVo.setReturnUrl(param.getReturnUrl() + storeOrderVo.getOrderId());
// log.info(UserPathDto.setData("再次支付[原支付方式]", param, payInnerResultVo));
// } else
if
(!
storeOrderVo
.
getPayType
().
equals
(
"FREE"
))
{
// 调用支付
LinkedMultiValueMap
<
String
,
String
>
httpData
=
CollectionUtil
.
linkedMultiValueMapStringString
();
httpData
.
add
(
"type"
,
"PRODUCT"
);
httpData
.
add
(
"price"
,
price
.
toString
());
httpData
.
add
(
"name"
,
redisUtils
.
getStoreInfoVo
(
storeOrderVo
.
getStoreId
()).
getStoreName
());
httpData
.
add
(
"detail"
,
"查找最初订单"
);
httpData
.
add
(
"orderCode"
,
storeOrderVo
.
getMasterOrderCode
());
// httpData.add("orderId", storeOrderVo.getOrderId());
httpData
.
add
(
"clientIp"
,
storeOrderVo
.
getIpAddress
());
httpData
.
add
(
"notifyUrl"
,
synUrl
);
httpData
.
add
(
"createDate"
,
storeOrderVo
.
getCreatedAt
());
httpData
.
add
(
"expireTime"
,
storeOrderVo
.
getPayCountdownMinute
().
toString
());
httpData
.
add
(
"payType"
,
param
.
getPayType
());
httpData
.
add
(
"deviceFrom"
,
param
.
getDeviceFrom
());
if
(
param
.
getDeviceFrom
().
equals
(
"js"
)
||
param
.
getDeviceFrom
().
equals
(
"applet"
))
{
httpData
.
add
(
"openId"
,
param
.
getOpenId
());
}
// if (param.getPayType().equals("alipay") && param.getDeviceFrom().equals("wap")) {
// httpData.add("showUrl", param.getShowUrl() + storeOrderVo.getMasterOrderCode());
// httpData.add("returnUrl", param.getReturnUrl() + storeOrderVo.getMasterOrderCode());
// }
// if (param.getPayType().equals("douyinpay")) {
// httpData.add("showUrl", param.getShowUrl() + storeOrderVo.getMasterOrderCode());
// httpData.add("returnUrl", param.getReturnUrl() + storeOrderVo.getMasterOrderCode());
// }
// if (param.getPayType().equals("unionpay")) {
// httpData.add("returnUrl", param.getReturnUrl() + storeOrderVo.getMasterOrderCode());
// }
httpData
.
add
(
"showUrl"
,
param
.
getShowUrl
()
+
storeOrderVo
.
getMasterOrderCode
());
httpData
.
add
(
"returnUrl"
,
param
.
getReturnUrl
()
+
storeOrderVo
.
getMasterOrderCode
());
String
returnData
=
HttpUtil
.
post
(
payUrl
,
httpData
);
log
.
debug
(
"调用 DRAGON 结果 = "
+
returnData
);
ResponseDto
<
GoblinPayInnerResultVo
>
dto
=
JsonUtils
.
fromJson
(
returnData
,
new
TypeReference
<
ResponseDto
<
GoblinPayInnerResultVo
>>()
{
});
ntfPayResultVo
.
setCode
(
dto
.
getData
().
getCode
());
ntfPayResultVo
.
setOrderCode
(
storeOrderVo
.
getMasterOrderCode
());
ntfPayResultVo
.
setOrderMasterCode
(
storeOrderVo
.
getMasterOrderCode
());
ntfPayResultVo
.
setPayData
(
dto
.
getData
().
getPayData
());
ntfPayResultVo
.
setOrderId
(
storeOrderVo
.
getMasterOrderCode
());
ntfPayResultVo
.
setPayType
(
param
.
getPayType
());
ntfPayResultVo
.
setPrice
(
price
);
ntfPayResultVo
.
setShowUrl
(
param
.
getShowUrl
()
+
storeOrderVo
.
getMasterOrderCode
());
ntfPayResultVo
.
setReturnUrl
(
param
.
getReturnUrl
()
+
storeOrderVo
.
getMasterOrderCode
());
//redis
storeOrderVo
.
setPayType
(
param
.
getPayType
());
storeOrderVo
.
setDeviceFrom
(
param
.
getDeviceFrom
());
storeOrderVo
.
setPayCode
(
ntfPayResultVo
.
getCode
());
redisUtils
.
setGoblinOrder
(
storeOrderVo
.
getOrderId
(),
storeOrderVo
);
//mongo
mongoUtils
.
updateGoblinStoreOrderVo
(
storeOrderVo
.
getOrderId
(),
storeOrderVo
);
//mysql
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
GOBLIN_ORDER_AGAIN
.
getKey
(),
SqlMapping
.
get
(
"goblin_order.pay.again"
,
param
.
getPayType
(),
param
.
getDeviceFrom
(),
ntfPayResultVo
.
getCode
(),
param
.
getOrderId
(),
now
,
now
));
log
.
info
(
UserPathDto
.
setData
(
"再次支付[新支付方式]"
,
param
,
ntfPayResultVo
));
}
return
ResponseDto
.
success
(
ntfPayResultVo
);
}
@Override
public
ResponseDto
<
Integer
>
checkOrderResult
(
String
orderId
)
{
String
uid
=
CurrentUtil
.
getCurrentUid
();
GoblinStoreOrderVo
storeOrderVo
=
redisUtils
.
getGoblinOrder
(
orderId
);
if
(
storeOrderVo
==
null
)
{
return
ResponseDto
.
failure
(
"订单不存在"
);
}
else
{
if
(!
storeOrderVo
.
getUserId
().
equals
(
uid
))
{
return
null
;
}
String
returnCheckData
=
HttpUtil
.
get
(
checkUrl
+
"?code="
+
storeOrderVo
.
getPayCode
(),
null
);
ResponseDto
<
GoblinNtfOrderPayCallbackParam
>
syncOrderDtoParam
=
JsonUtils
.
fromJson
(
returnCheckData
,
new
TypeReference
<
ResponseDto
<
GoblinNtfOrderPayCallbackParam
>>()
{
});
if
(
syncOrderDtoParam
.
getData
().
getStatus
()
==
1
)
{
//处理订单
syncOrder
(
syncOrderDtoParam
.
getData
());
return
ResponseDto
.
success
(
1
);
}
else
{
return
ResponseDto
.
success
(
0
);
}
}
}
@Override
public
String
syncOrder
(
GoblinNtfOrderPayCallbackParam
syncOrderParam
)
{
log
.
debug
(
"SYNC PARAM = "
+
syncOrderParam
.
toString
());
//支付时间
LocalDateTime
now
=
LocalDateTime
.
now
();
String
[]
array
=
redisUtils
.
getMasterCode
(
syncOrderParam
.
getOrderCode
());
String
uid
;
BigDecimal
priceActual
=
BigDecimal
.
ZERO
;
for
(
String
orderId
:
array
)
{
GoblinStoreOrderVo
orderVo
=
redisUtils
.
getGoblinOrder
(
orderId
);
if
(
orderVo
==
null
)
{
log
.
error
(
"订单号:"
+
syncOrderParam
.
getOrderCode
()
+
" 订单不存在"
);
return
"fail"
;
//订单不存在
}
if
(
orderVo
.
getStatus
()
==
GoblinStatusConst
.
Status
.
ORDER_STATUS_2
.
getValue
())
{
if
(
orderVo
.
getPayCode
().
equals
(
syncOrderParam
.
getCode
()))
{
log
.
error
(
"订单号:"
+
syncOrderParam
.
getOrderCode
()
+
" 重复支付"
);
return
"fail"
;
//重复支付
}
}
// if (orderVo.getPriceActual().compareTo(syncOrderParam.getPrice()) != 0) {
// log.error("订单号:" + syncOrderParam.getOrderCode() + " 价格不符");
// return "fail";//价格不符
// }
priceActual
=
priceActual
.
add
(
orderVo
.
getPriceActual
());
uid
=
orderVo
.
getUserId
();
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
LinkedList
<
Object
[]>
sqlDataOrder
=
CollectionUtil
.
linkedListObjectArr
();
LinkedList
<
Object
[]>
sqlDataSku
=
CollectionUtil
.
linkedListObjectArr
();
GoblinStoreOrder
storeOrder
=
GoblinStoreOrder
.
getNew
();
if
(
orderVo
.
getStatus
()
==
GoblinStatusConst
.
Status
.
ORDER_STATUS_5
.
getValue
()
&&
syncOrderParam
.
getStatus
().
equals
(
1
))
{
log
.
error
(
"订单号为 {} 的订单超时支付"
,
syncOrderParam
.
getOrderCode
());
// 商铺退款逻辑
orderUtils
.
refundOrderSku
(
orderId
,
syncOrderParam
.
getPaymentId
(),
syncOrderParam
.
getPaymentType
());
// orderVo.setStatus(GoblinStatusConst.OrderStatus.ORDER_STATUS_61.getValue());
// redisUtils.setGoblinOrder(orderVo.getOrderId(),orderVo);
}
else
if
((
orderVo
.
getStatus
()
==
GoblinStatusConst
.
Status
.
ORDER_STATUS_6
.
getValue
()
||
orderVo
.
getStatus
()
==
GoblinStatusConst
.
Status
.
ORDER_STATUS_7
.
getValue
())
&&
syncOrderParam
.
getStatus
().
equals
(
1
))
{
log
.
error
(
"订单号为 {} 的订单正在退款 或者已退款"
,
syncOrderParam
.
getOrderCode
());
}
else
if
(
syncOrderParam
.
getStatus
().
equals
(
1
))
{
log
.
error
(
"订单号为 {} 的订单正常流程"
,
syncOrderParam
.
getOrderCode
());
storeOrder
.
setPaymentType
(
syncOrderParam
.
getPaymentType
());
storeOrder
.
setPaymentId
(
syncOrderParam
.
getPaymentId
());
storeOrder
.
setPayCode
(
syncOrderParam
.
getCode
());
LocalDateTime
payTime
=
LocalDateTime
.
parse
(
syncOrderParam
.
getPaymentAt
(),
DTF_YMD_HMS
);
storeOrder
.
setPayTime
(
payTime
);
if
(
orderVo
.
getWriteOffCode
().
equals
(
"EMPTY"
))
{
storeOrder
.
setWriteOffCode
(
IDGenerator
.
getWriteOffCode
());
}
else
{
storeOrder
.
setWriteOffCode
(
""
);
}
storeOrder
.
setStatus
(
GoblinStatusConst
.
Status
.
ORDER_STATUS_2
.
getValue
());
storeOrder
.
setUpdatedAt
(
now
);
sqls
.
add
(
SqlMapping
.
get
(
"goblin_order.pay.order"
));
sqlDataOrder
.
add
(
new
Object
[]{
storeOrder
.
getPaymentType
(),
storeOrder
.
getPaymentId
(),
storeOrder
.
getPayCode
(),
storeOrder
.
getPayTime
(),
storeOrder
.
getWriteOffCode
(),
storeOrder
.
getStatus
(),
storeOrder
.
getUpdatedAt
(),
orderId
,
now
,
now
});
sqls
.
add
(
SqlMapping
.
get
(
"goblin_order.pay.sku"
));
List
<
String
>
skuList
=
orderVo
.
getOrderSkuVoIds
();
for
(
String
orderSkuVoIds
:
skuList
)
{
GoblinOrderSkuVo
orderSkuVo
=
redisUtils
.
getGoblinOrderSkuVo
(
orderSkuVoIds
);
//增加销量
log
.
debug
(
"增加销量 spuId="
+
orderSkuVo
.
getSpuId
()
+
",skuId="
+
orderSkuVo
.
getSkuId
());
redisUtils
.
incrSkuSaleCount
(
orderSkuVo
.
getSpuId
(),
orderSkuVo
.
getSkuId
(),
orderSkuVo
.
getNum
());
orderSkuVo
.
setStatus
(
GoblinStatusConst
.
Status
.
ORDER_STATUS_2
.
getValue
());
//redis
redisUtils
.
setGoblinOrderSku
(
orderSkuVo
.
getOrderSkuId
(),
orderSkuVo
);
//mongo
mongoUtils
.
updateGoblinOrderSkuVo
(
orderSkuVo
.
getOrderSkuId
(),
orderSkuVo
);
//mongo 添加操作日志
GoblinOrderLogVo
logVo
=
GoblinOrderLogVo
.
getNew
();
logVo
.
setOrderId
(
orderVo
.
getOrderId
());
logVo
.
setOrderCode
(
orderVo
.
getOrderCode
());
logVo
.
setPayCode
(
orderVo
.
getPayCode
());
logVo
.
setStoreId
(
orderVo
.
getStoreId
());
if
(
orderSkuVo
.
getSkuId
().
indexOf
(
GoblinStatusConst
.
MarketPreStatus
.
MARKET_PRE_ZHENGZAI
.
getValue
())
>
0
)
{
logVo
.
setOrderType
(
"zhengzai"
);
}
else
{
logVo
.
setOrderType
(
"order"
);
}
logVo
.
setSpuId
(
orderSkuVo
.
getSpuId
());
logVo
.
setSkuId
(
orderSkuVo
.
getSkuId
());
logVo
.
setSkuPriceActual
(
orderSkuVo
.
getSkuPriceActual
().
multiply
(
new
BigDecimal
(
100
)).
longValue
());
logVo
.
setStatus
(
GoblinStatusConst
.
Status
.
ORDER_LOG_STATUS_11
.
getValue
());
logVo
.
setRemark
(
GoblinStatusConst
.
Status
.
ORDER_LOG_STATUS_11
.
getDesc
());
logVo
.
setOperationId
(
uid
);
logVo
.
setOperationName
(
orderVo
.
getUserName
());
logVo
.
setOperationType
(
GoblinStatusConst
.
Type
.
OPERATION_TYPE_1
.
getValue
());
logVo
.
setCreatedAt
(
LocalDateTime
.
now
());
mongoUtils
.
insertGoblinOrderLogVo
(
logVo
);
//mysql
sqlDataSku
.
add
(
new
Object
[]{
GoblinStatusConst
.
Status
.
ORDER_STATUS_2
.
getValue
(),
now
,
orderSkuVo
.
getOrderSkuId
(),
now
,
now
});
}
//redis
orderVo
.
setPayCode
(
storeOrder
.
getPayCode
());
orderVo
.
setPayTime
(
syncOrderParam
.
getPaymentAt
());
orderVo
.
setWriteOffCode
(
storeOrder
.
getWriteOffCode
());
orderVo
.
setStatus
(
storeOrder
.
getStatus
());
orderVo
.
setPaymentId
(
syncOrderParam
.
getPaymentId
());
orderVo
.
setPaymentType
(
syncOrderParam
.
getPaymentType
());
orderVo
.
setOrderSkuVoIds
(
skuList
);
redisUtils
.
setGoblinOrder
(
orderId
,
orderVo
);
redisUtils
.
setOffCode
(
orderVo
.
getWriteOffCode
(),
orderVo
.
getMasterOrderCode
());
//mongo
mongoUtils
.
updateGoblinStoreOrderVo
(
orderId
,
orderVo
);
//mysql
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
GOBLIN_ORDER_CREATE_PAY
.
getKey
(),
SqlMapping
.
gets
(
sqls
,
sqlDataOrder
,
sqlDataSku
));
}
//发短信
// SmsEnum.ADTemplate adTemplate = null;
// if (orderTicketData.getGetTicketType().equals("express")) {
// adTemplate = SmsEnum.ADTemplate.SMS_225995308;
// } else if (orderTicketData.getGetTicketType().equals("electronic")) {
// adTemplate = ticketData.getIsShowCode() == 1 ? SmsEnum.ADTemplate.SMS_225995308 : SmsEnum.ADTemplate.SMS_225995308;
// }
//
// if (null != adTemplate) {
// queueUtils.sendMsgByRedis(MQConst.KylinQueue.SMS_NOTICE.getKey(),
// SmsMessage.builder().setPhone(orderTicketData.getUserMobile())
// .setSignName(SmsEnum.ADSignName.M02.getVal())
// .setTemplateCode(adTemplate.name())
// .setTemplateParam("name", orderTicketData.getPerformanceTitle())
// .setTemplateParam("time", time1 + " " + time2).toJson()
// );
// }
//加分
if
(
orderUtils
.
noZhengzaiOrder
(
uid
))
{
orderUtils
.
doTask
(
uid
,
priceActual
);
}
}
return
"success"
;
}
@Override
public
String
refundSyncOrder
(
GoblinNtfOrderRefundCallbackParam
refundCallbackParam
)
{
LocalDateTime
now
=
LocalDateTime
.
now
();
String
nowStr
=
DateUtil
.
getNowTime
();
log
.
info
(
"refundCallback订单退款回调参数: [RefundCallbackParam={}]"
,
refundCallbackParam
);
GoblinBackOrderVo
backOrderVo
=
mongoUtils
.
getGoblinBackOrderVoByBackCode
(
refundCallbackParam
.
getOrderRefundCode
());
if
(
backOrderVo
==
null
)
{
log
.
info
(
"refundCallback: 退款订单查询失败,编号{}"
,
refundCallbackParam
.
getOrderRefundCode
());
return
"fail"
;
}
if
(
backOrderVo
.
getStatus
()
==
GoblinStatusConst
.
Status
.
ORDER_LOG_STATUS_20
.
getValue
()
||
backOrderVo
.
getStatus
()
==
GoblinStatusConst
.
Status
.
ORDER_LOG_STATUS_201
.
getValue
())
{
log
.
info
(
"refundCallback: 退款订单已取消,编号{}"
,
refundCallbackParam
.
getOrderRefundCode
());
return
"fail"
;
}
if
(
backOrderVo
.
getStatus
()
==
GoblinStatusConst
.
Status
.
ORDER_LOG_STATUS_22
.
getValue
())
{
log
.
info
(
"refundCallback: 退款订单已完成,编号{}"
,
refundCallbackParam
.
getOrderRefundCode
());
return
"success"
;
}
Integer
status
=
refundCallbackParam
.
getStatus
();
if
(
1
==
status
&&
(
backOrderVo
.
getStatus
()
==
0
||
backOrderVo
.
getStatus
()
==
10
))
{
// 退款成功
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
LinkedList
<
Object
[]>
sqlsOrder
=
CollectionUtil
.
linkedListObjectArr
();
LinkedList
<
Object
[]>
sqlsOrderSku
=
CollectionUtil
.
linkedListObjectArr
();
LinkedList
<
Object
[]>
sqlsBackOrder
=
CollectionUtil
.
linkedListObjectArr
();
sqls
.
add
(
SqlMapping
.
get
(
"goblin_order.store.refundPrice"
));
sqls
.
add
(
SqlMapping
.
get
(
"goblin_order.store.refundSkuPrice"
));
sqls
.
add
(
SqlMapping
.
get
(
"goblin_order.store.refundBackOrder"
));
String
orderId
=
backOrderVo
.
getOrderId
();
List
<
GoblinBackOrderSkuVo
>
backOrderSkuVos
=
backOrderVo
.
getBackOrderSkuVos
();
GoblinStoreOrderVo
orderVo
=
redisUtils
.
getGoblinOrder
(
orderId
);
orderVo
.
setPriceRefund
(
orderVo
.
getPriceRefund
()
==
null
?
BigDecimal
.
ZERO
:
orderVo
.
getPriceRefund
().
add
(
refundCallbackParam
.
getRefundPrice
()));
if
(
orderVo
.
getPriceRefund
().
compareTo
(
orderVo
.
getPriceActual
())
>=
0
)
{
//整单退款 退券
orderVo
.
setStatus
(
GoblinStatusConst
.
Status
.
ORDER_STATUS_6
.
getValue
());
if
(!(
orderVo
.
getUcouponId
()
==
null
||
orderVo
.
getUcouponId
().
equals
(
""
)))
{
orderUtils
.
backCoupon
(
orderVo
.
getUcouponId
(),
orderVo
.
getUserId
());
}
if
(!(
orderVo
.
getStoreCouponId
()
==
null
||
orderVo
.
getStoreCouponId
().
equals
(
""
)))
{
List
<
BackCouponParam
>
params
=
ObjectUtil
.
getBackCouponParam
();
BackCouponParam
backCouponParam
=
BackCouponParam
.
getNew
();
backCouponParam
.
setuCouponIds
(
orderVo
.
getStoreCouponId
());
backCouponParam
.
setUid
(
orderVo
.
getUserId
());
params
.
add
(
backCouponParam
);
orderUtils
.
backStoreCoupon
(
params
);
}
}
backOrderVo
.
setStatus
(
GoblinStatusConst
.
Status
.
ORDER_BACK_STATUS_2
.
getValue
());
backOrderVo
.
setRefundAt
(
nowStr
);
for
(
GoblinBackOrderSkuVo
backOrderSkuVo
:
backOrderSkuVos
)
{
GoblinOrderSkuVo
orderSkuVo
=
redisUtils
.
getGoblinOrderSkuVo
(
backOrderSkuVo
.
getOrderSkuId
());
BigDecimal
refundSkuPrice
=
backOrderSkuVo
.
getRefundPrice
();
orderSkuVo
.
setPriceRefund
(
orderSkuVo
.
getPriceRefund
()
==
null
?
refundSkuPrice
:
orderSkuVo
.
getPriceRefund
().
add
(
refundSkuPrice
));
if
(
orderSkuVo
.
getPriceRefund
().
compareTo
(
orderSkuVo
.
getSkuPriceActual
())
>=
0
)
{
orderSkuVo
.
setStatus
(
GoblinStatusConst
.
Status
.
ORDER_STATUS_6
.
getValue
());
String
pre
=
GoblinStatusConst
.
MarketPreStatus
.
getPre
(
orderSkuVo
.
getSkuId
());
String
skuId
=
orderSkuVo
.
getSkuId
();
redisUtils
.
incrSkuStock
(
pre
,
skuId
,
orderSkuVo
.
getNum
());
redisUtils
.
decrSkuCountByUid
(
orderVo
.
getUserId
(),
skuId
,
orderSkuVo
.
getNum
());
}
redisUtils
.
setGoblinOrderSku
(
backOrderSkuVo
.
getOrderSkuId
(),
orderSkuVo
);
mongoUtils
.
updateGoblinOrderSkuVo
(
backOrderSkuVo
.
getOrderSkuId
(),
orderSkuVo
);
sqlsOrderSku
.
add
(
new
Object
[]{
orderSkuVo
.
getPriceRefund
(),
orderSkuVo
.
getStatus
(),
now
,
backOrderSkuVo
.
getOrderSkuId
(),
now
,
now
});
GoblinOrderLogVo
logVo
=
GoblinOrderLogVo
.
getNew
();
logVo
.
setOrderId
(
orderVo
.
getOrderId
());
logVo
.
setOrderCode
(
orderVo
.
getOrderCode
());
logVo
.
setPayCode
(
orderVo
.
getPayCode
());
if
(
orderSkuVo
.
getSkuId
().
indexOf
(
GoblinStatusConst
.
MarketPreStatus
.
MARKET_PRE_ZHENGZAI
.
getValue
())
>
0
)
{
logVo
.
setOrderType
(
"zhengzai"
);
}
else
{
logVo
.
setOrderType
(
"order"
);
}
logVo
.
setStoreId
(
orderVo
.
getStoreId
());
logVo
.
setSpuId
(
orderSkuVo
.
getSpuId
());
logVo
.
setSpuName
(
backOrderSkuVo
.
getSpuName
());
logVo
.
setSkuId
(
backOrderSkuVo
.
getSkuId
());
// if (orderVo.getStatus().equals(GoblinStatusConst.Status.ORDER_STATUS_6.getValue())) {
// refundSkuPrice = refundSkuPrice.add(orderVo.getPriceExpress());
// }
logVo
.
setSkuPriceActual
(
refundSkuPrice
.
multiply
(
BigDecimal
.
valueOf
(
100
)).
negate
().
longValue
());
logVo
.
setStatus
(
GoblinStatusConst
.
Status
.
ORDER_LOG_STATUS_22
.
getValue
());
logVo
.
setRemark
(
"订单退款"
);
logVo
.
setOperationId
(
backOrderVo
.
getUserId
());
logVo
.
setOperationType
(
GoblinStatusConst
.
Type
.
OPERATION_TYPE_2
.
getValue
());
logVo
.
setCreatedAt
(
now
);
mongoUtils
.
insertGoblinOrderLogVo
(
logVo
);
}
//redis
redisUtils
.
setGoblinOrder
(
orderId
,
orderVo
);
redisUtils
.
setBackOrderVo
(
backOrderVo
.
getBackOrderId
(),
backOrderVo
);
//mongo
mongoUtils
.
updateGoblinStoreOrderVo
(
orderId
,
orderVo
);
mongoUtils
.
updateGoblinBackOrderVo
(
backOrderVo
.
getBackOrderId
(),
backOrderVo
);
//mysql
sqlsOrder
.
add
(
new
Object
[]{
orderVo
.
getPriceRefund
(),
orderVo
.
getStatus
(),
now
,
orderId
,
now
,
now
});
sqlsBackOrder
.
add
(
new
Object
[]{
backOrderVo
.
getStatus
(),
now
,
now
,
backOrderVo
.
getBackOrderId
(),
now
,
now
});
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
GOBLIN_STORE_ORDER_OPERA
.
getKey
(),
SqlMapping
.
gets
(
sqls
,
sqlsOrder
,
sqlsOrderSku
,
sqlsBackOrder
));
//减积分
orderUtils
.
desTask
(
orderVo
.
getUserId
(),
backOrderVo
.
getRealBackPrice
());
}
else
if
(
0
==
status
)
{
return
"fail"
;
}
return
"success"
;
}
}
liquidnet-bus-service/liquidnet-service-order/liquidnet-service-order-impl/src/main/java/com/liquidnet/service/order/utils/GoblinNtfOrderUtils.java
0 → 100644
View file @
7c02bbe6
package
com
.
liquidnet
.
service
.
order
.
utils
;
import
com.alibaba.fastjson.JSON
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.liquidnet.commons.lang.util.*
;
import
com.liquidnet.service.base.ErrorMapping
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.base.SqlMapping
;
import
com.liquidnet.service.base.constant.MQConst
;
import
com.liquidnet.service.candy.param.BackCouponParam
;
import
com.liquidnet.service.candy.vo.CandyUseResultVo
;
import
com.liquidnet.service.goblin.constant.GoblinStatusConst
;
import
com.liquidnet.service.goblin.dto.vo.*
;
import
com.liquidnet.service.goblin.entity.GoblinBackOrder
;
import
com.liquidnet.service.goblin.entity.GoblinBackOrderLog
;
import
com.liquidnet.service.goblin.entity.GoblinOrderSku
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.MultiValueMap
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
@Component
@Slf4j
public
class
GoblinNtfOrderUtils
{
@Value
(
"${liquidnet.service.adam.url}"
)
private
String
adamUrl
;
@Value
(
"${liquidnet.service.candy.url}"
)
private
String
candyUrl
;
@Value
(
"${liquidnet.service.stone.url}"
)
private
String
stoneUrl
;
@Value
(
"${liquidnet.service.order.url-pay.goblinRefundUrl}"
)
private
String
synUrl
;
@Value
(
"${liquidnet.service.dragon.urls.refundApply}"
)
private
String
refundApply
;
@Autowired
QueueUtils
queueUtils
;
@Autowired
GoblinRedisUtils
redisUtils
;
@Autowired
GoblinMongoUtils
goblinMongoUtils
;
//判断 数量限购
public
String
judgeOrderLimit
(
String
uid
,
String
skuId
,
int
number
,
int
limitCount
)
{
int
buyCount
=
redisUtils
.
incrSkuCountByUid
(
uid
,
skuId
,
number
);
if
(
buyCount
>
limitCount
)
{
// redisUtils.decrSkuCountByUid(uid, skuId, number);
return
"已超出限购数量"
;
}
else
{
return
""
;
}
}
//判断指定人群购买
public
Boolean
judgeOrderRose
(
Boolean
isMember
,
String
skuId
,
String
mobile
,
int
buyFactor
)
{
Boolean
result
=
false
;
switch
(
buyFactor
)
{
case
0
:
result
=
true
;
break
;
case
1
:
result
=
isMember
;
break
;
case
2
:
result
=
redisUtils
.
getSkuCanBuyByUid
(
mobile
,
skuId
);
break
;
}
return
result
;
}
/**
* 使用优惠券
*
* @param uCouponId 券id
* @param content 消费内容
* @param totalPrice 订单总价
* @return
*/
public
HashMap
<
String
,
Object
>
useCoupon
(
String
uCouponId
,
String
content
,
BigDecimal
totalPrice
,
String
spuId
,
String
uid
,
List
<
GoblinOrderSku
>
goblinOrderSkuList
)
{
HashMap
<
String
,
Object
>
hashMap
=
CollectionUtil
.
mapStringObject
();
try
{
MultiValueMap
<
String
,
String
>
params
=
CollectionUtil
.
linkedMultiValueMapStringString
();
params
.
add
(
"uCouponId"
,
uCouponId
);
params
.
add
(
"content"
,
content
);
params
.
add
(
"totalPrice"
,
totalPrice
.
toString
());
params
.
add
(
"goodId"
,
spuId
);
params
.
add
(
"performanceId"
,
"null"
);
params
.
add
(
"timeId"
,
"null"
);
params
.
add
(
"ticketId"
,
"null"
);
params
.
add
(
"uid"
,
uid
);
MultiValueMap
<
String
,
String
>
header
=
CollectionUtil
.
linkedMultiValueMapStringString
();
header
.
add
(
"Authorization"
,
"Bearer "
+
CurrentUtil
.
getToken
());
header
.
add
(
"Accept"
,
"application/json;charset=UTF-8"
);
log
.
debug
(
"url="
+
candyUrl
+
"/candy-coupon/use"
);
String
returnData
=
HttpUtil
.
post
(
candyUrl
+
"/candy-coupon/use"
,
params
,
header
);
ResponseDto
<
CandyUseResultVo
>
innerReturnVo
=
JsonUtils
.
fromJson
(
returnData
,
new
TypeReference
<
ResponseDto
<
CandyUseResultVo
>>()
{
});
CandyUseResultVo
candyUseResultVo
=
innerReturnVo
.
getData
();
Integer
type
=
candyUseResultVo
.
getCouType
();
List
<
String
>
targetList
=
candyUseResultVo
.
getTargetIds
();
BigDecimal
fullValue
=
candyUseResultVo
.
getFullValue
();
BigDecimal
value
=
candyUseResultVo
.
getValue
();
BigDecimal
voucher
=
BigDecimal
.
ZERO
;
BigDecimal
targetPrice
=
BigDecimal
.
ZERO
;
switch
(
type
)
{
case
-
1
:
voucher
=
BigDecimal
.
valueOf
(-
1
);
break
;
case
1
:
if
(
targetList
.
size
()
==
0
)
{
targetPrice
=
totalPrice
;
}
else
{
for
(
String
targetId
:
targetList
)
{
for
(
GoblinOrderSku
skuOrderVo
:
goblinOrderSkuList
)
{
String
orderVoSpuId
=
skuOrderVo
.
getSpuId
();
String
pre
=
GoblinStatusConst
.
MarketPreStatus
.
getPre
(
orderVoSpuId
);
if
(
pre
!=
null
)
{
orderVoSpuId
=
orderVoSpuId
.
split
(
pre
)[
0
];
}
if
(
targetId
.
equals
(
orderVoSpuId
))
{
targetPrice
=
targetPrice
.
add
(
skuOrderVo
.
getSkuPriceActual
());
}
}
}
}
if
(
targetPrice
.
compareTo
(
value
)
>=
0
)
{
voucher
=
voucher
.
add
(
value
);
}
else
{
voucher
=
voucher
.
add
(
targetPrice
);
}
break
;
case
2
:
//满减
if
(
targetList
.
size
()
==
0
)
{
targetPrice
=
totalPrice
;
}
else
{
for
(
String
targetId
:
targetList
)
{
for
(
GoblinOrderSku
skuOrderVo
:
goblinOrderSkuList
)
{
String
orderVoSpuId
=
skuOrderVo
.
getSpuId
();
String
pre
=
GoblinStatusConst
.
MarketPreStatus
.
getPre
(
orderVoSpuId
);
if
(
pre
!=
null
)
{
orderVoSpuId
=
orderVoSpuId
.
split
(
pre
)[
0
];
}
if
(
targetId
.
equals
(
orderVoSpuId
))
{
targetPrice
=
targetPrice
.
add
(
skuOrderVo
.
getSkuPriceActual
());
}
}
}
}
if
(
fullValue
.
compareTo
(
targetPrice
)
<=
0
)
{
voucher
=
voucher
.
add
(
value
);
}
else
{
backCoupon
(
uCouponId
,
uid
);
hashMap
.
put
(
"type"
,
-
1
);
hashMap
.
put
(
"voucher"
,
BigDecimal
.
ZERO
);
return
hashMap
;
}
break
;
case
3
:
voucher
=
voucher
.
add
(
totalPrice
);
break
;
case
4
:
//折扣
if
(
targetList
.
size
()
==
0
)
{
targetPrice
=
totalPrice
;
}
else
{
for
(
String
targetId
:
targetList
)
{
for
(
GoblinOrderSku
skuOrderVo
:
goblinOrderSkuList
)
{
if
(
targetId
.
equals
(
skuOrderVo
.
getSpuId
()))
{
targetPrice
=
targetPrice
.
add
(
skuOrderVo
.
getSkuPriceActual
());
}
}
}
}
voucher
=
targetPrice
.
subtract
(
targetPrice
.
multiply
(
value
));
break
;
default
:
voucher
=
BigDecimal
.
ZERO
;
break
;
}
hashMap
.
put
(
"spuIds"
,
targetList
);
hashMap
.
put
(
"type"
,
type
);
hashMap
.
put
(
"voucher"
,
voucher
.
setScale
(
2
,
BigDecimal
.
ROUND_HALF_UP
));
return
hashMap
;
}
catch
(
Exception
e
)
{
log
.
error
(
"用券ERROR:{}"
,
e
);
return
null
;
}
}
public
void
backCoupon
(
String
uCouponId
,
String
uid
)
{
try
{
BackCouponParam
param
=
BackCouponParam
.
getNew
();
param
.
setuCouponIds
(
uCouponId
);
param
.
setUid
(
uid
);
MultiValueMap
<
String
,
String
>
header
=
CollectionUtil
.
linkedMultiValueMapStringString
();
header
.
add
(
"Authorization"
,
"Bearer "
+
CurrentUtil
.
getToken
());
header
.
add
(
"Accept"
,
"application/json;charset=UTF-8"
);
ArrayList
<
BackCouponParam
>
params
=
new
ArrayList
();
params
.
add
(
param
);
String
jsonString
=
JSON
.
toJSONString
(
params
);
String
returnData
=
HttpUtil
.
postRaw
(
candyUrl
+
"/candy-coupon/useBack"
,
jsonString
,
header
);
}
catch
(
Exception
e
)
{
log
.
error
(
"回退券ERROR:{}"
,
e
);
}
}
public
void
doTask
(
String
uid
,
BigDecimal
price
)
{
try
{
MultiValueMap
<
String
,
String
>
header
=
CollectionUtil
.
linkedMultiValueMapStringString
();
header
.
add
(
"Accept"
,
"application/json;charset=UTF-8"
);
MultiValueMap
<
String
,
String
>
params
=
CollectionUtil
.
linkedMultiValueMapStringString
();
params
.
add
(
"score"
,
price
.
intValue
()
+
""
);
params
.
add
(
"content"
,
"购买商品:"
);
params
.
add
(
"uid"
,
uid
);
String
resultData
=
HttpUtil
.
post
(
stoneUrl
+
"/user/logs/in2111"
,
params
,
header
);
}
catch
(
Exception
e
)
{
log
.
error
(
"添加积分失败,e:{}"
,
e
);
e
.
printStackTrace
();
}
}
public
void
desTask
(
String
uid
,
BigDecimal
price
)
{
try
{
MultiValueMap
<
String
,
String
>
header
=
CollectionUtil
.
linkedMultiValueMapStringString
();
header
.
add
(
"Accept"
,
"application/json;charset=UTF-8"
);
MultiValueMap
<
String
,
String
>
params
=
CollectionUtil
.
linkedMultiValueMapStringString
();
params
.
add
(
"score"
,
price
.
intValue
()
+
""
);
params
.
add
(
"content"
,
"购买商品:"
);
params
.
add
(
"uid"
,
uid
);
String
resultData
=
HttpUtil
.
post
(
stoneUrl
+
"/user/logs/de2111"
,
params
,
header
);
}
catch
(
Exception
e
)
{
log
.
error
(
"添加积分失败,e:{}"
,
e
);
e
.
printStackTrace
();
}
}
public
GoblinUseResultVo
useStoreCoupon
(
String
ucouponId
,
String
content
,
BigDecimal
totalPrice
,
List
<
GoblinOrderSku
>
goblinOrderSkuList
,
String
uid
)
{
try
{
List
<
GoblinUserCouponVo
>
voList
=
redisUtils
.
getUserCouponVos
(
uid
);
GoblinUseResultVo
returnVo
=
GoblinUseResultVo
.
getNew
();
returnVo
.
setValue
(
BigDecimal
.
ZERO
);
returnVo
.
setCouType
(
"-1"
);
LocalDateTime
now
=
LocalDateTime
.
now
();
List
<
String
>
spuIds
=
CollectionUtil
.
linkedListString
();
for
(
GoblinUserCouponVo
vo
:
voList
)
{
if
(
vo
.
getUcouponId
().
equals
(
ucouponId
)
&&
vo
.
getDuedAt
().
isAfter
(
now
))
{
//判断券状态 和 触发金额
if
((
vo
.
getState
().
equals
(
1
)))
{
if
(
vo
.
getUseScope
().
equals
(
"0"
)
&&
vo
.
getTriggers
().
compareTo
(
totalPrice
)
<=
0
)
{
if
(
vo
.
getType
().
equals
(
"1"
))
{
//代金券
returnVo
.
setValue
(
vo
.
getValFace
());
returnVo
.
setCouType
(
vo
.
getType
());
}
else
if
(
vo
.
getType
().
equals
(
"2"
))
{
//折扣
BigDecimal
tempPrice
=
totalPrice
.
subtract
(
totalPrice
.
multiply
(
vo
.
getDiscount
()).
setScale
(
2
,
BigDecimal
.
ROUND_HALF_UP
));
if
(
tempPrice
.
compareTo
(
vo
.
getDeduction
())
>
0
)
{
tempPrice
=
vo
.
getDeduction
();
}
returnVo
.
setValue
(
tempPrice
);
returnVo
.
setCouType
(
vo
.
getType
());
}
else
if
(
vo
.
getType
().
equals
(
"3"
)
&&
vo
.
getTriggers
().
compareTo
(
totalPrice
)
<=
0
)
{
//满减
returnVo
.
setValue
(
vo
.
getValMinus
());
returnVo
.
setCouType
(
vo
.
getType
());
}
vo
.
setState
(
5
);
vo
.
setUsedFor
(
content
);
goblinMongoUtils
.
changeCouponVos
(
vo
.
getUcouponId
(),
vo
);
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
SQL_COUPON
.
getKey
(),
SqlMapping
.
get
(
"goblin_user_coupon.updateState"
,
vo
.
getState
(),
vo
.
getUsedFor
(),
LocalDateTime
.
now
(),
vo
.
getUcouponId
()));
break
;
}
else
{
spuIds
=
redisUtils
.
getStoreCouponSpuIds
(
vo
.
getStoreCouponId
());
if
(
spuIds
==
null
||
spuIds
.
size
()
==
0
)
{
continue
;
}
//判断是否在可用商品内
BigDecimal
contentPrice
=
BigDecimal
.
ZERO
;
for
(
String
item
:
spuIds
)
{
for
(
GoblinOrderSku
param
:
goblinOrderSkuList
)
{
String
spuId
=
param
.
getSpuId
();
String
pre
=
GoblinStatusConst
.
MarketPreStatus
.
getPre
(
spuId
);
if
(
pre
!=
null
)
{
spuId
=
spuId
.
split
(
pre
)[
0
];
}
if
(
spuId
.
equals
(
item
))
{
contentPrice
=
contentPrice
.
add
(
param
.
getSkuPriceActual
());
}
}
}
if
(
vo
.
getTriggers
().
compareTo
(
contentPrice
)
<=
0
)
{
if
(
vo
.
getType
().
equals
(
"1"
))
{
//代金券
if
(
vo
.
getValFace
().
compareTo
(
contentPrice
)
>
0
)
{
returnVo
.
setValue
(
contentPrice
);
}
else
{
returnVo
.
setValue
(
vo
.
getValFace
());
}
returnVo
.
setCouType
(
vo
.
getType
());
}
else
if
(
vo
.
getType
().
equals
(
"2"
))
{
//折扣
BigDecimal
tempPrice
=
contentPrice
.
subtract
(
contentPrice
.
multiply
(
vo
.
getDiscount
()).
setScale
(
2
,
BigDecimal
.
ROUND_HALF_UP
));
if
(
tempPrice
.
compareTo
(
vo
.
getDeduction
())
>
0
)
{
tempPrice
=
vo
.
getDeduction
();
}
returnVo
.
setValue
(
tempPrice
);
returnVo
.
setCouType
(
vo
.
getType
());
}
else
if
(
vo
.
getType
().
equals
(
"3"
))
{
//满减
if
(
vo
.
getValMinus
().
compareTo
(
contentPrice
)
>
0
)
{
returnVo
.
setValue
(
contentPrice
);
}
else
{
returnVo
.
setValue
(
vo
.
getValMinus
());
}
returnVo
.
setCouType
(
vo
.
getType
());
}
vo
.
setState
(
5
);
vo
.
setUsedFor
(
content
);
goblinMongoUtils
.
changeCouponVos
(
vo
.
getUcouponId
(),
vo
);
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
SQL_COUPON
.
getKey
(),
SqlMapping
.
get
(
"goblin_user_coupon.updateState"
,
vo
.
getState
(),
vo
.
getUsedFor
(),
LocalDateTime
.
now
(),
vo
.
getUcouponId
()));
}
}
}
break
;
}
}
if
(!
returnVo
.
getCouType
().
equals
(
"-1"
))
{
redisUtils
.
setUserCouponVos
(
uid
,
voList
);
}
returnVo
.
setSpuIds
(
spuIds
);
return
returnVo
;
}
catch
(
Exception
e
)
{
log
.
error
(
"店铺券错误:{}"
,
e
);
return
null
;
}
}
public
Boolean
backStoreCoupon
(
List
<
com
.
liquidnet
.
service
.
goblin
.
param
.
BackCouponParam
>
params
)
{
try
{
for
(
com
.
liquidnet
.
service
.
goblin
.
param
.
BackCouponParam
item
:
params
)
{
List
<
GoblinUserCouponVo
>
voList
=
redisUtils
.
getUserCouponVos
(
item
.
getUid
());
for
(
GoblinUserCouponVo
vo
:
voList
)
{
if
(
vo
.
getUcouponId
().
equals
(
item
.
getuCouponIds
()))
{
if
(
LocalDateTime
.
now
().
isBefore
(
vo
.
getDuedAt
()))
{
vo
.
setState
(
1
);
vo
.
setUsedFor
(
""
);
redisUtils
.
setUserCouponVos
(
item
.
getUid
(),
voList
);
goblinMongoUtils
.
changeCouponVos
(
vo
.
getUcouponId
(),
vo
);
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
SQL_COUPON
.
getKey
(),
SqlMapping
.
get
(
"goblin_user_coupon.updateState"
,
vo
.
getState
(),
vo
.
getUsedFor
(),
LocalDateTime
.
now
(),
vo
.
getUcouponId
()));
}
break
;
}
}
}
return
true
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
false
;
}
}
public
Integer
getMember
(
String
uid
)
{
return
redisUtils
.
getMember
(
uid
);
}
//超时支付自动退款
public
Boolean
refundOrderSku
(
String
orderId
,
String
paymentId
,
String
paymentType
)
{
int
autoSize
=
redisUtils
.
getBackOrderByOrderId
(
orderId
).
size
();
if
(
autoSize
>
0
)
{
return
true
;
}
String
uid
=
CurrentUtil
.
getCurrentUid
();
LocalDateTime
now
=
LocalDateTime
.
now
();
String
nowStr
=
DateUtil
.
getNowTime
();
List
<
GoblinBackOrderSkuVo
>
orderSkuVoList
=
ObjectUtil
.
goblinBackOrderSkuVoArrayList
();
GoblinStoreOrderVo
orderVo
=
redisUtils
.
getGoblinOrder
(
orderId
);
BigDecimal
refundPrice
=
BigDecimal
.
ZERO
;
for
(
String
orderSkuIdItem
:
orderVo
.
getOrderSkuVoIds
())
{
GoblinOrderSkuVo
orderSkuVo
=
redisUtils
.
getGoblinOrderSkuVo
(
orderSkuIdItem
);
GoblinBackOrderSkuVo
backOrderSkuVo
=
GoblinBackOrderSkuVo
.
getNew
();
backOrderSkuVo
.
setOrderSkuId
(
orderSkuIdItem
);
backOrderSkuVo
.
setSpuId
(
orderSkuVo
.
getSpuId
());
backOrderSkuVo
.
setSpuName
(
orderSkuVo
.
getSpuName
());
backOrderSkuVo
.
setSkuId
(
orderSkuVo
.
getSkuId
());
backOrderSkuVo
.
setSkuName
(
orderSkuVo
.
getSkuName
());
backOrderSkuVo
.
setRefundPrice
(
orderSkuVo
.
getSkuPriceActual
());
backOrderSkuVo
.
setSkuSpecs
(
orderSkuVo
.
getSkuSpecs
());
backOrderSkuVo
.
setCreatedAt
(
nowStr
);
backOrderSkuVo
.
setSkuPic
(
orderSkuVo
.
getSkuImage
());
orderSkuVoList
.
add
(
backOrderSkuVo
);
refundPrice
=
refundPrice
.
add
(
orderSkuVo
.
getSkuPriceActual
().
subtract
(
orderSkuVo
.
getPriceRefund
()));
}
//记录退款单
String
refundCode
=
IDGenerator
.
storeRefundCode
(
orderVo
.
getMasterOrderCode
());
GoblinBackOrder
goblinBackOrder
=
GoblinBackOrder
.
getNew
();
goblinBackOrder
.
setBackOrderId
(
IDGenerator
.
nextTimeId2
());
goblinBackOrder
.
setBackCode
(
refundCode
);
goblinBackOrder
.
setOrderId
(
orderVo
.
getOrderId
());
goblinBackOrder
.
setOrderCode
(
orderVo
.
getOrderCode
());
goblinBackOrder
.
setStoreId
(
orderVo
.
getStoreId
());
goblinBackOrder
.
setUserId
(
orderVo
.
getUserId
());
// goblinBackOrder.setSkuIdNums(orderSkuId);
goblinBackOrder
.
setType
(
GoblinStatusConst
.
Type
.
BACK_TYPE_1
.
getValue
());
goblinBackOrder
.
setReason
(
GoblinStatusConst
.
Type
.
BACK_REASON_TYPE_10
.
getDesc
());
goblinBackOrder
.
setDescribes
(
"超时支付自动退款"
);
refundPrice
=
refundPrice
.
add
(
orderVo
.
getPriceExpress
());
goblinBackOrder
.
setRealBackPrice
(
refundPrice
);
goblinBackOrder
.
setStatus
(
GoblinStatusConst
.
Status
.
ORDER_BACK_STATUS_0
.
getValue
());
goblinBackOrder
.
setAuditAt
(
now
);
goblinBackOrder
.
setCreatedAt
(
now
);
GoblinBackOrderVo
backOrderVo
=
GoblinBackOrderVo
.
getNew
().
copy
(
goblinBackOrder
);
backOrderVo
.
setCreatedAt
(
nowStr
);
backOrderVo
.
setBackOrderSkuVos
(
orderSkuVoList
);
//添加日志
GoblinBackOrderLog
backOrderLog
=
initBackLog
(
goblinBackOrder
.
getBackOrderId
(),
uid
,
now
);
backOrderLog
.
setStatus
(
GoblinStatusConst
.
Status
.
ORDER_LOG_STATUS_22
.
getValue
());
backOrderLog
.
setOperationType
(
GoblinStatusConst
.
Type
.
OPERATION_TYPE_2
.
getValue
());
backOrderLog
.
setMessage
(
"商户发起[自动退款]:orderId=["
+
orderId
+
"],refundPrice=["
+
refundPrice
+
"],[refundCode="
+
refundCode
+
"]"
);
//调用退款
orderVo
.
setPaymentId
(
paymentId
);
orderVo
.
setPaymentType
(
paymentType
);
String
returnString
=
initRefund
(
orderVo
,
refundPrice
,
refundCode
);
HashMap
hashMapResult
=
JsonUtils
.
fromJson
(
returnString
,
HashMap
.
class
);
Boolean
success
=
(
Boolean
)
hashMapResult
.
get
(
"success"
);
String
message
=
(
String
)
hashMapResult
.
get
(
"message"
);
if
(!
success
)
{
if
(!(
backOrderVo
.
getStatus
()
==
GoblinStatusConst
.
Status
.
ORDER_BACK_STATUS_8
.
getValue
()
||
backOrderVo
.
getStatus
()
==
GoblinStatusConst
.
Status
.
ORDER_BACK_STATUS_2
.
getValue
()))
{
backOrderVo
.
setStatus
(
GoblinStatusConst
.
Status
.
ORDER_BACK_STATUS_10
.
getValue
());
backOrderVo
.
setErrorReason
(
backOrderVo
.
getErrorReason
()
+
",失败原因:"
+
message
);
log
.
error
(
"REFUND DATA = "
+
returnString
);
}
}
//redis
redisUtils
.
setBackOrderVo
(
backOrderVo
.
getBackOrderId
(),
backOrderVo
);
redisUtils
.
addBackOrderByOrderId
(
orderVo
.
getOrderId
(),
backOrderVo
.
getBackOrderId
());
//mongo
goblinMongoUtils
.
insertGoblinBackOrderVo
(
backOrderVo
);
//添加退款
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
GOBLIN_STORE_ORDER_OPERA
.
getKey
(),
SqlMapping
.
get
(
"goblin_order.store.backOrder"
,
goblinBackOrder
.
getBackOrderId
(),
goblinBackOrder
.
getBackCode
(),
goblinBackOrder
.
getOrderId
(),
goblinBackOrder
.
getOrderCode
(),
goblinBackOrder
.
getStoreId
(),
goblinBackOrder
.
getUserId
(),
goblinBackOrder
.
getSkuIdNums
(),
goblinBackOrder
.
getType
(),
goblinBackOrder
.
getReason
(),
goblinBackOrder
.
getDescribes
(),
goblinBackOrder
.
getRealBackPrice
(),
goblinBackOrder
.
getStatus
(),
goblinBackOrder
.
getCreatedAt
(),
goblinBackOrder
.
getAuditAt
(),
goblinBackOrder
.
getErrorReason
()
)
);
//添加日志
queueUtils
.
sendMsgByRedis
(
MQConst
.
GoblinQueue
.
GOBLIN_STORE_ORDER_OPERA
.
getKey
(),
SqlMapping
.
get
(
"goblin_order.store.refundLog"
,
backOrderLog
.
getBackOrderLogId
(),
backOrderLog
.
getBackOrderId
(),
backOrderLog
.
getOperationType
(),
backOrderLog
.
getMessage
(),
backOrderLog
.
getOperationName
(),
backOrderLog
.
getStatus
(),
now
)
);
if
(
success
)
{
return
true
;
}
else
{
log
.
error
(
"退款失败:"
+
message
);
return
false
;
}
}
private
GoblinBackOrderLog
initBackLog
(
String
orderId
,
String
uid
,
LocalDateTime
now
)
{
GoblinBackOrderLog
log
=
GoblinBackOrderLog
.
getNew
();
log
.
setBackOrderId
(
orderId
);
log
.
setOperationName
(
uid
);
log
.
setBackOrderLogId
(
IDGenerator
.
nextTimeId2
());
log
.
setCreatedAt
(
now
);
return
log
;
}
private
String
initRefund
(
GoblinStoreOrderVo
orderVo
,
BigDecimal
price
,
String
refundCode
)
{
MultiValueMap
<
String
,
String
>
params
=
CollectionUtil
.
linkedMultiValueMapStringString
();
params
.
add
(
"code"
,
orderVo
.
getPayCode
());
params
.
add
(
"notifyUrl"
,
synUrl
);
params
.
add
(
"orderCode"
,
orderVo
.
getMasterOrderCode
());
params
.
add
(
"orderRefundCode"
,
refundCode
);
params
.
add
(
"paymentId"
,
orderVo
.
getPaymentId
());
params
.
add
(
"paymentType"
,
orderVo
.
getPaymentType
());
params
.
add
(
"price"
,
String
.
valueOf
(
price
));
BigDecimal
totalPrice
=
BigDecimal
.
ZERO
;
totalPrice
=
totalPrice
.
add
(
price
);
params
.
add
(
"priceTotal"
,
String
.
valueOf
(
totalPrice
));
params
.
add
(
"reason"
,
"超时支付"
);
MultiValueMap
<
String
,
String
>
headers
=
CollectionUtil
.
linkedMultiValueMapStringString
();
headers
.
add
(
"Accept"
,
"application/json;charset=UTF-8"
);
String
returnString
=
HttpUtil
.
post
(
refundApply
,
params
,
headers
);
log
.
debug
(
"REFUND DATA = "
+
returnString
);
return
returnString
;
}
//订单异常处理
public
ResponseDto
<
GoblinNtfPayResultVo
>
orderException
(
List
<
String
>
skuAndPreListAndNumber
,
List
<
String
>
platformCodeList
,
List
<
String
>
storeCodeList
,
String
uid
,
String
message
)
{
long
time3
=
System
.
currentTimeMillis
();
//回顾限购 回滚库存
for
(
String
item
:
skuAndPreListAndNumber
)
{
String
[]
array
=
item
.
split
(
","
);
String
skuId
=
array
[
0
];
String
pre
=
array
[
1
];
int
number
=
Integer
.
parseInt
(
array
[
2
]);
redisUtils
.
incrSkuStock
(
pre
,
skuId
,
number
);
if
(
noZhengzaiOrder
(
uid
))
{
redisUtils
.
decrSkuCountByUid
(
uid
,
skuId
,
number
);
}
}
//回退平台券
for
(
String
platformCode
:
platformCodeList
)
{
backCoupon
(
platformCode
,
uid
);
}
//回退店铺券
List
<
com
.
liquidnet
.
service
.
goblin
.
param
.
BackCouponParam
>
params
=
ObjectUtil
.
getBackCouponParam
();
for
(
String
storeCode
:
storeCodeList
)
{
com
.
liquidnet
.
service
.
goblin
.
param
.
BackCouponParam
backCouponParam
=
com
.
liquidnet
.
service
.
goblin
.
param
.
BackCouponParam
.
getNew
();
backCouponParam
.
setuCouponIds
(
storeCode
);
backCouponParam
.
setUid
(
uid
);
params
.
add
(
backCouponParam
);
}
if
(
params
.
size
()
>
0
)
{
backStoreCoupon
(
params
);
}
log
.
info
(
"回滚逻辑 "
+
(
System
.
currentTimeMillis
()
-
time3
)
+
"ms"
);
if
(
message
==
null
&&
!
message
.
equals
(
""
))
{
return
ResponseDto
.
failure
(
ErrorMapping
.
get
(
"20018"
));
//乱七八糟异常
}
else
{
return
ResponseDto
.
failure
(
message
);
//乱七八糟异常
}
}
public
boolean
noZhengzaiOrder
(
String
uid
)
{
return
!
uid
.
equals
(
"zhengzai"
);
}
}
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