Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gogirl-miniapp-backend
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
huluobin
gogirl-miniapp-backend
Commits
878f3d46
Commit
878f3d46
authored
Jun 22, 2020
by
huluobin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
e9f673e9
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
457 additions
and
39 deletions
+457
-39
IMallOrderTechnicianService.java
...l/application/order/mall/IMallOrderTechnicianService.java
+16
-0
MallOrderService.java
...a/com/gogirl/application/order/mall/MallOrderService.java
+19
-4
MallOrderServiceImpl.java
...irl/application/order/mall/impl/MallOrderServiceImpl.java
+123
-12
MallOrderTechnicianServiceImpl.java
...ation/order/mall/impl/MallOrderTechnicianServiceImpl.java
+20
-0
MallOrder.java
src/main/java/com/gogirl/domain/order/mall/MallOrder.java
+9
-1
MallOrderTechnician.java
...ava/com/gogirl/domain/order/mall/MallOrderTechnician.java
+43
-0
MallOrderTechnicianMapper.java
...tructure/mapper/order/mall/MallOrderTechnicianMapper.java
+26
-0
SessionUtils.java
...ain/java/com/gogirl/infrastructure/util/SessionUtils.java
+3
-0
MallOrderIdLock.java
.../com/gogirl/infrastructure/util/lock/MallOrderIdLock.java
+56
-0
MallOrderController.java
...com/gogirl/interfaces/order/mall/MallOrderController.java
+46
-22
MallOrderTechnicianController.java
.../interfaces/order/mall/MallOrderTechnicianController.java
+19
-0
MallOrderAchievement.java
...n/java/com/gogirl/shared/market/MallOrderAchievement.java
+19
-0
SubmitMallOrderCommand.java
...java/com/gogirl/shared/market/SubmitMallOrderCommand.java
+1
-0
UpdateMallOrderTechnicianRequest.java
...ogirl/shared/market/UpdateMallOrderTechnicianRequest.java
+24
-0
ImmediatePurchaseCommand.java
...va/com/gogirl/shared/member/ImmediatePurchaseCommand.java
+3
-0
MallOrderTechnicianMapper.xml
src/main/resources/mapper/MallOrderTechnicianMapper.xml
+11
-0
Test.java
src/test/java/com/gogirl/Test.java
+19
-0
No files found.
src/main/java/com/gogirl/application/order/mall/IMallOrderTechnicianService.java
0 → 100644
View file @
878f3d46
package
com
.
gogirl
.
application
.
order
.
mall
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.gogirl.domain.order.mall.MallOrderTechnician
;
/**
* <p>
* 商城订单 - 美甲师 服务类
* </p>
*
* @author robbendev
* @since 2020-06-22
*/
public
interface
IMallOrderTechnicianService
extends
IService
<
MallOrderTechnician
>
{
}
src/main/java/com/gogirl/application/order/mall/MallOrderService.java
View file @
878f3d46
package
com
.
gogirl
.
application
.
order
.
mall
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.gogirl.domain.order.mall.MallOrder
;
import
com.gogirl.shared.market.ListMallOrderRequest
;
import
com.gogirl.shared.market.SubmitMallOrderCommand
;
import
com.gogirl.shared.market.UpdateMallOrderTechnicianRequest
;
import
com.gogirl.shared.member.ImmediatePurchaseCommand
;
import
com.gogirl.shared.order.CancelMallOrderCommand
;
import
com.gogirl.shared.order.MallOrderDTO
;
...
...
@@ -17,11 +18,10 @@ public interface MallOrderService extends IService<MallOrder> {
/**
* 查询订单聚合列表
*
* @param page 分页参数
* @param mallOrder 订单查询参数
* @param request 订单查询参数
* @return
*/
IPage
<
MallOrder
>
listMallOrderAggregate
(
Page
<
MallOrder
>
page
,
MallOrder
mallOrder
);
IPage
<
MallOrder
>
listMallOrderAggregate
(
ListMallOrderRequest
request
);
/**
...
...
@@ -75,4 +75,19 @@ public interface MallOrderService extends IService<MallOrder> {
* @return
*/
MallOrderDTO
querySettleMalOrder
(
SettleMallOrderQuery
qry
);
/**
* 美甲师确认收货
*
* @param mallOrderId
*/
void
confirmOrderShip
(
Long
mallOrderId
);
/**
* 美甲师跟更新商城订单推荐人
*
* @param request
*/
void
updateMallOrderTechnician
(
UpdateMallOrderTechnicianRequest
request
);
}
src/main/java/com/gogirl/application/order/mall/impl/MallOrderServiceImpl.java
View file @
878f3d46
...
...
@@ -10,16 +10,25 @@ import com.gogirl.application.order.mall.MallOrderService;
import
com.gogirl.application.order.mall.MallShoppingCartService
;
import
com.gogirl.domain.order.mall.*
;
import
com.gogirl.domain.product.mall.MallProduct
;
import
com.gogirl.domain.store.store.StoreManage
;
import
com.gogirl.domain.store.store.StoreTechnician
;
import
com.gogirl.domain.user.customer.Customer
;
import
com.gogirl.infrastructure.common.exception.RRException
;
import
com.gogirl.infrastructure.common.util.ListUtil
;
import
com.gogirl.infrastructure.common.util.SpringBeanUtils
;
import
com.gogirl.infrastructure.common.util.SpringContextHolder
;
import
com.gogirl.infrastructure.common.util.StringUtils
;
import
com.gogirl.infrastructure.mapper.order.mall.MallOrderAddressMapper
;
import
com.gogirl.infrastructure.mapper.order.mall.MallOrderMapper
;
import
com.gogirl.infrastructure.mapper.order.mall.MallOrderTechnicianMapper
;
import
com.gogirl.infrastructure.mapper.product.mall.MallProductMapper
;
import
com.gogirl.infrastructure.mapper.store.store.StoreManageMapper
;
import
com.gogirl.infrastructure.mapper.store.store.StoreTechnicianMapper
;
import
com.gogirl.infrastructure.mapper.user.customer.CustomerMapper
;
import
com.gogirl.infrastructure.util.SessionUtils
;
import
com.gogirl.shared.market.ListMallOrderRequest
;
import
com.gogirl.shared.market.SubmitMallOrderCommand
;
import
com.gogirl.shared.market.UpdateMallOrderTechnicianRequest
;
import
com.gogirl.shared.member.ImmediatePurchaseCommand
;
import
com.gogirl.shared.order.*
;
import
com.google.common.collect.Lists
;
...
...
@@ -30,7 +39,9 @@ import org.springframework.stereotype.Service;
import
org.springframework.transaction.annotation.Transactional
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
@Service
...
...
@@ -39,20 +50,22 @@ import java.util.stream.Collectors;
@Transactional
public
class
MallOrderServiceImpl
extends
ServiceImpl
<
MallOrderMapper
,
MallOrder
>
implements
MallOrderService
{
/**
* mapper
*/
private
final
MallOrderDetailService
mallOrderDetailService
;
private
final
MallOrderMapper
mallOrderMapper
;
private
final
MallOrderAddressMapper
mallOrderAddressMapper
;
private
final
MallProductMapper
mallProductMapper
;
private
final
CustomerMapper
customerMapper
;
private
final
MallOrderTechnicianMapper
mallOrderTechnicianMapper
;
/**
* domain service
*/
private
final
MallShoppingCartService
mallShoppingCartService
;
private
final
MallCustomerAddressService
mallCustomerAddressService
;
private
final
MallProductMapper
mallProductMapper
;
private
final
CustomerMapper
customerMapper
;
@Override
public
MallOrder
saveAggregate
(
MallOrder
mallOrder
)
{
...
...
@@ -128,6 +141,45 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder
}
@Override
public
void
confirmOrderShip
(
Long
mallOrderId
)
{
MallOrder
mallOrder
=
baseMapper
.
selectById
(
mallOrderId
);
if
(!
mallOrder
.
getStatus
().
equals
(
MallOrder
.
STATUS_UN_SHIP
))
{
throw
new
RRException
(
"订单状态异常"
);
}
if
(!
mallOrder
.
getTransportMode
().
equals
(
MallOrder
.
TRANSPORT_MODE_SELF_TAKE
))
{
throw
new
RRException
(
"自取订单才能确认收货"
);
}
mallOrder
.
setStatus
(
MallOrder
.
STATUS_SIGNED
);
baseMapper
.
updateById
(
mallOrder
);
}
@Transactional
@Override
public
void
updateMallOrderTechnician
(
UpdateMallOrderTechnicianRequest
request
)
{
if
(
request
.
getMallOrderId
()
==
null
)
{
throw
new
RRException
(
"订单id为空"
);
}
if
(
ListUtil
.
isEmpty
(
request
.
getTechnicianIdList
()))
{
throw
new
RRException
(
"美甲师列表为空"
);
}
mallOrderTechnicianMapper
.
delete
(
new
LambdaQueryWrapper
<
MallOrderTechnician
>()
.
eq
(
MallOrderTechnician:
:
getMallOrderId
,
request
.
getMallOrderId
()));
MallOrder
mallOrder
=
this
.
getById
(
request
.
getMallOrderId
());
request
.
getTechnicianIdList
().
forEach
(
technicianId
->
{
BigDecimal
achievement
=
mallOrder
.
getTotalPayAmount
().
divide
(
new
BigDecimal
(
request
.
getTechnicianIdList
().
size
()),
RoundingMode
.
HALF_DOWN
);
MallOrderTechnician
mallOrderTechnician
=
new
MallOrderTechnician
();
mallOrderTechnician
.
setTechnicianId
(
technicianId
);
mallOrderTechnician
.
setMallOrderId
(
request
.
getMallOrderId
());
mallOrderTechnician
.
setAchievement
(
achievement
);
mallOrderTechnicianMapper
.
insert
(
mallOrderTechnician
);
});
}
@Override
public
void
submitMallOrder
(
SubmitMallOrderCommand
cmd
)
{
long
time
=
System
.
currentTimeMillis
();
log
.
info
(
"用户{}下单,时间{}"
,
cmd
.
getCustomerId
(),
time
);
...
...
@@ -215,6 +267,18 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder
//保存订单聚合
this
.
saveAggregate
(
mallOrder
);
if
(
ListUtil
.
isNotEmpty
(
cmd
.
getTechnicianIdList
()))
{
cmd
.
getTechnicianIdList
().
forEach
(
technicianId
->
{
BigDecimal
achievement
=
mallOrder
.
getTotalPayAmount
().
divide
(
new
BigDecimal
(
cmd
.
getTechnicianIdList
().
size
()),
RoundingMode
.
HALF_DOWN
);
MallOrderTechnician
mallOrderTechnician
=
new
MallOrderTechnician
();
mallOrderTechnician
.
setMallOrderId
(
mallOrder
.
getId
());
mallOrderTechnician
.
setTechnicianId
(
technicianId
);
mallOrderTechnician
.
setAchievement
(
achievement
);
mallOrderTechnicianMapper
.
insert
(
mallOrderTechnician
);
});
}
//设置命令结果
cmd
.
setExecutionResult
(
mallOrder
.
getId
());
log
.
info
(
"用户{}下单结束,时间{},耗时{}"
,
cmd
.
getCustomerId
(),
System
.
currentTimeMillis
(),
System
.
currentTimeMillis
()
-
time
);
...
...
@@ -233,6 +297,9 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder
mallOrderMapper
.
updateById
(
mallOrder
);
}
private
final
StoreTechnicianMapper
storeTechnicianMapper
;
private
final
StoreManageMapper
storeManageMapper
;
@Override
public
void
immediatePurchase
(
ImmediatePurchaseCommand
cmd
)
{
...
...
@@ -304,9 +371,22 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder
mallOrder
.
setMallOrderAddress
(
mallOrderAddress
);
}
//保存订单聚合
this
.
saveAggregate
(
mallOrder
);
if
(
ListUtil
.
isNotEmpty
(
cmd
.
getTechnicianIdList
()))
{
cmd
.
getTechnicianIdList
().
forEach
(
technicianId
->
{
BigDecimal
achievement
=
mallOrder
.
getTotalPayAmount
().
divide
(
new
BigDecimal
(
cmd
.
getTechnicianIdList
().
size
()),
RoundingMode
.
HALF_DOWN
);
MallOrderTechnician
mallOrderTechnician
=
new
MallOrderTechnician
();
mallOrderTechnician
.
setMallOrderId
(
mallOrder
.
getId
());
mallOrderTechnician
.
setTechnicianId
(
technicianId
);
mallOrderTechnician
.
setAchievement
(
achievement
);
mallOrderTechnicianMapper
.
insert
(
mallOrderTechnician
);
});
}
//设置命令结果
cmd
.
setExecutionResult
(
mallOrder
.
getId
());
log
.
info
(
"用户{}下单结束,时间{},耗时{}"
,
cmd
.
getCustomerId
(),
System
.
currentTimeMillis
(),
System
.
currentTimeMillis
()
-
time
);
...
...
@@ -314,15 +394,45 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder
}
@Override
public
IPage
<
MallOrder
>
listMallOrderAggregate
(
Page
<
MallOrder
>
page
,
MallOrder
mallOrder
)
{
public
IPage
<
MallOrder
>
listMallOrderAggregate
(
ListMallOrderRequest
request
)
{
IPage
<
MallOrder
>
page
=
new
Page
<>(
request
.
getPageIndex
(),
request
.
getPageSize
());
LambdaQueryWrapper
<
MallOrder
>
queryW
rapper
=
new
LambdaQueryWrapper
<>();
if
(
mallOrder
.
getStatus
()
!=
null
)
{
queryWrapper
.
eq
(
MallOrder:
:
getStatus
,
mallOrder
.
getStatus
());
LambdaQueryWrapper
<
MallOrder
>
w
rapper
=
new
LambdaQueryWrapper
<>();
if
(
request
.
getStatus
()
!=
null
)
{
wrapper
.
eq
(
MallOrder:
:
getStatus
,
request
.
getStatus
());
}
queryWrapper
.
eq
(
MallOrder:
:
getCustomerId
,
mallOrder
.
getCustomerId
());
return
mallOrderMapper
.
listMallOrderAggregate
(
page
,
mallOrder
);
if
(
SessionUtils
.
getSourceFrom
().
equals
(
SessionUtils
.
technician
))
{
wrapper
.
in
(
MallOrder:
:
getStatus
,
MallOrder
.
STATUS_UN_SHIP
,
MallOrder
.
STATUS_SIGNED
);
wrapper
.
eq
(
MallOrder:
:
getTransportMode
,
MallOrder
.
TRANSPORT_MODE_SELF_TAKE
);
List
<
StoreManage
>
storeManageList
=
storeManageMapper
.
selectList
(
new
LambdaQueryWrapper
<
StoreManage
>()
.
eq
(
StoreManage:
:
getMasterUserId
,
SessionUtils
.
getTechnicianId
()));
if
(
ListUtil
.
isNotEmpty
(
storeManageList
))
{
throw
new
RRException
(
"权限不够查看订单列表"
);
}
}
if
(
SessionUtils
.
getSourceFrom
().
equals
(
SessionUtils
.
customer
))
{
wrapper
.
eq
(
MallOrder:
:
getCustomerId
,
SessionUtils
.
getCustomerId
());
}
IPage
<
MallOrder
>
mallOrderIPage
=
baseMapper
.
selectPage
(
page
,
wrapper
);
List
<
Long
>
mallOrderIdList
=
mallOrderIPage
.
getRecords
().
stream
().
map
(
MallOrder:
:
getId
).
collect
(
Collectors
.
toList
());
Map
<
Long
,
List
<
MallOrderDetail
>>
mallOrderDetailMap
=
mallOrderDetailService
.
list
(
new
LambdaQueryWrapper
<
MallOrderDetail
>()
.
in
(
MallOrderDetail:
:
getOrderId
,
mallOrderIdList
)).
stream
()
.
collect
(
Collectors
.
groupingBy
(
MallOrderDetail:
:
getOrderId
));
Map
<
Long
,
MallOrderAddress
>
mallOrderAddressMap
=
mallOrderAddressMapper
.
selectList
(
new
LambdaQueryWrapper
<
MallOrderAddress
>()
.
in
(
MallOrderAddress:
:
getOrderId
,
mallOrderIdList
)).
stream
()
.
collect
(
Collectors
.
toMap
(
MallOrderAddress:
:
getOrderId
,
mallOrderAddress
->
mallOrderAddress
,
(
k1
,
k2
)
->
k1
));
mallOrderIPage
.
getRecords
().
forEach
(
mallOrder
->
{
mallOrder
.
setMallOrderDetailList
(
mallOrderDetailMap
.
get
(
mallOrder
.
getId
()));
mallOrder
.
setMallOrderAddress
(
mallOrderAddressMap
.
get
(
mallOrder
.
getId
()));
});
return
mallOrderIPage
;
}
@Override
...
...
@@ -332,9 +442,10 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder
MallOrderAddress
mallOrderAddress
=
mallOrderAddressMapper
.
selectOne
(
new
LambdaQueryWrapper
<
MallOrderAddress
>().
eq
(
MallOrderAddress:
:
getOrderId
,
mallOrderId
));
List
<
MallOrderDetail
>
orderDetailList
=
mallOrderDetailService
.
list
(
new
LambdaQueryWrapper
<
MallOrderDetail
>().
eq
(
MallOrderDetail:
:
getOrderId
,
mallOrderId
));
List
<
StoreTechnician
>
storeTechnicianList
=
mallOrderTechnicianMapper
.
selectTechnicianList
(
mallOrderId
);
mallOrder
.
setMallOrderDetailList
(
orderDetailList
);
mallOrder
.
setMallOrderAddress
(
mallOrderAddress
);
mallOrder
.
setStoreTechnicianList
(
storeTechnicianList
);
return
mallOrder
;
}
...
...
src/main/java/com/gogirl/application/order/mall/impl/MallOrderTechnicianServiceImpl.java
0 → 100644
View file @
878f3d46
package
com
.
gogirl
.
application
.
order
.
mall
.
impl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.gogirl.application.order.mall.IMallOrderTechnicianService
;
import
com.gogirl.domain.order.mall.MallOrderTechnician
;
import
com.gogirl.infrastructure.mapper.order.mall.MallOrderTechnicianMapper
;
import
org.springframework.stereotype.Service
;
/**
* <p>
* 商城订单 - 美甲师 服务实现类
* </p>
*
* @author robbendev
* @since 2020-06-22
*/
@Service
public
class
MallOrderTechnicianServiceImpl
extends
ServiceImpl
<
MallOrderTechnicianMapper
,
MallOrderTechnician
>
implements
IMallOrderTechnicianService
{
}
src/main/java/com/gogirl/domain/order/mall/MallOrder.java
View file @
878f3d46
...
...
@@ -3,6 +3,7 @@ package com.gogirl.domain.order.mall;
import
com.baomidou.mybatisplus.annotation.*
;
import
com.fasterxml.jackson.databind.annotation.JsonSerialize
;
import
com.fasterxml.jackson.databind.ser.std.ToStringSerializer
;
import
com.gogirl.domain.store.store.StoreTechnician
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
@@ -23,10 +24,12 @@ public class MallOrder {
public
static
final
Integer
STATUS_SHIPPED
=
3
;
//订单已签收
public
static
final
Integer
STATUS_SIGNED
=
4
;
//订单已
签收
//订单已
关闭
public
static
final
Integer
STATUS_TRADE_CLOSE
=
5
;
//订单退款中
public
static
final
Integer
STATUS_REFUNDING
=
6
;
public
static
final
Integer
PAYMENT_TYPE_WX
=
1
;
public
static
final
Integer
PAYMENT_TYPE_BALANCE
=
2
;
public
static
final
Integer
PAYMENT_TYPE_BALANCE_WX
=
3
;
...
...
@@ -36,6 +39,8 @@ public class MallOrder {
public
static
final
Integer
CLOSE_REFUND
=
2
;
public
static
final
Integer
CLOSE_CUSTOMER_CANCEL
=
3
;
public
static
final
Integer
TRANSPORT_MODE_MAIL
=
1
;
public
static
final
Integer
TRANSPORT_MODE_SELF_TAKE
=
2
;
@TableId
(
type
=
IdType
.
ID_WORKER
)
@JsonSerialize
(
using
=
ToStringSerializer
.
class
)
...
...
@@ -121,5 +126,8 @@ public class MallOrder {
@ApiModelProperty
(
value
=
"配送地址id"
,
required
=
true
)
private
Long
mallOrderAddressId
;
@TableField
(
exist
=
false
)
private
List
<
StoreTechnician
>
storeTechnicianList
;
}
src/main/java/com/gogirl/domain/order/mall/MallOrderTechnician.java
0 → 100644
View file @
878f3d46
package
com
.
gogirl
.
domain
.
order
.
mall
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
/**
* <p>
* 商城订单 - 美甲师
* </p>
*
* @author robbendev
* @since 2020-06-22
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
@Accessors
(
chain
=
true
)
@ApiModel
(
value
=
"MallOrderTechnician对象"
,
description
=
"商城订单 - 美甲师"
)
public
class
MallOrderTechnician
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
type
=
IdType
.
AUTO
)
private
Integer
id
;
@ApiModelProperty
(
value
=
"订单id :mall_order.id"
)
private
Long
mallOrderId
;
@ApiModelProperty
(
value
=
"美甲师id : store_technician.id"
)
private
Integer
technicianId
;
@ApiModelProperty
(
value
=
"美甲师订单业绩"
)
private
BigDecimal
achievement
;
}
src/main/java/com/gogirl/infrastructure/mapper/order/mall/MallOrderTechnicianMapper.java
0 → 100644
View file @
878f3d46
package
com
.
gogirl
.
infrastructure
.
mapper
.
order
.
mall
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.gogirl.domain.order.mall.MallOrderTechnician
;
import
com.gogirl.domain.store.store.StoreTechnician
;
import
java.util.List
;
/**
* <p>
* 商城订单 - 美甲师 Mapper 接口
* </p>
*
* @author robbendev
* @since 2020-06-22
*/
public
interface
MallOrderTechnicianMapper
extends
BaseMapper
<
MallOrderTechnician
>
{
/**
* 根据订单id获取订单推荐美甲师
*
* @param mallOrderId
* @return
*/
List
<
StoreTechnician
>
selectTechnicianList
(
Long
mallOrderId
);
}
src/main/java/com/gogirl/infrastructure/util/SessionUtils.java
View file @
878f3d46
...
...
@@ -8,6 +8,9 @@ import com.gogirl.infrastructure.common.exception.RRException;
*/
public
class
SessionUtils
{
public
static
final
String
technician
=
"technician"
;
public
static
final
String
customer
=
"techncustomerician"
;
/*美甲师会话线程变量*/
private
static
final
ThreadLocal
<
GogirlToken
>
technicianTokenThreadLocal
=
new
ThreadLocal
<>();
/*用户会员线程变量*/
...
...
src/main/java/com/gogirl/infrastructure/util/lock/MallOrderIdLock.java
0 → 100644
View file @
878f3d46
package
com
.
gogirl
.
infrastructure
.
util
.
lock
;
import
java.util.HashMap
;
import
java.util.concurrent.locks.ReentrantLock
;
/**
* * 分段锁,系统提供一定数量的原始锁,根据传入用户id值获取对应的锁并加锁 * 注意:要锁的用户id值如果发生改变,有可能导致锁无法成功释放!!!
*/
public
class
MallOrderIdLock
{
private
final
static
HashMap
<
Long
,
ReentrantLock
>
lockMap
=
new
HashMap
<>();
private
long
segments
=
1
;
// 默认分段数量
private
MallOrderIdLock
()
{
init
(
null
,
false
);
}
private
MallOrderIdLock
(
Integer
counts
,
boolean
fair
)
{
init
(
counts
,
fair
);
}
/*静态内部类实现单例*/
public
static
MallOrderIdLock
getInstance
()
{
return
SingletonHolder
.
instance
;
}
private
void
init
(
Integer
counts
,
boolean
fair
)
{
if
(
counts
!=
null
)
{
segments
=
counts
;
}
for
(
long
i
=
0
;
i
<
segments
;
i
++)
{
lockMap
.
put
(
i
,
new
ReentrantLock
(
fair
));
}
}
public
void
lock
(
long
key
)
{
ReentrantLock
lock
=
lockMap
.
get
(
key
%
segments
);
lock
.
lock
();
}
public
void
unlock
(
long
key
)
{
ReentrantLock
lock
=
lockMap
.
get
(
key
%
segments
);
lock
.
unlock
();
}
@Override
public
String
toString
()
{
return
"SegmentLock [segments="
+
segments
+
", lockMap="
+
lockMap
+
"]"
;
}
/*静态内部类实现单例*/
private
static
class
SingletonHolder
{
private
static
final
MallOrderIdLock
instance
=
new
MallOrderIdLock
(
null
,
true
);
}
}
src/main/java/com/gogirl/interfaces/order/mall/MallOrderController.java
View file @
878f3d46
package
com
.
gogirl
.
interfaces
.
order
.
mall
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.gogirl.application.order.mall.MallOrderService
;
import
com.gogirl.domain.order.mall.MallOrder
;
import
com.gogirl.infrastructure.common.base.JsonResult
;
import
com.gogirl.infrastructure.util.SessionUtils
;
import
com.gogirl.infrastructure.util.lock.MallOrderIdLock
;
import
com.gogirl.shared.market.ListMallOrderRequest
;
import
com.gogirl.shared.market.SubmitMallOrderCommand
;
import
com.gogirl.shared.market.UpdateMallOrderTechnicianRequest
;
import
com.gogirl.shared.member.ImmediatePurchaseCommand
;
import
com.gogirl.shared.order.CancelMallOrderCommand
;
import
io.swagger.annotations.Api
;
...
...
@@ -30,8 +31,7 @@ public class MallOrderController {
@ApiOperation
(
"提交订单"
)
@PostMapping
(
"/customer/mallOrder/submitMallOrder"
)
public
JsonResult
<
MallOrder
>
submitMallOrder
(
@RequestHeader
String
token
,
@RequestBody
SubmitMallOrderCommand
cmd
)
{
public
JsonResult
<
MallOrder
>
submitMallOrder
(
@RequestBody
SubmitMallOrderCommand
cmd
)
{
log
.
info
(
"token:{}"
,
SessionUtils
.
getCustomerToken
().
toString
());
Integer
currentCustomerId
=
SessionUtils
.
getCustomerId
();
...
...
@@ -43,9 +43,7 @@ public class MallOrderController {
@ApiOperation
(
"立即购买"
)
@PostMapping
(
"/customer/mallOrder/immediatePurchase"
)
public
JsonResult
<
MallOrder
>
immediatePurchase
(
@RequestHeader
String
token
,
@RequestBody
ImmediatePurchaseCommand
cmd
)
{
log
.
info
(
"token:{}"
,
token
);
public
JsonResult
<
MallOrder
>
immediatePurchase
(
@RequestBody
ImmediatePurchaseCommand
cmd
)
{
log
.
info
(
"token:{}"
,
SessionUtils
.
getCustomerToken
().
toString
());
Integer
currentCustomerId
=
SessionUtils
.
getCustomerId
();
cmd
.
setCustomerId
(
currentCustomerId
);
...
...
@@ -64,33 +62,23 @@ public class MallOrderController {
return
JsonResult
.
success
();
}
@ApiOperation
(
"我的订单列表"
)
@ApiOperation
(
"
用户端查看
我的订单列表"
)
@PostMapping
(
"/customer/mallOrder/listMallOrderAggregate"
)
public
JsonResult
<
IPage
<
MallOrder
>>
listMallOrderAggregate
(
@RequestHeader
String
token
,
@RequestBody
ListMallOrderRequest
reqDTO
)
{
Integer
currentCustomerId
=
SessionUtils
.
getCustomerId
();
Page
<
MallOrder
>
page
=
new
Page
<>();
page
.
setCurrent
(
reqDTO
.
getPageIndex
());
page
.
setSize
(
reqDTO
.
getPageSize
());
MallOrder
mallOrder
=
ListMallOrderRequest
.
convertToMallOrder
(
reqDTO
);
mallOrder
.
setCustomerId
(
currentCustomerId
);
IPage
<
MallOrder
>
data
=
mallOrderService
.
listMallOrderAggregate
(
page
,
mallOrder
);
public
JsonResult
<
IPage
<
MallOrder
>>
listMallOrderAggregate
(
@RequestBody
ListMallOrderRequest
request
)
{
IPage
<
MallOrder
>
data
=
mallOrderService
.
listMallOrderAggregate
(
request
);
return
JsonResult
.
success
(
data
);
}
@ApiOperation
(
"查看订单详情"
)
@ApiOperation
(
"
用户端查看
查看订单详情"
)
@GetMapping
(
"/customer/mallOrder/getMallOrderAggregate/{mallOrderId}"
)
public
JsonResult
<
MallOrder
>
getMallOrderAggregate
(
@RequestHeader
String
token
,
@PathVariable
Long
mallOrderId
)
{
public
JsonResult
<
MallOrder
>
getMallOrderAggregate
(
@PathVariable
Long
mallOrderId
)
{
MallOrder
mallOrder
=
mallOrderService
.
getMallOrderAggregate
(
mallOrderId
);
return
JsonResult
.
success
(
mallOrder
);
}
@ApiOperation
((
"/用户取消订单"
))
@PostMapping
(
"/customer/mallOrder/cancelMallOrder"
)
public
JsonResult
<
Void
>
cancelMallOrder
(
@Request
Header
String
token
,
@Request
Body
CancelMallOrderCommand
cmd
)
{
public
JsonResult
<
Void
>
cancelMallOrder
(
@RequestBody
CancelMallOrderCommand
cmd
)
{
Integer
currentCustomerId
=
SessionUtils
.
getCustomerId
();
cmd
.
setCurrentCustomerId
(
currentCustomerId
);
mallOrderService
.
cancelMallOrder
(
cmd
);
...
...
@@ -105,4 +93,40 @@ public class MallOrderController {
return
JsonResult
.
success
(
freight
);
}
@ApiOperation
(
"美甲师端口查看订单列表"
)
@PostMapping
(
"/technician/mallOrder/listMallOrderAggregate"
)
public
JsonResult
<
IPage
<
MallOrder
>>
techListMallOrderAggregate
(
@RequestBody
ListMallOrderRequest
request
)
{
IPage
<
MallOrder
>
data
=
mallOrderService
.
listMallOrderAggregate
(
request
);
return
JsonResult
.
success
(
data
);
}
@ApiOperation
(
"美甲师端口查看查看订单详情"
)
@GetMapping
(
"/technician/mallOrder/getMallOrderAggregate/{mallOrderId}"
)
public
JsonResult
<
MallOrder
>
techGetMallOrderAggregate
(
@PathVariable
Long
mallOrderId
)
{
MallOrder
mallOrder
=
mallOrderService
.
getMallOrderAggregate
(
mallOrderId
);
return
JsonResult
.
success
(
mallOrder
);
}
@ApiOperation
(
"美甲师确认收货"
)
@GetMapping
(
"/technician/mallOrder/confirmOrderShip"
)
public
JsonResult
<
Void
>
confirmOrderShip
(
@RequestParam
Long
mallOrderId
)
{
MallOrderIdLock
lock
=
MallOrderIdLock
.
getInstance
();
try
{
lock
.
lock
(
mallOrderId
);
mallOrderService
.
confirmOrderShip
(
mallOrderId
);
return
JsonResult
.
success
();
}
finally
{
lock
.
unlock
(
mallOrderId
);
}
}
@ApiOperation
(
"更新商城推荐人"
)
@PostMapping
(
"/technician/mallOrder/updateMallOrderTechnician"
)
public
JsonResult
<
Void
>
updateMallOrderTechnician
(
@RequestBody
UpdateMallOrderTechnicianRequest
request
)
{
mallOrderService
.
updateMallOrderTechnician
(
request
);
return
JsonResult
.
success
();
}
}
src/main/java/com/gogirl/interfaces/order/mall/MallOrderTechnicianController.java
0 → 100644
View file @
878f3d46
package
com
.
gogirl
.
interfaces
.
order
.
mall
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* <p>
* 商城订单 - 美甲师 前端控制器
* </p>
*
* @author robbendev
* @since 2020-06-22
*/
@RestController
@RequestMapping
(
"/mall-order-technician"
)
public
class
MallOrderTechnicianController
{
}
src/main/java/com/gogirl/shared/market/MallOrderAchievement.java
0 → 100644
View file @
878f3d46
package
com
.
gogirl
.
shared
.
market
;
import
lombok.Data
;
import
java.math.BigDecimal
;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2020/6/22 3:03 下午
*/
@Data
public
class
MallOrderAchievement
{
private
BigDecimal
achievement
;
}
src/main/java/com/gogirl/shared/market/SubmitMallOrderCommand.java
View file @
878f3d46
...
...
@@ -46,6 +46,7 @@ public class SubmitMallOrderCommand {
@ApiModelProperty
(
"购物车id"
)
private
List
<
Long
>
mallShoppingCartIdList
;
private
List
<
Integer
>
technicianIdList
;
/**
* 命令执行结果 订单id
*/
...
...
src/main/java/com/gogirl/shared/market/UpdateMallOrderTechnicianRequest.java
0 → 100644
View file @
878f3d46
package
com
.
gogirl
.
shared
.
market
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.util.List
;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2020/6/22 2:36 下午
*/
@Data
public
class
UpdateMallOrderTechnicianRequest
{
@ApiModelProperty
(
"商城订单id"
)
private
Long
mallOrderId
;
@ApiModelProperty
(
"推荐人id列表"
)
private
List
<
Integer
>
technicianIdList
;
}
src/main/java/com/gogirl/shared/member/ImmediatePurchaseCommand.java
View file @
878f3d46
...
...
@@ -7,6 +7,7 @@ import lombok.Data;
import
lombok.NoArgsConstructor
;
import
java.math.BigDecimal
;
import
java.util.List
;
@Data
@AllArgsConstructor
...
...
@@ -48,4 +49,6 @@ public class ImmediatePurchaseCommand {
*/
private
Long
executionResult
;
private
List
<
Integer
>
technicianIdList
;
}
src/main/resources/mapper/MallOrderTechnicianMapper.xml
0 → 100644
View file @
878f3d46
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.gogirl.infrastructure.mapper.order.mall.MallOrderTechnicianMapper"
>
<select
id=
"selectTechnicianList"
resultType=
"com.gogirl.domain.store.store.StoreTechnician"
>
select t2.*
from mall_order_technician t1
left join store_technician t2 on t1.technician_id = t2.id
where t1.mall_order_id = #{mallOrderId}
</select>
</mapper>
src/test/java/com/gogirl/Test.java
View file @
878f3d46
...
...
@@ -8,6 +8,7 @@ import com.gogirl.application.market.coupon.CouponService;
import
com.gogirl.application.market.coupon.MarketService
;
import
com.gogirl.application.market.timescard.TimesCardCustomerRelevanceService
;
import
com.gogirl.application.market.timescard.TimesCardUsedRecordService
;
import
com.gogirl.application.order.member.impl.ChargeOrderServiceImpl
;
import
com.gogirl.application.order.serve.OrderManageService
;
import
com.gogirl.application.store.store.StoreTechnicianService
;
import
com.gogirl.application.xcx.GogirlTokenService
;
...
...
@@ -57,6 +58,7 @@ import com.gogirl.infrastructure.mapper.xcx.TimeNodeMapper;
import
com.gogirl.infrastructure.mapper.xcx.WeekConfigMapper
;
import
com.gogirl.infrastructure.schedule.Schedule
;
import
com.gogirl.infrastructure.service.mail.MailService
;
import
com.gogirl.infrastructure.util.SessionUtils
;
import
com.gogirl.shared.product.excel.ImportMallProductExcel
;
import
com.gogirl.shared.product.excel.ImportPurchaseSkuExcel
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -731,4 +733,21 @@ public class Test {
}
});
}
@Resource
ChargeOrderServiceImpl
chargeOrderService
;
@org
.
junit
.
Test
public
void
chargeCustomerCard
()
{
GogirlToken
gogirlToken
=
new
GogirlToken
();
gogirlToken
.
setDepartmentId
(
18
);
gogirlToken
.
setDepartmentName
(
"太阳新天地店"
);
gogirlToken
.
setTechnicianId
(
101
);
SessionUtils
.
putTechnicianToken
(
gogirlToken
);
chargeOrderService
.
chargeCustomerCard
(
""
,
"97008305"
,
3000
d
,
5
,
"101"
,
""
);
}
}
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