Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
soss
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hooloo
ms
soss
Commits
6abd00e5
Commit
6abd00e5
authored
Jul 27, 2022
by
caiyt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修复优化优惠券联调过程中遇到的问题及逻辑优化
parent
35745bc1
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
723 additions
and
130 deletions
+723
-130
soss-admin/src/main/java/com/soss/web/controller/coffee/AppController.java
+16
-3
soss-admin/src/main/java/com/soss/web/controller/coupon/CouponController.java
+26
-21
soss-admin/src/main/java/com/soss/web/controller/coupon/CouponUserController.java
+34
-6
soss-common/src/main/java/com/soss/common/enums/CouponUserType.java
+28
-0
soss-system/src/main/java/com/soss/system/domain/CouponUser.java
+4
-4
soss-system/src/main/java/com/soss/system/domain/po/CouponPo.java
+11
-3
soss-system/src/main/java/com/soss/system/domain/vo/CouponUserVo.java
+61
-0
soss-system/src/main/java/com/soss/system/domain/vo/CouponVo.java
+18
-0
soss-system/src/main/java/com/soss/system/mapper/CouponUserMapper.java
+13
-4
soss-system/src/main/java/com/soss/system/mapper/GoodsCategoryMapper.java
+15
-6
soss-system/src/main/java/com/soss/system/mapper/GoodsMapper.java
+12
-4
soss-system/src/main/java/com/soss/system/mapper/ShopMapper.java
+10
-2
soss-system/src/main/java/com/soss/system/service/ICouponRuleService.java
+3
-0
soss-system/src/main/java/com/soss/system/service/ICouponService.java
+2
-0
soss-system/src/main/java/com/soss/system/service/ICouponUserService.java
+7
-3
soss-system/src/main/java/com/soss/system/service/impl/CouponRuleServiceImpl.java
+130
-2
soss-system/src/main/java/com/soss/system/service/impl/CouponServiceImpl.java
+8
-0
soss-system/src/main/java/com/soss/system/service/impl/CouponUserServiceImpl.java
+31
-19
soss-system/src/main/java/com/soss/system/utils/AreaUtil.java
+116
-0
soss-system/src/main/java/com/soss/system/utils/CollectionUtil.java
+29
-0
soss-system/src/main/java/com/soss/system/utils/ReflectUtil.java
+64
-0
soss-system/src/main/resources/mapper/system/CouponUserMapper.xml
+39
-22
soss-system/src/main/resources/mapper/system/GoodsCategoryMapper.xml
+14
-9
soss-system/src/main/resources/mapper/system/GoodsMapper.xml
+15
-10
soss-system/src/main/resources/mapper/system/ShopMapper.xml
+17
-12
No files found.
soss-admin/src/main/java/com/soss/web/controller/coffee/AppController.java
View file @
6abd00e5
...
...
@@ -11,10 +11,12 @@ import com.soss.framework.web.service.TokenService;
import
com.soss.system.domain.Order
;
import
com.soss.system.domain.OrderDetail
;
import
com.soss.system.domain.vo.CouponVo
;
import
com.soss.system.service.ICouponRuleService
;
import
com.soss.system.service.ICouponUserService
;
import
com.soss.system.service.impl.AppServiceImpl
;
import
com.soss.system.service.impl.OrderServiceImpl
;
import
com.soss.system.service.impl.WechatMessageServiceImpl
;
import
com.soss.system.utils.CollectionUtil
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
...
...
@@ -40,6 +42,8 @@ public class AppController extends BaseController {
private
WechatMessageServiceImpl
wechatMessageService
;
@Autowired
private
ICouponUserService
couponUserService
;
@Autowired
private
ICouponRuleService
couponRuleService
;
@RequestMapping
(
"/getMyOrder"
)
public
TableDataInfo
getMyOrder
(
HttpServletRequest
request
)
{
...
...
@@ -112,7 +116,7 @@ public class AppController extends BaseController {
if
(
loginUser
==
null
)
{
throw
new
ServiceException
(
"请先登录"
);
}
int
userAvailableCouponCnt
=
couponUserService
.
get
UserAvailableCouponCnt
(
loginUser
.
getUser
Id
());
int
userAvailableCouponCnt
=
couponUserService
.
get
CustAvailableCouponCnt
(
loginUser
.
getOpen
Id
());
return
AjaxResult
.
success
(
userAvailableCouponCnt
);
}
...
...
@@ -123,7 +127,16 @@ public class AppController extends BaseController {
if
(
loginUser
==
null
)
{
throw
new
ServiceException
(
"请先登录"
);
}
List
<
CouponVo
>
userAvailableCouponCnt
=
couponUserService
.
listUserAvailableCoupon
(
loginUser
.
getUserId
());
return
getDataTable
(
userAvailableCouponCnt
);
List
<
CouponVo
>
couponVoList
=
couponUserService
.
listCustAvailableCoupon
(
loginUser
.
getOpenId
());
couponVoList
.
forEach
(
couponVo
->
{
couponVo
.
setCategoryIds
(
CollectionUtil
.
transStrToCodeList
(
couponVo
.
getCategoryIdStr
()));
couponVo
.
setGoodsIds
(
CollectionUtil
.
transStrToLongList
(
couponVo
.
getGoodsIdStr
()));
couponVo
.
setProvince
(
CollectionUtil
.
transStrToCodeList
(
couponVo
.
getProvinceStr
()));
couponVo
.
setCity
(
CollectionUtil
.
transStrToCodeList
(
couponVo
.
getCityStr
()));
couponVo
.
setArea
(
CollectionUtil
.
transStrToCodeList
(
couponVo
.
getAreaStr
()));
couponVo
.
setShopIds
(
CollectionUtil
.
transStrToLongList
(
couponVo
.
getShopIdStr
()));
});
couponRuleService
.
translateUseLimit
(
couponVoList
);
return
getDataTable
(
couponVoList
);
}
}
soss-admin/src/main/java/com/soss/web/controller/coupon/CouponController.java
View file @
6abd00e5
...
...
@@ -8,7 +8,6 @@ import com.soss.common.core.page.TableDataInfo;
import
com.soss.common.enums.BusinessType
;
import
com.soss.common.enums.CouponCategoryType
;
import
com.soss.common.enums.CouponState
;
import
com.soss.common.utils.StringUtils
;
import
com.soss.common.utils.bean.BeanUtils
;
import
com.soss.system.domain.Coupon
;
import
com.soss.system.domain.CouponRule
;
...
...
@@ -17,6 +16,7 @@ import com.soss.system.domain.po.CouponPo;
import
com.soss.system.domain.vo.CouponVo
;
import
com.soss.system.service.ICouponRuleService
;
import
com.soss.system.service.ICouponService
;
import
com.soss.system.utils.CollectionUtil
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -24,7 +24,6 @@ import org.springframework.security.access.prepost.PreAuthorize;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.Arrays
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -73,16 +72,27 @@ public class CouponController extends BaseController {
couponVo
.
setTypeDesc
(
CouponCategoryType
.
getDesc
(
coupon
.
getType
()));
CouponRule
couponRule
=
ruleMap
.
get
(
coupon
.
getRuleId
());
if
(
couponRule
!=
null
)
{
BeanUtils
.
copyProperties
(
couponRule
,
couponVo
,
"name"
,
"state"
,
"categoryIds"
,
"goodsIds"
,
"province"
,
"city"
,
"area"
,
"shopIds"
);
transLimitToArrStyle
(
couponVo
,
couponRule
);
couponVo
.
setRuleId
(
coupon
.
getRuleId
());
couponVo
.
setRuleName
(
couponRule
.
getName
());
couponVo
.
setRuleDesc
(
couponRule
.
getDesc
());
}
return
couponVo
;
}).
collect
(
Collectors
.
toList
());
couponRuleService
.
translateUseLimit
(
voList
);
return
getDataTable
(
voList
);
}
private
void
transLimitToArrStyle
(
CouponVo
couponVo
,
CouponRule
couponRule
)
{
BeanUtils
.
copyProperties
(
couponRule
,
couponVo
,
"name"
,
"state"
,
"categoryIds"
,
"goodsIds"
,
"province"
,
"city"
,
"area"
,
"shopIds"
);
couponVo
.
setCategoryIds
(
CollectionUtil
.
transStrToCodeList
(
couponRule
.
getCategoryIds
()));
couponVo
.
setGoodsIds
(
CollectionUtil
.
transStrToLongList
(
couponRule
.
getGoodsIds
()));
couponVo
.
setProvince
(
CollectionUtil
.
transStrToCodeList
(
couponRule
.
getProvince
()));
couponVo
.
setCity
(
CollectionUtil
.
transStrToCodeList
(
couponRule
.
getCity
()));
couponVo
.
setArea
(
CollectionUtil
.
transStrToCodeList
(
couponRule
.
getArea
()));
couponVo
.
setShopIds
(
CollectionUtil
.
transStrToLongList
(
couponRule
.
getShopIds
()));
}
/**
* 获取优惠券详情
*/
...
...
@@ -95,27 +105,10 @@ public class CouponController extends BaseController {
CouponVo
couponVo
=
new
CouponVo
();
BeanUtils
.
copyProperties
(
coupon
,
couponVo
);
CouponRule
couponRule
=
couponRuleService
.
detail
(
coupon
.
getRuleId
());
BeanUtils
.
copyProperties
(
couponRule
,
couponVo
,
"name"
,
"state"
,
"categoryIds"
,
"goodsIds"
,
"province"
,
"city"
,
"area"
,
"shopIds"
);
couponVo
.
setCategoryIds
(
transStrToIntList
(
couponRule
.
getCategoryIds
()));
couponVo
.
setGoodsIds
(
transStrToIntList
(
couponRule
.
getGoodsIds
()));
couponVo
.
setProvince
(
transStrToCodeList
(
couponRule
.
getProvince
()));
couponVo
.
setCity
(
transStrToCodeList
(
couponRule
.
getCity
()));
couponVo
.
setArea
(
transStrToCodeList
(
couponRule
.
getArea
()));
couponVo
.
setShopIds
(
transStrToIntList
(
couponRule
.
getShopIds
()));
transLimitToArrStyle
(
couponVo
,
couponRule
);
return
AjaxResult
.
success
(
couponVo
);
}
private
String
[]
transStrToCodeList
(
String
codeStr
)
{
return
StringUtils
.
isEmpty
(
codeStr
)
?
null
:
codeStr
.
split
(
","
);
}
private
Integer
[]
transStrToIntList
(
String
idsStr
)
{
if
(
StringUtils
.
isEmpty
(
idsStr
))
{
return
null
;
}
return
Arrays
.
stream
(
idsStr
.
split
(
","
)).
map
(
Integer:
:
parseInt
).
toArray
(
Integer
[]::
new
);
}
/**
* 新增优惠券
*/
...
...
@@ -141,6 +134,18 @@ public class CouponController extends BaseController {
}
/**
* 更新优惠券预校验
*/
@PreAuthorize
(
"@ss.hasPermi('coupon:update:check')"
)
@Log
(
title
=
"更新优惠券预校验"
,
businessType
=
BusinessType
.
INSERT
)
@PostMapping
(
"/update/check/{id}"
)
@ApiOperation
(
"更新优惠券预校验"
)
public
AjaxResult
checkPreUpdate
(
@PathVariable
Integer
id
)
{
couponService
.
updateCheckPre
(
id
);
return
AjaxResult
.
success
();
}
/**
* 上架优惠券
*/
@PreAuthorize
(
"@ss.hasPermi('coupon:online')"
)
...
...
soss-admin/src/main/java/com/soss/web/controller/coupon/CouponUserController.java
View file @
6abd00e5
...
...
@@ -2,18 +2,27 @@ package com.soss.web.controller.coupon;
import
com.soss.common.annotation.Log
;
import
com.soss.common.core.controller.BaseController
;
import
com.soss.common.core.domain.AjaxResult
;
import
com.soss.common.core.page.TableDataInfo
;
import
com.soss.common.enums.BusinessType
;
import
com.soss.common.enums.CouponUserState
;
import
com.soss.common.enums.CouponUserType
;
import
com.soss.system.domain.CouponUser
;
import
com.soss.system.domain.vo.CouponUserVo
;
import
com.soss.system.service.ICouponUserService
;
import
io.jsonwebtoken.lang.Assert
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.
Ge
tMapping
;
import
org.springframework.web.bind.annotation.
PathVariable
;
import
org.springframework.web.bind.annotation.
Pos
tMapping
;
import
org.springframework.web.bind.annotation.
RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.List
;
/**
* <p>
* 用户领取优惠券记录表 前端控制器
...
...
@@ -25,7 +34,7 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping
(
"/coupon-user"
)
@Api
(
tags
=
"用户领取优惠券记录服务类"
)
public
class
CouponUserController
{
public
class
CouponUserController
extends
BaseController
{
@Autowired
private
ICouponUserService
couponUserService
;
...
...
@@ -34,10 +43,29 @@ public class CouponUserController {
*/
@PreAuthorize
(
"@ss.hasPermi('coupon:user:give')"
)
@Log
(
title
=
"赠送优惠券"
,
businessType
=
BusinessType
.
INSERT
)
@
GetMapping
(
"/{userId}/{userPhone}/{couponId}
"
)
@
PostMapping
(
"give
"
)
@ApiOperation
(
"赠送优惠券"
)
public
AjaxResult
giveUserCoupon
(
@PathVariable
Long
userId
,
@PathVariable
String
userPhone
,
@PathVariable
Integer
couponId
)
{
couponUserService
.
giveUserCoupon
(
userId
,
userPhone
,
couponId
);
public
AjaxResult
giveUserCoupon
(
@RequestBody
CouponUser
couponUser
)
{
Assert
.
notNull
(
couponUser
.
getCustId
(),
"用户ID未传递"
);
Assert
.
notNull
(
couponUser
.
getCouponId
(),
"优惠券ID未传递"
);
couponUserService
.
giveUserCoupon
(
couponUser
.
getCustId
(),
couponUser
.
getCouponId
());
return
AjaxResult
.
success
();
}
/**
* 查询用户领取优惠券列表
*/
@PreAuthorize
(
"@ss.hasPermi('coupon:user:list')"
)
@Log
(
title
=
"查询用户领取优惠券列表"
,
businessType
=
BusinessType
.
INSERT
)
@PostMapping
(
"list"
)
@ApiOperation
(
"查询用户领取优惠券列表"
)
public
TableDataInfo
selectCouponUserList
(
@RequestBody
CouponUser
couponUser
)
{
startPage
();
List
<
CouponUserVo
>
couponUserVos
=
couponUserService
.
selectCouponUserList
(
couponUser
);
couponUserVos
.
forEach
(
couponUserVo
->
{
couponUserVo
.
setTypeDesc
(
CouponUserType
.
getDesc
(
couponUserVo
.
getType
()));
couponUserVo
.
setStateDesc
(
CouponUserState
.
getDesc
(
couponUserVo
.
getState
()));
});
return
getDataTable
(
couponUserVos
);
}
}
soss-common/src/main/java/com/soss/common/enums/CouponUserType.java
0 → 100644
View file @
6abd00e5
package
com
.
soss
.
common
.
enums
;
public
enum
CouponUserType
{
RECEIVE
(
1
,
"领取"
),
GRANT
(
2
,
"发放"
),
GIVE
(
3
,
"赠送"
);
private
Integer
type
;
private
String
desc
;
CouponUserType
(
Integer
type
,
String
desc
)
{
this
.
type
=
type
;
this
.
desc
=
desc
;
}
public
Integer
getType
()
{
return
type
;
}
public
static
String
getDesc
(
Integer
type
)
{
for
(
CouponUserType
couponUserStat
:
CouponUserType
.
values
())
{
if
(
couponUserStat
.
type
.
equals
(
type
))
{
return
couponUserStat
.
desc
;
}
}
return
null
;
}
}
soss-system/src/main/java/com/soss/system/domain/CouponUser.java
View file @
6abd00e5
...
...
@@ -25,17 +25,17 @@ public class CouponUser extends BaseEntity {
/**
* 用户ID
*/
private
Long
user
Id
;
private
String
cust
Id
;
/**
* 用户名
*/
private
String
user
Name
;
private
String
cust
Name
;
/**
* 用户手机号
*/
private
String
user
Phone
;
private
String
cust
Phone
;
/**
* 关联订单
...
...
@@ -76,7 +76,7 @@ public class CouponUser extends BaseEntity {
private
String
source
;
/**
* 1领取 2 发放
* 1领取 2 发放
3赠送
*/
private
Integer
type
;
...
...
soss-system/src/main/java/com/soss/system/domain/po/CouponPo.java
View file @
6abd00e5
...
...
@@ -23,10 +23,10 @@ public class CouponPo {
private
Integer
categoryId
;
@ApiModelProperty
(
"可用商品类别列表,全品类传 [0]"
)
private
Integer
[]
categoryIds
;
private
String
[]
categoryIds
;
@ApiModelProperty
(
"可用商品id列表"
)
private
Integer
[]
goodsIds
;
private
Long
[]
goodsIds
;
@ApiModelProperty
(
"可用省份列表,全国通用传 [0]"
)
private
String
[]
province
;
...
...
@@ -38,7 +38,7 @@ public class CouponPo {
private
String
[]
area
;
@ApiModelProperty
(
"可用店铺ID列表"
)
private
Integer
[]
shopIds
;
private
Long
[]
shopIds
;
@ApiModelProperty
(
"可领取时间时间"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
...
...
@@ -97,4 +97,12 @@ public class CouponPo {
throw
new
ServiceException
(
"适用范围之地区/门店不能跨级"
);
}
}
public
boolean
isAllCategory
()
{
return
categoryIds
!=
null
&&
categoryIds
.
length
==
1
&&
categoryIds
[
0
].
equals
(
"0"
);
}
public
boolean
isAllProvs
()
{
return
province
!=
null
&&
province
.
length
==
1
&&
province
[
0
].
equals
(
"0"
);
}
}
soss-system/src/main/java/com/soss/system/domain/vo/CouponUserVo.java
0 → 100644
View file @
6abd00e5
package
com
.
soss
.
system
.
domain
.
vo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.time.LocalDateTime
;
@ApiModel
@Data
public
class
CouponUserVo
{
@ApiModelProperty
(
"id"
)
private
Integer
id
;
@ApiModelProperty
(
"用户ID"
)
private
String
custId
;
@ApiModelProperty
(
"用户名称"
)
private
String
custName
;
@ApiModelProperty
(
"用户号码"
)
private
String
custPhone
;
@ApiModelProperty
(
"关联订单id"
)
private
Long
orderId
;
@ApiModelProperty
(
"关联订单号"
)
private
String
orderNo
;
@ApiModelProperty
(
"优惠券名称"
)
private
String
couponName
;
@ApiModelProperty
(
"优惠券来源"
)
private
String
source
;
@ApiModelProperty
(
"类型:1领取 2 发放 3赠送"
)
private
Integer
type
;
@ApiModelProperty
(
"类型描述"
)
private
String
typeDesc
;
@ApiModelProperty
(
"优惠券领取时间"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
receiveTime
;
@ApiModelProperty
(
"优惠券生效时间"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
startTime
;
@ApiModelProperty
(
"优惠券失效时间"
)
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
LocalDateTime
expiredTime
;
@ApiModelProperty
(
"优惠券状态"
)
private
Integer
state
;
@ApiModelProperty
(
"优惠券状态描述"
)
private
String
stateDesc
;
}
soss-system/src/main/java/com/soss/system/domain/vo/CouponVo.java
View file @
6abd00e5
...
...
@@ -53,4 +53,22 @@ public class CouponVo extends CouponPo {
@ApiModelProperty
(
"可用店铺描述"
)
private
String
shopDesc
;
@ApiModelProperty
(
value
=
"可用商品类别列表字符串,全品类传 [0]"
,
hidden
=
true
)
private
String
categoryIdStr
;
@ApiModelProperty
(
value
=
"可用商品id列表字符串"
,
hidden
=
true
)
private
String
goodsIdStr
;
@ApiModelProperty
(
value
=
"可用省份列表字符串,全国通用传 [0]"
,
hidden
=
true
)
private
String
provinceStr
;
@ApiModelProperty
(
value
=
"可用城市列表字符串"
,
hidden
=
true
)
private
String
cityStr
;
@ApiModelProperty
(
value
=
"可用区域列表字符串"
,
hidden
=
true
)
private
String
areaStr
;
@ApiModelProperty
(
value
=
"可用店铺ID列表字符串"
,
hidden
=
true
)
private
String
shopIdStr
;
}
soss-system/src/main/java/com/soss/system/mapper/CouponUserMapper.java
View file @
6abd00e5
package
com
.
soss
.
system
.
mapper
;
import
com.soss.system.domain.CouponUser
;
import
com.soss.system.domain.vo.CouponUserVo
;
import
com.soss.system.domain.vo.CouponVo
;
import
org.apache.ibatis.annotations.Param
;
...
...
@@ -50,18 +51,26 @@ public interface CouponUserMapper {
/**
* 查询用户可用优惠券数量
*
* @param
user
Id
* @param
cust
Id
* @param nowTime
* @return
*/
int
get
UserAvailableCouponCnt
(
@Param
(
"userId"
)
Long
user
Id
,
@Param
(
"nowTime"
)
LocalDateTime
nowTime
);
int
get
CustAvailableCouponCnt
(
@Param
(
"custId"
)
String
cust
Id
,
@Param
(
"nowTime"
)
LocalDateTime
nowTime
);
/**
* 查询用户可用优惠券列表
*
* @param
user
Id
* @param
cust
Id
* @param nowTime
* @return
*/
List
<
CouponVo
>
listUserAvailableCoupon
(
@Param
(
"userId"
)
Long
userId
,
@Param
(
"nowTime"
)
LocalDateTime
nowTime
);
List
<
CouponVo
>
listCustAvailableCoupon
(
@Param
(
"custId"
)
String
custId
,
@Param
(
"nowTime"
)
LocalDateTime
nowTime
);
/**
* 查询用户领取优惠券列表
*
* @param couponUser
* @return
*/
List
<
CouponUserVo
>
selectCouponUserList
(
CouponUser
couponUser
);
}
soss-system/src/main/java/com/soss/system/mapper/GoodsCategoryMapper.java
View file @
6abd00e5
package
com
.
soss
.
system
.
mapper
;
import
java.util.List
;
import
com.soss.system.domain.GoodsCategory
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
/**
* 商品分类Mapper接口
*
*
* @author zxq
* @date 2022-04-28
*/
public
interface
GoodsCategoryMapper
{
public
interface
GoodsCategoryMapper
{
/**
* 查询商品分类
*
*
* @param id 商品分类主键
* @return 商品分类
*/
public
GoodsCategory
selectGoodsCategoryById
(
String
id
);
/**
* 查询商品分类集合,供翻译使用
*
* @param ids 商品分类主键集合
* @return 商品分类
*/
List
<
GoodsCategory
>
selectGoodsCategoryByIds
(
@Param
(
"ids"
)
List
<
String
>
ids
);
/**
* 查询商品分类列表
*
*
* @param goodsCategory 商品分类
* @return 商品分类集合
*/
...
...
soss-system/src/main/java/com/soss/system/mapper/GoodsMapper.java
View file @
6abd00e5
package
com
.
soss
.
system
.
mapper
;
import
java.util.List
;
import
com.soss.system.domain.Goods
;
import
com.soss.system.domain.GoodsSku
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
/**
* 商品Mapper接口
*
...
...
@@ -23,15 +23,23 @@ public interface GoodsMapper
/**
* 查询商品列表
*
*
* @param goods 商品
* @return 商品集合
*/
public
List
<
Goods
>
selectGoodsList
(
Goods
goods
);
/**
* 查询商品列表,为翻译使用
*
* @param ids
* @return
*/
List
<
Goods
>
selectGoodsByIds
(
@Param
(
"ids"
)
List
<
Long
>
ids
);
/**
* 新增商品
*
*
* @param goods 商品
* @return 结果
*/
...
...
soss-system/src/main/java/com/soss/system/mapper/ShopMapper.java
View file @
6abd00e5
package
com
.
soss
.
system
.
mapper
;
import
com.soss.system.domain.Shop
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
...
...
@@ -10,8 +11,7 @@ import java.util.List;
* @author zxq
* @date 2022-04-28
*/
public
interface
ShopMapper
{
public
interface
ShopMapper
{
/**
* 查询店铺
*
...
...
@@ -21,6 +21,14 @@ public interface ShopMapper
public
Shop
selectShopById
(
String
id
);
/**
* 查询店铺列表,为翻译用
*
* @param ids 店铺主键
* @return 店铺
*/
List
<
Shop
>
selectShopByIds
(
@Param
(
"ids"
)
List
<
Long
>
ids
);
/**
* 查询所有的店铺
*
* @return 店铺集合
...
...
soss-system/src/main/java/com/soss/system/service/ICouponRuleService.java
View file @
6abd00e5
package
com
.
soss
.
system
.
service
;
import
com.soss.system.domain.CouponRule
;
import
com.soss.system.domain.vo.CouponVo
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -18,4 +19,6 @@ public interface ICouponRuleService {
Map
<
Integer
,
CouponRule
>
getCouponRuleMap
(
List
<
Integer
>
ids
);
CouponRule
detail
(
Integer
id
);
void
translateUseLimit
(
List
<
CouponVo
>
couponVos
);
}
soss-system/src/main/java/com/soss/system/service/ICouponService.java
View file @
6abd00e5
...
...
@@ -23,6 +23,8 @@ public interface ICouponService {
void
update
(
CouponPo
couponPo
);
void
updateCheckPre
(
Integer
id
);
int
onlineCoupon
(
Integer
id
);
int
offlineCoupon
(
Integer
id
);
...
...
soss-system/src/main/java/com/soss/system/service/ICouponUserService.java
View file @
6abd00e5
package
com
.
soss
.
system
.
service
;
import
com.soss.system.domain.CouponUser
;
import
com.soss.system.domain.vo.CouponUserVo
;
import
com.soss.system.domain.vo.CouponVo
;
import
java.util.List
;
...
...
@@ -14,11 +16,13 @@ import java.util.List;
*/
public
interface
ICouponUserService
{
void
giveUserCoupon
(
Long
userId
,
String
phone
,
Integer
couponId
);
void
giveUserCoupon
(
String
custId
,
Integer
couponId
);
void
receiveCoupon
(
Long
userId
,
Integer
id
);
int
get
UserAvailableCouponCnt
(
Long
user
Id
);
int
get
CustAvailableCouponCnt
(
String
cust
Id
);
List
<
CouponVo
>
listUserAvailableCoupon
(
Long
userId
);
List
<
CouponVo
>
listCustAvailableCoupon
(
String
custId
);
List
<
CouponUserVo
>
selectCouponUserList
(
CouponUser
couponUser
);
}
soss-system/src/main/java/com/soss/system/service/impl/CouponRuleServiceImpl.java
View file @
6abd00e5
package
com
.
soss
.
system
.
service
.
impl
;
import
com.soss.system.domain.CouponRule
;
import
com.soss.system.domain.Goods
;
import
com.soss.system.domain.GoodsCategory
;
import
com.soss.system.domain.Shop
;
import
com.soss.system.domain.vo.CouponVo
;
import
com.soss.system.mapper.CouponRuleMapper
;
import
com.soss.system.mapper.GoodsCategoryMapper
;
import
com.soss.system.mapper.GoodsMapper
;
import
com.soss.system.mapper.ShopMapper
;
import
com.soss.system.service.ICouponRuleService
;
import
com.soss.system.utils.AreaUtil
;
import
com.soss.system.utils.CollectionUtil
;
import
io.jsonwebtoken.lang.Assert
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.*
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
...
...
@@ -24,6 +33,14 @@ import java.util.stream.Collectors;
public
class
CouponRuleServiceImpl
implements
ICouponRuleService
{
@Autowired
private
CouponRuleMapper
couponRuleMapper
;
@Autowired
private
GoodsCategoryMapper
goodsCategoryMapper
;
@Autowired
private
GoodsMapper
goodsMapper
;
@Autowired
private
ShopMapper
shopMapper
;
@Autowired
private
AreaUtil
areaUtil
;
@Override
public
Map
<
Integer
,
CouponRule
>
getCouponRuleMap
(
List
<
Integer
>
ids
)
{
...
...
@@ -43,4 +60,115 @@ public class CouponRuleServiceImpl implements ICouponRuleService {
Assert
.
notNull
(
couponRule
,
"未查询到匹配的优惠券规则记录[id="
+
id
+
"]"
);
return
couponRule
;
}
@Override
public
void
translateUseLimit
(
List
<
CouponVo
>
couponVos
)
{
if
(
CollectionUtils
.
isEmpty
(
couponVos
))
{
return
;
}
transCategoryIds
(
couponVos
);
translateArea
(
couponVos
);
}
private
void
transCategoryIds
(
List
<
CouponVo
>
couponVos
)
{
List
<
String
>
categoryIds
=
new
ArrayList
<>(
16
);
List
<
Long
>
goodsIds
=
new
ArrayList
<>(
16
);
for
(
CouponVo
couponVo
:
couponVos
)
{
if
(!
couponVo
.
isAllCategory
())
{
CollectionUtil
.
listAddArray
(
categoryIds
,
couponVo
.
getCategoryIds
());
}
CollectionUtil
.
listAddArray
(
goodsIds
,
couponVo
.
getGoodsIds
());
}
Map
<
String
,
String
>
categoryMap
;
if
(!
CollectionUtils
.
isEmpty
(
categoryIds
))
{
List
<
GoodsCategory
>
goodsCategories
=
goodsCategoryMapper
.
selectGoodsCategoryByIds
(
categoryIds
);
categoryMap
=
goodsCategories
.
stream
().
collect
(
Collectors
.
toMap
(
GoodsCategory:
:
getId
,
GoodsCategory:
:
getName
));
}
else
{
categoryMap
=
new
HashMap
<>(
0
);
}
Map
<
Long
,
String
>
goodsMap
;
if
(!
CollectionUtils
.
isEmpty
(
goodsIds
))
{
List
<
Goods
>
goods
=
goodsMapper
.
selectGoodsByIds
(
goodsIds
);
goodsMap
=
goods
.
stream
().
collect
(
Collectors
.
toMap
(
Goods:
:
getId
,
Goods:
:
getName
));
}
else
{
goodsMap
=
new
HashMap
<>(
0
);
}
for
(
CouponVo
couponVo
:
couponVos
)
{
if
(
couponVo
.
isAllCategory
())
{
couponVo
.
setCategoryDesc
(
"全品类"
);
continue
;
}
else
if
(
CollectionUtil
.
hasContents
(
couponVo
.
getCategoryIds
()))
{
String
categoryDec
=
Arrays
.
stream
(
couponVo
.
getCategoryIds
()).
map
(
categoryMap:
:
get
).
collect
(
Collectors
.
joining
(
","
));
couponVo
.
setCategoryDesc
(
categoryDec
);
continue
;
}
if
(
CollectionUtil
.
hasContents
(
couponVo
.
getGoodsIds
()))
{
String
goodsDesc
=
Arrays
.
stream
(
couponVo
.
getGoodsIds
()).
map
(
goodsMap:
:
get
).
collect
(
Collectors
.
joining
(
","
));
couponVo
.
setGoodsDesc
(
goodsDesc
);
}
}
}
private
void
translateArea
(
List
<
CouponVo
>
couponVos
)
{
List
<
String
>
province
=
new
ArrayList
<>(
16
);
List
<
String
>
city
=
new
ArrayList
<>(
16
);
List
<
String
>
area
=
new
ArrayList
<>(
16
);
List
<
Long
>
shopIds
=
new
ArrayList
<>(
16
);
for
(
CouponVo
couponVo
:
couponVos
)
{
if
(!
couponVo
.
isAllProvs
())
{
CollectionUtil
.
listAddArray
(
province
,
couponVo
.
getProvince
());
}
CollectionUtil
.
listAddArray
(
city
,
couponVo
.
getCity
());
CollectionUtil
.
listAddArray
(
area
,
couponVo
.
getArea
());
CollectionUtil
.
listAddArray
(
shopIds
,
couponVo
.
getShopIds
());
}
Map
<
Long
,
Shop
>
shopMapInit
;
if
(!
CollectionUtils
.
isEmpty
(
shopIds
))
{
List
<
Shop
>
shops
=
shopMapper
.
selectShopByIds
(
shopIds
);
shopMapInit
=
shops
.
stream
().
collect
(
Collectors
.
toMap
(
Shop:
:
getId
,
Function
.
identity
()));
}
else
{
shopMapInit
=
new
HashMap
<>(
0
);
}
Map
<
Long
,
Shop
>
shopMap
=
shopMapInit
;
for
(
CouponVo
couponVo
:
couponVos
)
{
if
(
couponVo
.
isAllProvs
())
{
couponVo
.
setProvinceDesc
(
"全国通用"
);
continue
;
}
else
if
(
CollectionUtil
.
hasContents
(
couponVo
.
getProvince
()))
{
String
provDesc
=
Arrays
.
stream
(
couponVo
.
getProvince
()).
map
(
areaUtil:
:
getAreaNameByCode
).
collect
(
Collectors
.
joining
(
","
));
couponVo
.
setProvinceDesc
(
provDesc
);
}
if
(
CollectionUtil
.
hasContents
(
couponVo
.
getCity
()))
{
String
cityDesc
=
Arrays
.
stream
(
couponVo
.
getCity
()).
map
(
areaUtil:
:
getAreaNameByCode
).
collect
(
Collectors
.
joining
(
","
));
couponVo
.
setCityDesc
(
cityDesc
);
continue
;
}
if
(
CollectionUtil
.
hasContents
(
couponVo
.
getArea
()))
{
String
areaDesc
=
Arrays
.
stream
(
couponVo
.
getArea
()).
map
(
areaUtil:
:
getAreaNameByCode
).
collect
(
Collectors
.
joining
(
","
));
couponVo
.
setAreaDesc
(
areaDesc
);
continue
;
}
if
(!
CollectionUtil
.
hasContents
(
couponVo
.
getShopIds
()))
{
continue
;
}
String
shopDesc
=
Arrays
.
stream
(
couponVo
.
getShopIds
()).
map
(
shopId
->
{
Shop
shop
=
shopMap
.
get
(
shopId
);
if
(
shop
==
null
)
{
return
null
;
}
return
areaUtil
.
getAreaNameByCode
(
shop
.
getZone
())
+
shop
.
getName
();
}).
filter
(
Objects:
:
nonNull
).
collect
(
Collectors
.
joining
(
","
));
couponVo
.
setShopDesc
(
shopDesc
);
}
}
}
soss-system/src/main/java/com/soss/system/service/impl/CouponServiceImpl.java
View file @
6abd00e5
...
...
@@ -93,6 +93,14 @@ public class CouponServiceImpl implements ICouponService {
couponMapper
.
updateCoupon
(
coupon
);
}
@Override
public
void
updateCheckPre
(
Integer
id
)
{
int
couponReceiveCount
=
couponUserMapper
.
getCouponReceiveCount
(
id
);
if
(
couponReceiveCount
>
0
)
{
throw
new
ServiceException
(
"优惠券已被领取,无法编辑,只可下线"
);
}
}
private
void
checkAndWrapperCoupon
(
CouponPo
couponPo
,
Coupon
coupon
,
CouponRule
couponRule
,
boolean
saveFlag
)
{
Assert
.
notNull
(
couponPo
.
getName
(),
"优惠券名称还未填写"
);
Assert
.
notNull
(
couponPo
.
getCategoryId
(),
"优惠券类别还未选择"
);
...
...
soss-system/src/main/java/com/soss/system/service/impl/CouponUserServiceImpl.java
View file @
6abd00e5
package
com
.
soss
.
system
.
service
.
impl
;
import
com.soss.common.core.domain.entity.SysUser
;
import
com.soss.common.enums.CouponState
;
import
com.soss.common.enums.CouponUserType
;
import
com.soss.common.exception.ServiceException
;
import
com.soss.common.utils.DateUtils
;
import
com.soss.system.domain.Coupon
;
import
com.soss.system.domain.CouponRule
;
import
com.soss.system.domain.CouponUser
;
import
com.soss.system.domain.Customer
;
import
com.soss.system.domain.vo.CouponUserVo
;
import
com.soss.system.domain.vo.CouponVo
;
import
com.soss.system.mapper.CouponMapper
;
import
com.soss.system.mapper.CouponRuleMapper
;
import
com.soss.system.mapper.CouponUserMapper
;
import
com.soss.system.mapper.
SysUs
erMapper
;
import
com.soss.system.mapper.
Custom
erMapper
;
import
com.soss.system.service.ICouponUserService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -39,13 +41,12 @@ public class CouponUserServiceImpl implements ICouponUserService {
@Autowired
private
CouponRuleMapper
couponRuleMapper
;
@Autowired
private
SysUserMapper
us
erMapper
;
private
CustomerMapper
custom
erMapper
;
@Override
public
void
giveUserCoupon
(
Long
userId
,
String
phone
,
Integer
couponId
)
{
SysUser
user
=
userMapper
.
selectUserById
(
userId
);
Assert
.
isTrue
(
user
!=
null
&&
Objects
.
equals
(
user
.
getPhonenumber
(),
phone
),
"用户信息不匹配[id="
+
userId
+
"][phone="
+
phone
+
"]"
);
public
void
giveUserCoupon
(
String
custId
,
Integer
couponId
)
{
Customer
cust
=
customerMapper
.
selectCustomerById
(
custId
);
Assert
.
notNull
(
cust
,
"用户不存在[id="
+
custId
+
"]"
);
Coupon
coupon
=
couponMapper
.
selectCouponById
(
couponId
);
Assert
.
isTrue
(
coupon
!=
null
&&
Objects
.
equals
(
coupon
.
getState
(),
CouponState
.
ONLINE
.
getState
()),
"优惠券状态不合法"
);
CouponRule
couponRule
=
couponRuleMapper
.
selectCouponRuleById
(
coupon
.
getRuleId
());
...
...
@@ -55,14 +56,14 @@ public class CouponUserServiceImpl implements ICouponUserService {
throw
new
ServiceException
(
"优惠券不在有效期内"
);
}
CouponUser
couponUser
=
new
CouponUser
();
couponUser
.
set
UserId
(
user
Id
);
couponUser
.
set
UserName
(
user
.
getUserName
());
couponUser
.
set
UserPhone
(
user
.
getPhonenumber
());
couponUser
.
set
CustId
(
cust
Id
);
couponUser
.
set
CustName
(
cust
.
getUserName
());
couponUser
.
set
CustPhone
(
cust
.
getPhone
());
couponUser
.
setCouponId
(
couponId
);
couponUser
.
setExpiredTime
(
this
.
getCouponExpiredTime
(
couponRule
,
now
));
couponUser
.
setReceiveTime
(
now
);
couponUser
.
setSource
(
"
give
"
);
couponUser
.
setType
(
2
);
couponUser
.
setSource
(
"
赠送
"
);
couponUser
.
setType
(
CouponUserType
.
GIVE
.
getType
()
);
couponUser
.
setCreatedAt
(
now
);
couponUser
.
setUpdatedAt
(
now
);
couponUserMapper
.
insertCouponUser
(
couponUser
);
...
...
@@ -73,7 +74,7 @@ public class CouponUserServiceImpl implements ICouponUserService {
public
void
receiveCoupon
(
Long
userId
,
Integer
id
)
{
CouponUser
couponUser
=
couponUserMapper
.
getUserCouponById
(
id
);
Assert
.
notNull
(
couponUser
,
"未查询到匹配记录[id="
+
id
+
"]"
);
Assert
.
isTrue
(
couponUser
.
get
User
Id
().
equals
(
userId
),
"该券与当前用户信息不符"
);
Assert
.
isTrue
(
couponUser
.
get
Cust
Id
().
equals
(
userId
),
"该券与当前用户信息不符"
);
LocalDateTime
now
=
LocalDateTime
.
now
();
Coupon
coupon
=
couponMapper
.
selectCouponById
(
couponUser
.
getCouponId
());
Assert
.
notNull
(
coupon
,
"未查询到匹配的优惠券信息[id="
+
couponUser
.
getCouponId
()
+
"]"
);
...
...
@@ -106,22 +107,33 @@ public class CouponUserServiceImpl implements ICouponUserService {
/**
* 查询用户可用优惠券数量
*
* @param
user
Id
* @param
cust
Id
* @return
*/
@Override
public
int
get
UserAvailableCouponCnt
(
Long
user
Id
)
{
return
couponUserMapper
.
get
UserAvailableCouponCnt
(
user
Id
,
LocalDateTime
.
now
());
public
int
get
CustAvailableCouponCnt
(
String
cust
Id
)
{
return
couponUserMapper
.
get
CustAvailableCouponCnt
(
cust
Id
,
LocalDateTime
.
now
());
}
/**
* 查询用户可用优惠券列表
*
* @param
user
Id
* @param
cust
Id
* @return
*/
@Override
public
List
<
CouponVo
>
listUserAvailableCoupon
(
Long
userId
)
{
return
couponUserMapper
.
listUserAvailableCoupon
(
userId
,
LocalDateTime
.
now
());
public
List
<
CouponVo
>
listCustAvailableCoupon
(
String
custId
)
{
return
couponUserMapper
.
listCustAvailableCoupon
(
custId
,
LocalDateTime
.
now
());
}
/**
* 查询用户领取优惠券列表
*
* @param couponUser
* @return
*/
@Override
public
List
<
CouponUserVo
>
selectCouponUserList
(
CouponUser
couponUser
)
{
return
couponUserMapper
.
selectCouponUserList
(
couponUser
);
}
}
soss-system/src/main/java/com/soss/system/utils/AreaUtil.java
0 → 100644
View file @
6abd00e5
package
com
.
soss
.
system
.
utils
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.core.io.ClassPathResource
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
import
javax.annotation.PostConstruct
;
import
java.io.BufferedReader
;
import
java.io.FileReader
;
import
java.io.IOException
;
import
java.util.HashMap
;
import
java.util.Map
;
@Component
@Slf4j
public
class
AreaUtil
{
// private Map<String, Area> areaMap;
private
Map
<
String
,
String
>
areaDeepMap
=
new
HashMap
<>();
@PostConstruct
public
void
init
()
{
try
{
ClassPathResource
resource
=
new
ClassPathResource
(
"province.json"
);
BufferedReader
bufferedReader
=
new
BufferedReader
(
new
FileReader
(
resource
.
getFile
()));
StringBuilder
builder
=
new
StringBuilder
();
String
line
;
while
((
line
=
bufferedReader
.
readLine
())
!=
null
)
{
builder
.
append
(
line
);
}
JSONArray
areaArray
=
JSONArray
.
parseArray
(
builder
.
toString
());
// areaMap = buildAreaTree(areaArray);
deepAreaTree
(
areaArray
,
""
);
}
catch
(
IOException
e
)
{
log
.
error
(
"解析区域文件出错"
,
e
);
}
}
private
void
deepAreaTree
(
JSONArray
areaArray
,
String
parentName
)
{
if
(
CollectionUtils
.
isEmpty
(
areaArray
))
{
return
;
}
for
(
int
i
=
0
;
i
<
areaArray
.
size
();
i
++)
{
JSONObject
area
=
areaArray
.
getJSONObject
(
i
);
String
code
=
area
.
getString
(
"value"
);
String
label
=
area
.
getString
(
"label"
);
String
curLabel
=
parentName
+
label
;
areaDeepMap
.
put
(
code
,
curLabel
);
JSONArray
children
=
area
.
getJSONArray
(
"children"
);
deepAreaTree
(
children
,
curLabel
);
}
}
public
String
getAreaNameByCode
(
String
code
)
{
return
areaDeepMap
.
get
(
code
);
}
/*private Map<String, Area> buildAreaTree(JSONArray areaArray) {
if (CollectionUtils.isEmpty(areaArray)) {
return null;
}
Map<String, Area> areaMap = new HashMap<>();
for (int i = 0; i < areaArray.size(); i++) {
JSONObject area = areaArray.getJSONObject(i);
String code = area.getString("value");
String label = area.getString("label");
JSONArray children = area.getJSONArray("children");
areaMap.put(code, new Area(label, buildAreaTree(children)));
}
return areaMap;
}
public <T> void translateArea(List<T> ts) throws Exception {
if (CollectionUtils.isEmpty(ts)) {
return;
}
Map<String, Field> tfdMap = ReflectUtil.getFields(ts.get(0));
for (T t : ts) {
Map<String, Area> cityMap = translate(t, "province", "provinceDesc", tfdMap, areaMap);
if (cityMap == null) continue;
Map<String, Area> areaMap = translate(t, "city", "cityDesc", tfdMap, cityMap);
if (areaMap == null) continue;
translate(t, "area", "areaDesc", tfdMap, areaMap);
}
}
private <T> Map<String, Area> translate(T t, String codeFieldName, String descFieldName,
Map<String, Field> tfdMap, Map<String, Area> areaMap) throws Exception {
if (CollectionUtils.isEmpty(areaMap)) {
return null;
}
Field provField = tfdMap.get(codeFieldName);
Field provDescField = tfdMap.get(descFieldName);
if (provField == null || provDescField == null) {
return null;
}
ReflectUtil.accessField(provField, provDescField);
String province = (String) provField.get(t);
if (!StringUtils.hasText(province)) {
return null;
}
Area area = areaMap.get(province);
if (area == null) return null;
provDescField.set(t, area.getLabel());
return area.getChildren();
}
@Data
@AllArgsConstructor
class Area {
private String label;
private Map<String, Area> children;
}*/
}
soss-system/src/main/java/com/soss/system/utils/CollectionUtil.java
0 → 100644
View file @
6abd00e5
package
com
.
soss
.
system
.
utils
;
import
com.soss.common.utils.StringUtils
;
import
java.util.Arrays
;
import
java.util.List
;
public
class
CollectionUtil
{
public
static
<
T
>
void
listAddArray
(
List
<
T
>
lst
,
T
[]
ts
)
{
if
(
hasContents
(
ts
))
{
lst
.
addAll
(
Arrays
.
asList
(
ts
));
}
}
public
static
<
T
>
boolean
hasContents
(
T
[]
ts
)
{
return
ts
!=
null
&&
ts
.
length
>
0
;
}
public
static
String
[]
transStrToCodeList
(
String
codeStr
)
{
return
StringUtils
.
isEmpty
(
codeStr
)
?
null
:
codeStr
.
split
(
","
);
}
public
static
Long
[]
transStrToLongList
(
String
idsStr
)
{
if
(
StringUtils
.
isEmpty
(
idsStr
))
{
return
null
;
}
return
Arrays
.
stream
(
idsStr
.
split
(
","
)).
map
(
Long:
:
parseLong
).
toArray
(
Long
[]::
new
);
}
}
soss-system/src/main/java/com/soss/system/utils/ReflectUtil.java
0 → 100644
View file @
6abd00e5
package
com
.
soss
.
system
.
utils
;
import
java.lang.reflect.Field
;
import
java.lang.reflect.Method
;
import
java.util.Arrays
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* 反射工具类
*/
public
class
ReflectUtil
{
/**
* 获取类的全部方法,以字典形式返回
*
* @param t
* @param <T>
* @return
*/
public
static
<
T
>
Map
<
String
,
Method
>
getMethod
(
T
t
)
{
Class
tempClass
=
t
.
getClass
();
Map
<
String
,
Method
>
methodMap
=
new
ConcurrentHashMap
<>();
while
(
tempClass
!=
null
)
{
Method
[]
declaredMethods
=
tempClass
.
getDeclaredMethods
();
for
(
Method
method
:
declaredMethods
)
{
if
(!
methodMap
.
containsKey
(
method
.
getName
()))
{
methodMap
.
put
(
method
.
getName
(),
method
);
}
}
tempClass
=
tempClass
.
getSuperclass
();
}
return
methodMap
;
}
/**
* 获取类的全部属性
*
* @param t
* @param <T>
* @return
*/
public
static
<
T
>
Map
<
String
,
Field
>
getFields
(
T
t
)
{
Class
tempClass
=
t
.
getClass
();
Map
<
String
,
Field
>
fieldMap
=
new
ConcurrentHashMap
<>();
while
(
tempClass
!=
null
)
{
Field
[]
declaredFields
=
tempClass
.
getDeclaredFields
();
for
(
Field
field
:
declaredFields
)
{
if
(!
fieldMap
.
containsKey
(
field
.
getName
()))
{
fieldMap
.
put
(
field
.
getName
(),
field
);
}
}
tempClass
=
tempClass
.
getSuperclass
();
}
return
fieldMap
;
}
public
static
void
accessField
(
Field
...
fields
)
{
Arrays
.
stream
(
fields
).
forEach
(
field
->
{
if
(
field
!=
null
&&
!
field
.
isAccessible
())
{
field
.
setAccessible
(
true
);
}
});
}
}
soss-system/src/main/resources/mapper/system/CouponUserMapper.xml
View file @
6abd00e5
...
...
@@ -4,9 +4,9 @@
<!-- 通用查询映射结果 -->
<resultMap
id=
"BaseResultMap"
type=
"com.soss.system.domain.CouponUser"
>
<id
column=
"id"
property=
"id"
/>
<result
column=
"
user_id"
property=
"user
Id"
/>
<result
column=
"
user_name"
property=
"user
Name"
/>
<result
column=
"
user_phone"
property=
"user
Phone"
/>
<result
column=
"
cust_id"
property=
"cust
Id"
/>
<result
column=
"
cust_name"
property=
"cust
Name"
/>
<result
column=
"
cust_phone"
property=
"cust
Phone"
/>
<result
column=
"order_id"
property=
"orderId"
/>
<result
column=
"coupon_id"
property=
"couponId"
/>
<result
column=
"receive_time"
property=
"receiveTime"
/>
...
...
@@ -26,29 +26,46 @@
where coupon_id = #{couponId}
</select>
<select
id=
"get
User
AvailableCouponCnt"
resultType=
"java.lang.Integer"
>
<select
id=
"get
Cust
AvailableCouponCnt"
resultType=
"java.lang.Integer"
>
select count(*)
<include
refid=
"select
User
AvailableCoupon"
/>
<include
refid=
"select
Cust
AvailableCoupon"
/>
</select>
<select
id=
"list
User
AvailableCoupon"
resultType=
"com.soss.system.domain.vo.CouponVo"
>
<select
id=
"list
Cust
AvailableCoupon"
resultType=
"com.soss.system.domain.vo.CouponVo"
>
select cu.id, cc.`type`, cc.name categoryName, cr.name ruleName, cr.`desc` ruleDesc, c.name, cr.use_start_time
useStartTime, cu.expired_time useEndTime, cc.`desc` categoryDesc, cr.category_ids categoryId
s
, cr.goods_ids
goodsId
s, cr.province, cr.city, cr.area, cr.shop_ids shopIds
<include
refid=
"select
User
AvailableCoupon"
/>
useStartTime, cu.expired_time useEndTime, cc.`desc` categoryDesc, cr.category_ids categoryId
Str
, cr.goods_ids
goodsId
Str, cr.province provinceStr, cr.city cityStr, cr.area areaStr, cr.shop_ids shopIdStr
<include
refid=
"select
Cust
AvailableCoupon"
/>
</select>
<sql
id=
"select
User
AvailableCoupon"
>
<sql
id=
"select
Cust
AvailableCoupon"
>
from coupon_user cu
left join coupon c on cu.coupon_id = c.id
left join coupon_category cc on c.category_id = cc.id
left join coupon_rule cr on c.rule_id = cr.id
where cu.
user_id = #{user
Id} and cr.use_start_time
<
#{nowTime} and cu.expired_time > #{nowTime}
where cu.
cust_id = #{cust
Id} and cr.use_start_time
<
#{nowTime} and cu.expired_time > #{nowTime}
and cu.state = ${@com.soss.common.enums.CouponUserState @DEFAULT.getState}
</sql>
<select
id=
"getUserAvailableCouponList"
resultMap=
"BaseResultMap"
>
<select
id=
"selectCouponUserList"
resultType=
"com.soss.system.domain.vo.CouponUserVo"
>
select cu.id, cu.cust_id custId, cu.cust_name custName, cu.cust_phone custPhone, cu.order_id orderId,
cu.order_no orderNo, c.name couponName, cu.source, cu.`type`, cu.receive_time receiveTime,
cr.use_start_time startTime, cu.expired_time expiredTime, cu.state
from coupon_user cu
left join coupon c on cu.coupon_id = c.id
left join coupon_rule cr on c.rule_id = cr.id
<where>
<if
test=
"source != null"
>
and cu.source like concat("%", #{source}, "%")
</if>
<if
test=
"couponId != null"
>
and cu.coupon_id = #{couponId}
</if>
<if
test=
"state != null"
>
and cu.state = #{state}
</if>
</where>
order by cu.id desc
</select>
<select
id=
"getUserCouponInfo"
resultMap=
"BaseResultMap"
>
...
...
@@ -59,9 +76,9 @@
keyProperty=
"id"
>
insert into coupon_user
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"
userId != null"
>
user
_id,
</if>
<if
test=
"
userName != null and userName != ''"
>
user
_name,
</if>
<if
test=
"
userPhone != null and userPhone != ''"
>
user
_phone,
</if>
<if
test=
"
custId != null"
>
cust
_id,
</if>
<if
test=
"
custName != null and custName != ''"
>
cust
_name,
</if>
<if
test=
"
custPhone != null and custPhone != ''"
>
cust
_phone,
</if>
<if
test=
"orderId != null"
>
order_id,
</if>
<if
test=
"couponId != null"
>
coupon_id,
</if>
<if
test=
"receiveTime != null"
>
receive_time,
</if>
...
...
@@ -75,9 +92,9 @@
<if
test=
"updatedAt != null"
>
updated_at,
</if>
</trim>
<trim
prefix=
"values ("
suffix=
")"
suffixOverrides=
","
>
<if
test=
"
userId != null"
>
#{user
Id},
</if>
<if
test=
"
userName != null and userName != ''"
>
#{user
Name},
</if>
<if
test=
"
userPhone != null and userPhone != ''"
>
#{user
Phone},
</if>
<if
test=
"
custId != null"
>
#{cust
Id},
</if>
<if
test=
"
custName != null and custName != ''"
>
#{cust
Name},
</if>
<if
test=
"
custPhone != null and custPhone != ''"
>
#{cust
Phone},
</if>
<if
test=
"orderId != null"
>
#{orderId},
</if>
<if
test=
"couponId != null"
>
#{couponId},
</if>
<if
test=
"receiveTime != null"
>
#{receiveTime},
</if>
...
...
@@ -95,9 +112,9 @@
<update
id=
"updateCouponUser"
parameterType=
"com.soss.system.domain.CouponUser"
>
update coupon_user
<trim
prefix=
"SET"
suffixOverrides=
","
>
<if
test=
"
userId != null"
>
user_id = #{user
Id},
</if>
<if
test=
"
userName != null and userName != ''"
>
user_name = #{user
Name},
</if>
<if
test=
"
userPhone != null and userPhone != ''"
>
user_phone = #{user
Phone},
</if>
<if
test=
"
custId != null"
>
cust_id = #{cust
Id},
</if>
<if
test=
"
custName != null and custName != ''"
>
cust_name = #{cust
Name},
</if>
<if
test=
"
custPhone != null and custPhone != ''"
>
cust_phone = #{cust
Phone},
</if>
<if
test=
"orderId != null"
>
order_id = #{orderId},
</if>
<if
test=
"couponId != null"
>
coupon_id = #{couponId},
</if>
<if
test=
"receiveTime != null"
>
receive_time = #{receiveTime},
</if>
...
...
soss-system/src/main/resources/mapper/system/GoodsCategoryMapper.xml
View file @
6abd00e5
...
...
@@ -24,23 +24,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include
refid=
"selectGoodsCategoryVo"
/>
<where>
and is_deleted = 0
<if
test=
"name != null and name != ''"
>
and name like concat('%', #{name}, '%')
</if>
<if
test=
"remarks != null and remarks != ''"
>
and remarks = #{remarks}
</if>
<if
test=
"turn != null and turn != ''"
>
and turn = #{turn}
</if>
<if
test=
"state != null and state != ''"
>
and state = #{state}
</if>
<if
test=
"createdAt != null "
>
and created_at = #{createdAt}
</if>
<if
test=
"updatedAt != null "
>
and updated_at = #{updatedAt}
</if>
<if
test=
"code != null and code != ''"
>
and code = #{code}
</if>
<if
test=
"name != null and name != ''"
>
and name like concat('%', #{name}, '%')
</if>
<if
test=
"remarks != null and remarks != ''"
>
and remarks = #{remarks}
</if>
<if
test=
"turn != null and turn != ''"
>
and turn = #{turn}
</if>
<if
test=
"state != null and state != ''"
>
and state = #{state}
</if>
<if
test=
"createdAt != null "
>
and created_at = #{createdAt}
</if>
<if
test=
"updatedAt != null "
>
and updated_at = #{updatedAt}
</if>
<if
test=
"code != null and code != ''"
>
and code = #{code}
</if>
</where>
order by turn
</select>
<select
id=
"selectGoodsCategoryByIds"
resultMap=
"GoodsCategoryResult"
>
select id, name from goods_category where id in
<foreach
collection=
"ids"
item=
"id"
separator=
","
open=
"("
close=
")"
>
#{id}
</foreach>
</select>
<select
id=
"selectGoodsCategoryById"
parameterType=
"String"
resultMap=
"GoodsCategoryResult"
>
<include
refid=
"selectGoodsCategoryVo"
/>
where id = #{id}
and is_deleted = 0
</select>
<insert
id=
"insertGoodsCategory"
parameterType=
"GoodsCategory"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into goods_category
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
...
...
soss-system/src/main/resources/mapper/system/GoodsMapper.xml
View file @
6abd00e5
...
...
@@ -17,9 +17,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result
property=
"remarks"
column=
"remarks"
/>
<result
property=
"state"
column=
"state"
/>
<result
property=
"isDeleted"
column=
"is_deleted"
/>
<result
property=
"createdAt"
column=
"created_at"
/>
<result
property=
"updatedAt"
column=
"updated_at"
/>
<result
property=
"code"
column=
"code"
/>
<result
property=
"createdAt"
column=
"created_at"
/>
<result
property=
"updatedAt"
column=
"updated_at"
/>
<result
property=
"code"
column=
"code"
/>
<result
property=
"shelfAt"
column=
"shelf_at"
/>
<result
property=
"categoryName"
column=
"categoryName"
/>
</resultMap>
...
...
@@ -28,15 +28,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select id, name, category, price, discount, take_time, spec, pics, `desc`, remarks, state, is_deleted, created_at, updated_at, code,shelf_at from goods
</sql>
<select
id=
"selectGoodsByIds"
resultMap=
"GoodsResult"
>
select id, name from goods where id in
<foreach
collection=
"ids"
item=
"id"
separator=
","
open=
"("
close=
")"
>
#{id}
</foreach>
</select>
<select
id=
"selectGoodsList"
parameterType=
"Goods"
resultMap=
"GoodsResult"
>
<include
refid=
"selectGoodsVo"
/>
<where>
<if
test=
"name != null and name != ''"
>
and name like concat('%', #{name}, '%')
</if>
<if
test=
"category != null and category != ''"
>
and category = #{category}
</if>
<if
test=
"price != null "
>
and price = #{price}
</if>
<if
test=
"discount != null "
>
and discount = #{discount}
</if>
<if
test=
"takeTime != null "
>
and take_time = #{takeTime}
</if>
<if
test=
"spec != null and spec != ''"
>
and spec = #{spec}
</if>
<where>
<if
test=
"name != null and name != ''"
>
and name like concat('%', #{name}, '%')
</if>
<if
test=
"category != null and category != ''"
>
and category = #{category}
</if>
<if
test=
"price != null "
>
and price = #{price}
</if>
<if
test=
"discount != null "
>
and discount = #{discount}
</if>
<if
test=
"takeTime != null "
>
and take_time = #{takeTime}
</if>
<if
test=
"spec != null and spec != ''"
>
and spec = #{spec}
</if>
<if
test=
"pics != null and pics != ''"
>
and pics = #{pics}
</if>
<if
test=
"desc != null and desc != ''"
>
and `desc` = #{desc}
</if>
<if
test=
"remarks != null and remarks != ''"
>
and remarks = #{remarks}
</if>
...
...
soss-system/src/main/resources/mapper/system/ShopMapper.xml
View file @
6abd00e5
...
...
@@ -40,24 +40,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"lat != null and lat != ''"
>
and s.lat = #{lat}
</if>
<if
test=
"remarks != null and remarks != ''"
>
and s.remarks = #{remarks}
</if>
<if
test=
"startTime != null and startTime != ''"
>
and s.start_time = #{startTime}
</if>
<if
test=
"endTime != null and endTime != ''"
>
and s.end_time = #{endTime}
</if>
<if
test=
"address != null and address != ''"
>
and s.address = #{address}
</if>
<if
test=
"province != null and province != ''"
>
and s.province = #{province}
</if>
<if
test=
"city != null and city != ''"
>
and s.city = #{city}
</if>
<if
test=
"zone != null and zone != ''"
>
and s.zone = #{zone}
</if>
<if
test=
"state != null and state != ''"
>
and s.state = #{state}
</if>
<if
test=
"createdAt != null "
>
and s.created_at = #{createdAt}
</if>
<if
test=
"updatedAt != null "
>
and s.updated_at = #{updatedAt}
</if>
<if
test=
"isDefault != null "
>
and s.is_default = #{isDefault}
</if>
<if
test=
"machineCode!=null and machineCode != ''"
>
and m.code =#{machineCode}
</if>
<if
test=
"endTime != null and endTime != ''"
>
and s.end_time = #{endTime}
</if>
<if
test=
"address != null and address != ''"
>
and s.address = #{address}
</if>
<if
test=
"province != null and province != ''"
>
and s.province = #{province}
</if>
<if
test=
"city != null and city != ''"
>
and s.city = #{city}
</if>
<if
test=
"zone != null and zone != ''"
>
and s.zone = #{zone}
</if>
<if
test=
"state != null and state != ''"
>
and s.state = #{state}
</if>
<if
test=
"createdAt != null "
>
and s.created_at = #{createdAt}
</if>
<if
test=
"updatedAt != null "
>
and s.updated_at = #{updatedAt}
</if>
<if
test=
"isDefault != null "
>
and s.is_default = #{isDefault}
</if>
<if
test=
"machineCode!=null and machineCode != ''"
>
and m.code =#{machineCode}
</if>
</where>
</select>
<select
id=
"selectShopById"
parameterType=
"String"
resultMap=
"ShopResult"
>
<include
refid=
"selectShopVo"
/>
where id = #{id}
</select>
<select
id=
"selectShopByIds"
resultMap=
"ShopResult"
>
select id, name, zone from shop where id in
<foreach
collection=
"ids"
item=
"id"
open=
"("
close=
")"
separator=
","
>
#{id}
</foreach>
</select>
<insert
id=
"insertShop"
parameterType=
"Shop"
useGeneratedKeys=
"true"
keyProperty=
"id"
>
insert into shop
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
...
...
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