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

专做视频和ppt的网站网站建设一年多少

专做视频和ppt的网站,网站建设一年多少,阿里云域名注册好了怎么做网站,茂名建站公司业务场景 最最近项目中有这样的一个业务场景#xff1a; 用户下单-管理员审核-配送员接单-配送中-送达–签收-完成 整个业务以这种流程的形式存在#xff0c;每个流程状态的业务不一样#xff0c;考虑到多种状态如果直接写一个接口肯定会嵌套太多…业务场景 最最近项目中有这样的一个业务场景 用户下单-管理员审核-配送员接单-配送中-送达–签收-完成 整个业务以这种流程的形式存在每个流程状态的业务不一样考虑到多种状态如果直接写一个接口肯定会嵌套太多的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, 当前订单状态非待审核状态不支持拒单);}OverrideTransactional(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 ListOrderTraceChangeStrategy orderTraceChangeStrategy;OverrideTransactional(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);//处理完业务直接返回 总结一下 定义策略接口定义不同行为通过List批量注入不同策略通过不同状态枚举判断不同状态的业务获取不同状态的策略类通过模板方法抽取公共业务
http://www.hkea.cn/news/14531887/

相关文章:

  • 常德网站建设制作网站建设适合女生吗
  • 个人网站制作过程制作介绍的网站模板
  • 站长网网站模板下载书店网站网站建设规划书
  • 做网站的内容苏州cms
  • 佛山网站建设锐艺传播网站建设有几种方式
  • 如何做挂qq的网站wordpress心得
  • 比较简洁大方的网站wordpress数据库删不掉
  • 优秀的电商设计网站有哪些网页打不开显示403怎么回事
  • 优秀作文大全网站如何做网站的书籍
  • 生成图片的网站大连网络开发公司
  • 建设网站 软件推荐最好的锦州网站建设
  • 郑州做网站zztuotian北京 网站设计 地址通州
  • 惠东东莞网站建设微信连接微网站
  • 麓谷做网站的公司网络营销组合策略
  • 官方网站开发公司排名房屋平面设计软件手机版
  • 有哪些是用到了网站推广跨境电商开发公司
  • 中国建设网官方网站企业登录wordpress 如何优化
  • 做商城网站需要多少钱做素材网站存储问题
  • 在线阅读网站开发教程自适应科技公司网站模板
  • 建设网站和备案优秀网站评析
  • 网站群 seo创新的盐城网站开发
  • 网站开发有哪些风险淘宝新闻最新消息
  • 广州建设网站外包wordpress视觉差
  • 哪儿有那种网站遵义做网站 0852t
  • 网站域名空间合同精品网站建设费用 尖端磐石网络
  • 做软件的网站php深圳网站制作建设哪家专业
  • 旅游网站建设设计ftp网站怎么建立
  • 江门网站开发多少钱官网网页模板
  • 免费空间访客100个网站嘉兴市建设教育网站
  • 江苏建设厅施工员证报名网站北京监理建设协会网站