当前位置: 首页 > news >正文

杨凌做网站seo系统培训

杨凌做网站,seo系统培训,做挂广告网站,个人网页设计dw1、定义一个下单context类 通过这类来判断具体使用哪个实现类,可以通过一些枚举或者条件来判断 import com.alibaba.fastjson.JSON; import com.tc.common.exception.BusinessException; import com.tc.common.user.YjkUserDetails; import com.tc.institution.cons…

1、定义一个下单context类

通过这类来判断具体使用哪个实现类,可以通过一些枚举或者条件来判断

import com.alibaba.fastjson.JSON;
import com.tc.common.exception.BusinessException;
import com.tc.common.user.YjkUserDetails;
import com.tc.institution.constant.RedisConstant;
import com.tc.institution.dto.req.order.OrderConfirmReq;
import com.tc.institution.dto.req.order.OrderSubmitReq;
import com.tc.institution.dto.resp.order.OrderConfirmResp;
import com.tc.institution.dto.resp.order.OrderSubmitResp;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.TimeUnit;/*** TODO 4.0和4.1代码整合待完成* 1集中整合其他策略子类查询到OrderContext上下文,减少互相依赖* 2抽取已有共有方法到公共类**/
@Slf4j
@Service
public class OrderContext {@Autowiredprivate List<OrderStrategy> orderStrategyList;@Resourceprivate RedissonClient redissonClient;/*** 增加策略请维护该注释!!!* req.buyDemandOrderId 不为空走BuyDemandOrderStrategy* req.bizType = CONSULTATION_FEE(6, "问诊费订单") && req.consultationOrderId 不为空走ConsultationFeeOrderStrategy** @param req  请求参数* @param user 操作用户*/public OrderConfirmResp confirm(OrderConfirmReq req, YjkUserDetails user) {log.info("Function confirm ,req={}", req);for (OrderStrategy orderStrategy : orderStrategyList) {if (orderStrategy.confirmSupport(req) && orderStrategy.confirmCheck(req)) {OrderConfirmResp confirmResp = orderStrategy.confirm(req, user);log.info("Function confirm ,resp={}", confirmResp);return confirmResp;}}throw new BusinessException("预下单方式异常");}/*** 增加策略请维护该注释!!!* req.buyDemandOrderId 不为空走BuyDemandOrderStrategy* req.bizType = CONSULTATION_FEE(6, "问诊费订单") && req.consultationOrderId 不为空走ConsultationFeeOrderStrategy* req.bizType = CONSULTATION_EXPERT(7, "专家问诊订单") && req.consultationOrderId 不为空走ConsultationFeeOrderStrategy** @param req  请求参数* @param user 操作用户*/public OrderSubmitResp submit(OrderSubmitReq req, YjkUserDetails user) {for (OrderStrategy orderStrategy : orderStrategyList) {if (orderStrategy.submitSupport(req) && orderStrategy.submitCheck(req)) {return getOrderSubmitResp(req, user, orderStrategy);}}throw new BusinessException("预下单方式异常");}private OrderSubmitResp getOrderSubmitResp(OrderSubmitReq req, YjkUserDetails user, OrderStrategy orderStrategy) {String submitLockKey = orderStrategy.getSubmitLockKey(req, user);RLock orderLock = redissonClient.getLock(RedisConstant.ORDER_SUBMIT_LOCK_KEY + submitLockKey);try {boolean orderLockFlag = orderLock.tryLock(-1, 1, TimeUnit.MINUTES);log.info("Function submit orderLockFlag:{} param:{}", orderLockFlag, JSON.toJSONString(req));if (orderLockFlag) {OrderSubmitResp orderSubmitResp = orderStrategy.submit(req, user);log.info("Function submit param:{} result:{}", JSON.toJSONString(req), JSON.toJSONString(orderSubmitResp));return orderSubmitResp;} else {log.info("Function submit get lock fail, key:{}, now exist ...", req.getBuyDemandOrderId());throw new BusinessException("订单处理中,请勿重复多次提交");}} catch (Exception e) {log.warn("Function submit getOrderLock fail:", e);throw new BusinessException(e.getMessage());} finally {if (orderLock.isLocked() && orderLock.isHeldByCurrentThread()) {orderLock.unlock();}}}
}

