Commit feb18e03 by chongfu.liang

重构

parent 8cf0b488
package cn.freemud.demo.adapter;
import cn.freemud.demo.entities.bo.goods.add.*;
import cn.freemud.demo.entities.dto.goods.add.AddGoodsRequestDTO;
import cn.freemud.demo.enums.BizTypeEnum;
import cn.freemud.enums.OrderChannelType;
import com.alibaba.fastjson.JSON;
import org.springframework.stereotype.Component;
@Component
public class ServiceBOAdapter {
public BaseAddGoodsBO convert2AddGoodsBO(String bizType, AddGoodsRequestDTO baseRequestDTO) {
BaseAddGoodsBO baseAddGoodsBO;
if (BizTypeEnum.MAIL.getCode().equals(bizType)){
baseAddGoodsBO = createMallBO(baseRequestDTO);
} else if (BizTypeEnum.MCOFFEE.getCode().equals(bizType)) {
baseAddGoodsBO = createMCoffeeBO(baseRequestDTO);
} else {
baseAddGoodsBO = createPlatformBO(baseRequestDTO);
}
return baseAddGoodsBO;
}
public BaseAddGoodsVO convert2AddGoodsVO(String bizType, BaseAddGoodsBO baseAddGoodsBO) {
BaseAddGoodsVO baseAddGoodsVO;
if (BizTypeEnum.MAIL.getCode().equals(bizType)){
baseAddGoodsVO = createMallBO(baseAddGoodsBO);
} else if (BizTypeEnum.MCOFFEE.getCode().equals(bizType)) {
baseAddGoodsVO = createMCoffeeBO(baseAddGoodsBO);
} else {
baseAddGoodsVO = createPlatformBO(baseAddGoodsBO);
}
return baseAddGoodsVO;
}
private MallAddGoodsBO createPlatformBO(AddGoodsRequestDTO baseRequestDTO) {
MallAddGoodsBO mallAddGoodsBO = new MallAddGoodsBO();
return mallAddGoodsBO;
}
private MCoffeeAddGoodsBO createMCoffeeBO(AddGoodsRequestDTO baseRequestDTO) {
MCoffeeAddGoodsBO mCoffeeAddGoodsBO = new MCoffeeAddGoodsBO();
return mCoffeeAddGoodsBO;
}
private BaseAddGoodsBO createMallBO(AddGoodsRequestDTO baseRequestDTO) {
PlatformAddGoodsBO platformAddGoodsBO = new PlatformAddGoodsBO();
return platformAddGoodsBO;
}
private MallAddGoodsBO createPlatformVO(AddGoodsRequestDTO baseRequestDTO) {
MallAddGoodsBO mallAddGoodsBO = new MallAddGoodsBO();
return mallAddGoodsBO;
}
private MCoffeeAddGoodsBO createMCoffeeVO(AddGoodsRequestDTO baseRequestDTO) {
MCoffeeAddGoodsBO mCoffeeAddGoodsBO = new MCoffeeAddGoodsBO();
return mCoffeeAddGoodsBO;
}
private BaseAddGoodsBO createMallVO(AddGoodsRequestDTO baseRequestDTO) {
PlatformAddGoodsBO platformAddGoodsBO = new PlatformAddGoodsBO();
return platformAddGoodsBO;
}
}
package cn.freemud.demo.constant;
public class ResponseConstant {
public final static String RESPONSE_SUCCESS_STR = "100";
}
...@@ -13,8 +13,13 @@ ...@@ -13,8 +13,13 @@
package cn.freemud.demo.controller; package cn.freemud.demo.controller;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.demo.entities.bo.BaseAddGoodsBO; import cn.freemud.demo.adapter.ServiceBOAdapter;
import cn.freemud.demo.entities.factory.ServiceBoFactory; import cn.freemud.demo.entities.bo.goods.add.BaseAddGoodsBO;
import cn.freemud.demo.entities.dto.goods.add.AddGoodsRequestDTO;
import cn.freemud.demo.enums.BizTypeEnum;
import cn.freemud.demo.factory.ServiceFactory;
import cn.freemud.demo.service.AbstractAddGoodsService;
import cn.freemud.demo.utils.BizTypeUtil;
import cn.freemud.entities.dto.GetMemberInfoRequestDto; import cn.freemud.entities.dto.GetMemberInfoRequestDto;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import cn.freemud.enums.OrderChannelType; import cn.freemud.enums.OrderChannelType;
...@@ -25,6 +30,7 @@ import cn.freemud.service.impl.ShoppingCartMealServiceImpl; ...@@ -25,6 +30,7 @@ import cn.freemud.service.impl.ShoppingCartMealServiceImpl;
import cn.freemud.service.impl.ShoppingCartNewServiceImpl; import cn.freemud.service.impl.ShoppingCartNewServiceImpl;
import cn.freemud.service.impl.ShoppingCartToolsServiceImpl; import cn.freemud.service.impl.ShoppingCartToolsServiceImpl;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSON;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo; import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.enums.IappIdType; import com.freemud.api.assortment.datamanager.enums.IappIdType;
import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager; import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager;
...@@ -51,16 +57,25 @@ public class ShoppingCartController { ...@@ -51,16 +57,25 @@ public class ShoppingCartController {
@Autowired @Autowired
private AssortmentCustomerInfoManager customerInfoManager; private AssortmentCustomerInfoManager customerInfoManager;
@Autowired
private ServiceBOAdapter serviceBOAdapter;
/** /**
* 向购物车中添加商品 * 向购物车中添加商品
*/ */
@ApiAnnotation(logMessage = "addGoods") @ApiAnnotation(logMessage = "addGoods")
@PostMapping(value = "/addGoods") @PostMapping(value = "/addGoods")
public BaseResponse addGoods(@LogParams @RequestBody String params) { public BaseResponse addGoods(@LogParams @RequestBody String params) {
BaseAddGoodsBO addGoodsBOInstance = ServiceBoFactory.createAddGoodsBOInstance(params); AddGoodsRequestDTO baseRequestDTO = JSON.parseObject(params, AddGoodsRequestDTO.class);
BizTypeEnum bizType = BizTypeUtil.getBizType(baseRequestDTO);
BaseAddGoodsBO addGoodsBOInstance = serviceBOAdapter.convert2AddGoodsBO(bizType.getCode(), baseRequestDTO);
AbstractAddGoodsService addGoodsServiceInstance = ServiceFactory.createAddGoodsServiceInstance(bizType.getCode());
BaseAddGoodsBO addGoodsResponse = addGoodsServiceInstance.addGoods(addGoodsBOInstance);
return getInstanceByRequest(request).addGoods(request); BaseAddGoodsBO addGoodsBOInstance = serviceBOAdapter.convert2AddGoodsVO(bizType.getCode(), addGoodsResponse);
} }
/** /**
......
package cn.freemud.demo.entities;
import cn.freemud.base.entity.BaseResponse;
public class ResponseBuilder {
private final static String DEFAULT_VER = "1";
private final static String SUCCESS_CODE = "100";
private final static String SUCCESS_MESSAGE = "SUCCESS";
/**
* 无业务响应参数成功返回
* @return
*/
public static BaseResponse success() {
return new BaseResponse(DEFAULT_VER, SUCCESS_CODE, SUCCESS_MESSAGE);
}
/**
* 带有业务响应参数成功返回
* @return
*/
public static <T> BaseResponse success(T t) {
return new BaseResponse(SUCCESS_CODE, SUCCESS_MESSAGE, DEFAULT_VER, t);
}
}
package cn.freemud.demo.entities.bo.goods.add;
public class BaseAddGoodsVO {
}
package cn.freemud.demo.entities.bo; package cn.freemud.demo.entities.bo.goods.add;
public class MCoffeeAddGoodsBO extends BaseAddGoodsBO { public class MCoffeeAddGoodsBO extends BaseAddGoodsBO {
} }
package cn.freemud.demo.entities.bo; package cn.freemud.demo.entities.bo.goods.add;
public class MallAddGoodsBO extends BaseAddGoodsBO { public class MallAddGoodsBO extends BaseAddGoodsBO {
} }
package cn.freemud.demo.entities.bo; package cn.freemud.demo.entities.bo.goods.add;
public class PlatformAddGoodsBO extends BaseAddGoodsBO { public class PlatformAddGoodsBO extends BaseAddGoodsBO {
} }
package cn.freemud.demo.entities.dto;
public class AddGoodsBaseResponseVO {
/**
* 前端用来提示的信息
*/
private String toastMsg;
/**
* 购物车中商品价格或有效性是否发生变化
*/
private Boolean changed;
private String uid;
}
package cn.freemud.demo.entities.dto; package cn.freemud.demo.entities.dto.goods.add;
import cn.freemud.demo.entities.dto.BaseRequestDTO;
import cn.freemud.entities.vo.CartGoods; import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ComboxGoodsRequestVo; import cn.freemud.entities.vo.ComboxGoodsRequestVo;
import cn.freemud.entities.vo.MaterialRequestVo; import cn.freemud.entities.vo.MaterialRequestVo;
......
package cn.freemud.demo.entities.dto.goods.add;
import cn.freemud.demo.entities.dto.AddGoodsBaseResponseVO;
public class MCoffeeAddGoodsResponseVOAddGoods extends AddGoodsBaseResponseVO {
}
package cn.freemud.demo.entities.dto.goods.add;
import cn.freemud.demo.entities.dto.AddGoodsBaseResponseVO;
public class PlatformAddGoodsResponseVOAddGoods extends AddGoodsBaseResponseVO {
}
package cn.freemud.demo.entities.factory;
import cn.freemud.demo.entities.bo.BaseAddGoodsBO;
import cn.freemud.demo.entities.bo.MCoffeeAddGoodsBO;
import cn.freemud.demo.entities.bo.MallAddGoodsBO;
import cn.freemud.demo.entities.bo.PlatformAddGoodsBO;
import cn.freemud.demo.entities.dto.AddGoodsRequestDTO;
import cn.freemud.demo.entities.dto.BaseRequestDTO;
import cn.freemud.enums.OrderChannelType;
import cn.freemud.service.impl.ShoppingCartMallServiceImpl;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare;
public class ServiceBoFactory {
private final static String macafePartnerId = "";
public static BaseAddGoodsBO createAddGoodsBOInstance(String params) {
BaseAddGoodsBO baseAddGoodsBO;
AddGoodsRequestDTO baseRequestDTO = JSON.parseObject(params, AddGoodsRequestDTO.class);
if (baseRequestDTO.getChannelType() != null && OrderChannelType.SAASMALL.getCode().equals(baseRequestDTO.getChannelType())){
baseAddGoodsBO = createMallBO(baseRequestDTO);
} else if (baseRequestDTO.getPartnerId().equals(macafePartnerId)) {
baseAddGoodsBO = createMCoffeeBO(baseRequestDTO);
} else {
baseAddGoodsBO = createPlatformBO(baseRequestDTO);
}
return baseAddGoodsBO;
}
private static MallAddGoodsBO createPlatformBO(AddGoodsRequestDTO baseRequestDTO) {
MallAddGoodsBO mallAddGoodsBO = new MallAddGoodsBO();
return mallAddGoodsBO;
}
private static MCoffeeAddGoodsBO createMCoffeeBO(AddGoodsRequestDTO baseRequestDTO) {
MCoffeeAddGoodsBO mCoffeeAddGoodsBO = new MCoffeeAddGoodsBO();
return mCoffeeAddGoodsBO;
}
private static BaseAddGoodsBO createMallBO(AddGoodsRequestDTO baseRequestDTO) {
PlatformAddGoodsBO platformAddGoodsBO = new PlatformAddGoodsBO();
return platformAddGoodsBO;
}
}
package cn.freemud.demo.entities.factory;
import cn.freemud.demo.entities.bo.BaseAddGoodsBO;
import cn.freemud.demo.entities.dto.AddGoodsRequestDTO;
import cn.freemud.enums.OrderChannelType;
import com.alibaba.fastjson.JSON;
public class ServiceFactory {
public static BaseAddGoodsBO createAddGoodsBOInstance(String params) {
}
}
package cn.freemud.demo.enums;
import lombok.Data;
public enum BizTypeEnum {
MCOFFEE("mcoffee", "麦咖啡"),
PLATFORM("platform", "平台"),
MAIL("mall", "商城")
;
private String code;
private String message;
BizTypeEnum(String code, String message) {
this.code = code;
this.message = message;
}
public String getCode() {
return code;
}
public String getMessage() {
return message;
}
}
package cn.freemud.demo.factory;
import cn.freemud.demo.entities.bo.goods.add.BaseAddGoodsBO;
import cn.freemud.demo.service.AbstractAddGoodsService;
public class ServiceFactory {
public static AbstractAddGoodsService createAddGoodsServiceInstance(String bizType) {
return null;
}
}
package cn.freemud.demo.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.demo.constant.ResponseConstant;
import cn.freemud.demo.entities.ResponseBuilder;
import cn.freemud.demo.entities.bo.goods.add.BaseAddGoodsBO;
import cn.freemud.demo.entities.dto.AddGoodsBaseResponseVO;
public abstract class AbstractAddGoodsService implements CheckAddGoodsService {
/**
* 组织订单的创建流程
*
* @return
*/
public final BaseAddGoodsBO addGoods(BaseAddGoodsBO addGoodsBO) {
// 基本参数校验
this.checkParams(addGoodsBO);
// 获取购物车和加车商品信息
this.getShoppingCartInfo(addGoodsBO);
// 业务校验,例如商品数量库存之类的信息
this.checkBusinessRules(addGoodsBO);
// 添加商品到购物车
this.addGoodsToShoppingCart(addGoodsBO);
// 计算费用,例如配送费
this.calCost(addGoodsBO);
// 提示语设置,例如满减信息
this.setMessage(addGoodsBO);
// 拼装返回体
this.buildResponse(addGoodsBO);
return addGoodsBO;
}
/**
* 计算不在促销计算范围里的费用
* @param addGoodsBO
* @return
*/
public final BaseResponse calCost(BaseAddGoodsBO addGoodsBO) {
BaseResponse commonBaseResponse = this.calCommCost(addGoodsBO);
if (!ResponseConstant.RESPONSE_SUCCESS_STR.equals(commonBaseResponse.getCode())){
return commonBaseResponse;
}
BaseResponse customBaseResponse = this.calCustomCost(addGoodsBO);
if (!ResponseConstant.RESPONSE_SUCCESS_STR.equals(customBaseResponse.getCode())){
return customBaseResponse;
}
return ResponseBuilder.success();
}
/**
* 设置提示语
* @param addGoodsBO
* @return
*/
public final BaseResponse setMessage(BaseAddGoodsBO addGoodsBO) {
BaseResponse commonBaseResponse = this.setCommMessage(addGoodsBO);
if (!ResponseConstant.RESPONSE_SUCCESS_STR.equals(commonBaseResponse.getCode())){
return commonBaseResponse;
}
BaseResponse customBaseResponse = this.setCustomMessage(addGoodsBO);
if (!ResponseConstant.RESPONSE_SUCCESS_STR.equals(customBaseResponse.getCode())){
return customBaseResponse;
}
return ResponseBuilder.success();
}
/**
* 请求基本参数校验
* @return
*/
public final BaseResponse checkParams(BaseAddGoodsBO baseRequestDTO) {
BaseResponse commonBaseResponse = this.checkCommParams(baseRequestDTO);
if (!ResponseConstant.RESPONSE_SUCCESS_STR.equals(commonBaseResponse.getCode())){
return commonBaseResponse;
}
BaseResponse customBaseResponse = this.checkCustomParams(baseRequestDTO);
if (!ResponseConstant.RESPONSE_SUCCESS_STR.equals(customBaseResponse.getCode())){
return customBaseResponse;
}
return ResponseBuilder.success();
}
/**
* 1. 获取加车的商品信息
* 2. 获取购物车的商品信息
*
* @return
*/
public final BaseResponse getShoppingCartInfo(BaseAddGoodsBO baseRequestDTO) {
BaseResponse getInfoResponse = this.getShoppingCartInfo(baseRequestDTO);
if (!ResponseConstant.RESPONSE_SUCCESS_STR.equals(getInfoResponse.getCode())){
return getInfoResponse;
}
return ResponseBuilder.success();
}
/**
* 具体业务逻辑校验, 例如商品数量,库存等校验
*
* @return
*/
public final BaseResponse checkBusinessRules(BaseAddGoodsBO baseRequestDTO) {
BaseResponse commonBaseResponse = this.checkCommBusinessRules(baseRequestDTO);
if (!ResponseConstant.RESPONSE_SUCCESS_STR.equals(commonBaseResponse.getCode())){
return commonBaseResponse;
}
BaseResponse customBaseResponse = this.checkCustomBusinessRules(baseRequestDTO);
if (!ResponseConstant.RESPONSE_SUCCESS_STR.equals(customBaseResponse.getCode())){
return customBaseResponse;
}
return ResponseBuilder.success();
}
/**
* 添加商品到购物车,并重新设置购物车
*
* @return
*/
public final BaseResponse addGoodsToShoppingCart(BaseAddGoodsBO baseRequestDTO) {
BaseResponse commonBaseResponse = this.checkCommBusinessRules(baseRequestDTO);
if (!ResponseConstant.RESPONSE_SUCCESS_STR.equals(commonBaseResponse.getCode())){
return commonBaseResponse;
}
BaseResponse customBaseResponse = this.checkCustomBusinessRules(baseRequestDTO);
if (!ResponseConstant.RESPONSE_SUCCESS_STR.equals(customBaseResponse.getCode())){
return customBaseResponse;
}
return ResponseBuilder.success();
}
/**
* 封装返回参数
*
* @return
*/
public final BaseResponse buildResponse(BaseAddGoodsBO baseRequestDTO) {
BaseResponse commonBaseResponse = this.buildCommResponse(baseRequestDTO);
if (!ResponseConstant.RESPONSE_SUCCESS_STR.equals(commonBaseResponse.getCode())){
return commonBaseResponse;
}
BaseResponse customBaseResponse = this.buildCustomResponse(baseRequestDTO);
if (!ResponseConstant.RESPONSE_SUCCESS_STR.equals(customBaseResponse.getCode())){
return customBaseResponse;
}
return ResponseBuilder.success();
}
}
package cn.freemud.demo.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.demo.entities.ResponseBuilder;
import cn.freemud.demo.entities.bo.goods.add.BaseAddGoodsBO;
import cn.freemud.demo.entities.dto.AddGoodsBaseResponseVO;
public interface CheckAddGoodsService {
/**
* 校验公共参数
* @param baseRequestDTO
* @return
*/
default BaseResponse checkCommParams(BaseAddGoodsBO baseRequestDTO) {
// TODO checkCommomParams
return ResponseBuilder.success();
}
/**
* 检验客制化的参数
* @param baseRequestDTO
* @return
*/
default BaseResponse checkCustomParams(BaseAddGoodsBO baseRequestDTO) {
// TODO checkCustomParams
return ResponseBuilder.success();
}
/**
* 进行公共的业务校验
* @param baseRequestDTO
* @return
*/
default BaseResponse checkCommBusinessRules(BaseAddGoodsBO baseRequestDTO) {
// TODO checkCommBusinessRules
return ResponseBuilder.success();
}
/**
* 进行客制化的业务校验
* @param baseRequestDTO
* @return
*/
default BaseResponse checkCustomBusinessRules(BaseAddGoodsBO baseRequestDTO) {
// TODO checkCustomBusinessRules
return ResponseBuilder.success();
}
/**
* 获取购物车信息
* @param baseRequestDTO
* @return
*/
default BaseResponse getShoppingCartInfo(BaseAddGoodsBO baseRequestDTO) {
// TODO getShoppingCartInfo
return ResponseBuilder.success();
}
/**
* 公共的计算费用
* @param baseRequestDTO
* @return
*/
default BaseResponse calCommCost(BaseAddGoodsBO baseRequestDTO) {
// TODO calCommCost
return ResponseBuilder.success();
}
/**
* 进行客制化的计算费用
* @param baseRequestDTO
* @return
*/
default BaseResponse calCustomCost(BaseAddGoodsBO baseRequestDTO) {
// TODO calCustomCost
return ResponseBuilder.success();
}
/**
* 公共的计算费用
* @param baseRequestDTO
* @return
*/
default BaseResponse setCommMessage(BaseAddGoodsBO baseRequestDTO) {
// TODO setCommMessage
return ResponseBuilder.success();
}
/**
* 进行客制化的计算费用
* @param baseRequestDTO
* @return
*/
default BaseResponse setCustomMessage(BaseAddGoodsBO baseRequestDTO) {
// TODO setCustomMessage
return ResponseBuilder.success();
}
/**
* 封装公共返回
* @param baseRequestDTO
* @return
*/
default BaseResponse buildCommResponse(BaseAddGoodsBO baseRequestDTO) {
// TODO buildCommResponse
return ResponseBuilder.success();
}
/**
* 封装客制化返回
* @param baseRequestDTO
* @return
*/
default BaseResponse buildCustomResponse(BaseAddGoodsBO baseRequestDTO) {
// TODO buildCustomResponse
return ResponseBuilder.success();
}
}
package cn.freemud.demo.service;
public class TestImpl extends AbstractAddGoodsService {
}
package cn.freemud.demo.utils;
import cn.freemud.demo.entities.dto.goods.add.AddGoodsRequestDTO;
import cn.freemud.demo.enums.BizTypeEnum;
import cn.freemud.enums.OrderChannelType;
public class BizTypeUtil {
private final static String macafePartnerId = "";
public static BizTypeEnum getBizType (AddGoodsRequestDTO baseRequestDTO){
if (baseRequestDTO.getChannelType() != null && OrderChannelType.SAASMALL.getCode().equals(baseRequestDTO.getChannelType())){
return BizTypeEnum.MAIL;
} else if (baseRequestDTO.getPartnerId().equals(macafePartnerId)) {
return BizTypeEnum.MCOFFEE;
} else {
return BizTypeEnum.PLATFORM;
}
}
}
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