Commit d9ff7fbf by xiaoer.li@freemud.com

Merge branch 'develop' of…

Merge branch 'develop' of http://gitlab.freemud.com/order-group-application/order-group into develop

 Conflicts:
	shopping-cart-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
parents c3ffe111 9edea7af
......@@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>assortment-ordercenter-sdk</artifactId>
<version>2.2.12-SNAPSHOT</version>
<version>2.2.16-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
......@@ -38,7 +38,7 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>ordercenter-sdk</artifactId>
<version>1.6.9-SNAPSHOT</version>
<version>1.7.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......
......@@ -101,4 +101,7 @@
| 2.2.9-SNAPSHOT| 拼单群收款 | 缪晖 | 2020-11-28 |
| 2.2.10-SNAPSHOT| coco | 缪晖 | 2020-11-29 |
| 2.2.11-SNAPSHOT| 拼单 | 缪晖 | 2020-11-30 |
| 2.2.12-SNAPSHOT| 优化混合支付svc卡直接核销券 | 李小二 | 2020-11-30 |
\ No newline at end of file
| 2.2.12-SNAPSHOT| 优化混合支付svc卡直接核销券 | 李小二 | 2020-11-30 |
| 2.2.13-SNAPSHOT| 买一赠一寄件 | 刘鹏飞 | 2020-12-1 |
| 2.2.14-SNAPSHOT| 拼单 | 缪晖 | 2020-12-2 |
| 2.2.15-SNAPSHOT| 拼单 | 缪晖 | 2020-12-2 |
\ No newline at end of file
......@@ -117,6 +117,7 @@ public class OrderSdkAdapter {
//退款状态为退款完成:event为4,默认做【创建】+【同意并退款完成】,售后单状态为【完成】
var1.setCreateEvent(PayRefundStatus.SUCCESS.equals(refundStatus) ? AfterSalesOrderCreateEventEnum.REFUND_COMPLETE.getCreateEvent() : AfterSalesOrderCreateEventEnum.RETURN_COMPLETE.getCreateEvent());
var1.setOperator(operator);
var1.setReason(reason);
return var1;
}
public CancelOrderRequest getRejectRefundRequest(String operator,String reason,QueryOrdersResponse.DataBean.OrderBean orderBean){
......@@ -271,7 +272,7 @@ public class OrderSdkAdapter {
// 买一赠一寄件信息
if(requestVO.getChooseGoods() != null && !requestVO.getChooseGoods().isEmpty()){
request.setChooseGoods(JSONArray.parseArray(JSONObject.toJSONString(requestVO.getChooseGoods()), CreateOrderRequest.ChooseGood.class));
request.setOrderSendCouponRespList(JSONArray.parseArray(JSONObject.toJSONString(requestVO.getChooseGoods()), CreateOrderRequest.ChooseGood.class));
}
return request;
......@@ -947,6 +948,7 @@ public class OrderSdkAdapter {
productBean.setOpenId(orderItemResp.getOpenId());
productBean.setNickName(orderItemResp.getNickName());
productBean.setPhotoUrl(orderItemResp.getPhotoUrl());
productBean.setPackPrice(orderItemResp.getPackPrice());
List<QueryOrdersResponse.DataBean.OrderBean.ProductBean.ProductDiscount> discountList = new ArrayList<QueryOrdersResponse.DataBean.OrderBean.ProductBean.ProductDiscount>();
List<OrderSettlementResp> orderSettlementResps1 = orderSettlementResps == null ? new ArrayList<>() : orderSettlementResps;
......@@ -2868,6 +2870,9 @@ public class OrderSdkAdapter {
//if (product.getStapleFood()!=null && product.getStapleFood()>0) {
// extInfo.setStapleFood(1);
//}
extInfo.setOriginalGoodsUid(product.getOriginalGoodsUid());
extInfo.setCartGoodsUid(product.getCartGoodsUid());
// todo 订单行扩展字段商品组
extInfo.setProductGroupList(product.getProductGroupList());
......@@ -2878,6 +2883,7 @@ public class OrderSdkAdapter {
orderItemCreateReq.setOpenId(product.getOpenId());
orderItemCreateReq.setNickName(product.getNickName());
orderItemCreateReq.setPhotoUrl(product.getPhotoUrl());
orderItemCreateReq.setPackPrice(product.getPackPrice());
// 拼单加购人信息 add by miaohui 2020.10.12 end
orderItemList.add(orderItemCreateReq);
......
......@@ -197,4 +197,20 @@ public class CreateOrderProductRequest extends BaseConfig {
/**
* 加购人头像
*/
private String photoUrl;}
private String photoUrl;
/**
* 加购人包装费
*/
private Long packPrice;
/**
* 购物车行uid
*/
private String cartGoodsUid;
/**
* 拼单买一赠一标记赠品是那个商品送的 originalGoodsUid
*/
private String originalGoodsUid;
}
......@@ -72,4 +72,14 @@ public class OrderProductAddInfoDto extends BaseConfig {
private String taxId;
private List<OrderSpecialExtraAttrRequest> specialAttrs;
/**
* 购物车行uid
*/
private String cartGoodsUid;
/**
* 拼单买一赠一标记赠品是那个商品送的 originalGoodsUid
*/
private String originalGoodsUid;
}
......@@ -199,6 +199,7 @@ public class QueryOrdersResponse {
* 支付凭证 非码流水ID
*/
private String payVoucher;
/**
* 手机号
*/
......@@ -588,6 +589,11 @@ public class QueryOrdersResponse {
*/
private String photoUrl;
/**
* 加购人包装费
*/
private Long packPrice;
/**
* 套餐子商品
*/
public List<ProductBean> comboProduct;
......@@ -597,6 +603,16 @@ public class QueryOrdersResponse {
*/
public List<ProductBean> materialProduct;
/**
* 购物车行uid
*/
private String cartGoodsUid;
/**
* 拼单买一赠一标记赠品是那个商品送的 originalGoodsUid
*/
private String originalGoodsUid;
@NoArgsConstructor
@Data
public static class ProductDiscount {
......
......@@ -542,6 +542,7 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
request.setOrderCode(orderRefundRequest.getOrderId());
request.setReqRemark(orderRefundRequest.getRemark());
request.setAfterSalesReason(orderRefundRequest.getReason());
request.setCancelReason(orderRefundRequest.getReason());
request.setOperator(orderRefundRequest.getOperator());
if(null != orderRefundRequest.getCreateEvent()) {
request.setCreateEvent(orderRefundRequest.getCreateEvent());
......@@ -723,6 +724,7 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
request.setAfterSalesType(cancelOrderRequest.getAfterSalesType().getIndex() == null ? 1 : cancelOrderRequest.getAfterSalesType().getIndex());
request.setOrderClient(cancelOrderRequest.getOrderClient());
request.setCancelReason(cancelOrderRequest.getReason());
request.setAfterSalesReason(cancelOrderRequest.getReason());
//若为4,默认做【创建】+【同意并退款完成】,售后单状态为【完成】
request.setCreateEvent(cancelOrderRequest.getCreateEvent());
request.setAfterSerialNo(cancelOrderRequest.getRefundSerialNo());
......
......@@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>assortment-shoppingcart-sdk</artifactId>
<version>2.0.11-SNAPSHOT</version>
<version>2.0.13-SNAPSHOT</version>
<dependencies>
<dependency>
......
......@@ -15,4 +15,6 @@
| 2.0.8-SNAPSHOT| coco | 刘鹏飞 | 2020-11-29 |
| 2.0.9-SNAPSHOT| 拼单 | 缪晖 | 2020-11-30 |
| 2.0.10-SNAPSHOT| 拼单 | 缪晖 | 2020-11-30 |
| 2.0.11-SNAPSHOT| 拼单 | 缪晖 | 2020-12-01 |
\ No newline at end of file
| 2.0.11-SNAPSHOT| 拼单 | 缪晖 | 2020-12-01 |
| 2.0.12-SNAPSHOT| 拼单 | 缪晖 | 2020-12-02 |
| 2.0.13-SNAPSHOT| 拼单 | 缪晖 | 2020-12-02 |
\ No newline at end of file
......@@ -315,10 +315,7 @@ public class ShoppingCartAdapter {
updateComboxGoodsInfoNew(productGroup, spuProduct, false);
}
}
//0元套餐 必须选可选或是可选
if (CollectionUtils.isEmpty(cartGoods.getProductComboList()) && CollectionUtils.isEmpty(cartGoods.getProductGroupList())) {
cartGoods.setCartGoodsUid("");
}
cartGoods.setGoodsType(GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType());
}
//更新当前商品行价格
Long newOrigOriginalPrice = 0L;
......
......@@ -25,6 +25,10 @@ public class RedisKeyConstant {
/**
* 用户购物车在redis的key前缀
*/
public final static String SAAS_SHOPPINGCART_COUPON_KEY_PREFIX_TYPE = "saas:user:info:cart:coupon:type:";
/**
* 用户购物车在redis的key前缀
*/
public final static String SAAS_USER_INFO_CART_CARTADDPRODUCT = "saas:user:info:cart:cartAddProduct:goods:";
/**
* 用户购物车总价在redis的key前缀
......
......@@ -41,4 +41,9 @@ public class CartParamDto {
private MealClearOperationEnum operationType;
private Integer couponType;
/**
* 各类券信息
*/
private List<CouponTypeVo> couponTypeList;
}
package com.freemud.sdk.api.assortment.shoppingcart.domain;
import lombok.Data;
@Data
public class CouponTypeVo {
/**
* 券类型 1:买三赠一券
*/
private Integer type;
/**
* 券code
*/
private String code;
}
......@@ -5,6 +5,8 @@ public enum SaveCouponType {
COUPON(1, "代金券"),
FREIGHT_COUPON(2, "运费券"),
MON_COUPON(3, "随单购月卡"),
THREE_TO_ONE_COUPON(4, "买三赠一券"),
THREE_TO_ONE_ACTIVITY_CODE(5, "买三赠一券虚拟活动号"),
;
private Integer code;
......
......@@ -109,6 +109,26 @@ public interface ShoppingCartBaseService {
BaseResponse clear(CartParamDto cartParamDto, String trackingNo);
/**
*
* @param cartParamDto
* @param trackingNo
* @return
*/
default BaseResponse<List<CouponTypeVo>> setTypeCartCouponCode(CartParamDto cartParamDto, String trackingNo) {
return null;
}
/**
*
* @param cartParamDto
* @param trackingNo
* @return
*/
default BaseResponse<List<CouponTypeVo>> getTypeCartCouponCode(CartParamDto cartParamDto, String trackingNo) {
return null;
}
/**
* 清除麦咖啡购物车商品行信息
*
* @param cartParamDto
......
......@@ -194,15 +194,18 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
// 若状态更新为已完成 则将失效时间改为5分钟
if (CollageOrderStatus.COMPLETE.getValue().equals(collageOrderDto.getStatus())) {
expireSeconds = 5 * 60L;
expireSeconds = 1 * 60L;
} else if (CollageOrderStatus.CANCEL.getValue().equals(collageOrderDto.getStatus())) {
expireSeconds = 1 * 60L;
}
// 修改拼单主信息失效时间
collageOrder.setExpireTime(System.currentTimeMillis() + expireSeconds * 1000);
// 更新拼单基础信息
this.putCollageBaseHash(collageBaseHashKey, collageOrder, expireSeconds);
// 若状态修改为已完成 则失效时间修改为5分钟
// 更新其他缓存失效时间
this.updateCollageOrderExpire(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId(), expireSeconds);
return CartResponseUtil.success();
......
......@@ -3,41 +3,23 @@ package com.freemud.sdk.api.assortment.shoppingcart.service.impl;
import ch.qos.logback.classic.Level;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.redis.RedisCache;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.couponcenter.enums.CouponTypeEnum;
import com.freemud.application.sdk.api.couponcenter.online.domain.*;
import com.freemud.application.sdk.api.couponcenter.online.request.ActiveBatchQueryRequest;
import com.freemud.application.sdk.api.couponcenter.online.request.CouponDetailRequest;
import com.freemud.application.sdk.api.couponcenter.online.request.PartnerRequest;
import com.freemud.application.sdk.api.couponcenter.online.response.CouponDetailResponse;
import com.freemud.application.sdk.api.couponcenter.online.service.FMActiveSdkService;
import com.freemud.application.sdk.api.couponcenter.online.service.OnlineCouponSdkService;
import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.productcenter.constant.ResponseConstant;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.freemud.application.sdk.api.productcenter.domain.ProductInfosDTO;
import com.freemud.application.sdk.api.productcenter.request.menu.GetMenuCategoryByIdsRequest;
import com.freemud.application.sdk.api.productcenter.request.product.GetProductRequest;
import com.freemud.application.sdk.api.productcenter.response.menu.GetMenuCategoryByIdsResponse;
import com.freemud.application.sdk.api.productcenter.response.menu.GetMenuCategoryInfoResponse;
import com.freemud.application.sdk.api.productcenter.response.product.GetProductInfosResponse;
import com.freemud.application.sdk.api.productcenter.service.MenuService;
import com.freemud.application.sdk.api.productcenter.service.ProductService;
import com.freemud.sdk.api.assortment.shoppingcart.adapter.ShoppingCartAdapter;
import com.freemud.sdk.api.assortment.shoppingcart.constant.*;
import com.freemud.sdk.api.assortment.shoppingcart.domain.*;
import com.freemud.sdk.api.assortment.shoppingcart.enums.SaveCouponType;
import com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest;
import com.freemud.sdk.api.assortment.shoppingcart.request.GetProductInfoRequest;
import com.freemud.sdk.api.assortment.shoppingcart.service.ShoppingCartBaseService;
import com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil;
import com.freemud.sdk.api.assortment.shoppingcart.util.DateTimeUtils;
import com.freemud.sdk.api.assortment.shoppingcart.util.PropertyConvertUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.BoundHashOperations;
......@@ -45,7 +27,6 @@ import org.springframework.data.redis.core.BoundValueOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Function;
import java.util.function.Predicate;
......@@ -154,6 +135,34 @@ public class ShoppingCartBaseServiceImpl implements ShoppingCartBaseService {
}
@Override
public BaseResponse<List<CouponTypeVo>> setTypeCartCouponCode(CartParamDto cartParamDto, String trackingNo) {
try {
String redisKey = getShoppingCartTypeCouponCodeKey(cartParamDto);
redisTemplate.delete(redisKey);
BoundValueOperations<String, List<CouponTypeVo>> operations = redisTemplate.boundValueOps(redisKey);
operations.set(cartParamDto.getCouponTypeList());
return CartResponseUtil.success();
} catch (Exception e) {
ErrorLog.printErrorLog("assortment-shoppingcart-sdk", trackingNo, e.getMessage(), "setTypeCartCouponCode", cartParamDto, e, Level.ERROR);
return null;
}
}
@Override
public BaseResponse<List<CouponTypeVo>> getTypeCartCouponCode(CartParamDto cartParamDto, String trackingNo) {
try {
String redisKey = getShoppingCartTypeCouponCodeKey(cartParamDto);
BoundValueOperations<String, List<CouponTypeVo>> operations = redisTemplate.boundValueOps(redisKey);
List<CouponTypeVo> couponTypeVos = operations.get();
return CartResponseUtil.success(couponTypeVos);
} catch (Exception e) {
ErrorLog.printErrorLog("assortment-shoppingcart-sdk", trackingNo, e.getMessage(), "getTypeCartCouponCode", cartParamDto, e, Level.ERROR);
return null;
}
}
@Override
public BaseResponse<CartGoods> getCartGoods(CartParamDto cartParamDto, String trackingNo) {
try {
String redisKey = getShoppingCartGoodsKey(cartParamDto);
......@@ -341,6 +350,10 @@ public class ShoppingCartBaseServiceImpl implements ShoppingCartBaseService {
return RedisKeyConstant.SAAS_SHOPPINGCART_COUPON_KEY_PREFIX + cartParamDto.getPartnerId() + "_" + cartParamDto.getStoreId() + "_" + cartParamDto.getUserId() + "_" + cartParamDto.getCouponType();
}
private String getShoppingCartTypeCouponCodeKey(CartParamDto cartParamDto) {
return RedisKeyConstant.SAAS_SHOPPINGCART_COUPON_KEY_PREFIX_TYPE + cartParamDto.getPartnerId() + "_" + cartParamDto.getStoreId() + "_" + cartParamDto.getUserId();
}
/**
* 获取记录购物车价格的key
*
......
......@@ -85,7 +85,7 @@
</dependency>
<dependency>
<groupId>cn.freemud</groupId>
<version>1.6.9-SNAPSHOT</version>
<version>1.7.1-SNAPSHOT</version>
<artifactId>ordercenter-sdk</artifactId>
</dependency>
<dependency>
......
......@@ -40,7 +40,7 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>assortment-ordercenter-sdk</artifactId>
<version>2.2.12-SNAPSHOT</version>
<version>2.2.16-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......
......@@ -229,7 +229,7 @@ public class OrderAdapter {
.actualPrice(discountDeliveryAmount)
.build();
if(hasDeliveryMonthCard && StringUtils.isNotBlank(storeResponseDto.getBenefitCardDiscountAmount())) {
createOrderAccountDto.setNote((Integer.parseInt(storeResponseDto.getBenefitCardDiscountAmount())*100)+"");
createOrderAccountDto.setNote(Double.valueOf(Double.valueOf(storeResponseDto.getBenefitCardDiscountAmount())*100).intValue()+"");
}
orderAccountDtos.add(createOrderAccountDto);
}
......@@ -1208,6 +1208,7 @@ public class OrderAdapter {
if (ordersBean.getDeliverStatus() != null) {
responseVo.setHasThirdDelivery(true);
}
responseVo.setDeliveryStatus(ordersBean.getDeliverStatus());
responseVo.setQueueIndex(ordersBean.getQueueIndex());
responseVo.setButtonRefund(orderViewStatusDto.getButtonRefund());
responseVo.setButtonContactPartner(orderViewStatusDto.getButtonContactPartner());
......@@ -2037,6 +2038,7 @@ public class OrderAdapter {
productVo.setOpenId(productBean.getOpenId());
productVo.setNickName(productBean.getNickName());
productVo.setPhotoUrl(productBean.getPhotoUrl());
productVo.setPackPrice(productBean.getPackPrice());
List<InventedParentActivityVo> inventedParentActivityVos = new ArrayList<>();
String attributeNames = "";
if (StringUtils.isNotBlank(productBean.getAddInfo()) && productBean.getAddInfo().contains("attributeNames")) {
......@@ -2057,6 +2059,11 @@ public class OrderAdapter {
}
productVo.setInventedParentActivitiesVo(inventedParentActivityVos);
}
// 购物车行id
productVo.setCid(orderProductAddInfoDto.getCartGoodsUid());
// 购物车行父id
productVo.setOcid(orderProductAddInfoDto.getOriginalGoodsUid());
}
productVo.setOriginalPrice(productBean.getPrice());
productVo.setFinalPrice(productBean.getSalePrice());
......@@ -2409,6 +2416,10 @@ public class OrderAdapter {
createOrderProductDemoDto.setOpenId(cartGoodsDetailDto.getOpenId());
createOrderProductDemoDto.setNickName(cartGoodsDetailDto.getUserName());
createOrderProductDemoDto.setPhotoUrl(cartGoodsDetailDto.getPhotoUrl());
createOrderProductDemoDto.setPackPrice(cartGoodsDetailDto.getPackPrice());
createOrderProductDemoDto.setCartGoodsUid(cartGoodsDetailDto.getCartGoodsUid());
createOrderProductDemoDto.setOriginalGoodsUid(cartGoodsDetailDto.getOriginalGoodsUid());
return createOrderProductDemoDto;
}
......
......@@ -5,8 +5,12 @@ import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.TakeMealNoticesVO;
import cn.freemud.service.CallerService;
import cn.freemud.utils.ResponseUtil;
import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -14,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
* 叫号器
*/
@Slf4j
@RequestMapping("/caller")
@RequestMapping("order/caller")
@RestController
@Validated
public class CallerController {
......@@ -29,7 +33,9 @@ private CallerService callerService;
* 取餐通知
* @return
*/
public BaseResponse takeMealNotices(TakeMealNoticesVO vo){
@PostMapping("/takeMealNotices")
@ApiAnnotation(logMessage = "takeMealNotices")
public BaseResponse takeMealNotices(@Validated @LogParams @RequestBody TakeMealNoticesVO vo){
return callerService.takeMealNotices(vo);
}
......
......@@ -42,7 +42,7 @@ public class DeliveryController {
@ApiOperation(value = "配送回调", notes = "配送回调", produces = "application/json")
@PostMapping("/delivery/callbackUrl")
public BaseResponse callbackUrl(@Valid @LogParams @RequestBody CallbackUrlRequestDto request) {
return deliveryService. callbackUrl(request);
return deliveryService.callbackUrl(request);
}
@ApiAnnotation(logMessage = "麦咖啡配送回调")
......
......@@ -13,10 +13,14 @@ public class DeliveryStatusAndRiderPositionDto {
*/
private String deliveryId;
/**
* 经纬度
* 骑手经纬度
*/
private String currentPoint;
/**
* 门店经纬度
*/
private String storePoint;
/**
* 配送状态
*/
private Integer devlieryStatus;
......@@ -24,5 +28,9 @@ public class DeliveryStatusAndRiderPositionDto {
* 距离
*/
private Integer distance;
/**
* 门店联系电话
*/
private String storePhone;
}
......@@ -74,4 +74,13 @@ public class MacCafeCallbackUrlRequestDto {
*/
private Integer reviewStatus;
/**
* 取消原因
*/
private String cancelReason;
/**
* 退款发起方,0用户 1餐道
*/
private Integer cancelApplicant;
}
......@@ -17,9 +17,9 @@ public class DeliveryErrorReminder {
private String createTime;
/**
* 户电话
* 户电话
*/
private String customerPhone;
private String merchantPhone;
/**
* 订单号
......
......@@ -10,23 +10,48 @@ import java.util.List;
public class SubscribeMessageRequest {
/**
* 预约单下单成功通知
*/
private BookingOrderPayedScene bookingOrderPayedScene;
/**
* 预约单取单提醒
*/
private BookingOrderPayedScene bookingOrderTakeReminderScene;
/**
* 渠道
* 1 微信小程序
* 2 支付宝小程序
* 3 手机app
* 4 线下应用
* 5 字节小程序
* 6 h5
*/
private Integer channel =1;
/**
* 配送异常提醒
*/
private Integer channel;
private DeliveryErrorReminder deliveryErrorReminder;
/**拼单提醒
*
*/
private GroupBuyingStatusReminder groupBuyingStatusReminder;
/**
* 即时单下单成功通知
*/
private InstantOrderPayedScene instantOrderPayedScene;
/**
* 即时单取餐通知
*/
private InstantOrderPayedScene instantOrderTakeReminderScene;
/**
*
*/
private String messageEventType;
/**
......@@ -39,10 +64,23 @@ public class SubscribeMessageRequest {
*/
private List<String> openIdList;
/**
*自配送配送通知
*/
private OrderDeliveryScene orderDeliveryScene;
/**
*
*/
private SceneCouponRequest sceneCouponExpiredRequest;
/**
* //即时单scene_instant
* //预约单:scene_appoint
* //自配送单:scene_self_delivery
* //拼单提醒:scene_group_buying
*/
private String scene;
private SceneCouponRequest sceneCouponReceiveRequest;
private SceneInviteGiftRequest sceneInviteGiftRequest;
......
......@@ -245,6 +245,16 @@ public class ShoppingCartGoodsDto {
private String photoUrl;
/**
* 加购人包装费
*/
private Long packPrice;
/**
* 购物车行id
*/
private String cartGoodsUid;
/**
* 配料或属性
*/
private List<CartGoodsDetailDto.CartGoodsExtra> extraList = new ArrayList<>(0);
......@@ -264,6 +274,12 @@ public class ShoppingCartGoodsDto {
private List<CartGoodsDetailDto> materialList;
/**
* 拼单买一赠一标记赠品是那个商品送的 originalGoodsUid
*/
private String originalGoodsUid;
@Data
public final static class CartGoodsExtra {
/**
......
......@@ -22,6 +22,7 @@ public class GroupBuyDetailResp {
private int payerNum;
private Long totalAmount;
private Long orderAmount;
private List<GroupBuyDto> payerList;
}
package cn.freemud.entities.vo;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import lombok.Data;
import org.omg.PortableInterceptor.INACTIVE;
import java.util.List;
......@@ -17,9 +15,33 @@ public class OrderRiderResponseVo {
*/
private String deliveryId;
/**
* 经纬度
* 门店联系电话
*/
private String currentPoint;
private String storePhone;
/**
* 骑手经度
*/
private String riderLongitude;
/**
* 骑手纬度
*/
private String riderLatitude;
/**
* 用户经度
*/
private String userLongitude;
/**
* 用户纬度
*/
private String userLatitude;
/**
* 门店经度
*/
private String shopLongitude;
/**
* 门店纬度
*/
private String shopLatitude;
/**
* 配送状态
*/
......
......@@ -64,6 +64,11 @@ public class ProductVo {
private String photoUrl;
/**
* 加购人包装费
*/
private Long packPrice;
/**
* 商品的规格信息加属性信息
*/
private String extras;
......@@ -176,4 +181,14 @@ public class ProductVo {
private List<ProductVo> setMaterialProducts;
/**
* 购物车行uid
*/
private String cid;
/**
* 拼单买一赠一标记赠品是那个商品送的 originalGoodsUid
*/
private String ocid;
}
......@@ -261,6 +261,11 @@ public class QueryCollageOrderResponseVo {
*/
private Boolean enableRefund;
/**
* 订单特殊类型 1:普通订单 2:拼团订单 3:秒杀订单 4:拼单订单
*/
private Byte marketingType;
//private List<ProductVo> products;
......
......@@ -310,6 +310,10 @@ public class QueryOrderResponseVo {
* 是否是第三方配送单
*/
private Boolean hasThirdDelivery;
/**
* 配送状态
*/
private Integer deliveryStatus;
/**
* 骑手名称 商家自配送名称
......
......@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* @author freemud
*/
......@@ -25,5 +27,5 @@ public class TakeMealNoticesVO {
private Integer cupTotalNum;
@ApiModelProperty(value = "订单")
private String[] orders;
private List<String> orderList;
}
package cn.freemud.enums;
import lombok.Getter;
@Getter
public enum MessageEventTypeEnum {
INSTANT_ORDER_PAYED(30, "INSTANT_ORDER_PAYED", "即时单下单成功通知"),
BOOKING_ORDER_PAYED(31, "BOOKING_ORDER_PAYED", "预约单下单成功通知"),
SELF_DELIVERY_ORDER_PAYED(32, "SELF_DELIVERY_ORDER_PAYED", "自配送下单成功通知"),
ORDER_DELIVERY(33, "ORDER_DELIVERY", "订单配送通知"),
BOOKING_ORDER_TAKE_REMINDER(34, "BOOKING_ORDER_TAKE_REMINDER", "预约单取单通知"),
INSTANT_ORDER_TAKE_REMINDER(35, "INSTANT_ORDER_TAKE_REMINDER", "即时单取单通知"),
GROUP_BUYING_STATUS_REMINDER(36, "GROUP_BUYING_STATUS_REMINDER", "拼单提醒"),
DELIVERY_ERROR_REMINDER(37, "DELIVERY_ERROR_REMINDER", "配送异常提醒"),
;
private int code;
private String type;
private String name;
MessageEventTypeEnum(int code, String type,String name) {
this.code = code;
this.type = type;
this.name = name;
}
}
......@@ -67,6 +67,7 @@ public enum ResponseResult {
STORE_CLOSED_FOREVER("43019", "门店已关闭,请选择其他门店"),
STORE_CLOSED_THE_NIGHT("43020", "门店已打烊,请选择其他门店"),
STORE_DELIVERY_HOUR_ERROR("43021", "门店外卖时间错误"),
STORE_WILL_COLSE("43022", "门店即将打烊,不能下单"),
/**
* 购物车状态码
......
package cn.freemud.service;
import cn.freemud.amp.body.OrderBody;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.RedisKeyConstant;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.GetMemberInfoByIdRequestDto;
import cn.freemud.entities.dto.GetMemberInfoByIdResponseDto;
import cn.freemud.entities.dto.ecology.BookingOrderPayedScene;
import cn.freemud.entities.dto.ecology.InstantOrderPayedScene;
import cn.freemud.entities.dto.ecology.SubscribeMessageRequest;
import cn.freemud.entities.dto.ecology.SubscribeMessageResponse;
import cn.freemud.entities.vo.TakeMealNoticesVO;
import cn.freemud.enums.MessageEventTypeEnum;
import cn.freemud.service.impl.CheckOrder;
import cn.freemud.service.thirdparty.CustomerClient;
import cn.freemud.service.thirdparty.EcologyAdminApplicationClient;
import cn.freemud.utils.DateTimeUtil;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.sdk.api.assortment.order.enums.NewOrderType;
import com.freemud.sdk.api.assortment.order.request.order.BaseQueryOrderRequest;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrderByIdResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@AllArgsConstructor
@Service
@Slf4j
public class CallerService {
@Autowired
private RedisTemplate redisTemplate;
private final RedisTemplate redisTemplate;
private final EcologyAdminApplicationClient ecologyAdminApplicationClient;
private final OrderCenterSdkService orderCenterSdkService;
private final CheckOrder checkOrder;
/**
* 缓存 待制作杯数量
*
* @param vo
*/
private void cacheTakeMealNotices(TakeMealNoticesVO vo){
private void cacheTakeMealNotices(TakeMealNoticesVO vo) {
String redisKey = RedisKeyConstant.notMadeGoodsNumber(vo.getPartnerId(), vo.getStoreCode());
redisTemplate.boundValueOps(redisKey).set(vo.getCupTotalNum(),1, TimeUnit.DAYS);
redisTemplate.boundValueOps(redisKey).set(vo.getCupTotalNum(), 1, TimeUnit.DAYS);
}
/**
* pos -> 推送模板消息
* 即时单
* 预约单
*
* @param vo
* @return
*/
public BaseResponse takeMealNotices(TakeMealNoticesVO vo) {
cacheTakeMealNotices(vo);
if (Objects.isNull(vo.getOrderList())) {
return ResponseUtil.success();
}
vo.getOrderList().stream().forEach(orderId -> {
BaseQueryOrderRequest baseQueryOrderRequest = new BaseQueryOrderRequest();
baseQueryOrderRequest.setOrderId(orderId);
baseQueryOrderRequest.setTrackingNo(LogTreadLocal.getTrackingNo());
QueryOrderByIdResponse queryOrderByIdResponse = orderCenterSdkService.queryOrderById(baseQueryOrderRequest);
QueryOrdersResponse.DataBean.OrderBean orderBean = queryOrderByIdResponse.getData();
if (Objects.isNull(orderBean)) {
return;
}
OrderExtInfoDto extInfoDto = JSONObject.parseObject(orderBean.getExtInfo(), new TypeReference<OrderExtInfoDto>() {
});
if (Objects.isNull(extInfoDto.getOpenid())) {
log.error("订单号:{},没有openId", orderId);
return;
}
StoreResponse storeResponse = checkOrder.getStoreInfo(orderBean.getCompanyId(), orderBean.getShopId(), LogTreadLocal.getTrackingNo());
if (storeResponse.getBizVO() == null) {
log.error("订单号:{},商户号:{},没有门店信息", orderId, orderBean.getShopId());
return;
}
List<Integer> takeawayOrderType = Lists.newArrayList(
NewOrderType.RESERVED_EXPRESS.getCode(),
NewOrderType.GENERAL_EXPRESS.getCode());
if (takeawayOrderType.contains(orderBean.getNewOrderType())) {
// 外卖单不发模板消息
return;
}
orderBean.setShopAddress(storeResponse.getBizVO().getAddress());
SubscribeMessageRequest subscribeMessageRequest = new SubscribeMessageRequest();
subscribeMessageRequest.setMiniAppId(extInfoDto.getAppid());
subscribeMessageRequest.setOpenIdList(Lists.newArrayList(extInfoDto.getOpenid()));
// coco order_client 2微信小程序 3支付宝小程序 需要转换生态的
subscribeMessageRequest.setChannel(orderBean.getOrderClient().equals("2") ? 1 : 2);
boolean reservationOrder = isReservationOrder(orderBean);
if (reservationOrder) {
//预约单
BookingOrderPayedScene scene = new BookingOrderPayedScene();
scene.setMerchantAddress(orderBean.getShopAddress());
scene.setMerchantName(orderBean.getShopName());
scene.setOrderNo(orderId);
scene.setOrderType(orderBean.getNewOrderType().toString());
scene.setTakeOrderTime(DateTimeUtil.getCurrentTimeStr());
subscribeMessageRequest.setBookingOrderTakeReminderScene(scene);
subscribeMessageRequest.setScene("scene_appoint");
subscribeMessageRequest.setMessageEventType(MessageEventTypeEnum.BOOKING_ORDER_TAKE_REMINDER.getType());
} else {
InstantOrderPayedScene scene = new InstantOrderPayedScene();
scene.setFriendlyTips("饮品已制作完成,请凭取单号及时到店取单哟!");
scene.setOrderType(orderBean.getNewOrderType().toString());
scene.setMerchantAddress(orderBean.getShopAddress());
scene.setMerchantName(orderBean.getShopName());
scene.setOrderNo(orderId);
subscribeMessageRequest.setInstantOrderTakeReminderScene(scene);
subscribeMessageRequest.setScene("scene_instant");
subscribeMessageRequest.setMessageEventType(MessageEventTypeEnum.INSTANT_ORDER_TAKE_REMINDER.getType());
}
//发送模板消息
SubscribeMessageResponse subscribeMessageResponse = ecologyAdminApplicationClient.subscribeMessage(subscribeMessageRequest);
if (!ResponseCodeConstant.RESPONSE_SUCCESS.equals(subscribeMessageResponse.getCode())) {
log.error("ecologyAdminApplicationClient.subscribeMessage调用失败 ,request:{},body:{}", JSON.toJSONString(subscribeMessageResponse),
JSON.toJSONString(subscribeMessageRequest));
}
});
return ResponseUtil.success();
}
public BaseResponse takeMealNotices(TakeMealNoticesVO vo){
cacheTakeMealNotices(vo);
//发送取餐通知消息 cc 生态
return ResponseUtil.success();
/**
* 是否预约单
* true 预约单
*
* @return
*/
private boolean isReservationOrder(QueryOrdersResponse.DataBean.OrderBean orderBean) {
if (Objects.nonNull(orderBean.getGmtExpect())) {
return Boolean.TRUE;
}
return Boolean.FALSE;
}
}
......@@ -5,6 +5,8 @@ import cn.freemud.amp.service.ProduceMQService;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.entities.dto.delivery.*;
import cn.freemud.entities.dto.ecology.DeliveryErrorReminder;
import cn.freemud.entities.dto.ecology.OrderDeliveryScene;
import cn.freemud.entities.dto.ecology.SubscribeMessageRequest;
import cn.freemud.entities.dto.pos.PosBaseRequestDto;
import cn.freemud.entities.vo.delivery.DeliveryAmountVo;
......@@ -21,17 +23,24 @@ import cn.freemud.service.ThirdDeliveryService;
import cn.freemud.service.thirdparty.DeliveryFeiginClient;
import cn.freemud.service.thirdparty.EcologyAdminApplicationClient;
import cn.freemud.service.thirdparty.PosClient;
import cn.freemud.utils.DateTimeUtil;
import cn.freemud.utils.LogUtil;
import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.freemud.application.sdk.api.constant.ResponseConstant;
import com.freemud.application.sdk.api.deliverycenter.dto.CancelDeliveryOrderRequestDto;
import com.freemud.application.sdk.api.deliverycenter.response.DeliveryInfoDto;
import com.freemud.application.sdk.api.deliverycenter.response.DeliveryResponseDto;
import com.freemud.application.sdk.api.deliverycenter.service.DeliveryService;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.enums.OrderType;
import com.freemud.application.sdk.api.ordercenter.request.OrderCollectReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
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.service.StoreCenterService;
import com.freemud.application.sdk.api.structure.request.PushMessageNoticeDto;
import com.freemud.application.sdk.api.structure.service.MessageCenterClient;
import com.freemud.sdk.api.assortment.order.request.order.AssortmentUpdateDeliveryAbnormalRequest;
......@@ -50,6 +59,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
......@@ -90,6 +101,8 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
private String deliveryMicroMessagePartner;
@Autowired
private EcologyAdminApplicationClient ecologyAdminApplicationClient;
@Autowired
private StoreCenterService storeCenterService;
@Override
public BaseResponse callbackUrl(CallbackUrlRequestDto request) {
......@@ -134,11 +147,9 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
posBaseRequestDto.setDelivery_status(DeliveryStatus.ALLOTRIDER.getCode());
posBaseRequestDto.setPartner_id(partnerId);
sendPosService(deliveryStatus,posBaseRequestDto);
sendMicroMessage(partnerId,request.getOrderId());
} else if (deliveryStatus == DeliveryStatus.RIDERGETMEAL.getCode() || deliveryStatus == DeliveryStatus.RIDERSTARTDELIVERY.getCode()) {
// 订单配送
sendPosService(deliveryStatus,posBaseRequestDto);
sendMicroMessage(partnerId,request.getOrderId());
} else if (deliveryStatus == DeliveryStatus.DELIVERYARRIVED.getCode()) {
// 订单已完成
sendPosService(deliveryStatus,posBaseRequestDto);
......@@ -150,8 +161,6 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
sendPosDeliveryStatus = 81;
}
sendPosMessage(partnerId, storeCode, request.getOrderId(), sendPosDeliveryStatus, request.getRemark());
sendMicroMessage(partnerId,request.getOrderId());
// 取消外卖中台配送单 订单异常
// 如果 "配送单异常并且顾客更改配送地址" 不取消配送单
if (!isDeliveryAbnormalAndCustomerChangedAddress(request)) {
......@@ -168,6 +177,8 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
produceMQService.sendOfDeliveryInfo(request);
produceMQService.sendRocketMqOfDeliveryInfo(request);
}
//配送订阅消息
sendMicroMessage(partnerId,request.getOrderId(),deliveryStatus);
// else {
// return ResponseUtil.error(ResponseResult.SYSTEM_ERROR.getCode(), "订单回调状态有误");
......@@ -185,6 +196,11 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
OrderManagerRequest orderManagerRequest=new OrderManagerRequest();
orderManagerRequest.setPartnerId(request.getPartnerId());
orderManagerRequest.setOrderId(request.getOrderId());
if("1".equals(request.getCancelApplicant())) {
orderManagerRequest.setReason(StringUtils.isNotBlank(request.getCancelReason())?request.getCancelReason():"餐道主动取消");
} else {
orderManagerRequest.setReason(null);
}
orderManagerRequest.setOperator("配送回调");
......@@ -370,7 +386,7 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
/**
* 配送消息推送
*/
public void sendMicroMessage(String partnerId, String orderId){
public void sendMicroMessage(String partnerId,String orderId,int deliveryStatus){
//如果商户配置了配送订阅消息推送
if(deliveryMicroMessagePartner.contains(partnerId)){
try {
......@@ -380,7 +396,55 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
QueryOrderByIdResponse response = orderCenterSdkService.queryOrderById(baseQueryOrderRequest);
QueryOrdersResponse.DataBean.OrderBean orderBean = response.getData();
SubscribeMessageRequest request = new SubscribeMessageRequest();
ecologyAdminApplicationClient.subscribeMessage(request);
OrderExtInfoDto extInfoDto = JSONObject.parseObject(orderBean.getExtInfo(), new TypeReference<OrderExtInfoDto>() {});
request.setMiniAppId(extInfoDto.getAppid());
List<String> userList = new ArrayList<>();
userList.add(extInfoDto.getOpenid());
request.setOpenIdList(userList);
request.setScene("scene_delivery");
//默认微信
request.setChannel(1);
//支付宝
if("3".equals(orderBean.getOrderClient())){
request.setChannel(2);
}
//配送订阅模板消息
if(deliveryStatus == DeliveryStatus.ALLOTRIDER.getCode()){
request.setMessageEventType("ORDER_DELIVERY");
OrderDeliveryScene orderDeliveryScene = new OrderDeliveryScene();
orderDeliveryScene.setAddress(orderBean.getAddress());
Long createTime = orderBean.getGmtCreate();
// 获取门店信息
StoreInfoRequest storeInfoRequest = new StoreInfoRequest(partnerId, orderBean.getShopId(),null);
StoreResponse storeResponse = storeCenterService.getStoreInfo(storeInfoRequest, LogThreadLocal.getTrackingNo());
//立即单外卖
if (OrderType.GENERAL_EXPRESS.getIndex()==orderBean.getNewOrderType()) {
if(storeResponse != null && storeResponse.getBizVO() != null && storeResponse.getBizVO().getServiceTime() != null){
createTime = createTime + storeResponse.getBizVO().getServiceTime()*1000*60;
orderDeliveryScene.setEstimateArrivalTime(DateTimeUtil.timeStampToTime(createTime));
}
}//预约单外卖
if(OrderType.RESERVED_EXPRESS.getIndex()==orderBean.getNewOrderType()&&orderBean.getGmtExpect()!=null){
orderDeliveryScene.setEstimateArrivalTime(DateTimeUtil.timeStampToTime(orderBean.getGmtExpect()));
}
orderDeliveryScene.setMerchantPhone(storeResponse.getBizVO().getPhone());
orderDeliveryScene.setOrderNo(orderId);
request.setOrderDeliveryScene(orderDeliveryScene);
ecologyAdminApplicationClient.subscribeMessage(request);
}
//配送异常模板消息
if(deliveryStatus == DeliveryStatus.DELIVERYCANCEL.getCode() || deliveryStatus == DeliveryStatus.DELIVERYERROR.getCode()){
request.setMessageEventType("DELIVERY_ERROR_REMINDER");
DeliveryErrorReminder deliveryErrorReminder = new DeliveryErrorReminder();
deliveryErrorReminder.setCreateTime(DateTimeUtil.timeStampToTime(orderBean.getGmtCreate()));
deliveryErrorReminder.setOrderId(orderId);
deliveryErrorReminder.setMerchantPhone(orderBean.getShopPhone());
deliveryErrorReminder.setAddress(orderBean.getAddress());
deliveryErrorReminder.setRemark("订单配送异常,请电话联系门店确认哦");
request.setDeliveryErrorReminder(deliveryErrorReminder);
ecologyAdminApplicationClient.subscribeMessage(request);
}
}catch (Exception e){
log.error("配送订阅消息推送失败:{},失败原因:{}",orderId,e.getMessage());
}
......
......@@ -26,6 +26,8 @@ import cn.freemud.interceptor.ServiceException;
import cn.freemud.manager.StoreTableNumberManager;
import cn.freemud.service.CouponService;
import cn.freemud.service.adapter.OrderCheckAdapter;
import cn.freemud.service.order.OrderRelationFactory;
import cn.freemud.service.order.OrderRelationService;
import cn.freemud.service.thirdparty.ShoppingCartClient;
import cn.freemud.utils.LogUtil;
import com.alibaba.fastjson.JSONArray;
......@@ -114,6 +116,10 @@ public class CheckOrder {
@Autowired
private OrderAdapter orderAdapter;
@Autowired
private OrderRelationFactory orderRelationFactory;
/**
* 下单会员相关校验
*/
......@@ -192,6 +198,11 @@ public class CheckOrder {
*/
public Integer checkOrderByOrderType(CreateOrderVo createOrderVo, AssortmentCustomerInfoVo userLoginInfoDto,
StoreResponse.BizVO storeResponseDto, ShoppingCartGoodsDto shoppingCartGoodsDto, String trackingNo) {
// 下单时间校验
OrderRelationService orderRelationService = orderRelationFactory.getCreateOrderTimeCheckService(createOrderVo.getPartnerId());
orderRelationService.createOrderTimeCheck(storeResponseDto, createOrderVo);
Integer pushOrderTime = 0;
//非到店或者外卖,类型错误
if (!(CreateOrderType.COLLECT_GOODS.getCode().equals(createOrderVo.getOrderType()) ||
......@@ -589,7 +600,7 @@ public class CheckOrder {
requestDto.setPremiumExchangeActivity(createOrderVo.getPremiumExchangeActivity());
// 若为拼单类型,购物车信息从新的拼单购物车获取 update by miaohui for 【ID1010972】 多人拼单
cn.freemud.base.entity.BaseResponse<ShoppingCartGoodsDto> apportionResponse;
if (createOrderVo.getMarketingType() != null && OrderMarketType.COLLAGE.getIndex() == createOrderVo.getMarketingType()) {
if (this.isCollageOrder(createOrderVo)) {
apportionResponse = shoppingCartClient.getCollageShoppingCartGoodsApportion(requestDto);
} else {
apportionResponse = shoppingCartClient.getShoppingCartGoodsApportionNew(requestDto);
......@@ -605,6 +616,32 @@ public class CheckOrder {
if (shoppingCartGoodsDto.getOriginalTotalAmount() == null) {
throw new ServiceException(ResponseResult.SHOPPING_CART_GETINFO_INVAILD);
}
// 拼单处理
if (this.isCollageOrder(createOrderVo)) {
// 处理拼单加购人信息
List<ShoppingCartGoodsDto.CartGoodsDetailDto> products = shoppingCartGoodsDto.getProducts();
ShoppingCartGoodsDto.CartGoodsDetailDto createUserGood = products.stream().filter(good -> createOrderVo.getUserId().equals(good.getUserId())).findFirst().orElse(null);
if (null == createUserGood) {
// 若拼单发起人未购买商品,则将赠品按购物车行分给加购人
products.stream().filter(good -> null == good.getUserId()).collect(Collectors.toList()).forEach(cartGoodsNullUser -> {
ShoppingCartGoodsDto.CartGoodsDetailDto parentGood = products.stream().filter(good -> good.getCartGoodsUid().equals(cartGoodsNullUser.getCartGoodsUid())).findFirst().orElse(null);
cartGoodsNullUser.setUserId(parentGood == null ? createOrderVo.getUserId() : parentGood.getUserId());
cartGoodsNullUser.setOpenId(parentGood == null ? null : parentGood.getOpenId());
cartGoodsNullUser.setUserName(parentGood == null ? null : parentGood.getUserName());
cartGoodsNullUser.setPhotoUrl(parentGood == null ? null : parentGood.getPhotoUrl());
});
} else {
products.stream().filter(good -> null == good.getUserId()).collect(Collectors.toList()).forEach(cartGoodsNullUser -> {
cartGoodsNullUser.setUserId(createUserGood.getUserId());
cartGoodsNullUser.setOpenId(createUserGood.getOpenId());
cartGoodsNullUser.setUserName(createUserGood.getUserName());
cartGoodsNullUser.setPhotoUrl(createUserGood.getPhotoUrl());
});
}
}
return shoppingCartGoodsDto;
}
......@@ -833,4 +870,14 @@ public class CheckOrder {
// throw new ServiceException(ResponseResult.STORE_ITEM_STOP_BUSINESS);
// }
}
/**
* 判断是否为拼单订单
* @param createOrderVo
* @return
*/
private boolean isCollageOrder(CreateOrderVo createOrderVo) {
return createOrderVo.getMarketingType() != null && OrderMarketType.COLLAGE.getIndex() == createOrderVo.getMarketingType();
}
}
......@@ -16,20 +16,16 @@ package cn.freemud.service.impl;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.base.util.DateUtil;
import cn.freemud.entities.dto.order.CreateOrderOperateDto;
import cn.freemud.entities.dto.wechat.*;
import cn.freemud.entities.vo.CreateOrderResponseVo;
import cn.freemud.entities.vo.QueryOrderVo;
import cn.freemud.enums.ResponseResult;
import cn.freemud.inteceptor.CommonServiceException;
import cn.freemud.service.thirdparty.EcologyAdminApplicationClient;
import cn.freemud.service.thirdparty.ShoppingCartClient;
import cn.freemud.service.thirdparty.WeChatClient;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager;
import com.freemud.application.sdk.api.ordercenter.enums.ResponseResultEnum;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderCostResp;
import com.freemud.sdk.api.assortment.order.request.order.BaseQueryOrderRequest;
import com.freemud.sdk.api.assortment.order.request.order.GroupBuyRequest;
import com.freemud.sdk.api.assortment.order.response.order.GroupBuyResponse;
......@@ -46,6 +42,7 @@ import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
......@@ -114,16 +111,17 @@ public class CollageOrderServiceImpl implements CollageOrderService {
@Override
public BaseResponse groupBuyDetail(WechatGroupBuyVo requestVo) {
// 获取拼单订单信息
QueryOrdersResponse.DataBean.OrderBean order = this.queryOrderByOrderCode(requestVo.getOrderCode());
QueryOrdersResponse.DataBean.OrderBean order = this.queryOrderByOrderCode(requestVo.getPartnerId(), requestVo.getOrderCode());
if (null == order) {
ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
return ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
}
GroupBuyDetailResp groupBuyDetailResp = new GroupBuyDetailResp();
groupBuyDetailResp.setOrderCode(order.getOid());
groupBuyDetailResp.setPartnerId(order.getCompanyId());
groupBuyDetailResp.setShopId(order.getShopId());
groupBuyDetailResp.setOrderAmount(order.getActualPayAmount());
List<QueryOrdersResponse.DataBean.OrderBean.ProductBean> productList = order.getProductList();
......@@ -134,7 +132,18 @@ public class CollageOrderServiceImpl implements CollageOrderService {
for (String payerUserId : payerUserIdList) {
groupBuyDto = new GroupBuyDto();
groupBuyDto.setUserId(payerUserId);
groupBuyDto.setAmount(productList.stream().filter(product -> payerUserId.equals(product.getUserId())).map(QueryOrdersResponse.DataBean.OrderBean.ProductBean::getSalePrice).reduce(Long::sum).get());
// 商品费用
Long itemAmount = productList.stream().filter(product -> (payerUserId.equals(product.getUserId()) && null != product.getSalePrice())).map(QueryOrdersResponse.DataBean.OrderBean.ProductBean::getSalePrice).reduce(Long::sum).orElse(0L);
// 包装费用
Long packAmount = productList.stream().filter(product -> (payerUserId.equals(product.getUserId()) && null != product.getPackPrice())).map(QueryOrdersResponse.DataBean.OrderBean.ProductBean::getPackPrice).reduce(Long::sum).orElse(0L);
// 运费分摊
Long deliveryAmount = 0L;
if (order.getOrderCostDetailList() != null) {
OrderCostResp orderCostResp = order.getOrderCostDetailList().stream().filter(detail -> (detail.getCostType().equals(2) && detail.getBillType().equals(1))).findFirst().orElse(new OrderCostResp());
BigDecimal deliveryPrice = orderCostResp.getActualCostAmount() == null ? new BigDecimal(0) : orderCostResp.getActualCostAmount();
deliveryAmount = Math.floorDiv(deliveryPrice.longValue(), payerUserIdList.size());
}
groupBuyDto.setAmount(itemAmount + packAmount + deliveryAmount);
groupBuyDto.setNickName(productList.stream().filter(product -> payerUserId.equals(product.getUserId())).findFirst().get().getNickName());
groupBuyDto.setPhotoUrl(productList.stream().filter(product -> payerUserId.equals(product.getUserId())).findFirst().get().getPhotoUrl());
list.add(groupBuyDto);
......@@ -154,7 +163,7 @@ public class CollageOrderServiceImpl implements CollageOrderService {
@Override
public BaseResponse createGroupBuy(WechatGroupBuyVo requestVo) {
// 获取拼单订单信息
QueryOrdersResponse.DataBean.OrderBean order = this.queryOrderByOrderCode(requestVo.getOrderCode());
QueryOrdersResponse.DataBean.OrderBean order = this.queryOrderByOrderCode(requestVo.getPartnerId(), requestVo.getOrderCode());
if (null == order) {
ResponseUtil.error(ResponseResult.ORDER_NOT_EXIST);
......@@ -192,8 +201,18 @@ public class CollageOrderServiceImpl implements CollageOrderService {
// 组装群收款付款人列表
GroupBuyRequest.UserInfo groupBuyUserInfo;
for (String payerOpenId : payerOpenIdList) {
Long amount = productList.stream().filter(product -> payerOpenId.equals(product.getOpenId())).map(QueryOrdersResponse.DataBean.OrderBean.ProductBean::getSalePrice).reduce(Long::sum).get();
// 商品费用
Long itemAmount = productList.stream().filter(product -> (payerOpenId.equals(product.getOpenId()) && null != product.getSalePrice())).map(QueryOrdersResponse.DataBean.OrderBean.ProductBean::getSalePrice).reduce(Long::sum).orElse(0L);
// 包装费用
Long packAmount = productList.stream().filter(product -> (payerOpenId.equals(product.getOpenId()) && null != product.getPackPrice())).map(QueryOrdersResponse.DataBean.OrderBean.ProductBean::getPackPrice).reduce(Long::sum).orElse(0L);
// 运费分摊
Long deliveryAmount = 0L;
if (order.getOrderCostDetailList() != null) {
OrderCostResp orderCostResp = order.getOrderCostDetailList().stream().filter(detail -> (detail.getCostType().equals(2) && detail.getBillType().equals(1))).findFirst().orElse(new OrderCostResp());
BigDecimal deliveryPrice = orderCostResp.getActualCostAmount() == null ? new BigDecimal(0) : orderCostResp.getActualCostAmount();
deliveryAmount = Math.floorDiv(deliveryPrice.longValue(), payerOpenIdList.size());
}
Long amount = itemAmount + packAmount + deliveryAmount;
groupBuyUserInfo = new GroupBuyRequest.UserInfo();
groupBuyUserInfo.setOpenid(payerOpenId);
groupBuyUserInfo.setAmount(Integer.parseInt(String.valueOf(amount)));
......@@ -229,9 +248,10 @@ public class CollageOrderServiceImpl implements CollageOrderService {
* @param orderCode
* @return
*/
private QueryOrdersResponse.DataBean.OrderBean queryOrderByOrderCode(String orderCode) {
private QueryOrdersResponse.DataBean.OrderBean queryOrderByOrderCode(String partnerId, String orderCode) {
// 获取拼单订单信息,若类型不是拼单直接返回报错
BaseQueryOrderRequest baseQueryOrderRequest = new BaseQueryOrderRequest();
baseQueryOrderRequest.setPartnerId(partnerId);
baseQueryOrderRequest.setOrderId(orderCode);
baseQueryOrderRequest.setTrackingNo(LogTreadLocal.getTrackingNo());
QueryOrderByIdResponse response = orderCenterSdkService.queryOrderById(baseQueryOrderRequest);
......
......@@ -1027,7 +1027,7 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
@Override
public BaseResponse orderRefund(OrderRefundVo orderRefundVo) {
if (StringUtils.isEmpty(orderRefundVo.getReason())) {
orderRefundVo.setReason("退款");
orderRefundVo.setReason("用户申请退款");
}
AssortmentCustomerInfoVo userInfo = customerInfoManager.getCustomerInfoByObject(orderRefundVo.getSessionId());
if (userInfo == null || StringUtils.isEmpty(userInfo.getMemberId())) {
......
......@@ -32,6 +32,14 @@ import cn.freemud.entities.dto.QueryOrdersResponseDto.DataBean.OrderBean;
import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseDto;
import cn.freemud.entities.dto.activity.PayGitCheckAndJoinRequestDto;
import cn.freemud.entities.dto.delivery.*;
import cn.freemud.entities.dto.delivery.OrderRemindRequestDto;
import cn.freemud.entities.dto.delivery.QueryDeliveryAmountResponseDto;
import cn.freemud.entities.dto.delivery.QueryLocusRiderTrackDto;
import cn.freemud.entities.dto.delivery.ResRiderTrackDto;
import cn.freemud.entities.dto.ecology.BookingOrderPayedScene;
import cn.freemud.entities.dto.ecology.InstantOrderPayedScene;
import cn.freemud.entities.dto.ecology.SubscribeMessageRequest;
import cn.freemud.entities.dto.ecology.SubscribeMessageResponse;
import cn.freemud.entities.dto.order.CreateOrderOperateDto;
import cn.freemud.entities.dto.order.CreatePrepayRequestDto;
import cn.freemud.entities.dto.order.FacePayRequestDto;
......@@ -50,11 +58,14 @@ import cn.freemud.interceptor.ServiceException;
import cn.freemud.management.thirdparty.MulitiPaymentClient;
import cn.freemud.redis.RedisCache;
import cn.freemud.service.*;
import cn.freemud.service.order.OrderRelationFactory;
import cn.freemud.service.order.OrderRelationService;
import cn.freemud.service.thirdparty.*;
import cn.freemud.utils.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.freemud.api.assortment.datamanager.entity.db.*;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.manager.*;
......@@ -89,6 +100,7 @@ import com.freemud.application.sdk.api.ordercenter.request.carpark.ParkingOrderC
import com.freemud.application.sdk.api.ordercenter.response.carpark.OrderResp;
import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSendCouponResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.QueryByCodeResponse;
import com.freemud.application.sdk.api.ordercenter.service.OrderDownLoadSdkService;
......@@ -178,6 +190,11 @@ public class OrderServiceImpl implements Orderservice {
@Value("${mq.cloud_print_exchange}")
private String cloud_print_exchange;
/**
* coco商户
*/
@Value("#{'${coco.partnerId}'.split(',')}")
private List<String> cocoPartnerId;
@Autowired
private AssortmentCloudPrinterManager cloudPrinterManager;
......@@ -274,11 +291,16 @@ public class OrderServiceImpl implements Orderservice {
private ComPayClient comPayClient;
@Autowired
private AssortmentOpenPlatformIappWxappStoreManager assortmentOpenPlatformIappWxappStoreManager;
@Autowired
private EcologyAdminApplicationClient ecologyAdminApplicationClient;
@Value("${coco.partnerId}")
private String partnerId;
@Autowired
private SvcComPayClient svcComPayClient;
@Autowired
private OrderRelationFactory orderRelationFactory;
@Override
public BaseResponse checkBeforeCreateOrder(CheckBeforeCreateOrderRequestVo requestVo) {
String trackingNo = LogTreadLocal.getTrackingNo();
......@@ -1189,8 +1211,16 @@ public class OrderServiceImpl implements Orderservice {
operation.setOperator(operationHistory.getOperator());
});
responseVo.setOperationList(operationList);
responseVo.setOrderId(deliveryBaseResponse.getData().getDeliveryId());
responseVo.setCurrentPoint(deliveryBaseResponse.getData().getCurrentPoint());
responseVo.setOrderId(orderBean.getOid());
responseVo.setStorePhone(deliveryBaseResponse.getData().getStorePhone());
String currentPoint[] = deliveryBaseResponse.getData().getCurrentPoint().split(",");
String storePoint[] = deliveryBaseResponse.getData().getStorePoint().split(",");
responseVo.setRiderLongitude(currentPoint[0]);
responseVo.setRiderLatitude(currentPoint[1]);
responseVo.setUserLongitude(String.valueOf(orderBean.getLongitude()));
responseVo.setUserLatitude(String.valueOf(orderBean.getLatitude()));
responseVo.setShopLongitude(storePoint[0]);
responseVo.setShopLatitude(storePoint[1]);
responseVo.setDistance(deliveryBaseResponse.getData().getDistance());
responseVo.setDeliveryId(deliveryBaseResponse.getData().getDeliveryId());
responseVo.setDevlieryStatus(deliveryBaseResponse.getData().getDevlieryStatus());
......@@ -1387,6 +1417,16 @@ public class OrderServiceImpl implements Orderservice {
queryOrderResponseVo.setRedpacketsPicture(getRedpacketsPicture(activityId));
}
// 支付有礼
// 目前只有coco在订单详情参加支付有礼,且不检查订单的状态
if(cocoPartnerId.contains(partnerId)){
joinPayGift(sessionId, queryOrderResponseVo);
}
buildQueryOrderResponseVo(queryOrderResponseVo,response,partnerId);
return ResponseUtil.success(queryOrderResponseVo);
}
......@@ -1652,13 +1692,12 @@ public class OrderServiceImpl implements Orderservice {
if (StringUtils.isEmpty(orderRefundVo.getReason())) {
orderRefundVo.setReason("退款");
}
AssortmentCustomerInfoVo userInfo = null;
/* AssortmentCustomerInfoVo userInfo = customerInfoManager.getCustomerInfoByObject(orderRefundVo.getSessionId());
AssortmentCustomerInfoVo userInfo = customerInfoManager.getCustomerInfoByObject(orderRefundVo.getSessionId());
if (userInfo == null || StringUtils.isEmpty(userInfo.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}*/
/* String memberId = userInfo.getMemberId();
String partnerId = userInfo.getPartnerId();*/
}
String memberId = userInfo.getMemberId();
String partnerId = userInfo.getPartnerId();
if (StringUtils.isBlank(orderRefundVo.getOid())) {
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING.getCode(), "oid不能为空");
......@@ -1676,9 +1715,9 @@ public class OrderServiceImpl implements Orderservice {
if (!RESPONSE_SUCCESS_CODE.equals(orderByIdResponseDto.getErrcode()) || orderByIdResponseDto.getData() == null) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "订单信息不存在");
}
/* if (!memberId.equals(orderByIdResponseDto.getData().getUserId())) {
if (!memberId.equals(orderByIdResponseDto.getData().getUserId())) {
return ResponseUtil.error(ResponseResult.ORDER_QUERYORDER_ERROR.getCode(), "不能操作非本人的订单");
}*/
}
OrderBean orderBean = orderByIdResponseDto.getData();
// todo coco 商户校验
if (partnerId.equals(orderByIdResponseDto.getData().getCompanyId())) {
......@@ -2134,13 +2173,13 @@ public class OrderServiceImpl implements Orderservice {
*/
private void sendMessage(QueryOrdersResponseDto.DataBean.OrderBean orderBean, MessageEventType messageEventType) {
MessageTemplateRequest<MessagePushOrderTemplateRequest> messageTemplateRequest = null;
try {
messageTemplateRequest = messageNoticeAdapter.convent2MessageTemplateRequest(orderBean);
messageTemplateRequest.setMessageEventType(messageEventType);
this.messageTemplatePushService.sendTemplateMsg(messageTemplateRequest);
} catch (Exception e) {
LogUtil.error("sendTemplateMsg_error", JSONObject.toJSONString(orderBean), JSONObject.toJSONString(messageTemplateRequest), e);
}
try {
messageTemplateRequest = messageNoticeAdapter.convent2MessageTemplateRequest(orderBean);
messageTemplateRequest.setMessageEventType(messageEventType);
this.messageTemplatePushService.sendTemplateMsg(messageTemplateRequest);
} catch (Exception e) {
LogUtil.error("sendTemplateMsg_error", JSONObject.toJSONString(orderBean), JSONObject.toJSONString(messageTemplateRequest), e);
}
}
......@@ -3523,4 +3562,16 @@ public class OrderServiceImpl implements Orderservice {
return false;
}
}
public void buildQueryOrderResponseVo(QueryOrderResponseVo queryOrderResponseVo,QueryOrderByIdResponse response,String partnerId) {
if(null == response || response.getData() == null || !ObjectUtils.equals(response.getErrcode(),RESPONSE_SUCCESS_CODE) ){
ApiLog.info("订单详情查询,返回值错误,QueryOrderByIdResponse",response);
return;
}
OrderRelationService orderRelationService = orderRelationFactory.getQueryOrdrBuildService(partnerId);
orderRelationService.queryOrdrBuild(queryOrderResponseVo,response);
}
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: OrderRelationFactory
* @Description:
* @author: pengfei.liu
* @date: 2020/11/23
* @version V1.0
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.service.order;
public interface OrderRelationFactory {
/**
* 获取创建订单的时间检查实现类
* @param partnerId
* @return
*/
OrderRelationService getCreateOrderTimeCheckService(String partnerId);
/**
* 获取订单查询出参构建实现类
* @param partnerId
* @return
*/
OrderRelationService getQueryOrdrBuildService(String partnerId);
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: OrderRelationService
* @Description:
* @author: pengfei.liu
* @date: 2020/11/23
* @version V1.0
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.service.order;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.QueryOrderResponseVo;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrderByIdResponse;
public interface OrderRelationService {
/**
* 创建订单的时间检查
* @param
*/
void createOrderTimeCheck(StoreResponse.BizVO storeResponseDto, CreateOrderVo createOrderVo);
/**
* 创建订单的时间检查
* @param
*/
void queryOrdrBuild(QueryOrderResponseVo queryOrderResponseVo,QueryOrderByIdResponse response);
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: CocoOrderRelationServiceImpl
* @Description:
* @author: pengfei.liu
* @date: 2020/11/23
* @version V1.0
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.service.order.impl;
import cn.freemud.base.util.DateUtil;
import cn.freemud.entities.dto.order.BusinessDate;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.ProductVo;
import cn.freemud.entities.vo.QueryOrderResponseVo;
import cn.freemud.enums.CreateOrderType;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.impl.CheckOrder;
import cn.freemud.service.order.OrderRelationService;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSendCouponResp;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrderByIdResponse;
import io.swagger.models.auth.In;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@Service("cocoOrderRelationService")
public class CocoOrderRelationServiceImpl implements OrderRelationService {
//门店SDK
@Autowired
private StoreCenterService storeCenterService;
@Autowired
private CheckOrder checkOrder;
@Override
public void createOrderTimeCheck(StoreResponse.BizVO storeResponseDto, CreateOrderVo createOrderVo) {
// 只有外卖单才做下单时间判断
if (!CreateOrderType.TAKE_OUT.getCode().equals(createOrderVo.getOrderType())){
return;
}
// 如果是明天的预约单,不做时间检查
// 设置预约时间
Date takeMealDateTime = checkOrder.getOrderExpectTime(createOrderVo.getTakeMealFlag(), createOrderVo.getTakeMealTime(), createOrderVo.getExpectTime(),
CreateOrderType.getByCode(createOrderVo.getOrderType()), storeResponseDto.getServiceTime(), storeResponseDto);
Date todayEnd = DateUtil.setEndDay(new Date());
if(todayEnd.before(takeMealDateTime)){
return;
}
//获取门店当天营业时间
// coco只有一个营业时间,如果返回多个就报错
Date todayEndDate = null;
List<String> todayBusinessTimes = storeCenterService.getTodayBusinessTime(Integer.parseInt(storeResponseDto.getBusinessType()), storeResponseDto.getBusinessHoursDay());
if (CollectionUtils.isEmpty(todayBusinessTimes) || 1 < todayBusinessTimes.size() ) {
throw new ServiceException(ResponseResult.STORE_BUSINESS_HOUR_ERROR);
}
BusinessDate businessDate = checkOrder.getStoreBusinessDate(todayBusinessTimes.get(0), true);
todayEndDate = businessDate.getEndDate();
// 当前时间+15分钟 > 门店打烊时间,返回错误
Date nowAddDate = DateUtil.addMinutes(new Date(),15);
if(nowAddDate.after(todayEndDate)){
throw new ServiceException(ResponseResult.STORE_WILL_COLSE);
}
}
@Override
public void queryOrdrBuild(QueryOrderResponseVo queryOrderResponseVo,QueryOrderByIdResponse response) {
List<QueryOrderResponseVo.chooseGood> chooseGoods = new ArrayList<>();
List<OrderSendCouponResp> orderSendCouponRespList = response.getData().getOrderSendCouponRespList();
if(orderSendCouponRespList != null && !orderSendCouponRespList.isEmpty()){
orderSendCouponRespList.forEach(orderSendCouponResp -> {
QueryOrderResponseVo.chooseGood chooseGood = new QueryOrderResponseVo.chooseGood();
chooseGood.setGoodsName(orderSendCouponResp.getGoodsName());
chooseGoods.add(chooseGood);
});
queryOrderResponseVo.setChooseGoods(chooseGoods);
}
// 赠品合并到主商品
List<ProductVo> products = queryOrderResponseVo.getProducts();
// 有购物车行id的是主
List<ProductVo> masterProducts = products.stream().filter(product ->
!StringUtils.isEmpty(product.getCid())).collect(Collectors.toList());
// 没有购物车行id的是赠品
Map<String, Integer> giftMap = new HashMap<>();
List<ProductVo> giftProducts = products.stream().filter(product ->
StringUtils.isEmpty(product.getCid())).collect(Collectors.toList());
if(giftProducts != null && !giftProducts.isEmpty()){
giftProducts.forEach(giftProduct ->{
giftMap.put(giftProduct.getOcid(),giftProduct.getQty());
});
}
if(null != masterProducts && !masterProducts.isEmpty()){
masterProducts.forEach(product -> {
Integer giftQty = product.getQty();
if(giftQty == 0){
return;
}
product.setQty(product.getQty() + giftQty);
});
}
queryOrderResponseVo.setProducts(masterProducts);
}
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: OrderRelationFactoryImpl
* @Description:
* @author: pengfei.liu
* @date: 2020/11/23
* @version V1.0
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.service.order.impl;
import cn.freemud.service.order.OrderRelationFactory;
import cn.freemud.service.order.OrderRelationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class OrderRelationFactoryImpl implements OrderRelationFactory {
/**
* coco商户
*/
@Value("#{'${coco.partnerId}'.split(',')}")
private List<String> cocoPartnerId;
/**
* coco的订单相关
*/
@Autowired
@Qualifier("cocoOrderRelationService")
OrderRelationService cocoOrderRelationService;
/**
* 平台的订单相关
*/
@Autowired
@Qualifier("platformOrderRelationServiceImpl")
OrderRelationService PlatformOrderRelationServiceImpl;
@Override
public OrderRelationService getCreateOrderTimeCheckService(String partnerId) {
if(cocoPartnerId.contains(partnerId)){
return cocoOrderRelationService;
}else{
return PlatformOrderRelationServiceImpl;
}
}
@Override
public OrderRelationService getQueryOrdrBuildService(String partnerId) {
if(cocoPartnerId.contains(partnerId)){
return cocoOrderRelationService;
}else{
return PlatformOrderRelationServiceImpl;
}
}
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: PlatformOrderRelationServiceImpl
* @Description:
* @author: pengfei.liu
* @date: 2020/11/23
* @version V1.0
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.service.order.impl;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.QueryOrderResponseVo;
import cn.freemud.service.order.OrderRelationService;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrderByIdResponse;
import org.springframework.stereotype.Service;
@Service("platformOrderRelationServiceImpl")
public class PlatformOrderRelationServiceImpl implements OrderRelationService {
@Override
public void createOrderTimeCheck(StoreResponse.BizVO storeResponseDto, CreateOrderVo createOrderVo) {
}
@Override
public void queryOrdrBuild(QueryOrderResponseVo queryOrderResponseVo, QueryOrderByIdResponse response) {
}
}
......@@ -30,7 +30,7 @@ public interface EcologyAdminApplicationClient {
@PostMapping(value = "/ecology/api/getAuthorizerAccessToken")
GetTokenResponseDto getAuthorizerAccessToken(@RequestBody GetAuthorizerRequestDto request);
@PostMapping(value = "/ecology/api/subscribeMessage/send")
SubscribeMessageResponse subscribeMessage(SubscribeMessageRequest request);
}
......@@ -65,7 +65,7 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>assortment-ordercenter-sdk</artifactId>
<version>2.2.12-SNAPSHOT</version>
<version>2.2.15-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
......
......@@ -8,7 +8,7 @@
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<version>1.6.9-SNAPSHOT</version>
<version>1.7.2-SNAPSHOT</version>
<artifactId>ordercenter-sdk</artifactId>
<dependencies>
......
......@@ -38,3 +38,6 @@
| 1.6.7-SNAPSHOT | 添加美团点评渠道 | 梁崇福 | 2020-11-24 |
| 1.6.8-SNAPSHOT | coco | 梁崇福 | 2020-11-29 |
| 1.6.9-SNAPSHOT | 拼单 | 缪晖 | 2020-11-30 |
| 1.7.0-SNAPSHOT | 买一赠一寄件 | 刘鹏飞 | 2020-12-1 |
| 1.7.1-SNAPSHOT | 拼单 | 缪晖 | 2020-12-02 |
| 1.7.2-SNAPSHOT | coco订单详情赠品合并 | 刘鹏飞 | 2020-12-3 |
\ No newline at end of file
......@@ -219,7 +219,7 @@ public class CreateOrderRequest extends BaseRequest {
/**
* 买一赠一选择的商品
*/
private List<ChooseGood> chooseGoods;
private List<ChooseGood> orderSendCouponRespList;
@Data
public static class ChooseGood {
......
......@@ -143,4 +143,9 @@ public class OrderItemCreateReq {
*/
private String photoUrl;
/**
* 加购人包装费
*/
private Long packPrice;
}
......@@ -278,4 +278,6 @@ public class OrderInfoReqs {
*/
private List<OrderPayItemReqs> orderPayItemCreateReqList;
private String appId;
}
......@@ -118,4 +118,7 @@ public class OrderItemResp {
//加购人头像
private String photoUrl;
//加购人包装费
private Long packPrice;
}
......@@ -45,13 +45,13 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>assortment-shoppingcart-sdk</artifactId>
<version>2.0.11-SNAPSHOT</version>
<version>2.0.13-SNAPSHOT</version>
</dependency>
<!-- 再来一单查询订单信息 -->
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>ordercenter-sdk</artifactId>
<version>1.5.1-SNAPSHOT</version>
<version>1.7.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......
......@@ -83,6 +83,10 @@ public class ActivityCalculationDiscountRequestDto {
* 活动号
*/
private String activityCode;
/**
* 买卡活动Id
*/
private String payCardActivityId;
}
@Data
......
......@@ -169,13 +169,22 @@ public class ActivityCalculationDiscountResponseDto {
*/
private String tenderId;
/**
* 1-运费券 2-运费月卡券 3-月卡券 4-万能券 5-啡常月享卡 6-通用券
* 1-运费券 2-运费月卡券 3-月卡券 4-万能券 5-啡常月享卡 6-通用券 7买三赠一券
*/
private Integer extendType;
private SendPointDto sendPointVo;
private Date endTime;
/**
* 买卡现价
*/
private Integer cardAmount;
/**
* 买卡原价
*/
private Integer cardOriginalPrice;
}
@Data
......
......@@ -26,7 +26,7 @@ public class ActivityDiscountsDto {
*/
private String tenderId;
/**
* 1-运费券 2-运费月卡券 3-月卡券 4-万能券 5-啡常月享卡 6-通用券
* 1-运费券 2-运费月卡券 3-月卡券 4-万能券 5-啡常月享卡 6-通用券 7-买三赠一券
*/
private Integer extendType;
......
......@@ -133,12 +133,23 @@ public class ShoppingCartGoodsDto {
private SendPoint sendPoint;
/**
* 麦咖啡-买三赠一券价格
*/
private Long buyThreeGiveOneCouponFee;
@Data
public static class CartGoodsDetailDto {
/**
* 购物车行uid
*/
private String cartGoodsUid;
/**
* 拼单买一赠一标记赠品是那个商品送的 originalGoodsUid
*/
private String originalGoodsUid;
/**
* spuId
*/
......@@ -189,6 +200,10 @@ public class ShoppingCartGoodsDto {
*/
private String photoUrl;
/**
* 购买人包装费
*/
private Long packPrice;
/**
* 商品的数量
......
package cn.freemud.entities.vo;
import lombok.Data;
@Data
public class CouponTypeVo {
/**
* 券类型 1:买三赠一券
*/
private Integer type;
/**
* 券code
*/
private String code;
}
......@@ -19,7 +19,6 @@ import lombok.Data;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@Data
public class ShoppingCartGoodsResponseVo extends ShoppingCartGoodsBaseResponseVo{
......@@ -152,7 +151,7 @@ public class ShoppingCartGoodsResponseVo extends ShoppingCartGoodsBaseResponseV
/**
* 支付金额
*/
private String svcPayAmount;
private Integer svcPayAmount;
/**
* 总的优惠信息集合
......@@ -222,4 +221,19 @@ public class ShoppingCartGoodsResponseVo extends ShoppingCartGoodsBaseResponseV
*/
private Boolean sendCoupon;
}
/**
* 各类券信息
*/
private List<CouponTypeVo> couponTypeList;
/**
* 麦咖啡-买三赠一券活动号
*/
private String buyThreeGiveOneActivityCode;
/**
* 麦咖啡-买三赠一券默认券号
*/
private String buyThreeGiveOneCouponCode;
}
......@@ -119,6 +119,21 @@ public class ShoppingCartInfoRequestVo extends BaseRequestVo {
*/
private String monthlyCardCode;
/**
* 各类券信息
*/
private List<CouponTypeVo> couponTypeList;
/**
* 麦咖啡-买三赠一券活动号
*/
private String buyThreeGiveOneActivityCode;
/**
* 麦咖啡-买三赠一券默认券号
*/
private String buyThreeGiveOneCouponCode;
@Data
public final static class SendGoods {
/**
......
......@@ -42,6 +42,11 @@ public class UpdateShoppingCartGoodsQtyRequestVo extends BaseRequestVo {
@NotNull(message = "qty不能为空")
private Integer qty;
/**
* 更新前商品数量
*/
private Integer oldQty;
private String version;
/**
* 购物车版本号(围餐、拼单)
......
......@@ -32,6 +32,7 @@ public enum ActivityTypeEnum {
TYPE_3(3, "代金券"),
TYPE_31(31, "折扣券"),
TYPE_32(32, "商品券"),
TYPE_35(35, "买三赠一券"),
TYPE_5(5, "整单满金额折"),
TYPE_51(51, "每满金额折"),
TYPE_52(52, "阶梯满金额折"),
......
......@@ -98,6 +98,7 @@ public enum ResponseResult {
// SHOPPING_CART_GOODS_CHECK_ERROR("44023", "当前餐盘中没有可用券的饮品"),
SHOPPING_CART_GOODS_CHECK_ERROR("44028", "当前餐盘中没有可用券的饮品"),
SHOPPING_CART_COUPON_MIX_NOT_EXIST("44029", "券商品不存在"),
SHOPPING_CART_NO_MEAL("44029", "请至少选择一个可选商品"),
SHOPPING_CART_REQUEST_NOT_EMPTY("44029", "购物车查询条件不能为空"),
SHOPPING_CART_BUY_ONE_SEND_GOODS_NOT_EMPTY("44030", "未查询到寄件活动商品"),
SHOPPING_CART_BUY_ONE_SEND_GOODS_ERR("44031", "寄件活动商品错误"),
......@@ -153,6 +154,23 @@ public enum ResponseResult {
PREMIUM_EXCHANGE_ACTIVITY_NOT_ON_LINE("47004", "换购商品不在售卖状态,请重新下单"),
/**
* 拼单
*/
COLLAGE_NOT_EXIST("49001", "拼单不存在,请确认"),
COLLAGE_LOCK("49002", "拼单已经锁定,请确定"),
COLLAGE_NOT_ADD("49003", "未加入拼单,请确定"),
COLLAGE_ALREADY_CHOOSE("49004", "拼单商品已经选购结束,请确定"),
COLLAGE_ALREADY_EXIST("49005", "当前用户存在进行中的拼单订单"),
COLLAGE_NOT_OWNER("49006", "当前用户不是拼单发起人,无法操作"),
COLLAGE_GOOD_NOT_ONESELF("49007", "只能操作自己的商品"),
COLLAGE_MEMBER_ALREADY_ADD("49008", "用户存在进行中的拼单,无法再次加入"),
COLLAGE_CREATE_NOT_OUT_OF("49009", "拼单发起人不能退出拼单,请取消"),
COLLAGE_MEMBER_NOT_ADD("49010", "用户未参加拼单,请确认"),
COLLAGE_MEMBER_NOT_CREATE("49011", "只有拼单发起者才能移除拼单人员,请确认"),
COLLAGE_STATES_CHOOSE("49012", "获取用户选购状态失败"),
COLLAGE_CAN_NOT_REMOVE_SELF("49013", "不能将自己移除拼单"),
/**
* 微信卡券
*/
WEICHAT_SHOP_NOTSUPPORT("48001", "当前门店不可用"),
......
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: CouponService
* @Title: ActiveFactory
* @Package cn.freemud.service
* @Description:
* @author: pengfei.liu
......@@ -10,9 +10,10 @@
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.service.active;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
public interface ActiveFactory {
/**
......@@ -21,4 +22,11 @@ public interface ActiveFactory {
* @return
*/
ActiveService getBuildChooseGoodsService(String partnerId);
/**
* 获取赠品添加购物车实现
* @param
* @return
*/
ActiveService getGifAddCartService(String partnerId);
}
......@@ -14,9 +14,13 @@
package cn.freemud.service.active;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountRequestDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import java.util.List;
import java.util.Map;
public interface ActiveService {
......@@ -25,4 +29,16 @@ public interface ActiveService {
* @param calculationSharingDiscountRequestDto
*/
void buildChooseGoodsService(CalculationSharingDiscountRequestDto calculationSharingDiscountRequestDto, List<ShoppingCartInfoRequestVo.ChooseGood> chooseGoods);
/**
* 赠品添加购物车
* @param
*/
void gifAddCart(List<CartGoods> oldcartGoodsLists,
List<CartGoods> addcartGoodsList,
List<ProductBeanDTO> products ,
ShoppingCartInfoRequestVo shoppingCartInfoRequestVo,
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult,
String partnerId,
Integer flag);
}
......@@ -13,6 +13,7 @@
package cn.freemud.service.active.impl;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.service.active.ActiveFactory;
import cn.freemud.service.active.ActiveService;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -54,4 +55,13 @@ public class ActiveFactoryImpl implements ActiveFactory {
return platformActiveService;
}
}
@Override
public ActiveService getGifAddCartService(String partnerId) {
if(cocoPartnerId.contains(partnerId)){
return CocoActiveServiceImpl;
}else{
return platformActiveService;
}
}
}
......@@ -14,13 +14,24 @@
package cn.freemud.service.active.impl;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountRequestDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.CalculationGoodsType;
import cn.freemud.service.active.ActiveService;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service("cocoActiveService")
public class CocoActiveServiceImpl implements ActiveService {
......@@ -59,4 +70,111 @@ public class CocoActiveServiceImpl implements ActiveService {
calculationSharingDiscountRequestDto.setSelectActivityList(selectActivityList);
}
@Override
public void gifAddCart(List<CartGoods> oldcartGoodsLists,
List<CartGoods> addcartGoodsList,
List<ProductBeanDTO> products ,
ShoppingCartInfoRequestVo shoppingCartInfoRequestVo,
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult,
String partnerId,
Integer flag) {
// 点餐页赠品分行显示,赠品显示小料
// 结束页赠品合并到主商品行
// 创单查询购物车分行显示
Map<String, CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods> discountForGift = this.getDiscountForGift(discountResult);
if(ObjectUtils.equals(flag,1)){//结算页
for(CartGoods cgs : oldcartGoodsLists){
if(null == discountForGift.get(cgs.getCartGoodsUid())){
continue;
}
CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods gift = discountForGift.get(cgs.getCartGoodsUid());
cgs.setQty(cgs.getQty() + (gift.getGoodsQuantity() == null ? 0 : gift.getGoodsQuantity()));
}
}else{
for(CartGoods cgs : oldcartGoodsLists){
if(null == discountForGift.get(cgs.getCartGoodsUid())){
continue;
}
if(null == discountForGift.get(cgs.getCartGoodsUid()).getDiscounts() || discountForGift.get(cgs.getCartGoodsUid()).getDiscounts().isEmpty()){
continue;
}
CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount discount = discountForGift.get(cgs.getCartGoodsUid()).getDiscounts()
.stream()
.filter(g -> ActivityTypeEnum.TYPE_63.getCode().equals(g.getType()) ||ActivityTypeEnum.TYPE_62.getCode().equals(g.getType()) || ActivityTypeEnum.TYPE_61.getCode().equals(g.getType()))
.findFirst()
.get();
CartGoods newCartGoods = new CartGoods();
newCartGoods.setCartGoodsUid(cgs.getCartGoodsUid());
newCartGoods.setGoodsId(cgs.getGoodsId());
newCartGoods.setGoodsType(cgs.getGoodsType());
newCartGoods.setSpuId(cgs.getSpuId());
newCartGoods.setSkuId(cgs.getSkuId());
newCartGoods.setSpecProductId(cgs.getSpecProductId());
newCartGoods.setOriginalPrice(cgs.getOriginalPrice());
newCartGoods.setPackPrice(cgs.getPackPrice());
newCartGoods.setOriginalAmount(cgs.getOriginalAmount());
newCartGoods.setAmount(0L);
newCartGoods.setName(cgs.getName());
newCartGoods.setSpuName(cgs.getSpuName());
newCartGoods.setSubName(cgs.getSubName());
newCartGoods.setNodeId(cgs.getNodeId());
newCartGoods.setCategoryName(cgs.getCategoryName());
List<CartGoods.CartGoodsExtra> extra = Lists.newArrayList();
List<CartGoods.CartGoodsExtra> cartGoodsExtras = cgs.getExtra();
if (CollectionUtils.isNotEmpty(cartGoodsExtras)) {
cartGoodsExtras.forEach(cartGoodsExtra -> {
CartGoods.CartGoodsExtra goodsExtra = new CartGoods.CartGoodsExtra();
goodsExtra.setAttributeId(cartGoodsExtra.getAttributeId());
goodsExtra.setAttributeName(cartGoodsExtra.getAttributeName());
extra.add(goodsExtra);
});
}
newCartGoods.setExtra(extra);
newCartGoods.setPic(cgs.getPic());
newCartGoods.setCreateTimeMili(cgs.getCreateTimeMili());
newCartGoods.setSkuName(cgs.getSkuName());
newCartGoods.setSkuName(cgs.getSkuName());
newCartGoods.setClassificationId(cgs.getClassificationId());
newCartGoods.setClassificationName(cgs.getClassificationName());
newCartGoods.setActivityType(discount.getType());
newCartGoods.setQty(discountForGift.get(cgs.getCartGoodsUid()).getGoodsQuantity());
addcartGoodsList.add(newCartGoods);
}
}
}
public Map<String, CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods> getDiscountForGift(CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult) {
Map<String, CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods> gifts = new HashMap<>();
List<CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods> goods = discountResult.getGoods();
if(goods == null || goods.isEmpty()){
return gifts;
}
for(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods g : goods){
if(!CalculationGoodsType.TYPE_1.getType().equals(g.getCartGoodType())){
continue;
}
if(null != gifts.get(g.getCartGoodsUid())){
continue;
}
gifts.put(g.getOriginalGoodsUid(),g);
}
return gifts;
}
}
......@@ -14,13 +14,21 @@
package cn.freemud.service.active.impl;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountRequestDto;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.CalculationGoodsType;
import cn.freemud.service.active.ActiveService;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import org.apache.commons.lang.ObjectUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service("platformActiveService")
public class PlatformActiveServiceImpl implements ActiveService {
......@@ -57,4 +65,59 @@ public class PlatformActiveServiceImpl implements ActiveService {
}
@Override
public void gifAddCart(List<CartGoods> oldcartGoodsLists,
List<CartGoods> addcartGoodsList, List<ProductBeanDTO> products ,
ShoppingCartInfoRequestVo shoppingCartInfoRequestVo,
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult,
String partnerId,
Integer flag) {
Map<String, CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods> discountForGift = this.getDiscountForGift(discountResult);
for (ProductBeanDTO product : products) {
String k = product.getPid();
CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods goods = discountForGift.get(k);
CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount discount = goods.getDiscounts()
.stream()
.filter(g -> ActivityTypeEnum.TYPE_63.getCode().equals(g.getType()) ||ActivityTypeEnum.TYPE_62.getCode().equals(g.getType()) || ActivityTypeEnum.TYPE_61.getCode().equals(g.getType()))
.findFirst()
.get();
CartGoods cartGood = new CartGoods();
cartGood.setGoodsId(goods.getGoodsId());
cartGood.setGoodsType(1);
cartGood.setSpuId(goods.getGoodsId());
cartGood.setSkuId(goods.getGoodsId());
cartGood.setOriginalPrice(product.getFinalPrice());
cartGood.setPackPrice(product.getPackPrice());
cartGood.setOriginalAmount(goods.getOriginalPrice() * goods.getGoodsQuantity());
cartGood.setAmount(goods.getRealAmount());
cartGood.setName(product.getName());
cartGood.setSpuName(product.getName());
cartGood.setCategoryName(product.getName());
cartGood.setPic(product.getPicture());
cartGood.setSkuName(product.getName());
cartGood.setActivityType(discount.getType());
cartGood.setStockLimit(ObjectUtils.equals(1, product.getStockLimit()));
cartGood.setCustomerCode(product.getCustomerCode());
cartGood.setUnit(product.getUnit());
cartGood.setWeight(product.getWeight());
cartGood.setQty(goods.getGoodsQuantity());
cartGood.setClassificationId(product.getCategory());
cartGood.setClassificationName(product.getCategoryName());
// nodeId标识activeCode,用于计算均摊时每个商品在每个活动上均摊金额
cartGood.setNodeId(discount.getActivityCode());
addcartGoodsList.add(cartGood);
}
}
public Map<String, CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods> getDiscountForGift(CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult) {
Map<String, CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods> gifts = discountResult.getGoods()
.stream()
.filter(d -> CalculationGoodsType.TYPE_1.getType().equals(d.getCartGoodType()))
.collect(Collectors.toMap(CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods::getGoodsId, Function.identity(), (k1, k2) -> k1));
return gifts;
}
}
......@@ -3,11 +3,10 @@ package cn.freemud.service.impl;
import ch.qos.logback.classic.Level;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.CouponTypeVo;
import cn.freemud.entities.vo.ShoppingCartGoodsBaseResponseVo;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.utils.LogUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare;
......@@ -21,10 +20,8 @@ import com.freemud.sdk.api.assortment.shoppingcart.service.ShoppingCartBaseServi
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.naming.Name;
import java.util.ArrayList;
import java.util.List;
......@@ -155,6 +152,25 @@ public class AssortmentSdkService {
return baseResponse.getResult();
}
/**
* 获取用户选择的优惠券列表
*
* @param partnerId
* @param storeId
* @param useId
* @param shoppingCartService
* @return
*/
public List<CouponTypeVo> getTypeCartCouponCode(String partnerId, String storeId, String useId, ShoppingCartBaseService shoppingCartService) {
com.freemud.sdk.api.assortment.shoppingcart.domain.CartParamDto cartParamDto = getCartParamDto(partnerId, storeId, useId);
BaseResponse<List<com.freemud.sdk.api.assortment.shoppingcart.domain.CouponTypeVo>> baseResponse = shoppingCartService.getTypeCartCouponCode(cartParamDto, LogThreadLocal.getTrackingNo());
if (baseResponse == null || !ResponseResult.SUCCESS.getCode().equals(baseResponse.getCode()) || CollectionUtils.isEmpty(baseResponse.getResult())) {
return null;
}
return JSONArray.parseArray(JSONObject.toJSONString(baseResponse.getResult()), CouponTypeVo.class);
}
/**
* 调用聚合sdk设置缓存中购物车代金券
......@@ -198,6 +214,21 @@ public class AssortmentSdkService {
}
/**
* 保存用户选择的优惠券列表
* @param partnerId
* @param storeId
* @param useId
* @param couponTypeList
* @param shoppingCartService
* @return
*/
public void setTypeCartCouponCode(String partnerId, String storeId, String useId, List<CouponTypeVo> couponTypeList , ShoppingCartBaseService shoppingCartService) {
com.freemud.sdk.api.assortment.shoppingcart.domain.CartParamDto cartParamDto = getCartParamDto(partnerId, storeId, useId);
cartParamDto.setCouponTypeList(JSONArray.parseArray(JSONObject.toJSONString(couponTypeList), com.freemud.sdk.api.assortment.shoppingcart.domain.CouponTypeVo.class));
shoppingCartService.setTypeCartCouponCode(cartParamDto, LogThreadLocal.getTrackingNo());
}
/**
* 调用SDK校验购物车
*
* @param oldAllCartGoodsList
......
......@@ -242,7 +242,27 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
Map<String,List<CartGoods>> userGoods = new HashMap<>();
if(cartGoods != null && !cartGoods.isEmpty()){
userGoods = cartGoods.stream().collect(Collectors.groupingBy(CartGoods::getUserId));
CartGoods createUserGood = cartGoods.stream().filter(good -> createUserId.equals(good.getUserId())).findFirst().orElse(null);
if (null == createUserGood) {
// 若拼单发起人未购买商品,则将赠品按购物车行分给加购人
cartGoods.stream().filter(good -> null == good.getUserId()).collect(Collectors.toList()).forEach(cartGoodsNullUser -> {
CartGoods parentGood = cartGoods.stream().filter(good -> good.getCartGoodsUid().equals(cartGoodsNullUser.getCartGoodsUid())).findFirst().orElse(null);
cartGoodsNullUser.setUserId(parentGood == null ? createUserId : parentGood.getUserId());
cartGoodsNullUser.setOpenId(parentGood == null ? null : parentGood.getOpenId());
cartGoodsNullUser.setUserName(parentGood == null ? null : parentGood.getUserName());
cartGoodsNullUser.setPhotoUrl(parentGood == null ? null : parentGood.getPhotoUrl());
});
} else {
cartGoods.stream().filter(good -> null == good.getUserId()).collect(Collectors.toList()).forEach(cartGoodsNullUser -> {
cartGoodsNullUser.setUserId(createUserGood.getUserId());
cartGoodsNullUser.setOpenId(createUserGood.getOpenId());
cartGoodsNullUser.setUserName(createUserGood.getUserName());
cartGoodsNullUser.setPhotoUrl(createUserGood.getPhotoUrl());
});
}
userGoods = cartGoods.stream().filter(good -> null != good.getUserId()).collect(Collectors.groupingBy(CartGoods::getUserId));
}
List<ShoppingCartCollageGoodsResponseVo> userProducts = new ArrayList<>();
......@@ -673,9 +693,29 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
shoppingCartGoodsDto.setIsDiscountDelivery(shoppingCartGoodsResponseVo.getIsDiscountDelivery());
shoppingCartGoodsDto.setDiscountDeliveryActivityCode(shoppingCartGoodsResponseVo.getDiscountDeliveryActivityCode());
// 购物车购买人包装费计算
updatePackPrice(shoppingCartGoodsResponseVo, shoppingCartGoodsDto);
return ResponseUtil.success(shoppingCartGoodsDto);
}
/**
* 拼单订单商品绑定包装费透传
* @param shoppingCartGoodsResponseVo
* @param shoppingCartGoodsDto
*/
private void updatePackPrice(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, ShoppingCartGoodsDto shoppingCartGoodsDto) {
if (shoppingCartGoodsResponseVo != null && shoppingCartGoodsResponseVo.getProducts() != null && shoppingCartGoodsDto != null && shoppingCartGoodsDto.getProducts() != null) {
shoppingCartGoodsResponseVo.getProducts().stream().forEach(product -> {
shoppingCartGoodsDto.getProducts().stream().forEach(goods -> {
if (goods.getCartGoodsUid().equals(product.getCartGoodsUid()) && goods.getOriginalPrice().equals(product.getOriginalAmount())) {
goods.setPackPrice(product.getPackPrice());
}
});
});
}
}
@Override
public ActivityCalculationDiscountResponseDto.CalculationDiscountResult getActivityCalculationDiscountResponse(String partnerId, String storeId, String userId, String appId, Integer orderType, boolean isMember, List<CartGoods> cartGoodsList, List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons, List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList, String menuType, Long distributionFee) {
ActivityCalculationDiscountRequestDto activityCalculationDiscountRequestDto = getActivityCalculationDiscountRequestDto(partnerId, storeId, userId, appId, orderType);
......@@ -734,7 +774,7 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
try {
System.out.println("start discount");
System.out.println(JSON.toJSONString(activityCalculationDiscountRequestDto));
activityCalculationDiscountResponseDto = activityClient.calculationDiscountSharing(activityCalculationDiscountRequestDto);
activityCalculationDiscountResponseDto = activityClient.calculationDiscount(activityCalculationDiscountRequestDto);
} catch (Exception ex) {
ErrorLog.errorConvertJson(SDKCommonBaseContextWare.getAppName(), LogThreadLocal.getTrackingNo(), getClass(), "shoppingCartCollageServiceImpl getActivityCalculationDiscountResponse:" + ex.getMessage(), ex);
throw new ServiceException(ResponseResult.OPERATE_TOO_OFTEN);
......
......@@ -38,6 +38,8 @@ import cn.freemud.service.*;
import cn.freemud.service.delivery.DeliveryFactory;
import cn.freemud.service.delivery.DeliveryService;
import cn.freemud.service.impl.calculate.*;
import cn.freemud.service.shoppingCart.ShoppingCartRelationFactory;
import cn.freemud.service.shoppingCart.ShoppingCartRelationService;
import cn.freemud.service.thirdparty.*;
import cn.freemud.utils.BeanUtil;
import cn.freemud.utils.PromotionFactory;
......@@ -172,6 +174,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
@Value("${saas.cart.sharing}")
private String sharing;
@Autowired
private ShoppingCartRelationFactory shoppingCartRelationFactory;
/**
* 从微信卡券向购物车中添加商品
*/
......@@ -336,7 +341,11 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, activityQueryDto
, menuType
, deliveryAmount
, ShoppingCartConstant.ADD_AND_UPDATE);
, ShoppingCartConstant.ADD_AND_UPDATE
, partnerId
, null);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult,partnerId);
}
else {
// 获取优惠信息
......@@ -456,7 +465,11 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, activityQueryDto
, menuType
, deliveryAmount
, ShoppingCartConstant.ADD_AND_UPDATE);
, ShoppingCartConstant.ADD_AND_UPDATE
, partnerId
, null);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult,partnerId);
}
else {
// 获取优惠信息
......@@ -607,7 +620,11 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, activityQueryDto
, menuType
, deliveryAmount
, ShoppingCartConstant.QUERY_INFO);
, ShoppingCartConstant.QUERY_INFO
, partnerId
,shoppingCartInfoRequestVo.getFlag());
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,calculationSharingDiscountResult,partnerId);
}
else {
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = new ArrayList<>();
......@@ -798,7 +815,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, cartGoodsList
, coupons
, shoppingCartInfoRequestVo.getSendGoods()
, deliveryAmount,null);
, deliveryAmount,shoppingCartInfoRequestVo);
//直接利用促销返回做均摊
sharingEquallyService.equally(discountResult
......@@ -955,6 +972,14 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
}
}
}
if (GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
if (CollectionUtils.isEmpty(cartGoods.getProductGroupList()) && CollectionUtils.isEmpty(cartGoods.getProductComboList())) {
cartGoodsList.remove(i);
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService);
throw new ServiceException(ResponseResult.SHOPPING_CART_NO_MEAL);
}
}
}
// 当加价购商品不为空时
if (CollectionUtils.isNotEmpty(sendGoodsList)) {
......@@ -1672,8 +1697,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
shoppingCartGoodsResponseVo.setTotalAmount((orderAmount.longValue()-svcPayAmount.longValue()));
}
BigDecimal bigDecimal = new BigDecimal(svcPayAmount);
String amountStr = bigDecimal.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
shoppingCartGoodsResponseVo.setSvcPayAmount(amountStr);
BigDecimal amountStr = bigDecimal.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP);
shoppingCartGoodsResponseVo.setSvcPayAmount(amountStr.intValue());
shoppingCartGoodsResponseVo.setSvcDiscountDesc("储值卡支付¥" + amountStr);
}
else {
......@@ -2079,11 +2104,12 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
* @param shoppingCartGoodsResponseVo
* @param discountResult
*/
private void buildDiscounts(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult) {
if(discountResult != null){
shoppingCartGoodsResponseVo.setDiscounts(discountResult.getDiscounts());
shoppingCartGoodsResponseVo.setGoods(discountResult.getGoods());
}
private void buildShoppingCartGoodsResponse(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult,
String partnerId) {
ShoppingCartRelationService shoppingCartRelationService = shoppingCartRelationFactory.getBuildShoppingCartGoodsResponseService(partnerId);
shoppingCartRelationService.buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult);
}
......
......@@ -334,7 +334,12 @@ public class CalculationCommonService {
if (cartGoods.isWeightType()) {
cartGoodsDetailDto.setProductType(ProductType.WEIGHT_PRODUCT.getCode());
}
cartGoodsDetailDto.setOriginalPrice(cartGoods.getOriginalPrice());
if (calculationGoods!=null) {
cartGoodsDetailDto.setOriginalPrice(calculationGoods.getOriginalPrice());
}
else {
cartGoodsDetailDto.setOriginalPrice(cartGoods.getOriginalPrice());
}
if (calculationGoods!=null) {
cartGoodsDetailDto.setTotalDiscountAmount(calculationGoods.getDiscountAmount().intValue());
//cartGoodsDetailDto.setOriginalPrice(calculationGoods.getOriginalPrice());
......@@ -418,6 +423,7 @@ public class CalculationCommonService {
originalPriceSum += goodsDetailDto.getOriginalPrice() * (goodsDetailDto.getQty() / cartGoods.getQty());
//originalPriceSum += goodsDetailDto.getOriginalPrice() * goodsDetailDto.getQty();
}
cartGoodsDetailDto.setProductType(ProductType.SETMEAL.getCode());
cartGoodsDetailDto.setOriginalPrice(cartGoodsDetailDto.getOriginalPrice() + originalPriceSum);
}
cartGoodsDetailDto.setComboProducts(combs);
......
......@@ -66,7 +66,9 @@ public class CalculationSharingCartService {
, ActivityQueryDto activityQueryDto
, String menuType
, Long deliveryAmount
, String opt) {
, String opt
, String partnerId
, Integer flag) {
/**
* 用促销价格初始化购物车行记录成交价
......@@ -86,7 +88,7 @@ public class CalculationSharingCartService {
/**
* 买赠
*/
giftSharingService.giftResponse(discountResult, cartGoodsList, shoppingCartInfoRequestVo, activityQueryDto);
giftSharingService.giftResponse(discountResult, cartGoodsList, shoppingCartInfoRequestVo, activityQueryDto, partnerId,flag);
/**
* 加价购
......
......@@ -121,6 +121,15 @@ public class CalculationSharingDiscountService {
}
}
}
if (GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
if (CollectionUtils.isEmpty(cartGoods.getProductGroupList()) && CollectionUtils.isEmpty(cartGoods.getProductComboList())) {
cartGoodsList.remove(i);
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, null, null, this.shoppingCartBaseService);
throw new ServiceException(ResponseResult.SHOPPING_CART_NO_MEAL);
}
}
}
/*加价购商品不为空*/
......
......@@ -10,6 +10,8 @@ import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.CalculationGoodsType;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.active.ActiveFactory;
import cn.freemud.service.active.ActiveService;
import cn.freemud.service.impl.AssortmentSdkService;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
......@@ -42,17 +44,22 @@ public class GiftSharingService {
@Autowired
private ShoppingCartBaseServiceImpl shoppingCartBaseService;
@Autowired
private ActiveFactory activeFactory;
public void giftResponse(CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult
, List<CartGoods> cartGoodsList
, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo
, ActivityQueryDto activityQueryDto) {
, ActivityQueryDto activityQueryDto
, String partnerId
, Integer flag) {
if (discountResult == null || CollectionUtils.isEmpty(discountResult.getGoods())) {
return;
}
String menuType = shoppingCartInfoRequestVo == null ? null : shoppingCartInfoRequestVo.getMenuType();
List<ProductBeanDTO> beanDTOList = this.drawGiftInfo(discountResult, activityQueryDto, menuType);
this.setCartGoods(discountResult, cartGoodsList, beanDTOList);
this.setCartGoods(discountResult, cartGoodsList, beanDTOList,shoppingCartInfoRequestVo, partnerId, flag);
}
/**
......@@ -113,47 +120,19 @@ public class GiftSharingService {
*/
public void setCartGoods(CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult
, List<CartGoods> cartGoodsLists
, List<ProductBeanDTO> products) {
, List<ProductBeanDTO> products
, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo
, String partnerId
, Integer flag) {
if (CollectionUtils.isEmpty(products)) return;
Map<String, CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods> discountForGift = this.getDiscountForGift(discountResult);
//Map<String, CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods> discountForGift = this.getDiscountForGift(discountResult);
List<CartGoods> cartGoodsList = new ArrayList<>();
for (ProductBeanDTO product : products) {
String k = product.getPid();
CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods goods = discountForGift.get(k);
CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount discount = goods.getDiscounts()
.stream()
.filter(g -> ActivityTypeEnum.TYPE_63.getCode().equals(g.getType()) ||ActivityTypeEnum.TYPE_62.getCode().equals(g.getType()) || ActivityTypeEnum.TYPE_61.getCode().equals(g.getType()))
.findFirst()
.get();
CartGoods cartGood = new CartGoods();
cartGood.setGoodsId(goods.getGoodsId());
cartGood.setGoodsType(1);
cartGood.setSpuId(goods.getGoodsId());
cartGood.setSkuId(goods.getGoodsId());
cartGood.setOriginalPrice(product.getFinalPrice());
cartGood.setPackPrice(product.getPackPrice());
cartGood.setOriginalAmount(goods.getOriginalPrice() * goods.getGoodsQuantity());
cartGood.setAmount(goods.getRealAmount());
cartGood.setName(product.getName());
cartGood.setSpuName(product.getName());
cartGood.setCategoryName(product.getName());
cartGood.setPic(product.getPicture());
cartGood.setSkuName(product.getName());
cartGood.setActivityType(discount.getType());
cartGood.setStockLimit(ObjectUtils.equals(1, product.getStockLimit()));
cartGood.setCustomerCode(product.getCustomerCode());
cartGood.setUnit(product.getUnit());
cartGood.setWeight(product.getWeight());
cartGood.setQty(goods.getGoodsQuantity());
cartGood.setClassificationId(product.getCategory());
cartGood.setClassificationName(product.getCategoryName());
// nodeId标识activeCode,用于计算均摊时每个商品在每个活动上均摊金额
cartGood.setNodeId(discount.getActivityCode());
cartGoodsList.add(cartGood);
}
ActiveService activeService = activeFactory.getGifAddCartService(partnerId);
activeService.gifAddCart(cartGoodsLists,cartGoodsList, products,shoppingCartInfoRequestVo,discountResult,partnerId,flag);
cartGoodsLists.addAll(cartGoodsList);
}
......@@ -196,6 +175,7 @@ public class GiftSharingService {
CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods goods = discountForGift.get(k);
CalculationSharingDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount discount = this.discountInfo(goods);
ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto = new ShoppingCartGoodsDto.CartGoodsDetailDto();
cartGoodsDetailDto.setOriginalGoodsUid(goods.getOriginalGoodsUid());
cartGoodsDetailDto.setCartGoodsUid(goods.getCartGoodsUid());
cartGoodsDetailDto.setTaxId(product.getTaxId());
cartGoodsDetailDto.setTax(product.getTax());
......
......@@ -91,7 +91,7 @@ public class CalculationServiceImpl {
boolean isMember, String menuType, String receiveId,String couponCode,
List<CartGoods> cartGoodsList, List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons,
List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
Long payCardFee) {
Long payCardFee, List<String> eliminateGoodsList) {
Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, menuType);
......@@ -107,13 +107,15 @@ public class CalculationServiceImpl {
//优惠券
CouponPromotionVO couponPromotionVO = couponDiscountCalculation.getCouponPromotionVO(partnerId, storeId, userId, couponCode, orderType);
couponDiscountCalculation.updateShoppingCartGoodsDiscount(couponPromotionVO,calculationDiscount,cartGoodsList, shoppingCartGoodsResponseVo);
couponDiscountCalculation.updateShoppingCartGoodsDiscount(couponPromotionVO,calculationDiscount,cartGoodsList, shoppingCartGoodsResponseVo,eliminateGoodsList);
//套餐
setMealCalculation.updateShoppingCartGoodsDiscount(calculationDiscount,cartGoodsList,shoppingCartGoodsResponseVo);
//加料
materialCalculation.updateShoppingCartGoodsApportion(calculationDiscount,cartGoodsList);
//买三赠一券
couponDiscountCalculation.updateBuyThreeToOneShoppingCartGoodsDiscount(calculationDiscount, cartGoodsList, shoppingCartGoodsResponseVo);
return calculationDiscount;
}
......@@ -166,7 +168,8 @@ public class CalculationServiceImpl {
}
public void updateShoppingCartGoodsApportion(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult, ShoppingCartGoodsDto shoppingCartGoodsDto, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo){
public void updateShoppingCartGoodsApportion(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, ActivityCalculationDiscountResponseDto.CalculationDiscountResult calculationDiscountResult,
ShoppingCartGoodsDto shoppingCartGoodsDto, CreateOrderVo.PremiumExchangeActivity premiumExchangeActivity, ShoppingCartInfoRequestVo shoppingCartInfoRequestVo){
List<ShoppingCartGoodsDto.CartGoodsDetailDto> cartGoodsDetailDtoList = CollectionUtils.isEmpty(shoppingCartGoodsDto.getProducts()) ? new ArrayList<>() : shoppingCartGoodsDto.getProducts();
List<ShareDiscountActivityDto> shareDiscountActivityDtoList = CollectionUtils.isEmpty(shoppingCartGoodsDto.getShareDiscountActivityDtos()) ? new ArrayList<>() : shoppingCartGoodsDto.getShareDiscountActivityDtos();
......@@ -178,7 +181,12 @@ public class CalculationServiceImpl {
shoppingCartGoodsDto.setTotalDiscountAmount(shoppingCartGoodsResponseVo.getTotalDiscountAmount());
//随单购 月卡价格
shoppingCartGoodsDto.setPayCardFee(shoppingCartGoodsResponseVo.getPayCardFee());
if (calculationDiscountResult != null ) {
if (CollectionUtils.isNotEmpty(calculationDiscountResult.getDiscounts())) {
long buyThreeGiveOneCouponFee = calculationDiscountResult.getDiscounts().stream().filter(t -> null != t.getExtendType() && t.getExtendType() == 7).mapToLong(apportionGoods -> apportionGoods.getCardAmount()).sum();
shoppingCartGoodsDto.setBuyThreeGiveOneCouponFee(buyThreeGiveOneCouponFee);
}
}
shoppingCartGoodsDto.setDeliveryAmount(shoppingCartGoodsResponseVo.getDeliveryAmount());
shoppingCartGoodsDto.setDiscountDeliveryAmount(shoppingCartGoodsResponseVo.getDiscountDeliveryAmount());
shoppingCartGoodsDto.setThresholdAmount(shoppingCartGoodsResponseVo.getThresholdAmount());
......
......@@ -133,4 +133,13 @@ public class MCoffeeAddGoodsRequestVo {
*/
private String groupName;
/**
* 买三赠一券code
*/
private String buyThreeGiveOneCouponCode;
/**
* 买三赠一券活动号
*/
private String buyThreeGiveOneActivityCode;
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: ShoppingCartRelationFactory
* @Description:
* @author: pengfei.liu
* @date: 2020/11/23
* @version V1.0
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.service.shoppingCart;
public interface ShoppingCartRelationFactory {
/**
* 获取购物车查询出参构建实现
* @param partnerId
* @return
*/
ShoppingCartRelationService getBuildShoppingCartGoodsResponseService(String partnerId);
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: ShoppingCartRelationService
* @Description:
* @author: pengfei.liu
* @date: 2020/11/23
* @version V1.0
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.service.shoppingCart;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
public interface ShoppingCartRelationService {
/**
* 获取购物车查询出参构建实现
*/
void buildShoppingCartGoodsResponse(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult);
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: CouponService
* @Package cn.freemud.service
* @Description:
* @author: pengfei.liu
* @date: 2020/11/23
* @version V1.0
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.service.shoppingCart.impl;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.service.shoppingCart.ShoppingCartRelationService;
import org.springframework.stereotype.Service;
@Service("cocoShoppingCartRelationService")
public class CocoShoppingCartRelationServiceImpl implements ShoppingCartRelationService {
@Override
public void buildShoppingCartGoodsResponse(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult) {
if(discountResult != null){
shoppingCartGoodsResponseVo.setDiscounts(discountResult.getDiscounts());
shoppingCartGoodsResponseVo.setGoods(discountResult.getGoods());
}
}
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: PlatformShoppingCartRelationServiceImpl
* @Description:
* @author: pengfei.liu
* @date: 2020/11/23
* @version V1.0
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.service.shoppingCart.impl;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.service.shoppingCart.ShoppingCartRelationService;
import org.springframework.stereotype.Service;
@Service("platformShoppingCartRelationService")
public class PlatformShoppingCartRelationServiceImpl implements ShoppingCartRelationService {
@Override
public void buildShoppingCartGoodsResponse(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult) {
}
}
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: ShoppingCartRelationFactoryImpl
* @Description:
* @author: pengfei.liu
* @date: 2020/11/23
* @version V1.0
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.service.shoppingCart.impl;
import cn.freemud.service.shoppingCart.ShoppingCartRelationFactory;
import cn.freemud.service.shoppingCart.ShoppingCartRelationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ShoppingCartRelationFactoryImpl implements ShoppingCartRelationFactory {
/**
* coco商户
*/
@Value("#{'${coco.partnerId}'.split(',')}")
private List<String> cocoPartnerId;
/**
* coco
*/
@Autowired
@Qualifier("cocoShoppingCartRelationService")
ShoppingCartRelationService cocoShoppingCartRelationService;
/**
* 平台
*/
@Autowired
@Qualifier("platformShoppingCartRelationService")
ShoppingCartRelationService platformShoppingCartRelationService;
@Override
public ShoppingCartRelationService getBuildShoppingCartGoodsResponseService(String partnerId) {
if(cocoPartnerId.contains(partnerId)){
return cocoShoppingCartRelationService;
}else{
return platformShoppingCartRelationService;
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment