Commit ea25c9d4 by 周晓航

Merge branch 'master-spock' into feature/zxh/套餐商品库存新模式-20221018

# Conflicts:
#	order-application-service/src/test/spock/cn/freemud/service/impl/OrderAdapterServiceImplTest.groovy
parents 6714ea37 cafe8572
...@@ -122,4 +122,13 @@ public class ExposureOrderController { ...@@ -122,4 +122,13 @@ public class ExposureOrderController {
return ResponseUtil.success(exposureOrderService.getVirtualStore(req.getAppId(), req.getType())); return ResponseUtil.success(exposureOrderService.getVirtualStore(req.getAppId(), req.getType()));
} }
/**
* 查询支付配置paycode
*/
@ApiAnnotation(logMessage = "查询支付配置paycode")
@PostMapping("/getPayCode")
public BaseResponse<String> getPayCode(@Validated @LogParams @RequestBody GetPayCodeVo req) {
return ResponseUtil.success(exposureOrderService.getPayCode(req));
}
} }
package cn.freemud.entities.vo;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
public class GetPayCodeVo {
@NotBlank(message = "商户号不能为空")
private String partnerId;
@NotBlank(message = "门店id不能为空")
private String storeId;
@NotBlank(message = "小程序id不能为空")
private String appId;
private String channel;
}
...@@ -27,13 +27,12 @@ import cn.freemud.entities.dto.shoppingCart.GetShoppingCartGoodsApportionDto; ...@@ -27,13 +27,12 @@ import cn.freemud.entities.dto.shoppingCart.GetShoppingCartGoodsApportionDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto; import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.dto.store.StoreMixResponseDto; import cn.freemud.entities.dto.store.StoreMixResponseDto;
import cn.freemud.entities.vo.CreateOrderBaseVo; import cn.freemud.entities.vo.CreateOrderBaseVo;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.GetProductsVo; import cn.freemud.entities.vo.GetProductsVo;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo; import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.enums.*; import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.adapter.OrderCheckAdapter; import cn.freemud.service.adapter.OrderCheckAdapter;
import cn.freemud.service.impl.ItemServiceImpl; import cn.freemud.service.impl.OrderItemServiceImpl;
import cn.freemud.service.impl.StoreServiceImpl; import cn.freemud.service.impl.StoreServiceImpl;
import cn.freemud.service.order.OrderRelationFactory; import cn.freemud.service.order.OrderRelationFactory;
import cn.freemud.service.order.OrderRelationService; import cn.freemud.service.order.OrderRelationService;
...@@ -102,7 +101,7 @@ public abstract class CheckOrderUniversal { ...@@ -102,7 +101,7 @@ public abstract class CheckOrderUniversal {
@Autowired @Autowired
private StoreServiceImpl storeService; private StoreServiceImpl storeService;
@Autowired @Autowired
private ItemServiceImpl itemService; private OrderItemServiceImpl itemService;
// 配送费逻辑是否使用旧的 // 配送费逻辑是否使用旧的
@Value("${store.delivery.use.old}") @Value("${store.delivery.use.old}")
......
...@@ -3,6 +3,8 @@ package cn.freemud.service; ...@@ -3,6 +3,8 @@ package cn.freemud.service;
import cn.freemud.entities.vo.GetMallPayConfigVo; import cn.freemud.entities.vo.GetMallPayConfigVo;
import cn.freemud.entities.vo.GetPayConfigVo; import cn.freemud.entities.vo.GetPayConfigVo;
import cn.freemud.entities.vo.GetPaySuccessDataRequest; import cn.freemud.entities.vo.GetPaySuccessDataRequest;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.order.PayConfigVo; import cn.freemud.entities.vo.order.PayConfigVo;
import cn.freemud.entities.vo.order.PaySuccessDataVo; import cn.freemud.entities.vo.order.PaySuccessDataVo;
import cn.freemud.enums.AggregationTypeEnum; import cn.freemud.enums.AggregationTypeEnum;
...@@ -84,4 +86,11 @@ public class ExposureOrderService { ...@@ -84,4 +86,11 @@ public class ExposureOrderService {
AssortmentOpenPlatformIappWxappStore wxAppStore = payService.getIappWxappStoreInfo(appId, type); AssortmentOpenPlatformIappWxappStore wxAppStore = payService.getIappWxappStoreInfo(appId, type);
return wxAppStore == null ? "" : wxAppStore.getStoreId(); return wxAppStore == null ? "" : wxAppStore.getStoreId();
} }
/**
* 查询支付配置paycode
*/
public String getPayCode(GetPayCodeVo req) {
return payService.getPayCode(req.getAppId(), req.getStoreId(), req.getChannel());
}
} }
...@@ -51,7 +51,6 @@ import com.freemud.application.sdk.api.membercenter.service.MemberPropertyServic ...@@ -51,7 +51,6 @@ import com.freemud.application.sdk.api.membercenter.service.MemberPropertyServic
import com.freemud.application.sdk.api.ordercenter.constant.ResponseConstant; import com.freemud.application.sdk.api.ordercenter.constant.ResponseConstant;
import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum; import com.freemud.application.sdk.api.ordercenter.enums.ProductTypeEnum;
import com.freemud.application.sdk.api.storecenter.request.QueryDeliveryRequest; import com.freemud.application.sdk.api.storecenter.request.QueryDeliveryRequest;
import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
import com.freemud.application.sdk.api.storecenter.response.QueryDeliverDetailResponse; import com.freemud.application.sdk.api.storecenter.response.QueryDeliverDetailResponse;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse; import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService; import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
...@@ -97,7 +96,7 @@ public class CheckMCCafeOrder { ...@@ -97,7 +96,7 @@ public class CheckMCCafeOrder {
// @Autowired // @Autowired
// private StockClient stockClient; // private StockClient stockClient;
@Autowired @Autowired
private ItemServiceImpl itemService; private OrderItemServiceImpl itemService;
@Autowired @Autowired
private CouponService couponService; private CouponService couponService;
@Autowired @Autowired
......
...@@ -192,7 +192,7 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService { ...@@ -192,7 +192,7 @@ public class MCCafeOrderServiceImpl implements MCCafeOrderService {
@Autowired @Autowired
private CustomerApplicationClient customerApplicationClient; private CustomerApplicationClient customerApplicationClient;
@Autowired @Autowired
private ItemServiceImpl itemService; private OrderItemServiceImpl itemService;
@Autowired @Autowired
private BuriedPointService buriedPointService; private BuriedPointService buriedPointService;
@Autowired @Autowired
......
...@@ -115,7 +115,7 @@ public class MallOrderServiceImpl implements MallOrderService { ...@@ -115,7 +115,7 @@ public class MallOrderServiceImpl implements MallOrderService {
@Autowired @Autowired
private OrderAdapter orderAdapter; private OrderAdapter orderAdapter;
@Autowired @Autowired
private ItemServiceImpl itemService; private OrderItemServiceImpl itemService;
@Autowired @Autowired
private ShoppingCartClient shoppingCartClient; private ShoppingCartClient shoppingCartClient;
@Autowired @Autowired
......
...@@ -44,7 +44,7 @@ import java.util.function.Predicate; ...@@ -44,7 +44,7 @@ import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
public class CouponServiceImpl implements CouponService { public class OrderCouponServiceImpl implements CouponService {
@Autowired @Autowired
private CouponOnlineClient couponOnlineClient; private CouponOnlineClient couponOnlineClient;
......
...@@ -33,7 +33,7 @@ import java.util.*; ...@@ -33,7 +33,7 @@ import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
public class ItemServiceImpl implements ItemService{ public class OrderItemServiceImpl implements ItemService{
private static Gson gson = new Gson(); private static Gson gson = new Gson();
......
...@@ -105,6 +105,7 @@ import com.freemud.application.sdk.api.ordercenter.entities.v1.RefundBeanV1; ...@@ -105,6 +105,7 @@ import com.freemud.application.sdk.api.ordercenter.entities.v1.RefundBeanV1;
import com.freemud.application.sdk.api.ordercenter.enums.*; import com.freemud.application.sdk.api.ordercenter.enums.*;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.*; import com.freemud.application.sdk.api.ordercenter.enums.orderv1.*;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderStatusV1; import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderStatusV1;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderStatusV1;
import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderTypeV1; import com.freemud.application.sdk.api.ordercenter.enums.orderv1.OrderTypeV1;
import com.freemud.application.sdk.api.ordercenter.request.*; import com.freemud.application.sdk.api.ordercenter.request.*;
import com.freemud.application.sdk.api.ordercenter.request.carpark.ParkingOrderCreateReq; import com.freemud.application.sdk.api.ordercenter.request.carpark.ParkingOrderCreateReq;
...@@ -202,7 +203,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -202,7 +203,7 @@ public class OrderServiceImpl implements Orderservice {
@Autowired @Autowired
private CustomerApplicationClient customerApplicationClient; private CustomerApplicationClient customerApplicationClient;
@Autowired @Autowired
private ItemServiceImpl itemService; private OrderItemServiceImpl itemService;
@Autowired @Autowired
private CouponActivityService couponActivityService; private CouponActivityService couponActivityService;
@Autowired @Autowired
......
...@@ -1711,4 +1711,16 @@ public class PayServiceImpl { ...@@ -1711,4 +1711,16 @@ public class PayServiceImpl {
return payTypeCode; return payTypeCode;
} }
public String getPayCode(String wxAppid, String storeId, String channel) {
PayChannelType byIndex = PayChannelType.getByIndex(Byte.parseByte(channel));
if (byIndex.getEbcode() == null) return "";
AssortmentOpenPlatformIappWxappStore wxAppStore = assortmentOpenPlatformIappWxappStoreManager.selectWxappStoreByWxAppIdAndStoreId(wxAppid
, storeId
, byIndex.getEbcode());
if (wxAppStore != null && StringUtils.isNotBlank(wxAppStore.getPayCode())) {
return wxAppStore.getPayCode();
}
return "9";
}
} }
...@@ -22,7 +22,7 @@ import cn.freemud.enums.ResponseResult; ...@@ -22,7 +22,7 @@ import cn.freemud.enums.ResponseResult;
import cn.freemud.enums.*; import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.MallOrderService; import cn.freemud.service.MallOrderService;
import cn.freemud.service.impl.ItemServiceImpl; import cn.freemud.service.impl.OrderItemServiceImpl;
import cn.freemud.service.universal.UniversalOrderService; import cn.freemud.service.universal.UniversalOrderService;
import cn.freemud.utils.AppLogUtil; import cn.freemud.utils.AppLogUtil;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
...@@ -83,7 +83,7 @@ public class SaasMallOrderService extends UniversalOrderService { ...@@ -83,7 +83,7 @@ public class SaasMallOrderService extends UniversalOrderService {
private OrderAdapter orderAdapter; private OrderAdapter orderAdapter;
@Autowired @Autowired
private ItemServiceImpl itemService; private OrderItemServiceImpl itemService;
@Autowired @Autowired
private OrderSdkAdapter orderSdkAdapter; private OrderSdkAdapter orderSdkAdapter;
......
...@@ -2,11 +2,14 @@ package cn.freemud.service.impl ...@@ -2,11 +2,14 @@ package cn.freemud.service.impl
import cn.freemud.adapter.OrderAdapter import cn.freemud.adapter.OrderAdapter
import cn.freemud.entities.bo.CreateOrderBONew import cn.freemud.entities.bo.CreateOrderBONew
import cn.freemud.entities.dto.blacklist.Result
import cn.freemud.entities.dto.blacklist.resp.MemberBlacklistVO
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto
import cn.freemud.entities.dto.store.StoreMixResponseDto import cn.freemud.entities.dto.store.StoreMixResponseDto
import cn.freemud.entities.vo.CreateOrderVo import cn.freemud.entities.vo.CreateOrderVo
import cn.freemud.handler.MemberBlacklistHandler import cn.freemud.handler.MemberBlacklistHandler
import cn.freemud.service.business.impl.OrderBusinessServiceImpl import cn.freemud.service.business.impl.OrderBusinessServiceImpl
import cn.freemud.service.thirdparty.DataCenterClient
import com.alibaba.fastjson.JSON import com.alibaba.fastjson.JSON
import com.alibaba.fastjson.TypeReference import com.alibaba.fastjson.TypeReference
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
...@@ -30,20 +33,23 @@ class OrderAdapterServiceImplTest extends Specification { ...@@ -30,20 +33,23 @@ class OrderAdapterServiceImplTest extends Specification {
def orderAdapter = new OrderAdapter(mcCafePartnerId: ["9999"], cocoPartnerId: ["9999"]) def orderAdapter = new OrderAdapter(mcCafePartnerId: ["9999"], cocoPartnerId: ["9999"])
def itemService = Mock(ItemServiceImpl.class) def itemService = Mock(OrderItemServiceImpl.class)
def orderSdkService = Mock(OrderSdkService.class) def orderSdkService = Mock(OrderSdkService.class)
def dataCenterClient = Mock(DataCenterClient)
def orderBusinessService = new OrderBusinessServiceImpl() def orderBusinessService = new OrderBusinessServiceImpl()
def orderSdkAdapter = new OrderSdkAdapter() def orderSdkAdapter = new OrderSdkAdapter()
def orderCenterSdkAdapter = new OrderCenterSdkAdapter() def orderCenterSdkAdapter = new OrderCenterSdkAdapter()
def memberBlacklistHandler = Mock(MemberBlacklistHandler.class) def memberBlacklistHandler = new MemberBlacklistHandler()
void setup() { void setup() {
orderServiceImpl.orderAdapter = orderAdapter orderServiceImpl.orderAdapter = orderAdapter
orderServiceImpl.itemService = itemService orderServiceImpl.itemService = itemService
orderServiceImpl.memberBlacklistHandler = memberBlacklistHandler
memberBlacklistHandler.dataCenterClient = dataCenterClient
orderBusinessService.orderSdkAdapter = orderSdkAdapter orderBusinessService.orderSdkAdapter = orderSdkAdapter
orderServiceImpl.orderBusinessService = orderBusinessService orderServiceImpl.orderBusinessService = orderBusinessService
orderServiceImpl.memberBlacklistHandler = memberBlacklistHandler orderServiceImpl.memberBlacklistHandler = memberBlacklistHandler
......
...@@ -12,11 +12,48 @@ ...@@ -12,11 +12,48 @@
<properties> <properties>
<jacoco.version>0.7.5.201505241946</jacoco.version> <jacoco.version>0.7.5.201505241946</jacoco.version>
<junit.version>4.12</junit.version> <junit.version>4.12</junit.version>
<spock.version>1.3-groovy-2.5</spock.version>
<powermock.version>2.0.4</powermock.version>
</properties> </properties>
<artifactId>shopping-cart-application-service</artifactId> <artifactId>shopping-cart-application-service</artifactId>
<dependencies> <dependencies>
<!--引入spock 核心包-->
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
<version>${spock.version}</version>
<scope>test</scope>
</dependency>
<!--引入spock 与 spring 集成包-->
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-spring</artifactId>
<version>${spock.version}</version>
<scope>test</scope>
</dependency>
<!-- power mock -->
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.3.3</version>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>com.freemud.application.service.sdk</groupId> <groupId>com.freemud.application.service.sdk</groupId>
<artifactId>paymentcenter-sdk</artifactId> <artifactId>paymentcenter-sdk</artifactId>
......
...@@ -1408,11 +1408,13 @@ public class ShoppingCartConvertAdapter { ...@@ -1408,11 +1408,13 @@ public class ShoppingCartConvertAdapter {
if (isComboxGoods) { if (isComboxGoods) {
productComboType = parentProductBean.getProductComboList().stream().filter(p -> ObjectUtils.equals(comboxGoods.getGoodsId(), p.getProductId())).findFirst().orElse(new ProductComboType()); productComboType = parentProductBean.getProductComboList().stream().filter(p -> ObjectUtils.equals(comboxGoods.getGoodsId(), p.getProductId())).findFirst().orElse(new ProductComboType());
comboxGoods.setLinkedId(productComboType.getLinkedId()); comboxGoods.setLinkedId(productComboType.getLinkedId());
comboxGoods.setStockLimit(Objects.equals(1,productComboType.getStockLimit()));
} else { } else {
Map<String, GroupDetailType> map = new HashMap<>(); Map<String, GroupDetailType> map = new HashMap<>();
parentProductBean.getProductGroupList().stream().map(t -> t.getGroupDetail()).forEach(group -> group.forEach(detailType -> map.put(detailType.getProductId(), detailType))); parentProductBean.getProductGroupList().stream().map(t -> t.getGroupDetail()).forEach(group -> group.forEach(detailType -> map.put(detailType.getProductId(), detailType)));
groupDetailType = map.get(comboxGoods.getGoodsId()); groupDetailType = map.get(comboxGoods.getGoodsId());
comboxGoods.setLinkedId(groupDetailType.getLinkedId()); comboxGoods.setLinkedId(groupDetailType.getLinkedId());
comboxGoods.setStockLimit(Objects.equals(1,groupDetailType.getStockLimit()));
} }
// 若是固定商品则取商品详情的FinalPrice,若是可选商品则取MarkUpPrice // 若是固定商品则取商品详情的FinalPrice,若是可选商品则取MarkUpPrice
......
...@@ -25,4 +25,5 @@ public class ProductComboType { ...@@ -25,4 +25,5 @@ public class ProductComboType {
* 【订C,“POS编码”让凌顶那边去匹配商品】 https://www.tapd.cn/43862731/prong/stories/view/1143862731001039549 * 【订C,“POS编码”让凌顶那边去匹配商品】 https://www.tapd.cn/43862731/prong/stories/view/1143862731001039549
*/ */
private String linkedId ; private String linkedId ;
private Integer stockLimit;
} }
...@@ -391,6 +391,12 @@ public class CartGoods { ...@@ -391,6 +391,12 @@ public class CartGoods {
@Data @Data
public final static class ComboxGoods { public final static class ComboxGoods {
/** /**
* 是否限制库存
* 用于创建订单时,是否扣减库存
* 2022年10月19日11:20:11 tapd 新增套餐商品 可选搭配是否扣除库存 不走套餐主商品配置
*/
private boolean isStockLimit;
/**
* 【订C,“POS编码”让凌顶那边去匹配商品】 https://www.tapd.cn/43862731/prong/stories/view/1143862731001039549 * 【订C,“POS编码”让凌顶那边去匹配商品】 https://www.tapd.cn/43862731/prong/stories/view/1143862731001039549
*/ */
private String linkedId ; private String linkedId ;
......
...@@ -624,7 +624,7 @@ public class CalculationCommonService { ...@@ -624,7 +624,7 @@ public class CalculationCommonService {
com.setProductType(comb.isWeightType() ? ProductType.WEIGHT_PRODUCT.getCode() : ProductType.SETMEAL.getCode()); com.setProductType(comb.isWeightType() ? ProductType.WEIGHT_PRODUCT.getCode() : ProductType.SETMEAL.getCode());
com.setParentProductId(cartGoods.getGoodsId()); com.setParentProductId(cartGoods.getGoodsId());
com.setIsFixedProduct(isFixed); com.setIsFixedProduct(isFixed);
com.setStockLimit(cartGoods.isStockLimit()); com.setStockLimit(comb.isStockLimit());
com.setCustomerCode(comb.getCustomerCode()); com.setCustomerCode(comb.getCustomerCode());
com.setWeight(comb.getWeight()); com.setWeight(comb.getWeight());
com.setUnit(comb.getUnit()); com.setUnit(comb.getUnit());
......
package cn.freemud.adapter
import cn.freemud.adapter.ActivityAdapter
import cn.freemud.entities.vo.GetShoppingCartGoodsApportionRequestVo
import cn.freemud.service.impl.ShoppingCartNewServiceImpl
import com.alibaba.fastjson.JSON
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager
import org.junit.runner.RunWith
import org.mockito.Mockito
import org.powermock.api.mockito.PowerMockito
import org.powermock.core.classloader.annotations.PrepareForTest
import org.powermock.modules.junit4.PowerMockRunner
import org.powermock.modules.junit4.PowerMockRunnerDelegate
import org.spockframework.runtime.Sputnik
import spock.lang.Specification
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2022/3/7 9:35
* @description :
*/
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(Sputnik.class)
@PrepareForTest()
class DemoSpockMock extends Specification {
def shoppingCartNewServiceImpl = new ShoppingCartNewServiceImpl()
def customerInfoManager = PowerMockito.mock(AssortmentCustomerInfoManager)
void setup() {
shoppingCartNewServiceImpl.customerInfoManager = customerInfoManager
}
def "testMockEnable"() {
given: "设置请求参数"
def customerInfoVo = JSON.parseObject("{\"accessToken\":\"\",\"alipayUserId\":\"\",\"appId\":\"wx3f7ca0c75b213380\",\"appSecret\":\"\",\"appsecret\":\"\",\"channel\":\"1\",\"customerId\":\"\",\"devBrand\":\"\",\"devModel\":\"\",\"iappId\":\"7\",\"memberId\":\"3614319825989629832\",\"mobile\":\"17327190802\",\"newMember\":false,\"nickName\":\"SWEET SUGA\",\"openId\":\"o98fP4qjUo7xm-nT-JAaVEk9yBqM\",\"openid\":\"o98fP4qjUo7xm-nT-JAaVEk9yBqM\",\"partnerId\":\"2581\",\"photoUrl\":\"https://thirdwx.qlogo.cn/mmopen/vi_32/zahIlicTNSM0IA0qjOryv6s0SzIhlwW9EpQKvL63GbPhBwficMAibDohDEibSCQU0I5KohibIpp0yL57TWRcVKrRH2A/132\",\"registerTime\":\"2021-02-26 14:10:26\",\"sessionId\":\"eac53a53f8ae62def7f40cb1e47a1bd9791d95a8\",\"sessionKey\":\"GCyyapzbBSM4yXh9AduGOw==\",\"session_key\":\"GCyyapzbBSM4yXh9AduGOw==\",\"storeId\":\"\",\"tableNumber\":\"\",\"thirdPartyMemberID\":\"\",\"thirdPartyPartnerID\":\"\",\"unionId\":\"o7cEm68JPFhbrzqb0a0BcQE-dDVA\",\"wxAppId\":\"wx3f7ca0c75b213380\",\"wxAppid\":\"wx3f7ca0c75b213380\"}"
, AssortmentCustomerInfoVo.class)
def getShoppingCartGoodsApportionRequestVo = JSON.parseObject("{\"shoppingCartInfoRequestVo\":{\"activityCode\":\"G1643164091158349\",\"buyType\":0,\"couponCode\":\"88709227085491207040\",\"couponCodes\":[{\"activityCode\":\"G1643164091158349\",\"couponCode\":\"88709227085491207040\",\"couponType\":7,\"discountAmount\":800,\"index\":1}],\"flag\":0,\"menuType\":\"saas\",\"orderType\":1,\"partnerId\":\"2581\",\"reachStoreType\":5,\"sendGoods\":[],\"sessionId\":\"eac53a53f8ae62def7f40cb1e47a1bd9791d95a8\",\"shopId\":\"229830\",\"trackingNo\":\"8283bc4c7e5f4bbb8b357e3c0bef7183\",\"useCouponFlag\":1,\"useCustomerScore\":2,\"version\":\"2.0.60.6\"}}"
, GetShoppingCartGoodsApportionRequestVo.class)
def premiumExchangeActivity = getShoppingCartGoodsApportionRequestVo.getPremiumExchangeActivity()
def shoppingCartInfoRequestVo = getShoppingCartGoodsApportionRequestVo.getShoppingCartInfoRequestVo()
and: "mock掉接口返回的用户信息"
Mockito.when(customerInfoManager.getCustomerInfoByObject(Mockito.anyString())).thenReturn(customerInfoVo)
when: "调用获取用户信息方法"
def response = shoppingCartNewServiceImpl.getShoppingCartGoods(shoppingCartInfoRequestVo, premiumExchangeActivity)
then: "验证返回结果是否符合预期值"
}
}
package cn.freemud.service.impl
import cn.freemud.adapter.ShoppingCartConvertAdapter
import cn.freemud.adapter.StoreItemAdapter
import cn.freemud.entities.dto.GetCouponDetailResponseDto
import cn.freemud.entities.dto.ProductBaseResponse
import cn.freemud.entities.dto.ProductInfosDto
import cn.freemud.entities.dto.ProductListDto
import cn.freemud.entities.dto.product.CheckCartRequest
import cn.freemud.entities.dto.product.ValiadShopProductResponse
import cn.freemud.entities.vo.AddShoppingCartGoodsRequestVo
import cn.freemud.entities.vo.CartGoods
import cn.freemud.service.CouponService
import cn.freemud.service.ItemService
import cn.freemud.service.thirdparty.CouponOnlineClient
import cn.freemud.service.thirdparty.ProductClient
import com.alibaba.fastjson.JSON
import com.alibaba.fastjson.TypeReference
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager
import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare
import org.junit.runner.RunWith
import org.mockito.Mockito
import org.powermock.api.mockito.PowerMockito
import org.powermock.core.classloader.annotations.PrepareForTest
import org.powermock.modules.junit4.PowerMockRunner
import org.powermock.modules.junit4.PowerMockRunnerDelegate
import org.spockframework.runtime.Sputnik
import spock.lang.Specification
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2022/3/16 15:16
* @description :
*/
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(Sputnik.class)
@PrepareForTest([ShoppingCartConvertAdapter.class,
SDKCommonBaseContextWare.class])
class ShoppingCartNewServiceImpt2PowerMockTest extends Specification {
def shoppingCartNewServiceImpl = new ShoppingCartNewServiceImpl()
def customerInfoManager = PowerMockito.mock(AssortmentCustomerInfoManager)
def assortmentSdkService = new AssortmentSdkService()
def couponServiceImpl = new CouponServiceImpl()
def couponOnlineClient = PowerMockito.mock(CouponOnlineClient)
def itemService = new ItemServiceImpl()
def storeItemAdapter = new StoreItemAdapter()
def storeItemClient = PowerMockito.mock(ProductClient)
void setup() {
shoppingCartNewServiceImpl.customerInfoManager = customerInfoManager
shoppingCartNewServiceImpl.assortmentSdkService = assortmentSdkService
couponServiceImpl.couponOnlineClient = couponOnlineClient
couponServiceImpl.itemService = itemService
couponServiceImpl.storeItemClient = storeItemClient
itemService.storeItemAdapter = storeItemAdapter
itemService.storeItemClient = storeItemClient
assortmentSdkService.storeItemClient = storeItemClient
// mock静态类
PowerMockito.mockStatic(SDKCommonBaseContextWare.class)
}
def "测试 /addGoods"() {
given: "request 请求参数"
def addShoppingCartGoodsRequestVo = JSON.parseObject("{\"channelType\":\"saas\",\"channel\":1,\"partnerId\":\"2690\",\"appId\":\"wxa1f272347828dae8\",\"version\":\"2.0.68.7\",\"sessionId\":\"1410a547ea1bf178f17032a9e12ac6606db8cc6f\",\"orderType\":1,\"menuType\":\"saas\",\"shopId\":\"QAJIALE001\",\"spuId\":\"215809930343585821\",\"skuId\":\"\",\"qty\":1,\"categoryId\":\"0101\",\"productMaterialList\":[],\"categoryName\":\"单品\",\"productComboList\":[],\"productGroupList\":[],\"receiveId\":\"\",\"bizType\":null}"
, AddShoppingCartGoodsRequestVo.class)
and: "模拟第三方响应结果数据"
def customerInfoVo = JSON.parseObject("{\"accessToken\":\"\",\"alipayUserId\":\"\",\"appId\":\"wx3f7ca0c75b213380\",\"appSecret\":\"\",\"appsecret\":\"\",\"channel\":\"1\",\"customerId\":\"\",\"devBrand\":\"\",\"devModel\":\"\",\"iappId\":\"7\",\"memberId\":\"3614319825989629832\",\"mobile\":\"17327190802\",\"newMember\":false,\"nickName\":\"SWEET SUGA\",\"openId\":\"o98fP4qjUo7xm-nT-JAaVEk9yBqM\",\"openid\":\"o98fP4qjUo7xm-nT-JAaVEk9yBqM\",\"partnerId\":\"2581\",\"photoUrl\":\"https://thirdwx.qlogo.cn/mmopen/vi_32/zahIlicTNSM0IA0qjOryv6s0SzIhlwW9EpQKvL63GbPhBwficMAibDohDEibSCQU0I5KohibIpp0yL57TWRcVKrRH2A/132\",\"registerTime\":\"2021-02-26 14:10:26\",\"sessionId\":\"eac53a53f8ae62def7f40cb1e47a1bd9791d95a8\",\"sessionKey\":\"GCyyapzbBSM4yXh9AduGOw==\",\"session_key\":\"GCyyapzbBSM4yXh9AduGOw==\",\"storeId\":\"\",\"tableNumber\":\"\",\"thirdPartyMemberID\":\"\",\"thirdPartyPartnerID\":\"\",\"unionId\":\"o7cEm68JPFhbrzqb0a0BcQE-dDVA\",\"wxAppId\":\"wx3f7ca0c75b213380\",\"wxAppid\":\"wx3f7ca0c75b213380\"}"
, AssortmentCustomerInfoVo.class)
def responseDto = JSON.parseObject(""
, GetCouponDetailResponseDto.class)
def productInfosDto = JSON.parseObject(""
, ProductInfosDto.class)
def productListDto = JSON.parseObject(""
, ProductListDto.class)
def valiadProductResponse = JSON.parseObject(""
, new TypeReference<ProductBaseResponse<ValiadShopProductResponse>>() {})
def productInfosDto2 = JSON.parseObject(""
, new TypeReference<ProductInfosDto>() {})
// 模拟购物车商品
def goodList = JSON.parseArray("[{\"addCartTime\":1646286585880,\"amount\":800,\"canUseCoupon\":0,\"cartGoodsUid\":\"b8eca7b4-8627-4726-8560-b1d9f74a1c8b\",\"couponCode\":\"88709227085491207040\",\"createTimeMili\":1646286585880,\"extra\":[],\"goodsId\":\"spq88709227085491207040\",\"goodsType\":10,\"isB3S1Coupon\":0,\"isB3S1CouponGoods\":0,\"isMonthCard\":0,\"isMonthCardGoods\":0,\"isSunnyCoupon\":0,\"isUseMonthCard\":0,\"linkedId\":\"\",\"originalAmount\":0,\"originalPrice\":800,\"originalProductType\":1,\"packPrice\":0,\"pic\":\"https://picture.sandload.cn/1619081297921.jpg\",\"productComboList\":[],\"productGroupList\":[],\"productMaterialList\":[],\"qty\":2,\"skuId\":\"201889966261817090\",\"skuName\":\"鸡米花T\",\"spuId\":\"201889966261817090\",\"stockLimit\":false,\"unit\":\"\",\"weight\":0.0,\"weightType\":false},{\"addCartTime\":1646286600492,\"amount\":500,\"canUseCoupon\":1,\"cartGoodsUid\":\"87653424-e6ef-45c7-ad84-2ebc777cccc9\",\"categoryName\":\"缤纷小食\",\"classificationForeignName\":\"正价单品\",\"classificationId\":\"0102\",\"classificationName\":\"正价单品\",\"createTimeMili\":1646286600492,\"customerCode\":\"hn80180054\",\"finalPrice\":500,\"foreignName\":\"\",\"goodsId\":\"201889968054882060\",\"goodsType\":5,\"isB3S1Coupon\":0,\"isB3S1CouponGoods\":0,\"isMonthCard\":0,\"isMonthCardGoods\":0,\"isSunnyCoupon\":0,\"isUseMonthCard\":0,\"linkedId\":\"\",\"materialAmount\":0,\"memberDiscount\":100,\"name\":\"元气鸡排T\",\"originalAmount\":500,\"originalMaterialAmount\":0,\"originalPrice\":500,\"originalProductType\":1,\"packPrice\":0,\"pic\":\"https://picture.sandload.cn/1619082050722.jpg\",\"productComboList\":[],\"productGroupList\":[],\"productMaterialList\":[],\"qty\":1,\"riseSell\":1,\"singleOrder\":0,\"skuForeignName\":\"\",\"skuId\":\"\",\"skuName\":\"元气鸡排T\",\"spuForeignName\":\"\",\"spuId\":\"201889968054882060\",\"spuName\":\"元气鸡排T\",\"stockLimit\":false,\"subForeignName\":\"\",\"subName\":\"\",\"tax\":0.01,\"taxId\":\"\",\"unit\":\"\",\"weight\":0.0,\"weightType\":false}]"
, CartGoods.class)
and: "模拟第三方调用"
Mockito.when(customerInfoManager.getCustomerInfoByObject(Mockito.any())).thenReturn(customerInfoVo)
Mockito.when(couponOnlineClient.getCouponDetails(Mockito.any())).thenReturn(responseDto)
Mockito.when(storeItemClient.listProductInfos(Mockito.any())).thenReturn(productInfosDto)
Mockito.when(storeItemClient.getSpuIdsBySkuIds(Mockito.any())).thenReturn(productListDto)
Mockito.when(storeItemClient.validateShopProduct(Mockito.any())).thenReturn(valiadProductResponse)
Mockito.when(storeItemClient.listProductInfos(Mockito.any())).thenReturn(productInfosDto2)
Mockito.when(assortmentSdkService.getShoppingCart(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(goodList)
and: "静态方法mock"
PowerMockito.when(SDKCommonBaseContextWare.getBean(CouponService.class)).thenReturn(couponServiceImpl)
when: "调用方法逻辑"
def response = shoppingCartNewServiceImpl.addGoods(addShoppingCartGoodsRequestVo)
then: "验证 返回结果"
with(response) {
code == "100"
message == "success"
}
}
}
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