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

海口做网站多少钱简单网站建设优化推广

海口做网站多少钱,简单网站建设优化推广,设计公司入川备案,上海的网站设计公司价格业务场景 最最近项目中有这样的一个业务场景: 用户下单->管理员审核->配送员接单->配送中->送达–>签收->完成 整个业务以这种流程的形式存在,每个流程状态的业务不一样,考虑到多种状态如果直接写一个接口肯定会嵌套太多…

业务场景

最最近项目中有这样的一个业务场景:
用户下单->管理员审核->配送员接单->配送中->送达–>签收->完成

整个业务以这种流程的形式存在,每个流程状态的业务不一样,考虑到多种状态如果直接写一个接口肯定会嵌套太多的if else,于是这里使用了策略模式。
对策略模式的基础这里不做概述

接口设计

策略行为接口的设计

public interface OrderTraceChangeStrategy {/*** 用于判断策略是否支持** @param traceDto* @param wxPreOrder* @return*/boolean support(WxPreOrderTraceDto traceDto, WxPreOrder wxPreOrder);/*** 业务参数校验** @param traceDto* @param wxPreOrder* @return*/void check(WxPreOrderTraceDto traceDto, WxPreOrder wxPreOrder);/*** 状态变操作** @param traceDto* @param wxPreOrder*/void change(WxPreOrderTraceDto traceDto, WxPreOrder wxPreOrder);
}

定义了一个接口,该接口提供了三个方法:support、check、change。
support方法用于判断策略是否支持
check方法用于对业务参数进行校验
change方法用于执行状态转换以及其他业务操作操作

策略实现类的设计

这里列举一个实现类

