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
18f564a7
Commit
18f564a7
authored
Aug 14, 2020
by
徐康
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop' into develop
parents
426b039f
2be37e53
Show whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
301 additions
and
26 deletions
+301
-26
assortment-ordercenter-sdk/pom.xml
+1
-1
assortment-ordercenter-sdk/readme.md
+2
-0
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/adapter/OrderSdkAdapter.java
+6
-3
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/adapter/ShoppingCartAdapter.java
+4
-1
order-application-service/pom.xml
+1
-1
order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
+1
-1
order-management/src/main/java/cn/freemud/management/enums/ResponseResult.java
+3
-0
order-management/src/main/java/cn/freemud/management/service/handle/DeliveryHandle.java
+6
-1
order-management/src/main/java/cn/freemud/management/service/handle/SaasOrderHandle.java
+4
-1
order-management/src/main/java/cn/freemud/management/service/impl/McCafeMangerServiceImpl.java
+11
-5
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/GetMenuResponseDto.java
+100
-1
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/GetProductInfoDto.java
+93
-0
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/GetProductsVo.java
+2
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ItemServiceImpl.java
+11
-0
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/MaterialPromotionService.java
+1
-1
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/SetMealServiceImpl.java
+1
-1
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartNewServiceImpl.java
+28
-4
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/ShoppingCartMCoffeeServiceImpl.java
+1
-1
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/calculation/CalculationServiceImpl.java
+1
-1
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/calculation/CouponDiscountCalculation.java
+22
-2
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/entity/MCoffeeAddGoodsRequestVo.java
+2
-1
No files found.
assortment-ordercenter-sdk/pom.xml
View file @
18f564a7
...
@@ -10,7 +10,7 @@
...
@@ -10,7 +10,7 @@
<modelVersion>
4.0.0
</modelVersion>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
assortment-ordercenter-sdk
</artifactId>
<artifactId>
assortment-ordercenter-sdk
</artifactId>
<version>
2.0.1
2
-SNAPSHOT
</version>
<version>
2.0.1
3
-SNAPSHOT
</version>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<groupId>
org.springframework.boot
</groupId>
...
...
assortment-ordercenter-sdk/readme.md
View file @
18f564a7
...
@@ -81,3 +81,4 @@
...
@@ -81,3 +81,4 @@
| 2.0.9-SNAPSHOT| 新增修改取餐码接口| 谌会阳 |2020-08-08
| 2.0.9-SNAPSHOT| 新增修改取餐码接口| 谌会阳 |2020-08-08
| 2.0.11-SNAPSHOT| 麦咖啡| 谌会阳 |2020-08-08
| 2.0.11-SNAPSHOT| 麦咖啡| 谌会阳 |2020-08-08
| 2.0.12-SNAPSHOT| OrderSourceType 调整 | 谌会阳 |2020-08-10
| 2.0.12-SNAPSHOT| OrderSourceType 调整 | 谌会阳 |2020-08-10
| 2.0.13-SNAPSHOT| 加料商品 | 谌会阳 |2020-08-14
\ No newline at end of file
assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/adapter/OrderSdkAdapter.java
View file @
18f564a7
...
@@ -2456,9 +2456,12 @@ public class OrderSdkAdapter {
...
@@ -2456,9 +2456,12 @@ public class OrderSdkAdapter {
if
(
CollectionUtils
.
isNotEmpty
(
productRequest
.
getMaterialProduct
()))
{
if
(
CollectionUtils
.
isNotEmpty
(
productRequest
.
getMaterialProduct
()))
{
// 父类商品productId=productId+seq
// 父类商品productId=productId+seq
String
partnerProductId
=
productRequest
.
getProductId
()
+
"_"
+
index
;
String
partnerProductId
=
productRequest
.
getProductId
()
+
"_"
+
index
;
productRequest
.
getMaterialProduct
().
stream
().
forEach
(
for
(
CreateOrderProductRequest
material:
productRequest
.
getMaterialProduct
()){
material
->
updateOrderItemAndSettlement
(
orderItemList
,
orderSettlementCreateReqList
,
material
,
partnerId
,
partnerProductId
)
index
++;
);
material
.
setOpid
(
index
);
material
.
setSpecification
(
material
.
getProductId
());
updateOrderItemAndSettlement
(
orderItemList
,
orderSettlementCreateReqList
,
material
,
partnerId
,
partnerProductId
);
}
}
}
}
}
// 如果是套餐商品,需要转换当前商品行子集ComboProduct&GroupProduct(固定商品、可选商品)
// 如果是套餐商品,需要转换当前商品行子集ComboProduct&GroupProduct(固定商品、可选商品)
...
...
assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/adapter/ShoppingCartAdapter.java
View file @
18f564a7
...
@@ -344,7 +344,10 @@ public class ShoppingCartAdapter {
...
@@ -344,7 +344,10 @@ public class ShoppingCartAdapter {
if
(
CollectionUtils
.
isEmpty
(
cartGoods
.
getProductMaterialList
()))
return
;
if
(
CollectionUtils
.
isEmpty
(
cartGoods
.
getProductMaterialList
()))
return
;
//加料信息为空
//加料信息为空
if
(
CollectionUtils
.
isEmpty
(
spuProduct
.
getAdditionalGroupList
()))
return
;
if
(
CollectionUtils
.
isEmpty
(
spuProduct
.
getAdditionalGroupList
()))
{
cartGoods
.
setProductMaterialList
(
new
ArrayList
<>());
return
;
}
//提取加料信息
//提取加料信息
List
<
ProductBeanDTO
.
ProductGroupType
.
GroupDetailType
>
groupDetail
=
spuProduct
.
getAdditionalGroupList
().
get
(
0
).
getGroupDetail
();
List
<
ProductBeanDTO
.
ProductGroupType
.
GroupDetailType
>
groupDetail
=
spuProduct
.
getAdditionalGroupList
().
get
(
0
).
getGroupDetail
();
HashMap
<
String
,
ProductBeanDTO
.
ProductGroupType
.
GroupDetailType
>
materialHash
=
new
HashMap
<>();
HashMap
<
String
,
ProductBeanDTO
.
ProductGroupType
.
GroupDetailType
>
materialHash
=
new
HashMap
<>();
...
...
order-application-service/pom.xml
View file @
18f564a7
...
@@ -40,7 +40,7 @@
...
@@ -40,7 +40,7 @@
<dependency>
<dependency>
<groupId>
cn.freemud
</groupId>
<groupId>
cn.freemud
</groupId>
<artifactId>
assortment-ordercenter-sdk
</artifactId>
<artifactId>
assortment-ordercenter-sdk
</artifactId>
<version>
2.0.1
2
-SNAPSHOT
</version>
<version>
2.0.1
3
-SNAPSHOT
</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>
com.freemud.application.service.sdk
</groupId>
<groupId>
com.freemud.application.service.sdk
</groupId>
...
...
order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
View file @
18f564a7
...
@@ -2853,7 +2853,7 @@ public class OrderServiceImpl implements Orderservice {
...
@@ -2853,7 +2853,7 @@ public class OrderServiceImpl implements Orderservice {
//调用配送服务进行催单
//调用配送服务进行催单
OrderRemindRequestDto
dto
=
new
OrderRemindRequestDto
();
OrderRemindRequestDto
dto
=
new
OrderRemindRequestDto
();
dto
.
setOrderKey
(
reminderVo
.
getOid
());
dto
.
setOrderKey
(
reminderVo
.
getOid
());
dto
.
setStoreId
(
userLoginInfoDto
.
getStore
Id
());
dto
.
setStoreId
(
orderBean
.
getShop
Id
());
dto
.
setDeliveryChannel
(
"CanDao"
);
dto
.
setDeliveryChannel
(
"CanDao"
);
dto
.
setDisplayOrderId
(
orderBean
.
getDownstreamThirdOrderCode
());
dto
.
setDisplayOrderId
(
orderBean
.
getDownstreamThirdOrderCode
());
if
(
orderBean
.
getAddInfo
()
!=
null
){
if
(
orderBean
.
getAddInfo
()
!=
null
){
...
...
order-management/src/main/java/cn/freemud/management/enums/ResponseResult.java
View file @
18f564a7
...
@@ -166,6 +166,7 @@ public enum ResponseResult {
...
@@ -166,6 +166,7 @@ public enum ResponseResult {
ORDER_REJECT_REFUND_STATUS_END
(
"45081"
,
"订单未接单或者已取消,不能操作"
),
ORDER_REJECT_REFUND_STATUS_END
(
"45081"
,
"订单未接单或者已取消,不能操作"
),
REJECT_REFUND_ORDER_FAIL
(
"45082"
,
"拒绝退款失败"
),
REJECT_REFUND_ORDER_FAIL
(
"45082"
,
"拒绝退款失败"
),
ORDER_DELIVERY_CALL_BACK_FAILED
(
"45083"
,
"配送回调失败,为找到对应操作类型"
),
ORDER_DELIVERY_CALL_BACK_FAILED
(
"45083"
,
"配送回调失败,为找到对应操作类型"
),
ORDER_UPDATE_PICKUP_FAILED
(
"45084"
,
"更新取餐码失败"
),
/**
/**
* 支付
* 支付
*/
*/
...
@@ -208,6 +209,8 @@ public enum ResponseResult {
...
@@ -208,6 +209,8 @@ public enum ResponseResult {
DELIVERY_QUERY_ERROR
(
"50024"
,
"查询配送单失败"
),
DELIVERY_QUERY_ERROR
(
"50024"
,
"查询配送单失败"
),
DELIVERY_CANCEL_ORDER_ERROR
(
"53012"
,
"取消配送单失败"
),
DELIVERY_CANCEL_ORDER_ERROR
(
"53012"
,
"取消配送单失败"
),
DELIVERY_CREATE_ORDER_ERROR
(
"53013"
,
"创建配送单失败"
),
DELIVERY_CREATE_ORDER_ERROR
(
"53013"
,
"创建配送单失败"
),
DELIVERY_ASSEMBLY_ACK_ERROR
(
"53014"
,
"麦咖啡同步取餐码给配送失败"
),
DELIVERY_ORDER_STOP_ERROR
(
"53015"
,
"配送单停单失败"
),
/**
/**
* 配送信息
* 配送信息
...
...
order-management/src/main/java/cn/freemud/management/service/handle/DeliveryHandle.java
View file @
18f564a7
...
@@ -12,6 +12,7 @@ import cn.freemud.management.intercept.OrderServiceException;
...
@@ -12,6 +12,7 @@ import cn.freemud.management.intercept.OrderServiceException;
import
cn.freemud.management.service.OrderBaseService
;
import
cn.freemud.management.service.OrderBaseService
;
import
cn.freemud.management.thirdparty.DeliveryMCCafeClient
;
import
cn.freemud.management.thirdparty.DeliveryMCCafeClient
;
import
cn.freemud.management.util.ResponseUtil
;
import
cn.freemud.management.util.ResponseUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedeemResponse
;
import
com.freemud.application.sdk.api.couponcenter.offline.response.CouponRedeemResponse
;
import
com.freemud.application.sdk.api.deliverycenter.dto.CancelDeliveryOrderRequestDto
;
import
com.freemud.application.sdk.api.deliverycenter.dto.CancelDeliveryOrderRequestDto
;
import
com.freemud.application.sdk.api.deliverycenter.dto.CreateDeliveryOrderRequestDto
;
import
com.freemud.application.sdk.api.deliverycenter.dto.CreateDeliveryOrderRequestDto
;
...
@@ -19,6 +20,7 @@ import com.freemud.application.sdk.api.deliverycenter.response.CreateDeliveryOrd
...
@@ -19,6 +20,7 @@ import com.freemud.application.sdk.api.deliverycenter.response.CreateDeliveryOrd
import
com.freemud.application.sdk.api.deliverycenter.response.DeliveryResponseDto
;
import
com.freemud.application.sdk.api.deliverycenter.response.DeliveryResponseDto
;
import
com.freemud.application.sdk.api.deliverycenter.service.DeliveryService
;
import
com.freemud.application.sdk.api.deliverycenter.service.DeliveryService
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.service.EmailAlertService
;
import
com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest
;
import
com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
import
com.freemud.application.sdk.api.storecenter.response.StoreResponse
;
import
com.freemud.sdk.api.assortment.order.enums.OrderSourceType
;
import
com.freemud.sdk.api.assortment.order.enums.OrderSourceType
;
...
@@ -61,6 +63,8 @@ public class DeliveryHandle {
...
@@ -61,6 +63,8 @@ public class DeliveryHandle {
private
OrderBaseService
orderBaseService
;
private
OrderBaseService
orderBaseService
;
@Autowired
@Autowired
private
DeliveryMCCafeClient
deliveryMCCafeClient
;
private
DeliveryMCCafeClient
deliveryMCCafeClient
;
@Autowired
private
EmailAlertService
emailAlertService
;
/**
/**
...
@@ -140,7 +144,8 @@ public class DeliveryHandle {
...
@@ -140,7 +144,8 @@ public class DeliveryHandle {
deliveryOrderHaltedRequest
.
setStoreId
(
data
.
getShopId
());
deliveryOrderHaltedRequest
.
setStoreId
(
data
.
getShopId
());
DeliveryResponseDto
deliveryResponse
=
deliveryMCCafeClient
.
halted
(
deliveryOrderHaltedRequest
);
DeliveryResponseDto
deliveryResponse
=
deliveryMCCafeClient
.
halted
(
deliveryOrderHaltedRequest
);
if
(
deliveryResponse
==
null
||
!
StringUtils
.
equals
(
ResponseResult
.
SUCCESS
.
getCode
(),
deliveryResponse
.
getCode
()+
""
))
{
if
(
deliveryResponse
==
null
||
!
StringUtils
.
equals
(
ResponseResult
.
SUCCESS
.
getCode
(),
deliveryResponse
.
getCode
()+
""
))
{
return
ResponseUtil
.
error
(
ResponseResult
.
DELIVERY_CANCEL_ORDER_ERROR
);
emailAlertService
.
sendEmailAlert
(
"配送单停单失败"
,
String
.
format
(
"request:%s \r\nresponse:%s"
,
JSONObject
.
toJSONString
(
deliveryOrderHaltedRequest
),
JSONObject
.
toJSONString
(
deliveryResponse
)));
return
ResponseUtil
.
error
(
ResponseResult
.
DELIVERY_ORDER_STOP_ERROR
);
}
}
}
}
return
ResponseUtil
.
success
();
return
ResponseUtil
.
success
();
...
...
order-management/src/main/java/cn/freemud/management/service/handle/SaasOrderHandle.java
View file @
18f564a7
...
@@ -74,7 +74,10 @@ public class SaasOrderHandle {
...
@@ -74,7 +74,10 @@ public class SaasOrderHandle {
relatingCodeReq
.
setOperator
(
request
.
getOperator
());
relatingCodeReq
.
setOperator
(
request
.
getOperator
());
relatingCodeReq
.
setPartnerId
(
request
.
getPartnerId
());
relatingCodeReq
.
setPartnerId
(
request
.
getPartnerId
());
relatingCodeReq
.
setPickUpGoodsNo
(
request
.
getPickUpGoodsNo
());
relatingCodeReq
.
setPickUpGoodsNo
(
request
.
getPickUpGoodsNo
());
orderCenterSdkService
.
updatePickUpGoodNo
(
relatingCodeReq
,
LogThreadLocal
.
getTrackingNo
());
BaseOrderResponse
baseOrderResponse
=
orderCenterSdkService
.
updatePickUpGoodNo
(
relatingCodeReq
,
LogThreadLocal
.
getTrackingNo
());
if
(
ObjectUtils
.
notEqual
(
ResponseResult
.
SUCCESS
.
getCode
(),
baseOrderResponse
.
getErrcode
().
toString
()))
{
return
ResponseUtil
.
error
(
ResponseResult
.
ORDER_UPDATE_PICKUP_FAILED
);
}
return
ResponseUtil
.
success
();
return
ResponseUtil
.
success
();
}
}
...
...
order-management/src/main/java/cn/freemud/management/service/impl/McCafeMangerServiceImpl.java
View file @
18f564a7
package
cn
.
freemud
.
management
.
service
.
impl
;
package
cn
.
freemud
.
management
.
service
.
impl
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.base.entity.BaseResponse
;
import
cn.freemud.base.util.DateUtil
;
import
cn.freemud.management.entities.dto.request.delivery.DeliveryOrderAssemblyackRequest
;
import
cn.freemud.management.entities.dto.request.delivery.DeliveryOrderAssemblyackRequest
;
import
cn.freemud.management.entities.dto.request.order.OrderManagerRequest
;
import
cn.freemud.management.entities.dto.request.order.OrderManagerRequest
;
import
cn.freemud.management.entities.dto.response.order.OrderManagerResponse
;
import
cn.freemud.management.entities.dto.response.order.OrderManagerResponse
;
...
@@ -10,6 +11,7 @@ import cn.freemud.management.service.OrderManagerService;
...
@@ -10,6 +11,7 @@ import cn.freemud.management.service.OrderManagerService;
import
cn.freemud.management.service.handle.*
;
import
cn.freemud.management.service.handle.*
;
import
cn.freemud.management.thirdparty.DeliveryMCCafeClient
;
import
cn.freemud.management.thirdparty.DeliveryMCCafeClient
;
import
cn.freemud.management.util.ResponseUtil
;
import
cn.freemud.management.util.ResponseUtil
;
import
com.freemud.application.sdk.api.deliverycenter.response.DeliveryResponseDto
;
import
com.freemud.sdk.api.assortment.message.enums.OrderType
;
import
com.freemud.sdk.api.assortment.message.enums.OrderType
;
import
com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse
;
import
com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
...
@@ -59,7 +61,10 @@ public class McCafeMangerServiceImpl implements OrderManagerService {
...
@@ -59,7 +61,10 @@ public class McCafeMangerServiceImpl implements OrderManagerService {
if
(!
Objects
.
equals
(
orderBean
.
getOrderType
(),
OrderType
.
TAKE_OUT
.
getCode
()))
{
if
(!
Objects
.
equals
(
orderBean
.
getOrderType
(),
OrderType
.
TAKE_OUT
.
getCode
()))
{
if
(
StringUtils
.
isNotEmpty
(
request
.
getPickUpGoodsNo
())){
if
(
StringUtils
.
isNotEmpty
(
request
.
getPickUpGoodsNo
())){
//更新取餐码
//更新取餐码
saasOrderHandle
.
updatePickUpGoodNo
(
request
,
orderBean
);
BaseResponse
baseResponse
=
saasOrderHandle
.
updatePickUpGoodNo
(
request
,
orderBean
);
if
(!
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
baseResponse
.
getCode
())){
return
ResponseUtil
.
error
(
ResponseResult
.
ORDER_UPDATE_PICKUP_FAILED
);
}
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd'T'HH:mm:ss'Z'"
);
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd'T'HH:mm:ss'Z'"
);
DeliveryOrderAssemblyackRequest
assemblyAckRequest
=
new
DeliveryOrderAssemblyackRequest
();
DeliveryOrderAssemblyackRequest
assemblyAckRequest
=
new
DeliveryOrderAssemblyackRequest
();
...
@@ -68,12 +73,13 @@ public class McCafeMangerServiceImpl implements OrderManagerService {
...
@@ -68,12 +73,13 @@ public class McCafeMangerServiceImpl implements OrderManagerService {
assemblyAckRequest
.
setAssemblyTimeUTC
(
dateFormat
.
format
(
new
Date
()));
assemblyAckRequest
.
setAssemblyTimeUTC
(
dateFormat
.
format
(
new
Date
()));
assemblyAckRequest
.
setStoreId
(
orderBean
.
getShopId
());
assemblyAckRequest
.
setStoreId
(
orderBean
.
getShopId
());
//入机成功通知配送
//入机成功通知配送
deliveryMCCafeClient
.
assemblyAck
(
assemblyAckRequest
);
DeliveryResponseDto
deliveryResponse
=
deliveryMCCafeClient
.
assemblyAck
(
assemblyAckRequest
);
if
(
deliveryResponse
==
null
||
!
StringUtils
.
equals
(
ResponseResult
.
SUCCESS
.
getCode
(),
deliveryResponse
.
getCode
()+
""
))
{
return
ResponseUtil
.
error
(
ResponseResult
.
DELIVERY_ASSEMBLY_ACK_ERROR
);
}
}
}
// 异步核销券码
// 异步核销券码
couponHandle
.
asyncVerificationCoupon
(
orderBean
);
couponHandle
.
asyncVerificationCoupon
(
orderBean
);
}
}
return
ResponseUtil
.
success
();
return
ResponseUtil
.
success
();
}
}
...
@@ -86,7 +92,7 @@ public class McCafeMangerServiceImpl implements OrderManagerService {
...
@@ -86,7 +92,7 @@ public class McCafeMangerServiceImpl implements OrderManagerService {
if
(
Objects
.
equals
(
orderBean
.
getOrderType
(),
OrderType
.
TAKE_OUT
.
getCode
()))
{
if
(
Objects
.
equals
(
orderBean
.
getOrderType
(),
OrderType
.
TAKE_OUT
.
getCode
()))
{
// 订单接单
// 订单接单
BaseResponse
<
OrderManagerResponse
>
orderManagerResponseBaseResponse
=
orderConfirm
(
request
,
orderBean
);
BaseResponse
<
OrderManagerResponse
>
orderManagerResponseBaseResponse
=
orderConfirm
(
request
,
orderBean
);
if
(
ResponseResult
.
SUCCESS
.
equals
(
orderManagerResponseBaseResponse
.
getCode
())){
if
(
ResponseResult
.
SUCCESS
.
getCode
().
equals
(
orderManagerResponseBaseResponse
.
getCode
())){
//通知配送服务停单
//通知配送服务停单
deliveryHandle
.
haltedDelivery
(
orderBean
);
deliveryHandle
.
haltedDelivery
(
orderBean
);
}
}
...
...
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/GetMenuResponseDto.java
View file @
18f564a7
...
@@ -181,7 +181,7 @@ public class GetMenuResponseDto {
...
@@ -181,7 +181,7 @@ public class GetMenuResponseDto {
private
List
<
SpecificationGroupBean
>
specificationGroupList
;
private
List
<
SpecificationGroupBean
>
specificationGroupList
;
//Sku 规格 如果 当前是sku 则有值
//Sku 规格 如果 当前是sku 则有值
private
List
<
SkuProductBean
.
SkuSpecValue
>
skuSpecValues
;
private
List
<
SkuProductBean
.
SkuSpecValue
>
skuSpecValues
;
private
List
<
ProductGroupType
>
additionalGroupList
;
@NoArgsConstructor
@NoArgsConstructor
@Data
@Data
public
static
class
SkuProductBean
{
public
static
class
SkuProductBean
{
...
@@ -311,6 +311,105 @@ public class GetMenuResponseDto {
...
@@ -311,6 +311,105 @@ public class GetMenuResponseDto {
private
String
type
;
private
String
type
;
private
String
url
;
private
String
url
;
}
}
@NoArgsConstructor
@Data
public
static
class
ProductGroupType
{
//商品组ID
private
String
pgid
;
//商户ID
private
String
linkId
;
//商品组编号,跟groupId一样确认商品组唯一的字段
private
String
groupCode
;
//扩展字段
private
String
options
;
//商品组名")
private
String
name
;
//商品组规则-是否必选
private
Integer
must
;
//商品组规则-是否允许重复选
private
Integer
allowRepeat
;
//商品组规则-选择的最小数量
private
Integer
minNumber
;
//商品组规则-选择的最大数量
private
Integer
maxNumber
;
//商品组备注
private
String
remark
;
//商品组下子商品总数量
private
Integer
total
;
/**
* 商品组详情
*/
private
List
<
GroupDetailType
>
groupDetail
;
@NoArgsConstructor
@Data
public
static
class
GroupDetailType
{
/**
* 商品ID
*/
private
String
productId
;
/**
* 商品名称
*/
private
String
productName
;
/**
* 第三方商品编码
*/
private
String
customerCode
;
/**
* 标准售价
*/
private
Integer
productPrice
;
/**
* 最终售价
*/
protected
Integer
productFinalPrice
;
/**
* 最终售价
*/
protected
Integer
markUpPrice
;
/**
* 商品默认图片
*/
private
String
picture
;
/**
* 是否设置库存
*/
private
Integer
stockLimit
;
/**
* 单位
*/
protected
String
unit
;
/**
* 商品Code
*/
protected
String
productCode
;
}
}
}
}
}
}
}
}
...
...
shopping-cart-application-service/src/main/java/cn/freemud/entities/dto/GetProductInfoDto.java
View file @
18f564a7
...
@@ -13,6 +13,7 @@
...
@@ -13,6 +13,7 @@
package
cn
.
freemud
.
entities
.
dto
;
package
cn
.
freemud
.
entities
.
dto
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.List
;
import
java.util.List
;
...
@@ -40,4 +41,96 @@ public class GetProductInfoDto {
...
@@ -40,4 +41,96 @@ public class GetProductInfoDto {
* 门店商品渠道,不传则默认为default,仅对开放了门店商品渠道信息商户使用,请慎用该参数
* 门店商品渠道,不传则默认为default,仅对开放了门店商品渠道信息商户使用,请慎用该参数
*/
*/
private
String
channel
;
private
String
channel
;
/**
* 加料商品
*/
private
List
<
ProductGroupType
>
additionalGroupList
;
@NoArgsConstructor
@Data
public
static
class
ProductGroupType
{
//商品组ID
private
String
pgid
;
//商户ID
private
String
linkId
;
//商品组编号,跟groupId一样确认商品组唯一的字段
private
String
groupCode
;
//扩展字段
private
String
options
;
//商品组名")
private
String
name
;
//商品组规则-是否必选
private
Integer
must
;
//商品组规则-是否允许重复选
private
Integer
allowRepeat
;
//商品组规则-选择的最小数量
private
Integer
minNumber
;
//商品组规则-选择的最大数量
private
Integer
maxNumber
;
//商品组备注
private
String
remark
;
//商品组下子商品总数量
private
Integer
total
;
/**
* 商品组详情
*/
private
List
<
GroupDetailType
>
groupDetail
;
@NoArgsConstructor
@Data
public
static
class
GroupDetailType
{
/**
* 商品ID
*/
private
String
productId
;
/**
* 商品名称
*/
private
String
productName
;
/**
* 第三方商品编码
*/
private
String
customerCode
;
/**
* 标准售价
*/
private
Integer
productPrice
;
/**
* 最终售价
*/
protected
Integer
productFinalPrice
;
/**
* 最终售价
*/
protected
Integer
markUpPrice
;
/**
* 是否设置库存
*/
private
Integer
stockLimit
;
/**
* 商品Code
*/
protected
String
productCode
;
}
}
}
}
shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/GetProductsVo.java
View file @
18f564a7
...
@@ -45,4 +45,5 @@ public class GetProductsVo {
...
@@ -45,4 +45,5 @@ public class GetProductsVo {
* 分类名称
* 分类名称
*/
*/
private
String
categoryName
;
private
String
categoryName
;
private
List
<
String
>
materialSpuIds
;
}
}
\ No newline at end of file
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ItemServiceImpl.java
View file @
18f564a7
...
@@ -37,6 +37,7 @@ import org.slf4j.LoggerFactory;
...
@@ -37,6 +37,7 @@ import org.slf4j.LoggerFactory;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.lang.reflect.Array
;
import
java.util.*
;
import
java.util.*
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.TimeUnit
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -172,6 +173,16 @@ public class ItemServiceImpl implements ItemService {
...
@@ -172,6 +173,16 @@ public class ItemServiceImpl implements ItemService {
getProductsVo
.
setCustomerCode
(
productBean
.
getCustomerCode
());
getProductsVo
.
setCustomerCode
(
productBean
.
getCustomerCode
());
getProductsVo
.
setCategory
(
productBean
.
getCategory
());
getProductsVo
.
setCategory
(
productBean
.
getCategory
());
getProductsVo
.
setCategoryName
(
productBean
.
getCategoryName
());
getProductsVo
.
setCategoryName
(
productBean
.
getCategoryName
());
if
(
CollectionUtils
.
isNotEmpty
(
productBean
.
getAdditionalGroupList
()))
{
ArrayList
<
String
>
spuIds
=
new
ArrayList
<>();
List
<
ProductBean
.
ProductGroupType
>
additionalGroupList
=
productBean
.
getAdditionalGroupList
();
for
(
ProductBean
.
ProductGroupType
productGroupType
:
additionalGroupList
)
{
for
(
ProductBean
.
ProductGroupType
.
GroupDetailType
groupDetailType
:
productGroupType
.
getGroupDetail
())
{
spuIds
.
add
(
groupDetailType
.
getProductId
());
}
}
getProductsVo
.
setMaterialSpuIds
(
spuIds
);
}
resultMap
.
put
(
productBean
.
getPid
(),
getProductsVo
);
resultMap
.
put
(
productBean
.
getPid
(),
getProductsVo
);
getProductsVo
.
setType
(
1
);
getProductsVo
.
setType
(
1
);
// 规格ID 剔除单品
// 规格ID 剔除单品
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/MaterialPromotionService.java
View file @
18f564a7
...
@@ -151,7 +151,7 @@ public class MaterialPromotionService implements IPromotionService {
...
@@ -151,7 +151,7 @@ public class MaterialPromotionService implements IPromotionService {
mApportion
.
put
(
pk
,
materialApportion
);
mApportion
.
put
(
pk
,
materialApportion
);
continue
;
continue
;
}
}
MaterialApportion
apportion
=
mApportion
.
get
(
material
.
getGoodsId
()
);
MaterialApportion
apportion
=
mApportion
.
get
(
pk
);
apportion
.
setSalePrice
(
apportion
.
getSalePrice
()
+
material
.
getNowPrice
());
apportion
.
setSalePrice
(
apportion
.
getSalePrice
()
+
material
.
getNowPrice
());
apportion
.
setAmount
(
apportion
.
getAmount
()
+
material
.
getNowPrice
()
*
material
.
getGoodsQuantity
());
apportion
.
setAmount
(
apportion
.
getAmount
()
+
material
.
getNowPrice
()
*
material
.
getGoodsQuantity
());
apportion
.
setApportionAmount
(
apportion
.
getApportionAmount
()
+
material
.
getApportionAmount
()
*
material
.
getGoodsQuantity
());
apportion
.
setApportionAmount
(
apportion
.
getApportionAmount
()
+
material
.
getApportionAmount
()
*
material
.
getGoodsQuantity
());
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/SetMealServiceImpl.java
View file @
18f564a7
...
@@ -160,7 +160,7 @@ public class SetMealServiceImpl implements IPromotionService {
...
@@ -160,7 +160,7 @@ public class SetMealServiceImpl implements IPromotionService {
return
number
-
cartGoods
.
getQty
()
<
0
?
"该商品限"
+
number
+
"份优惠 超出按照原价计算哦"
:
""
;
return
number
-
cartGoods
.
getQty
()
<
0
?
"该商品限"
+
number
+
"份优惠 超出按照原价计算哦"
:
""
;
}
else
{
}
else
{
cartGoods
.
setAmount
((
cartGoods
.
getFinalPrice
()
+
productGroupAmount
)
*
cartGoods
.
getQty
());
cartGoods
.
setAmount
((
cartGoods
.
getFinalPrice
()
+
productGroupAmount
)
*
cartGoods
.
getQty
());
return
"该商品限"
+
goodsMap
.
get
(
cartGoods
.
getGoodsId
()).
getActualGoodsNumber
()
+
"份优惠 超出按照原价计算哦"
;
return
"该商品限"
+
goodsMap
.
get
(
cartGoods
.
getGoodsId
()).
get
Discounts
().
get
(
0
).
get
ActualGoodsNumber
()
+
"份优惠 超出按照原价计算哦"
;
}
}
}
}
}
}
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartNewServiceImpl.java
View file @
18f564a7
...
@@ -257,7 +257,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
...
@@ -257,7 +257,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
//查询多个商品库存信息
//查询多个商品库存信息
queryManyGoodsStocks
(
addShoppingCartGoodsRequestVo
,
productIds
,
productBeanListSpuClass
,
skuId
,
checkQty
);
queryManyGoodsStocks
(
addShoppingCartGoodsRequestVo
,
productIds
,
productBeanListSpuClass
,
skuId
,
checkQty
);
//this.checkMaterial(productBeanListSpuClass, cartGoods);
//ShoppingCartConvertAdapter.setClassification(cartGoods, productBeanListSpuClass);
//ShoppingCartConvertAdapter.setClassification(cartGoods, productBeanListSpuClass);
String
productName
=
null
;
String
productName
=
null
;
// 当添加的商品不是商品券时
// 当添加的商品不是商品券时
...
@@ -404,13 +404,30 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
...
@@ -404,13 +404,30 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
//查询商品信息
//查询商品信息
List
<
String
>
pids
=
new
ArrayList
<>();
List
<
String
>
pids
=
new
ArrayList
<>();
pids
.
add
(
cartGoods
.
getGoodsId
());
pids
.
add
(
cartGoods
.
getGoodsId
());
Map
<
String
,
GetProductsVo
>
products
=
itemService
.
getProducts
(
pids
,
partnerId
,
storeId
,
BusinessTypeEnum
.
getByType
(
updateShoppingCartGoodsQtyRequestVo
.
getMenuType
()).
getCode
());
Map
<
String
,
GetProductsVo
>
products
=
itemService
.
getProducts
(
pids
,
partnerId
,
storeId
,
BusinessTypeEnum
.
getByType
(
updateShoppingCartGoodsQtyRequestVo
.
getMenuType
()).
getCode
());
//if (CollectionUtils.isEmpty(cartGoods.getProductMaterialList())) return;
//if (CollectionUtils.isEmpty(products.getAdditionalGroupList())) {
// throw new ServiceException(ResponseResult.SHOPPING_CART_VERSION_ERROR);
//}
GetProductsVo
getProductsVo
=
products
.
get
(
cartGoods
.
getGoodsId
());
GetProductsVo
getProductsVo
=
products
.
get
(
cartGoods
.
getGoodsId
());
// 商品没有库存限制
// 商品没有库存限制
if
(
(
getProductsVo
==
null
)
||
(
getProductsVo
.
getStockLimit
()
!=
1
)
)
{
if
(
getProductsVo
==
null
)
{
return
;
return
;
}
}
//Todo 增加小料商品是否变化
/*
if (CollectionUtils.isNotEmpty(cartGoods.getProductMaterialList())) {
if (CollectionUtils.isEmpty(getProductsVo.getMaterialSpuIds())) {
throw new ServiceException(ResponseResult.SHOPPING_CART_VERSION_ERROR);
}
for (CartGoods.MaterialGoods materialGoods : cartGoods.getProductMaterialList()) {
if (!getProductsVo.getMaterialSpuIds().contains(materialGoods.getSpuId())) {
throw new ServiceException(ResponseResult.SHOPPING_CART_VERSION_ERROR);
}
}
}
*/
if
(
getProductsVo
.
getStockLimit
()
!=
1
)
return
;
ShoppingCartConvertAdapter
.
setClassification
(
cartGoods
,
getProductsVo
);
ShoppingCartConvertAdapter
.
setClassification
(
cartGoods
,
getProductsVo
);
GetProductStockRequestDto
requestDto
=
new
GetProductStockRequestDto
();
GetProductStockRequestDto
requestDto
=
new
GetProductStockRequestDto
();
requestDto
.
setChannel
(
BusinessTypeEnum
.
getByType
(
updateShoppingCartGoodsQtyRequestVo
.
getMenuType
()).
getCode
());
requestDto
.
setChannel
(
BusinessTypeEnum
.
getByType
(
updateShoppingCartGoodsQtyRequestVo
.
getMenuType
()).
getCode
());
...
@@ -1629,4 +1646,11 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
...
@@ -1629,4 +1646,11 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
shoppingCartGoodsResponseVo
.
setToastMsg
(
""
);
shoppingCartGoodsResponseVo
.
setToastMsg
(
""
);
}
}
}
}
public
void
checkMaterial
(
List
<
ProductBeanDTO
>
productBeanListSpuClass
,
CartGoods
cartGoods
)
{
if
(
CollectionUtils
.
isEmpty
(
cartGoods
.
getProductMaterialList
()))
return
;
if
(
CollectionUtils
.
isEmpty
(
productBeanListSpuClass
.
get
(
0
).
getAdditionalGroupList
()))
{
throw
new
ServiceException
(
ResponseResult
.
SHOPPING_CART_VERSION_ERROR
);
}
}
}
}
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/ShoppingCartMCoffeeServiceImpl.java
View file @
18f564a7
...
@@ -944,7 +944,7 @@ public class ShoppingCartMCoffeeServiceImpl {
...
@@ -944,7 +944,7 @@ public class ShoppingCartMCoffeeServiceImpl {
//购物车已存在商品券
//购物车已存在商品券
if
(
StringUtils
.
isNotBlank
(
cartGoods
.
getCouponCode
()))
{
if
(
StringUtils
.
isNotBlank
(
cartGoods
.
getCouponCode
()))
{
ActivityCalculationDiscountRequestDto
.
CalculationDiscountCoupon
calculationDiscountCoupon
=
new
ActivityCalculationDiscountRequestDto
.
CalculationDiscountCoupon
();
ActivityCalculationDiscountRequestDto
.
CalculationDiscountCoupon
calculationDiscountCoupon
=
new
ActivityCalculationDiscountRequestDto
.
CalculationDiscountCoupon
();
calculationDiscountCoupon
.
setCode
(
c
ouponCode
);
calculationDiscountCoupon
.
setCode
(
c
artGoods
.
getCouponCode
()
);
coupons
.
add
(
calculationDiscountCoupon
);
coupons
.
add
(
calculationDiscountCoupon
);
}
}
}
}
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/calculation/CalculationServiceImpl.java
View file @
18f564a7
...
@@ -234,7 +234,7 @@ public class CalculationServiceImpl {
...
@@ -234,7 +234,7 @@ public class CalculationServiceImpl {
// couponPromotionVO.setOrderType(orderType);
// couponPromotionVO.setOrderType(orderType);
// couponPromotionVO.setFlg(CouponFlag.YES.getCode());
// couponPromotionVO.setFlg(CouponFlag.YES.getCode());
//优惠券
//优惠券
couponDiscountCalculation
.
updateShoppingCartGoodsApportion
(
shoppingCartGoodsResponseVo
,
calculationDiscountResult
,
shoppingCartGoodsDto
,
premiumExchangeActivity
,
shoppingCartInfoRequestV
o
);
couponDiscountCalculation
.
updateShoppingCartGoodsApportion
(
calculationDiscountResult
,
shoppingCartGoodsDt
o
);
setMealCalculation
.
updateShoppingCartGoodsApportion
(
shoppingCartGoodsResponseVo
,
calculationDiscountResult
,
shoppingCartGoodsDto
);
setMealCalculation
.
updateShoppingCartGoodsApportion
(
shoppingCartGoodsResponseVo
,
calculationDiscountResult
,
shoppingCartGoodsDto
);
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/calculation/CouponDiscountCalculation.java
View file @
18f564a7
...
@@ -3,7 +3,7 @@ package cn.freemud.service.impl.mcoffee.calculation;
...
@@ -3,7 +3,7 @@ package cn.freemud.service.impl.mcoffee.calculation;
import
cn.freemud.adapter.CouponAdapter
;
import
cn.freemud.adapter.CouponAdapter
;
import
cn.freemud.base.util.DateUtil
;
import
cn.freemud.base.util.DateUtil
;
import
cn.freemud.entities.dto.*
;
import
cn.freemud.entities.dto.*
;
import
cn.freemud.entities.dto.activity.Activity
Query
Dto
;
import
cn.freemud.entities.dto.activity.Activity
Discounts
Dto
;
import
cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto
;
import
cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto
;
import
cn.freemud.entities.vo.*
;
import
cn.freemud.entities.vo.*
;
import
cn.freemud.enums.*
;
import
cn.freemud.enums.*
;
...
@@ -112,8 +112,28 @@ public class CouponDiscountCalculation {
...
@@ -112,8 +112,28 @@ public class CouponDiscountCalculation {
/**
/**
* 商品均摊
* 商品均摊
*/
*/
public
void
updateShoppingCartGoodsApportion
(
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
,
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
,
CreateOrderVo
.
PremiumExchangeActivity
premiumExchangeActivity
,
ShoppingCartInfoRequestVo
shoppingCartInfoRequestVo
){
public
void
updateShoppingCartGoodsApportion
(
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
,
ShoppingCartGoodsDto
shoppingCartGoodsDto
){
List
<
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
CouponResults
>
couponDiscounts
=
calculationDiscountResult
==
null
?
new
ArrayList
<>()
:
calculationDiscountResult
.
getCouponDiscounts
();
for
(
ShoppingCartGoodsDto
.
CartGoodsDetailDto
cartGoods
:
shoppingCartGoodsDto
.
getProducts
())
{
if
(
StringUtils
.
isNotEmpty
(
cartGoods
.
getCouponCode
()))
{
List
<
ActivityDiscountsDto
>
productActivityDiscountsDtos
=
new
ArrayList
<>();
for
(
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
.
CouponResults
couponDiscount
:
couponDiscounts
)
{
if
(
couponDiscount
.
getCouponCode
().
equals
(
cartGoods
.
getCouponCode
())){
ActivityDiscountsDto
activityDiscountsDto
=
new
ActivityDiscountsDto
();
activityDiscountsDto
.
setActivityCode
(
couponDiscount
.
getCouponCode
());
activityDiscountsDto
.
setActivityName
(
couponDiscount
.
getCouponCode
());
activityDiscountsDto
.
setActivityType
(
couponDiscount
.
getActivityType
());
activityDiscountsDto
.
setDiscountAmount
(
0
-
couponDiscount
.
getDiscountAmount
());
productActivityDiscountsDtos
.
add
(
activityDiscountsDto
);
cartGoods
.
setTotalDiscountAmount
(-
activityDiscountsDto
.
getDiscountAmount
());
cartGoods
.
setSalePrice
(
0L
);
cartGoods
.
setActivityDiscountsDtos
(
productActivityDiscountsDtos
);
}
}
}
}
}
}
public
void
getCoupon
(
CouponPromotionVO
couponPromotionVO
,
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
,
List
<
CartGoods
>
cartGoodsList
,
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
){
public
void
getCoupon
(
CouponPromotionVO
couponPromotionVO
,
ActivityCalculationDiscountResponseDto
.
CalculationDiscountResult
calculationDiscountResult
,
List
<
CartGoods
>
cartGoodsList
,
ShoppingCartGoodsResponseVo
shoppingCartGoodsResponseVo
){
...
...
shopping-cart-application-service/src/main/java/cn/freemud/service/impl/mcoffee/entity/MCoffeeAddGoodsRequestVo.java
View file @
18f564a7
...
@@ -42,7 +42,7 @@ public class MCoffeeAddGoodsRequestVo {
...
@@ -42,7 +42,7 @@ public class MCoffeeAddGoodsRequestVo {
* 门店Id
* 门店Id
* 商城没有门店id,如果需要门店id必传在业务中进行校验
* 商城没有门店id,如果需要门店id必传在业务中进行校验
*/
*/
//
@NotEmpty(message = "shopId不能为空")
//
@NotEmpty(message = "shopId不能为空")
private
String
shopId
;
private
String
shopId
;
/**
/**
...
@@ -55,6 +55,7 @@ public class MCoffeeAddGoodsRequestVo {
...
@@ -55,6 +55,7 @@ public class MCoffeeAddGoodsRequestVo {
*/
*/
private
String
channelType
;
private
String
channelType
;
@NotEmpty
(
message
=
"spuId不能为空"
)
private
String
spuId
;
private
String
spuId
;
private
String
skuId
;
private
String
skuId
;
...
...
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