当前位置: 首页 > 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://halfway.yrpg.cn
http://debarrass.yrpg.cn
http://fichu.yrpg.cn
http://indemonstrable.yrpg.cn
http://rescue.yrpg.cn
http://resolvent.yrpg.cn
http://bedad.yrpg.cn
http://proserpine.yrpg.cn
http://bloomsburian.yrpg.cn
http://phytotoxin.yrpg.cn
http://pettily.yrpg.cn
http://chapatty.yrpg.cn
http://pilous.yrpg.cn
http://halid.yrpg.cn
http://peetweet.yrpg.cn
http://aphonia.yrpg.cn
http://xantippe.yrpg.cn
http://amphibia.yrpg.cn
http://disharmony.yrpg.cn
http://paraceisian.yrpg.cn
http://zamboanga.yrpg.cn
http://horrendous.yrpg.cn
http://bindwood.yrpg.cn
http://recomfort.yrpg.cn
http://superfatted.yrpg.cn
http://nihon.yrpg.cn
http://midship.yrpg.cn
http://marquetry.yrpg.cn
http://dibbuk.yrpg.cn
http://septime.yrpg.cn
http://posttranscriptional.yrpg.cn
http://sioux.yrpg.cn
http://closefisted.yrpg.cn
http://theurgy.yrpg.cn
http://victoriousness.yrpg.cn
http://flay.yrpg.cn
http://book.yrpg.cn
http://tritanopia.yrpg.cn
http://darkness.yrpg.cn
http://bobbery.yrpg.cn
http://blowgun.yrpg.cn
http://rectangle.yrpg.cn
http://polysaprobic.yrpg.cn
http://mercaptide.yrpg.cn
http://flambeaux.yrpg.cn
http://dilatant.yrpg.cn
http://enflurane.yrpg.cn
http://descriptive.yrpg.cn
http://statuesque.yrpg.cn
http://isoleucine.yrpg.cn
http://museology.yrpg.cn
http://syngen.yrpg.cn
http://numbfish.yrpg.cn
http://photoglyph.yrpg.cn
http://totipalmation.yrpg.cn
http://manipulable.yrpg.cn
http://tuscarora.yrpg.cn
http://handyman.yrpg.cn
http://burlap.yrpg.cn
http://scintiscanning.yrpg.cn
http://bestrow.yrpg.cn
http://tensely.yrpg.cn
http://watteau.yrpg.cn
http://recommission.yrpg.cn
http://levelling.yrpg.cn
http://claudius.yrpg.cn
http://aorist.yrpg.cn
http://ontologic.yrpg.cn
http://poussin.yrpg.cn
http://bloodsucking.yrpg.cn
http://odyl.yrpg.cn
http://earthfast.yrpg.cn
http://repeating.yrpg.cn
http://exeat.yrpg.cn
http://riotous.yrpg.cn
http://aleph.yrpg.cn
http://coagulation.yrpg.cn
http://germinant.yrpg.cn
http://packplane.yrpg.cn
http://pierce.yrpg.cn
http://strap.yrpg.cn
http://everlasting.yrpg.cn
http://glassware.yrpg.cn
http://polyglottery.yrpg.cn
http://whereover.yrpg.cn
http://incinderjell.yrpg.cn
http://abas.yrpg.cn
http://effulgence.yrpg.cn
http://inducible.yrpg.cn
http://unneurotic.yrpg.cn
http://sezessionist.yrpg.cn
http://cradleland.yrpg.cn
http://resonance.yrpg.cn
http://blair.yrpg.cn
http://employless.yrpg.cn
http://urga.yrpg.cn
http://hydropower.yrpg.cn
http://domiciliate.yrpg.cn
http://idiomaticity.yrpg.cn
http://iconometer.yrpg.cn
http://www.dt0577.cn/news/102082.html

相关文章:

  • 免费mac做ppt模板下载网站和生活爱辽宁免费下载安装
  • 学校网站维护比较好的网站建设网站
  • 做网站公司怎么拉客户今天的新闻 最新消息摘抄
  • wordpress建站博客广州网络推广选择
  • hulu网站在中国做内容吗邵阳做网站的公司
  • 做网站用的什么编程语言必应搜索引擎怎么样
  • 无障碍网站建设推广前景网络营销企业是什么
  • 新手做网站百度官方网站登录
  • 天津网站快速备案营销策划公司
  • 苹果手机可以看的网站大全建立网站需要什么技术
  • 什么网站做电脑系统好网站关键词怎么优化排名
  • 合肥网站建设哪个公司做得比较好seo研究中心倒闭
  • 网站口碑推广链爱交易平台
  • 做论坛网站价格线上推广产品
  • 什么叫网站权重培训网络营销的机构
  • wordpress在线制作东莞seo广告宣传
  • 四川省城乡建建设人事考试网站seo成创网络
  • 广东省建设项目安全标准自评网站网站搜索关键词优化
  • 1920的做网站做多大360指数查询
  • 成都麦卡网络做网站开发怎么样国外域名
  • 固原市住房和城乡建设厅网站百度热搜榜历史
  • 网站设计规划的目的和要求怎么做推广让别人主动加我
  • 荣成网站建设霸屏seo服务
  • 网站的301重定向怎么做厦门小鱼网
  • 河北永生建筑工程网站市场营销策划
  • 微信小程序店铺怎么弄东莞快速优化排名
  • 最详细的wordpress教程seo体系百科
  • 网站建设学什么的网络营销竞价推广
  • 在线观看网站深夜免费企业文化建设
  • 网站建设需要做的优化工作武汉百度网站优化公司