• 状态设计模式完成商品的创建状态之间的流转


    /**
    * 产品状态:1编辑、2提审、3撤审、4通过、5运行(审核通过后worker扫描状态)、6拒绝、7关闭、8开启
    */
    public enum ActivityState {

        /** 1:编辑 */
        EDIT(1, "编辑"),
        /** 2:提审 */
        ARRAIGNMENT(2, "提审"),
        /** 3:撤审 */
        REVOKE(3, "撤审"),
        /** 4:通过 */
        PASS(4, "通过"),
        /** 5:运行(活动中) */
        DOING(5, "运行(活动中)"),
        /** 6:拒绝 */
        REFUSE(6, "拒绝"),
        /** 7:关闭 */
        CLOSE(7, "关闭"),
        /** 8:开启 */
        OPEN(8, "开启");
    
        private Integer code;
        private String info;
    
        ActivityState(Integer code, String info) {
            this.code = code;
            this.info = info;
        }
    
        public Integer getCode() {
            return code;
        }
    
        public void setCode(Integer code) {
            this.code = code;
        }
    
        public String getInfo() {
            return info;
        }
    
        public void setInfo(String info) {
            this.info = info;
        }
    }
    

    产品状态抽象类

    /**
     * 产品状态抽象类
     */
    public abstract class AbstractState {
        @Resource
        protected IActivityRepository activityRepository;
    
        /**
         * 活动提审
         *
         * @param activityId   活动ID
         * @param currentState 当前状态
         * @return 执行结果
         */
        public abstract Result arraignment(Long activityId, Enum<Constants.ActivityState> currentState);
    
        /**
         * 审核通过
         *
         * @param activityId   活动ID
         * @param currentState 当前状态
         * @return 执行结果
         */
        public abstract Result checkPass(Long activityId, Enum<Constants.ActivityState> currentState);
    
        /**
         * 审核拒绝
         *
         * @param activityId   活动ID
         * @param currentState 当前状态
         * @return 执行结果
         */
        public abstract Result checkRefuse(Long activityId, Enum<Constants.ActivityState> currentState);
    
        /**
         * 撤审撤销
         *
         * @param activityId   活动ID
         * @param currentState 当前状态
         * @return 执行结果
         */
        public abstract Result checkRevoke(Long activityId, Enum<Constants.ActivityState> currentState);
    
        /**
         * 活动关闭
         *
         * @param activityId   活动ID
         * @param currentState 当前状态
         * @return 执行结果
         */
        public abstract Result close(Long activityId, Enum<Constants.ActivityState> currentState);
    
        /**
         * 活动开启
         *
         * @param activityId   活动ID
         * @param currentState 当前状态
         * @return 执行结果
         */
        public abstract Result open(Long activityId, Enum<Constants.ActivityState> currentState);
    
        /**
         * 活动执行
         *
         * @param activityId   活动ID
         * @param currentState 当前状态
         * @return 执行结果
         */
        public abstract Result doing(Long activityId, Enum<Constants.ActivityState> currentState);
    }
    
    /**
     * 编辑状态
     */
    @Component
    public class EditingState extends AbstractState {
        @Override
        public Result arraignment(Long activityId, Enum<Constants.ActivityState> currentState) {
            boolean isSuccess = activityRepository.alterStatus(activityId, currentState, Constants.ActivityState.ARRAIGNMENT);
            return isSuccess ? Result.buildResult(Constants.ResponseCode.SUCCESS, "活动提审成功") : Result.buildErrorResult("活动状态变更失败");
        }
    
        @Override
        public Result checkPass(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "编辑中不可审核通过");
        }
    
        @Override
        public Result checkRefuse(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "编辑中不可审核拒绝");
        }
    
        @Override
        public Result checkRevoke(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "编辑中不可撤销审核");
        }
    
        @Override
        public Result close(Long activityId, Enum<Constants.ActivityState> currentState) {
            boolean isSuccess = activityRepository.alterStatus(activityId, currentState, Constants.ActivityState.CLOSE);
            return isSuccess ? Result.buildResult(Constants.ResponseCode.SUCCESS, "活动关闭成功") : Result.buildErrorResult("活动状态变更失败");
        }
    
        @Override
        public Result open(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "非关闭活动不可开启");
        }
    
        @Override
        public Result doing(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "编辑中活动不可执行活动中变更");
        }
    }
    
    
    /**
     * 提审状态
     */
    @Component
    public class ArraignmentState extends AbstractState {
        @Override
        public Result arraignment(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR,"代审核状态不可重复提审");
        }
    
        @Override
        public Result checkPass(Long activityId, Enum<Constants.ActivityState> currentState) {
            boolean isSuccess = activityRepository.alterStatus(activityId, currentState, Constants.ActivityState.PASS);
            return isSuccess?Result.buildResult(Constants.ResponseCode.SUCCESS,"活动审核通过完成"):Result.buildErrorResult("活动状态变更失败");
        }
    
        @Override
        public Result checkRefuse(Long activityId, Enum<Constants.ActivityState> currentState) {
            boolean isSuccess = activityRepository.alterStatus(activityId, currentState, Constants.ActivityState.REFUSE);
            return isSuccess?Result.buildResult(Constants.ResponseCode.SUCCESS,"活动审核拒绝完成"):Result.buildErrorResult("活动状态变更失败");
        }
    
        @Override
        public Result checkRevoke(Long activityId, Enum<Constants.ActivityState> currentState) {
            boolean isSuccess = activityRepository.alterStatus(activityId, currentState, Constants.ActivityState.EDIT);
            return isSuccess?Result.buildResult(Constants.ResponseCode.SUCCESS,"活动审核撤销回到编辑中"):Result.buildErrorResult("活动状态变更失败");
        }
    
        @Override
        public Result close(Long activityId, Enum<Constants.ActivityState> currentState) {
            boolean isSuccess = activityRepository.alterStatus(activityId, currentState, Constants.ActivityState.CLOSE);
            return isSuccess ? Result.buildResult(Constants.ResponseCode.SUCCESS, "活动审核关闭完成") : Result.buildErrorResult("活动状态变更失败");
        }
    
        @Override
        public Result open(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "非关闭活动不可开启");
        }
    
        @Override
        public Result doing(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "待审核活动不可执行活动中变更");
        }
    }
    
    /**
     * 审核通过状态
     */
    @Component
    public class PassState extends AbstractState {
        @Override
        public Result arraignment(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "已审核状态不可重复提审");
        }
    
        @Override
        public Result checkPass(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "已审核状态不可重复审核");
        }
    
        @Override
        public Result checkRefuse(Long activityId, Enum<Constants.ActivityState> currentState) {
            boolean isSuccess = activityRepository.alterStatus(activityId, currentState, Constants.ActivityState.REFUSE);
            return isSuccess ? Result.buildResult(Constants.ResponseCode.SUCCESS, "活动审核拒绝完成") : Result.buildErrorResult("活动状态变更失败");
        }
    
        @Override
        public Result checkRevoke(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "审核通过不可撤销(可先拒绝审核)");
        }
    
        @Override
        public Result close(Long activityId, Enum<Constants.ActivityState> currentState) {
            boolean isSuccess = activityRepository.alterStatus(activityId, currentState, Constants.ActivityState.CLOSE);
            return isSuccess ? Result.buildResult(Constants.ResponseCode.SUCCESS, "活动审核关闭完成") : Result.buildErrorResult("活动状态变更失败");
        }
    
        @Override
        public Result open(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "非关闭活动不可开启");
        }
    
        @Override
        public Result doing(Long activityId, Enum<Constants.ActivityState> currentState) {
            boolean isSuccess = activityRepository.alterStatus(activityId, currentState, Constants.ActivityState.DOING);
            return isSuccess ? Result.buildResult(Constants.ResponseCode.SUCCESS, "活动变更活动中完成") : Result.buildErrorResult("活动状态变更失败");
        }
    }
    
    /**
     * 运行【活动中】状态
     */
    @Component
    public class DoingState extends AbstractState {
        @Override
        public Result arraignment(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动中不可提审");
        }
    
        @Override
        public Result checkPass(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动中不可审核通过");
        }
    
        @Override
        public Result checkRefuse(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动中不可审核拒绝");
        }
    
        @Override
        public Result checkRevoke(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动中不可撤销审核");
        }
    
        @Override
        public Result close(Long activityId, Enum<Constants.ActivityState> currentState) {
            boolean isSuccess = activityRepository.alterStatus(activityId, currentState, Constants.ActivityState.CLOSE);
            return isSuccess ? Result.buildResult(Constants.ResponseCode.SUCCESS, "活动关闭成功") : Result.buildErrorResult("活动状态变更失败");
        }
    
        @Override
        public Result open(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动中不可开启");
        }
    
        @Override
        public Result doing(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动中不可重复执行");
        }
    }
    
    /**
     * 审核拒绝状态
     */
    @Component
    public class RefuseState extends AbstractState {
        @Override
        public Result arraignment(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "已审核状态不可重复提审");
        }
    
        @Override
        public Result checkPass(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "已审核状态不可重复审核");
        }
    
        @Override
        public Result checkRefuse(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动审核拒绝不可重复审核");
        }
    
        @Override
        public Result checkRevoke(Long activityId, Enum<Constants.ActivityState> currentState) {
            boolean isSuccess = activityRepository.alterStatus(activityId, currentState, Constants.ActivityState.EDIT);
            return isSuccess ? Result.buildResult(Constants.ResponseCode.SUCCESS, "撤销审核完成") : Result.buildErrorResult("活动状态变更失败");
        }
    
        @Override
        public Result close(Long activityId, Enum<Constants.ActivityState> currentState) {
            boolean isSuccess = activityRepository.alterStatus(activityId, currentState, Constants.ActivityState.CLOSE);
            return isSuccess ? Result.buildResult(Constants.ResponseCode.SUCCESS, "活动审核关闭完成") : Result.buildErrorResult("活动状态变更失败");
        }
    
        @Override
        public Result open(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "非关闭活动不可开启");
        }
    
        @Override
        public Result doing(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "审核拒绝不可执行活动为进行中");
        }
    
    }
    
    
    /**
     * 活动关闭状态
     */
    @Component
    public class CloseState extends AbstractState {
        @Override
        public Result arraignment(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动关闭不可提审");
        }
    
        @Override
        public Result checkPass(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动关闭不可审核通过");
        }
    
        @Override
        public Result checkRefuse(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动关闭不可审核拒绝");
        }
    
        @Override
        public Result checkRevoke(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动关闭不可撤销审核");
        }
    
        @Override
        public Result close(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动关闭不可重复关闭");
        }
    
        @Override
        public Result open(Long activityId, Enum<Constants.ActivityState> currentState) {
            boolean isSuccess = activityRepository.alterStatus(activityId, currentState, Constants.ActivityState.OPEN);
            return isSuccess ? Result.buildResult(Constants.ResponseCode.SUCCESS, "活动开启完成") : Result.buildErrorResult("活动状态变更失败");
        }
    
        @Override
        public Result doing(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动关闭不可变更活动中");
        }
    }
    
    /**
     * 活动开启状态
     */
    @Component
    public class OpenState extends AbstractState {
        @Override
        public Result arraignment(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动开启不可提审");
        }
    
        @Override
        public Result checkPass(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动开启不可审核通过");
        }
    
        @Override
        public Result checkRefuse(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动开启不可审核拒绝");
        }
    
        @Override
        public Result checkRevoke(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动开启不可撤销审核");
        }
    
        @Override
        public Result close(Long activityId, Enum<Constants.ActivityState> currentState) {
            boolean isSuccess = activityRepository.alterStatus(activityId, currentState, Constants.ActivityState.CLOSE);
            return isSuccess ? Result.buildResult(Constants.ResponseCode.SUCCESS, "活动关闭完成") : Result.buildErrorResult("活动状态变更失败");
        }
    
        @Override
        public Result open(Long activityId, Enum<Constants.ActivityState> currentState) {
            return Result.buildResult(Constants.ResponseCode.UN_ERROR, "活动不可重复开启");
        }
    
        @Override
        public Result doing(Long activityId, Enum<Constants.ActivityState> currentState) {
            boolean isSuccess = activityRepository.alterStatus(activityId, currentState, Constants.ActivityState.DOING);
            return isSuccess ? Result.buildResult(Constants.ResponseCode.SUCCESS, "活动变更活动中完成") : Result.buildErrorResult("活动状态变更失败");
        }
    
    }
    
    /**
     * 状态处理接口
     */
    public interface IStateHandler {
        /**
         * 提审
         * @param activityId    活动ID
         * @param currentStatus 当前状态
         * @return              审核结果
         */
        Result arraignment(Long activityId, Enum<Constants.ActivityState> currentStatus);
    
        /**
         * 审核通过
         * @param activityId    活动ID
         * @param currentStatus 当前状态
         * @return              审核结果
         */
        Result checkPass(Long activityId, Enum<Constants.ActivityState> currentStatus);
    
        /**
         * 审核拒绝
         * @param activityId    活动ID
         * @param currentStatus 当前状态
         * @return              审核结果
         */
        Result checkRefuse(Long activityId, Enum<Constants.ActivityState> currentStatus);
    
        /**
         * 撤销审核
         * @param activityId    活动ID
         * @param currentStatus 当前状态
         * @return              审核结果
         */
        Result checkRevoke(Long activityId, Enum<Constants.ActivityState> currentStatus);
    
        /**
         * 关闭
         * @param activityId    活动ID
         * @param currentStatus 当前状态
         * @return              审核结果
         */
        Result close(Long activityId, Enum<Constants.ActivityState> currentStatus);
    
        /**
         * 开启
         * @param activityId    活动ID
         * @param currentStatus 当前状态
         * @return              审核结果
         */
        Result open(Long activityId, Enum<Constants.ActivityState> currentStatus);
    
        /**
         * 运行活动中
         * @param activityId    活动ID
         * @param currentStatus 当前状态
         * @return              审核结果
         */
        Result doing(Long activityId, Enum<Constants.ActivityState> currentStatus);
    
    }
    
    
    /**
     * 状态处理服务
     */
    @Service
    public class StateHandlerImpl extends StateConfig implements IStateHandler {
        @Override
        public Result arraignment(Long activityId, Enum<Constants.ActivityState> currentStatus) {
            return stateGroup.get(currentStatus).arraignment(activityId,currentStatus);
        }
    
        @Override
        public Result checkPass(Long activityId, Enum<Constants.ActivityState> currentStatus) {
            return stateGroup.get(currentStatus).checkPass(activityId,currentStatus);
        }
    
        @Override
        public Result checkRefuse(Long activityId, Enum<Constants.ActivityState> currentStatus) {
            return stateGroup.get(currentStatus).checkRefuse(activityId, currentStatus);
        }
    
        @Override
        public Result checkRevoke(Long activityId, Enum<Constants.ActivityState> currentStatus) {
            return stateGroup.get(currentStatus).checkRevoke(activityId, currentStatus);
        }
    
        @Override
        public Result close(Long activityId, Enum<Constants.ActivityState> currentStatus) {
            return stateGroup.get(currentStatus).close(activityId, currentStatus);
        }
    
        @Override
        public Result open(Long activityId, Enum<Constants.ActivityState> currentStatus) {
            return stateGroup.get(currentStatus).open(activityId, currentStatus);
        }
    
        @Override
        public Result doing(Long activityId, Enum<Constants.ActivityState> currentStatus) {
            return stateGroup.get(currentStatus).doing(activityId, currentStatus);
        }
    }
    
    

    测试类

        @Test
        public void test_alterState() {
            logger.info("提交审核,测试:{}", JSON.toJSONString(stateHandler.arraignment(100001L, Constants.ActivityState.EDIT)));
            logger.info("审核通过,测试:{}", JSON.toJSONString(stateHandler.checkPass(100001L, Constants.ActivityState.ARRAIGNMENT)));
            logger.info("运行活动,测试:{}", JSON.toJSONString(stateHandler.doing(100001L, Constants.ActivityState.PASS)));
            logger.info("二次提审,测试:{}", JSON.toJSONString(stateHandler.checkPass(100001L, Constants.ActivityState.EDIT)));
        }
    
  • 相关阅读:
    Vulnhub_Noob
    (十九)Spring中的八大模式
    自动化测试的度量指标
    789. 数的范围
    Dart_Flutter【插件介绍+平台发布+视频】【180个网址导航】
    大四如何稳稳当当的毕业--计算机毕设如何做?
    MySQL处理Json数据
    玩转 PI 系列-看起来像服务器的 ARM 开发板矩阵-Firefly Cluster Server
    HTML+CSS+JS网页设计期末课程大作业 DW个人博客网站制作 web前端开发技术 web课程设计 网页规划与设计
    C语言第十课(上):编写井字棋游戏(综合练习1)
  • 原文地址:https://blog.csdn.net/zhangzhi1979815592/article/details/139509207