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

做调查可以赚钱的网站三维动画设计

做调查可以赚钱的网站,三维动画设计,专业做展会网站,松岗做网站1、定义一个下单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.yayakq.cn/news/69826/

相关文章:

  • 成都专业网站建设优化团队青海微信网站建设
  • 数据做图网站有哪些内容广西建设网电子证查询打印
  • CMCAP官方网站河北省建设执业资格注册中心网站
  • 哈尔滨网站关键词优化百度 指数
  • 建设施工组织设计方案网站云南楚雄网
  • 三亚谁做网站洛客设计平台
  • 手机架设网站新开传奇网站推荐
  • 怎么制作网站视频播放器123网址之家118
  • 网站开发 会员模块上海比较好的外包公司
  • 商昊网站建设门户网站建设方案中信息公开
  • 聊城网站优化百度官网建设
  • 淘宝客怎么做的网站推广爱尔眼科医院集团
  • 铁道部建设监理协会网站查询申请网站备案要多久
  • 地图销售网站顺德网站建设原创
  • 公司做网站需要aspx 网站开发工具
  • 网站付费功能描述域名是什么结构称为域名空间
  • 莱阳 网站建设视频在线制作网站
  • 网站建设售后服务安全维护广州哪家做网站价格好
  • 如何用织梦做网站管理咨询公司收费
  • w7系统那个网站做的好品牌网站建设只询大蝌蚪
  • php网站如何做特效仙桃做网站
  • 外贸建站wordpress主题优书网
  • 高端品牌职业女套装宁波seo网络推广软件系统
  • 空间主机 建网站关键词搜索排名查询
  • 建设网站长沙网站的建站标准
  • 建站之星做网站企业信息查询系统官网北京
  • 好看的网站的导航怎么做公司装修费属于什么费用
  • ps做网站原形织梦模板下载
  • 想学网站建设推广代理平台
  • 域名制作网站吗民权做网站