设计模式工作应用

策略

定义策略context类
在这里插入图片描述
定义策略类
在这里插入图片描述
这里可以考虑用枚举优化,以及策略类通过spring根据策略接口获取

模板

orderMsgDingding对应数据库表,存储权限命名的类和订单状态关系,这样当涉及改变,只需要修改类和订单状态即可,

public class OrderStatusExec implements BeanFactoryAware {

	@Autowired
	private OrderMsgDingdingService orderMsgDingdingService;
	@Autowired
	private OrderDingTimerService orderDingTimerService;

	private static BeanFactory beanFactory;
	private static ThreadPoolExecutor executor;
	public final static int DEFAULT_TASKQUEUE_SIZE = 30;
	private static int maxThread = 10;

	@Override
	public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
		this.beanFactory = beanFactory;
	}

	//@Scheduled(fixedRate = 10000)
	@Scheduled(cron="0 0 */1 * * ? ")
	public void handle() throws InterruptedException {
		LocalDateTime now = LocalDateTime.now();
		DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
		List<Integer> execTask = Lists.newArrayList();
		//查询所有开启以及开启定时提醒的钉钉提醒定时任务
		List<OrderDingTimer> list1 = orderDingTimerService.list(Wrappers.<OrderDingTimer>lambdaQuery().eq(OrderDingTimer::getStatus, 1).eq(OrderDingTimer::getRegular, 1));
		for (int i = list1.size() - 1; i >= 0; i--) {
			OrderDingTimer k = list1.get(i);
			execTask.add(k.getCode());
		}

	/*	executor = new ThreadPoolExecutor(maxThread, maxThread, 0L,
				TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(
				DEFAULT_TASKQUEUE_SIZE), new ThreadPoolExecutor.CallerRunsPolicy());*/
		List<OrderMsgDingding> list = orderMsgDingdingService.list(Wrappers.<OrderMsgDingding>lambdaQuery().in(OrderMsgDingding::getId, execTask));

		//CountDownLatch countDownLatch = new CountDownLatch(list.size());
		for (OrderMsgDingding k : list) {


			//list.forEach(k -> {
			//	executor.execute(() -> {
			try {
				String processService = k.getProcessService();
				MsgExec msgExec = (MsgExec) beanFactory.getBean(processService);
				msgExec.execMsg(k);
				//countDownLatch.countDown();
			} catch (BeansException e) {
				//countDownLatch.countDown();
				e.printStackTrace();
			}
			//});
			//});

		}

		//countDownLatch.await();
		//executor.shutdown();
		//executor = null;
	}
	}

责任链

订单模块使用


/**
 * 责任链模式
 */
public interface OrderStatus {
	/**
	 * 设置下一个处理器
	 *
	 * @param nextOrderStatus
	 */
	public void setNextOrderStatus(OrderStatus nextOrderStatus);


	/**
	 * 执行下一个处理器
	 *
	 * @param orderStatusDingMsg
	 */
	public void execNextHandler(OrderStatusDingMsg orderStatusDingMsg);

	/**
	 * 对外提供执行工作,封装校验+执行流程
	 *
	 * @param orderStatusDingMsg
	 */
	public void service(OrderStatusDingMsg orderStatusDingMsg);

	/**
	 * 校验是否拦截
	 *
	 * @param orderStatusDingMsg
	 * @return
	 */
	abstract boolean check(OrderStatusDingMsg orderStatusDingMsg);

	/**
	 * 执行当前处理器核心工作,交由具体子类实现
	 *
	 * @param orderStatusDingMsg
	 */
	abstract void execCurrentHandler(OrderStatusDingMsg orderStatusDingMsg);
}

在这里插入图片描述
这里有模板

public abstract class OrderStatusBase implements OrderStatus {
	protected OrderStatus nextOrderStatus;

	public void setNextOrderStatus(OrderStatus nextOrderStatus) {
		this.nextOrderStatus = nextOrderStatus;
	}

	public void execNextHandler(OrderStatusDingMsg orderStatusDingMsg) {
		if (this.nextOrderStatus != null) nextOrderStatus.service(orderStatusDingMsg);
	}

	public void service(OrderStatusDingMsg orderStatusDingMsg) {
		if (check(orderStatusDingMsg)) {
			execCurrentHandler(orderStatusDingMsg);
		} else {
			execNextHandler(orderStatusDingMsg);
		}
	}
	public void sendMsg(UrlDataInfo urlDataInfo){
		MessageProcessBase messageProcessBase = new MessageProcessBase();
		messageProcessBase.sendMsg(urlDataInfo);
	}
}
@Service
public class PrestatusWaitcheckOrderstatus extends OrderStatusBase implements OrderStatus, CommandLineRunner {

	@Override
	public void run(String... args) throws Exception {
		OrderStatus prestatusHadcheckOrderstatus = new PrestatusHadcheckOrderstatus();
		OrderStatus formalstatusNormalOrderStatus = new FormalstatusNormalOrderStatus();
		OrderStatus FormalstatusExceptionOrderStatus = new FormalstatusExceptionOrderStatus();
		OrderStatus formalstatusCompleteOrderStatus = new FormalstatusCompleteOrderStatus();

		setNextOrderStatus(prestatusHadcheckOrderstatus);
		prestatusHadcheckOrderstatus.setNextOrderStatus(formalstatusNormalOrderStatus);
		formalstatusNormalOrderStatus.setNextOrderStatus(FormalstatusExceptionOrderStatus);
		FormalstatusExceptionOrderStatus.setNextOrderStatus(formalstatusCompleteOrderStatus);
	}

	@Autowired
	private PreOrderHeadService preOrderHeadService;
	@Autowired
	private OrderMsgDingdingService orderMsgDingdingService;

	private String getStatus() {
		return PRESTATUS_WAITCHECK;
	}

	private Integer getType() {
		return type;
	}

	@Override
	public void execCurrentHandler(OrderStatusDingMsg orderStatusDingMsg) {
		PreOrderHead preOrderHead = preOrderHeadService.queryByPreOrderCode(orderStatusDingMsg.getOrderCode());
		Map<String, List<String>> stringListMap = preOrderHeadService.converShopNameAndPreOrderCode(Lists.newArrayList(preOrderHead));

		//发送钉钉
		OrderMsgDingding one = orderMsgDingdingService.getOne(Wrappers.<OrderMsgDingding>query()
				.lambda().eq(OrderMsgDingding::getStatus, PRESTATUS_WAITCHECK)
				.eq(OrderMsgDingding::getType, type).eq(OrderMsgDingding::getActive, 1));
		if (one != null) {
			sendMsg(new UrlDataInfo(one.getToken(), data.toString()));
		}
	}


	public boolean check(OrderStatusDingMsg orderStatusDingMsg) {
		return getType().equals(orderStatusDingMsg.getType()) && getStatus().equals(orderStatusDingMsg.getConsignPlatformConstan());
	}


}

秒杀拦截校验使用 todo

命令模式 todo

观察者模式 todo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值