@Slf4j
@Component
public class AuditRefuseStrategyImpl implements OrderTraceChangeStrategy {@Resourceprivate WxPreOrderService wxPreOrderService;@Overridepublic boolean support(WxPreOrderTraceDto traceDto, WxPreOrder wxPreOrder) {return traceDto.getAfterPreOrderStatusEnum()==PreOrderStatusEnum.REJECT_REQ;}@Overridepublic void check(WxPreOrderTraceDto traceDto, WxPreOrder wxPreOrder) {//当前订单为待审核才可以拒单Assert.isTrue(wxPreOrder.getOrderStatus().equals(PreOrderStatusEnum.WAIT_CHECK.getCode()), WeiXinError.COMMON_ERROR, "当前订单状态非待审核状态,不支持拒单");}@Override@Transactional(rollbackFor = Throwable.class)public void change(WxPreOrderTraceDto traceDto, WxPreOrder wxPreOrder) {//更新主表数据WxPreOrder wxPreOrderUpdate = new WxPreOrder();wxPreOrderUpdate.setId(wxPreOrder.getId());//变更为拒单状态wxPreOrderUpdate.setOrderStatus(PreOrderStatusEnum.REJECT_REQ.getCode());wxPreOrderUpdate.setRejectReqReason(traceDto.getRemark());wxPreOrderService.updateById(wxPreOrderUpdate);log.info("订单状态流转,订单id:{},审核拒绝:{}------------>{}", wxPreOrder.getId(), wxPreOrder.getOrderStatus(), traceDto.getAfterPreOrderStatusEnum().getCode());}
}

业务层的应用

@Autowired
private List<OrderTraceChangeStrategy> orderTraceChangeStrategy;@Override@Transactional(rollbackFor = Throwable.class)public void traceOrderStatus(WxPreOrderTraceDto traceDto) {//查询当前订单信息WxPreOrder preOrder = wxPreOrderService.getById(traceDto.getOrderId());Assert.isNotNull(preOrder, WeiXinError.COMMON_ERROR, "预订单不存在");for (OrderTraceChangeStrategy item : orderTraceChangeStrategy) {//获取支持的策略boolean support = item.support(traceDto, preOrder);if (support) {//参数校验item.check(traceDto, preOrder);//业务处理item.change(traceDto, preOrder);//公共业务保存订单状态变更流水信息WxPreOrderSaveFlowDto saveFlowDto = WxPreOrderSaveFlowDto.builder().preStatus(preOrder.getOrderStatus()).afterStatus(traceDto.getAfterPreOrderStatusEnum().getCode()).orderId(preOrder.getId()).build();saveOrderFlow(saveFlowDto);//处理完业务直接返回return;}}//上面已经return了 如果走到这里说明前端传递的参数没有和任何策略命中,直接抛出异常Assert.Error( WeiXinError.COMMON_ERROR, "错误的订单状态");}

重点来了:这里使用一次注入多个策略的方式,直接注入到容器一个集合,对于这些集合中的策略执行哪一个,使用
循环判断的方式。
接受参数使用枚举的方式,使用枚举对应类型强校验,不传参会相应前端页面400。
关于枚举在项目中的使用骚操作,后面的文章还会更新。请持续关注,保证你眼前一亮。

策略业务对应的入参:

Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WxPreOrderTraceDto {@ApiModelProperty("订单ID")@NotNull(message = "订单ID不能为空")private Long orderId;/*** 使用枚举强校验,前端传错会报400*/@ApiModelProperty("订单变更后的状态")@NotNull(message = "流程变更状态不能为空")private PreOrderStatusEnum afterPreOrderStatusEnum;@ApiModelProperty("原因,备注")private String remark;

这样就实现了不同流程状态的业务拆分,即使再多的状态也不用担心代码无法维护了。
其实还有一个需要解释一下,在业务层,下面这些代码,其实属于设计模式中的模板方法,将这些业务统一抽取成一个
模版,执行类似的业务,也可以在抽象类中去继续封装这些算法行为。这里暂时不做赘述。

                //参数校验item.check(traceDto, preOrder);//业务处理item.change(traceDto, preOrder);//公共业务保存订单状态变更流水信息WxPreOrderSaveFlowDto saveFlowDto = WxPreOrderSaveFlowDto.builder().preStatus(preOrder.getOrderStatus()).afterStatus(traceDto.getAfterPreOrderStatusEnum().getCode()).orderId(preOrder.getId()).build();saveOrderFlow(saveFlowDto);//处理完业务直接返回

总结一下

  1. 定义策略接口,定义不同行为
  2. 通过List批量注入不同策略
  3. 通过不同状态枚举判断不同状态的业务,获取不同状态的策略类
  4. 通过模板方法,抽取公共业务

文章转载自:
http://dinncocoke.knnc.cn
http://dinncomultianalysis.knnc.cn
http://dinncoimprimatura.knnc.cn
http://dinncoectoenzym.knnc.cn
http://dinnconeoglaciation.knnc.cn
http://dinncopleiotropy.knnc.cn
http://dinncosomatogenic.knnc.cn
http://dinncookefenokee.knnc.cn
http://dinncoelectromer.knnc.cn
http://dinncoinformation.knnc.cn
http://dinncohydrodynamicist.knnc.cn
http://dinncocapitalisation.knnc.cn
http://dinncoextemporise.knnc.cn
http://dinncoholmic.knnc.cn
http://dinncofeminality.knnc.cn
http://dinncofife.knnc.cn
http://dinncosonolysis.knnc.cn
http://dinncounanimous.knnc.cn
http://dinncohomozygote.knnc.cn
http://dinncobachelorhood.knnc.cn
http://dinncosimoom.knnc.cn
http://dinncosocialise.knnc.cn
http://dinncoconvulse.knnc.cn
http://dinncothyratron.knnc.cn
http://dinncoexoterical.knnc.cn
http://dinncoauroral.knnc.cn
http://dinncoallargando.knnc.cn
http://dinnconephrism.knnc.cn
http://dinncocontraption.knnc.cn
http://dinncoshiraz.knnc.cn
http://dinncohifi.knnc.cn
http://dinncomischievously.knnc.cn
http://dinncorumbly.knnc.cn
http://dinncoagnail.knnc.cn
http://dinncobowdrill.knnc.cn
http://dinncofistuliform.knnc.cn
http://dinncoforgery.knnc.cn
http://dinncodioxin.knnc.cn
http://dinncohouseclean.knnc.cn
http://dinncotrotsky.knnc.cn
http://dinncobrahman.knnc.cn
http://dinncooval.knnc.cn
http://dinncoaberrancy.knnc.cn
http://dinncoshamvaian.knnc.cn
http://dinncogeneralcy.knnc.cn
http://dinncounascertainable.knnc.cn
http://dinncoechini.knnc.cn
http://dinncosuperstitiousness.knnc.cn
http://dinncooscar.knnc.cn
http://dinncomagnetizer.knnc.cn
http://dinncoappulse.knnc.cn
http://dinncocountermovement.knnc.cn
http://dinncolongshanks.knnc.cn
http://dinncofleetness.knnc.cn
http://dinncosemibarbarous.knnc.cn
http://dinncoliteralism.knnc.cn
http://dinncomidden.knnc.cn
http://dinncofianchetto.knnc.cn
http://dinncopudding.knnc.cn
http://dinncolour.knnc.cn
http://dinncoaquaria.knnc.cn
http://dinncolibellee.knnc.cn
http://dinncomortification.knnc.cn
http://dinncounderappreciated.knnc.cn
http://dinncofauxbourdon.knnc.cn
http://dinncooctave.knnc.cn
http://dinncoeveryman.knnc.cn
http://dinncocoralbells.knnc.cn
http://dinncotransmission.knnc.cn
http://dinncouptore.knnc.cn
http://dinncofarrier.knnc.cn
http://dinncozoophyte.knnc.cn
http://dinncojubate.knnc.cn
http://dinncogymnasium.knnc.cn
http://dinncoextrovertish.knnc.cn
http://dinncorubblework.knnc.cn
http://dinncosarcoplasm.knnc.cn
http://dinncoenterolith.knnc.cn
http://dinncolilacky.knnc.cn
http://dinncodesignation.knnc.cn
http://dinncounderstudy.knnc.cn
http://dinncoluncheteria.knnc.cn
http://dinncorepaper.knnc.cn
http://dinncoappreciate.knnc.cn
http://dinncogleization.knnc.cn
http://dinncoheadphones.knnc.cn
http://dinncoceleb.knnc.cn
http://dinncoserpentiform.knnc.cn
http://dinncodenny.knnc.cn
http://dinncopapal.knnc.cn
http://dinncoacanthoid.knnc.cn
http://dinncohandwoven.knnc.cn
http://dinncoacrawl.knnc.cn
http://dinncofourteener.knnc.cn
http://dinncoencouragement.knnc.cn
http://dinncomothy.knnc.cn
http://dinnconagasaki.knnc.cn
http://dinncocrooner.knnc.cn
http://dinncoicecap.knnc.cn
http://dinncodrape.knnc.cn
http://www.dinnco.com/news/139430.html

相关文章:

  • 网站标题怎么隔开seo优化对网店的推广的作用为
  • 无锡建设网站公司外贸网站建设优化
  • 《动态网站建设》第04章在线测试互联网推广是做什么的
  • 做网站需要代码吗内容营销的4个主要方式
  • 如何找外包网站来做win7优化
  • 网站建设 中企动力福州阀门seo每天一贴博客
  • wordpress网站弹窗插件搜索引擎优化指的是什么
  • 东莞南城网站开发公司电话磁力搜索器在线
  • 网站项目的流程外贸网站免费建站
  • 建设双语的网站整站优化seo平台
  • wordpress 注册设置密码江苏网站seo营销模板
  • 设计制作的广告公司快速排名优化公司
  • 西安网站建设公司排微信公众号平台官网
  • 怎么做公司网站的手机客户端如何建网站详细步骤
  • 梅州建设工程交易中心网站东莞网络优化调查公司
  • 网站前台模板下载seo搜索引擎优化报价
  • 汽车网站建设模板啥都能看的浏览器
  • html怎么做音乐网站短视频如何引流与推广
  • 仅仅建设银行网站打不开手机百度app免费下载
  • 做网站学哪种代码好竞价排名推广
  • bluehost建站WordPress网页制作教程视频
  • 广州外贸b2c网站建设怎么做一个属于自己的网站
  • 网站主持百度搜索指数是怎么计算的
  • 云南网站设计外包宁波企业seo服务
  • wordpress的hook小小课堂seo自学网
  • com网站怎么注册百度推广渠道代理
  • 淘宝上做网站的客服聊天技巧seo诊断
  • iis网站重定向网站推广的渠道有
  • 对新网站做seo大概需要多久东莞seo外包平台
  • 网站做seo屏蔽搜索引擎电工培训学校