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
d97f0e45
Commit
d97f0e45
authored
Jun 10, 2021
by
hanghang.wang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【虚拟商品】商户618促销一元购买券包活动
parent
91b6c184
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
164 additions
and
4 deletions
+164
-4
order-application-service/src/main/java/cn/freemud/constant/RedisKeyConstant.java
+4
-0
order-application-service/src/main/java/cn/freemud/entities/dto/product/ProductInfo.java
+3
-0
order-application-service/src/main/java/cn/freemud/enums/BizTypeEnum.java
+3
-3
order-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
+12
-1
order-application-service/src/main/java/cn/freemud/manager/BuyProductOnceManager.java
+62
-0
order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
+14
-0
order-application-service/src/main/java/cn/freemud/service/impl/SellCouponOrderServiceImpl.java
+25
-0
order-application-service/src/test/java/cn.freemud/manager/BuyProductOnceTest.java
+41
-0
No files found.
order-application-service/src/main/java/cn/freemud/constant/RedisKeyConstant.java
View file @
d97f0e45
...
@@ -97,6 +97,10 @@ public class RedisKeyConstant {
...
@@ -97,6 +97,10 @@ public class RedisKeyConstant {
public
final
static
String
TAKECODEKEY
=
"takecode:"
;
public
final
static
String
TAKECODEKEY
=
"takecode:"
;
public
final
static
String
USER_BUY_PRODUCT_ONCE
=
"user_buy_product_once:"
;
/**
/**
* cocoNotMadeGoods:商户号:门店号:yyyy-MM-dd
* cocoNotMadeGoods:商户号:门店号:yyyy-MM-dd
*
*
...
...
order-application-service/src/main/java/cn/freemud/entities/dto/product/ProductInfo.java
View file @
d97f0e45
...
@@ -82,6 +82,9 @@ public class ProductInfo {
...
@@ -82,6 +82,9 @@ public class ProductInfo {
//Sku 规格 如果 当前是sku 则有值
//Sku 规格 如果 当前是sku 则有值
private
List
<
SkuSpecValue
>
skuSpecValues
;
private
List
<
SkuSpecValue
>
skuSpecValues
;
//用于标识虚拟商品是否限制购买数量,0-否、1-是
private
Integer
isLimitNumProduct
;
// @NoArgsConstructor
// @NoArgsConstructor
// @Data
// @Data
// public static class SkuProductBean {
// public static class SkuProductBean {
...
...
order-application-service/src/main/java/cn/freemud/enums/BizTypeEnum.java
View file @
d97f0e45
...
@@ -15,9 +15,9 @@ public enum BizTypeEnum {
...
@@ -15,9 +15,9 @@ public enum BizTypeEnum {
}
}
public
static
cn
.
freemud
.
enums
.
BizTypeEnum
getByCode
(
Integer
code
)
{
public
static
cn
.
freemud
.
enums
.
BizTypeEnum
getByCode
(
Integer
code
)
{
for
(
cn
.
freemud
.
enums
.
BizTypeEnum
payType
:
values
())
{
for
(
cn
.
freemud
.
enums
.
BizTypeEnum
bizTypeEnum
:
values
())
{
if
(
payType
.
getBizType
().
equals
(
code
))
{
if
(
bizTypeEnum
.
getBizType
().
equals
(
code
))
{
return
payType
;
return
bizTypeEnum
;
}
}
}
}
return
null
;
return
null
;
...
...
order-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
View file @
d97f0e45
...
@@ -262,10 +262,21 @@ public enum ResponseResult {
...
@@ -262,10 +262,21 @@ public enum ResponseResult {
GROUP_DOES_NOT_EXIST
(
"720"
,
"团不存在"
,
""
),
GROUP_DOES_NOT_EXIST
(
"720"
,
"团不存在"
,
""
),
PARTICIPATE_IN_THE_GROUP_OVERRUN
(
"80022"
,
"参与拼团次数达到上限"
,
""
),
PARTICIPATE_IN_THE_GROUP_OVERRUN
(
"80022"
,
"参与拼团次数达到上限"
,
""
),
SPELL_GROUP_REFUND_ERROR
(
"80015"
,
"取消拼团失败"
,
""
)
SPELL_GROUP_REFUND_ERROR
(
"80015"
,
"取消拼团失败"
,
""
),
/**
* 用于标识虚拟商品是否限制购买数量订单识别状态码 80102 - 80110
*/
USER_BUY_PRODUCT_MORE_THAN_THE_NUMBER
(
"80102"
,
"虚拟商品限制购买数量超过最大购买数"
,
""
),
USER_BUY_PRODUCT_ALREADY
(
"80103"
,
"限购商品购买达到上限"
,
""
),
;
;
private
String
code
;
private
String
code
;
private
String
message
;
private
String
message
;
private
String
enMessage
;
private
String
enMessage
;
...
...
order-application-service/src/main/java/cn/freemud/manager/BuyProductOnceManager.java
0 → 100644
View file @
d97f0e45
package
cn
.
freemud
.
manager
;
import
cn.freemud.constant.RedisKeyConstant
;
import
cn.freemud.entities.dto.product.ProductInfo
;
import
cn.freemud.enums.ResponseResult
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
import
java.util.concurrent.TimeUnit
;
import
java.util.stream.Collectors
;
/**
* @author freemud
* @title: BuyProductOnceManager
* @projectName order-group
* @description: 618活动一元秒杀抢18元券包活动专属manager
* @date 2021/6/10上午9:53
*/
@Component
public
class
BuyProductOnceManager
{
@Autowired
protected
RedisTemplate
redisTemplate
;
//用户限购:每人每单限购一次 / 禁用
public
ResponseResult
checkBuyProductOnce
(
List
<
ProductInfo
>
products
,
String
partnerId
,
String
userId
)
{
List
productsCheck
=
products
.
stream
().
filter
(
product
->
product
.
getIsLimitNumProduct
()
==
1
).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isNotEmpty
(
productsCheck
))
{
//每人每单限购一次
if
(
productsCheck
.
size
()
>
1
)
{
return
ResponseResult
.
USER_BUY_PRODUCT_MORE_THAN_THE_NUMBER
;
}
String
key
=
this
.
getCheckBuyProductOnceKey
(
partnerId
,
userId
);
if
(
redisTemplate
.
hasKey
(
key
))
{
return
ResponseResult
.
USER_BUY_PRODUCT_ALREADY
;
}
redisTemplate
.
opsForValue
().
set
(
key
,
"Y"
);
//活动时间10天,防止redis脏数据,设置过期时间
redisTemplate
.
expire
(
key
,
10
,
TimeUnit
.
DAYS
);
}
return
ResponseResult
.
SUCCESS
;
}
public
String
getCheckBuyProductOnceKey
(
String
partnerId
,
String
userId
)
{
StringBuilder
key
=
new
StringBuilder
(
RedisKeyConstant
.
USER_BUY_PRODUCT_ONCE
)
.
append
(
partnerId
)
.
append
(
":"
)
.
append
(
userId
);
return
key
.
toString
();
}
//清掉key
public
boolean
removeCheckBuyProductOnceKey
(
String
partnerId
,
String
userId
)
{
String
key
=
this
.
getCheckBuyProductOnceKey
(
partnerId
,
userId
);
redisTemplate
.
delete
(
key
);
return
true
;
}
}
order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
View file @
d97f0e45
...
@@ -64,6 +64,7 @@ import cn.freemud.management.entities.dto.response.activity.GroupWorkRefundRespo
...
@@ -64,6 +64,7 @@ import cn.freemud.management.entities.dto.response.activity.GroupWorkRefundRespo
import
cn.freemud.management.entities.dto.response.pay.PayBatchRefundResponse
;
import
cn.freemud.management.entities.dto.response.pay.PayBatchRefundResponse
;
import
cn.freemud.management.service.handle.ActivityHandle
;
import
cn.freemud.management.service.handle.ActivityHandle
;
import
cn.freemud.management.thirdparty.MulitiPaymentClient
;
import
cn.freemud.management.thirdparty.MulitiPaymentClient
;
import
cn.freemud.manager.BuyProductOnceManager
;
import
cn.freemud.manager.OrderTackCodeManager
;
import
cn.freemud.manager.OrderTackCodeManager
;
import
cn.freemud.manager.SpellGroupOrderDataManager
;
import
cn.freemud.manager.SpellGroupOrderDataManager
;
import
cn.freemud.redis.RedisCache
;
import
cn.freemud.redis.RedisCache
;
...
@@ -337,6 +338,9 @@ public class OrderServiceImpl implements Orderservice {
...
@@ -337,6 +338,9 @@ public class OrderServiceImpl implements Orderservice {
@Autowired
@Autowired
private
OrderTackCodeManager
orderTackCodeManager
;
private
OrderTackCodeManager
orderTackCodeManager
;
@Autowired
private
BuyProductOnceManager
buyProductOnceManager
;
@Override
@Override
public
BaseResponse
checkBeforeCreateOrder
(
CheckBeforeCreateOrderRequestVo
requestVo
)
{
public
BaseResponse
checkBeforeCreateOrder
(
CheckBeforeCreateOrderRequestVo
requestVo
)
{
String
trackingNo
=
LogTreadLocal
.
getTrackingNo
();
String
trackingNo
=
LogTreadLocal
.
getTrackingNo
();
...
@@ -1988,6 +1992,8 @@ public class OrderServiceImpl implements Orderservice {
...
@@ -1988,6 +1992,8 @@ public class OrderServiceImpl implements Orderservice {
return
null
;
return
null
;
}
}
@Override
@Override
public
BaseResponse
deleteOrder
(
DeleteOrderVo
deleteOrderVo
)
{
public
BaseResponse
deleteOrder
(
DeleteOrderVo
deleteOrderVo
)
{
if
(
StringUtils
.
isBlank
(
deleteOrderVo
.
getOid
()))
{
if
(
StringUtils
.
isBlank
(
deleteOrderVo
.
getOid
()))
{
...
@@ -2024,6 +2030,10 @@ public class OrderServiceImpl implements Orderservice {
...
@@ -2024,6 +2030,10 @@ public class OrderServiceImpl implements Orderservice {
// }
// }
// TODO: 2019/9/10 删除订单通知
// TODO: 2019/9/10 删除订单通知
backOrdersStatusChange
(
orderBean
.
getOid
(),
orderBean
.
getStatus
());
backOrdersStatusChange
(
orderBean
.
getOid
(),
orderBean
.
getStatus
());
//取消支付时,清理key.此处不做校验是否限制次数的单子,卖券订单直接清理
if
(
Objects
.
equals
(
BizTypeEnum
.
APP_COUPON
.
getBizType
(),
orderBean
.
getBizType
())){
buyProductOnceManager
.
removeCheckBuyProductOnceKey
(
orderBean
.
getCompanyId
(),
orderBean
.
getUserId
());
}
return
ResponseUtil
.
success
();
return
ResponseUtil
.
success
();
}
}
...
@@ -2067,6 +2077,10 @@ public class OrderServiceImpl implements Orderservice {
...
@@ -2067,6 +2077,10 @@ public class OrderServiceImpl implements Orderservice {
}
}
// TODO: 2019/9/10 删除订单通知
// TODO: 2019/9/10 删除订单通知
backOrdersStatusChange
(
orderBean
.
getOid
(),
orderBean
.
getStatus
());
backOrdersStatusChange
(
orderBean
.
getOid
(),
orderBean
.
getStatus
());
//取消支付时,清理key.此处不做校验是否限制次数的单子,卖券订单直接清理
if
(
Objects
.
equals
(
BizTypeEnum
.
APP_COUPON
.
getBizType
(),
orderBean
.
getBizType
())){
buyProductOnceManager
.
removeCheckBuyProductOnceKey
(
orderBean
.
getCompanyId
(),
orderBean
.
getUserId
());
}
return
ResponseUtil
.
success
();
return
ResponseUtil
.
success
();
}
}
...
...
order-application-service/src/main/java/cn/freemud/service/impl/SellCouponOrderServiceImpl.java
View file @
d97f0e45
...
@@ -18,6 +18,7 @@ import cn.freemud.enums.OrderBeanType;
...
@@ -18,6 +18,7 @@ import cn.freemud.enums.OrderBeanType;
import
cn.freemud.enums.ResponseResult
;
import
cn.freemud.enums.ResponseResult
;
import
cn.freemud.enums.UserLoginChannelEnum
;
import
cn.freemud.enums.UserLoginChannelEnum
;
import
cn.freemud.interceptor.ServiceException
;
import
cn.freemud.interceptor.ServiceException
;
import
cn.freemud.manager.BuyProductOnceManager
;
import
cn.freemud.redis.RedisCache
;
import
cn.freemud.redis.RedisCache
;
import
cn.freemud.service.CouponService
;
import
cn.freemud.service.CouponService
;
import
cn.freemud.service.thirdparty.StoreItemClient
;
import
cn.freemud.service.thirdparty.StoreItemClient
;
...
@@ -136,10 +137,17 @@ public class SellCouponOrderServiceImpl {
...
@@ -136,10 +137,17 @@ public class SellCouponOrderServiceImpl {
private
String
supermarketPartnerId
;
private
String
supermarketPartnerId
;
@Value
(
"#{'${buyProductOnce.partnerId}'.split(',')}"
)
private
List
<
String
>
buyProductOncePartnerIds
;
private
final
String
SUCCESS
=
"100"
;
private
final
String
SUCCESS
=
"100"
;
private
final
String
ngsCouponProductId
=
"76161384"
;
private
final
String
ngsCouponProductId
=
"76161384"
;
@Autowired
private
BuyProductOnceManager
buyProductOnceManager
;
/**
/**
* 卖券订单创建
* 卖券订单创建
*/
*/
...
@@ -149,6 +157,7 @@ public class SellCouponOrderServiceImpl {
...
@@ -149,6 +157,7 @@ public class SellCouponOrderServiceImpl {
String
trackingNo
=
LogThreadLocal
.
getTrackingNo
();
String
trackingNo
=
LogThreadLocal
.
getTrackingNo
();
String
partnerId
=
userLoginInfoDto
.
getPartnerId
();
String
partnerId
=
userLoginInfoDto
.
getPartnerId
();
String
storeId
=
requestVo
.
getShopId
();
String
storeId
=
requestVo
.
getShopId
();
String
userId
=
userLoginInfoDto
.
getMemberId
();
//查询门店信息
//查询门店信息
StoreInfoRequest
storeInfoRequest
=
new
StoreInfoRequest
(
partnerId
,
storeId
,
null
);
StoreInfoRequest
storeInfoRequest
=
new
StoreInfoRequest
(
partnerId
,
storeId
,
null
);
StoreResponse
storeResponse
=
storeCenterService
.
getStoreInfo
(
storeInfoRequest
,
trackingNo
);
StoreResponse
storeResponse
=
storeCenterService
.
getStoreInfo
(
storeInfoRequest
,
trackingNo
);
...
@@ -171,6 +180,20 @@ public class SellCouponOrderServiceImpl {
...
@@ -171,6 +180,20 @@ public class SellCouponOrderServiceImpl {
ApiLog
.
info
(
"查询商品信息失败,getProductInfoDto,baseResponse"
,
getProductInfoDto
,
productInfosDto
);
ApiLog
.
info
(
"查询商品信息失败,getProductInfoDto,baseResponse"
,
getProductInfoDto
,
productInfosDto
);
return
ResponseUtil
.
error
(
productInfosDto
.
getCode
().
toString
(),
"商品不存在"
);
return
ResponseUtil
.
error
(
productInfosDto
.
getCode
().
toString
(),
"商品不存在"
);
}
}
//通过商户号配置进阿波罗,识别哪些商户走仅限一次卖券业务 wanghanghang 0610
if
(
buyProductOncePartnerIds
!=
null
&&
buyProductOncePartnerIds
.
contains
(
partnerId
))
{
try
{
ResponseResult
checkRequest
=
buyProductOnceManager
.
checkBuyProductOnce
(
productInfosDto
.
getData
().
getProducts
(),
partnerId
,
userId
);
if
(!
checkRequest
.
equals
(
ResponseResult
.
SUCCESS
)){
return
ResponseUtil
.
error
(
checkRequest
);
}
}
catch
(
Exception
e
){
ApiLog
.
info
(
"校验用户每人每单限购一次异常"
,
getProductInfoDto
,
productInfosDto
);
}
}
// GetProductInfoRequest request = new GetProductInfoRequest();
// GetProductInfoRequest request = new GetProductInfoRequest();
// request.setChannel(requestVo.getMenuType());
// request.setChannel(requestVo.getMenuType());
// request.setPartnerId(partnerId);
// request.setPartnerId(partnerId);
...
@@ -231,6 +254,8 @@ public class SellCouponOrderServiceImpl {
...
@@ -231,6 +254,8 @@ public class SellCouponOrderServiceImpl {
CancelOrderRequest
cancelOrderRequest
=
orderSdkAdapter
.
convent2CancelOrderRequest
(
orderBean
.
getOid
(),
orderBean
.
getCompanyId
(),
CancelOrderRequest
cancelOrderRequest
=
orderSdkAdapter
.
convent2CancelOrderRequest
(
orderBean
.
getOid
(),
orderBean
.
getCompanyId
(),
AfterSalesType
.
SYSTEM_CANCEL
,
"商品库存不足"
,
""
,
null
);
AfterSalesType
.
SYSTEM_CANCEL
,
"商品库存不足"
,
""
,
null
);
BaseOrderResponse
orderResponse
=
orderCenterSdkService
.
orderCancel
(
cancelOrderRequest
);
BaseOrderResponse
orderResponse
=
orderCenterSdkService
.
orderCancel
(
cancelOrderRequest
);
//异常清理掉key
buyProductOnceManager
.
removeCheckBuyProductOnceKey
(
partnerId
,
userId
);
return
ResponseUtil
.
error
(
baseResponse
.
getCode
(),
"商品库存不足"
);
return
ResponseUtil
.
error
(
baseResponse
.
getCode
(),
"商品库存不足"
);
}
}
}
}
...
...
order-application-service/src/test/java/cn.freemud/manager/BuyProductOnceTest.java
0 → 100644
View file @
d97f0e45
package
cn
.
freemud
.
manager
;
import
cn.freemud.entities.dto.product.ProductInfo
;
import
cn.freemud.enums.ResponseResult
;
import
cn.freemud.utils.ResponseUtil
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @author freemud
* @title: BuyProductOnceTest
* @projectName order-group
* @description: TODO
* @date 2021/6/10下午2:52
*/
@RunWith
(
SpringRunner
.
class
)
@SpringBootTest
public
class
BuyProductOnceTest
{
@Autowired
private
BuyProductOnceManager
buyProductOnceManager
;
@Test
public
void
buyProductOnceTest
(){
List
<
ProductInfo
>
products
=
new
ArrayList
<>();
ProductInfo
productInfo
=
new
ProductInfo
();
productInfo
.
setIsLimitNumProduct
(
1
);
products
.
add
(
productInfo
);
ResponseResult
re
=
buyProductOnceManager
.
checkBuyProductOnce
(
products
,
"1864"
,
"wanghanghang"
);
System
.
out
.
println
(
re
.
getCode
()
+
" "
+
re
.
getMessage
());
}
}
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