2、定义一个订单策略接口,并定义公用入参

mport com.tc.institution.dto.req.order.OrderConfirmReq;
import com.tc.institution.dto.req.order.OrderSubmitReq;
import com.tc.institution.dto.resp.order.OrderConfirmResp;
import com.tc.institution.dto.resp.order.OrderSubmitResp;/*** 下单通用策略*/
public interface OrderStrategy<C,S,U> {/*** 预下单方式检验** @param req 预下单请求参数* @return*/boolean confirmSupport(OrderConfirmReq req);/*** 下单方式检验** @param req 下单请求参数* @return*/boolean submitSupport(OrderSubmitReq req);/*** 预下单参数校验** @param req 预下单请求参数* @return*/default boolean confirmCheck(OrderConfirmReq req) {return true;}/*** 下单参数校验** @param req 下单请求参数*/default boolean submitCheck(OrderSubmitReq req) {return true;}/*** 预下单** @param req  预下单请求参数* @param user 用户数据* @return*/OrderConfirmResp confirm(C req, U user);/*** 提交订单** @param req  下单请求参数* @param user 用户数据* @return*/OrderSubmitResp submit(S req, U user);/*** 获取提交订单锁** @param req  下单请求参数* @param user 用户数据* @return*/default String getSubmitLockKey(OrderSubmitReq req, U user) {return String.valueOf(req.getBuyDemandOrderId());}
}

3、定义不同类型下单策略实现类,根据业务可以有多个实现类

/*** 疫苗订单逻辑**/
@Slf4j
@Service
public class ConsultOrderStrategy implements OrderStrategy<OrderConfirmReq,OrderSubmitReq,YjkUserDetails> {}

http://www.hkea.cn/news/944430/

相关文章:

  • wordpress改地址后打不开seo品牌优化整站优化
  • 网页设计师证书含金量高吗百度网络优化
  • 咸阳网站开发长沙seo优化公司
  • 网站通cms国内十大搜索引擎排名
  • centos7安装 wordpress网站如何进行seo
  • 设计师灵感网站美国今天刚刚发生的新闻
  • 重庆南岸营销型网站建设公司推荐竞价sem托管
  • 深圳做二维码网站建设什么是互联网营销
  • 网易企业邮箱收费标准百色seo关键词优化公司
  • 做网站的财务需求张北网站seo
  • 北京赛车彩票网站怎么做佛山本地网站建设
  • 门户网站的建设方式有哪些网络推广引流
  • 做中东服装有什么网站免费seo刷排名
  • 做网站用java还是c语言百度竞价推广培训
  • 做动画视频的网站市场监督管理局官网入口
  • 做bbs网站教程军事新闻最新消息今天
  • 在哪儿可以找到网站开发的需求搜索引擎优化介绍
  • 成都网站建设代理加盟网络运营培训班多少钱
  • 太原开发网站公司站长工具端口扫描
  • 域控制网站访问自媒体视频发布平台
  • 广西住房和城乡建设委员会网站湖南网站营销seo多少费用
  • 关键词推广名词解释百度竞价关键词怎么优化
  • 群辉服务器做网站网络优化的内容包括哪些
  • 做淘客的网站岳阳seo
  • 网吧设计方案seox
  • 谁做网站市场营销专业
  • 慈溪外贸公司网站网络营销就业前景和薪水
  • 电商网站建设实训报告长沙网站seo推广公司
  • 阿里云ecs怎么建网站吉林网站seo
  • 企业营销型网站建设的可行性西安竞价托管