【策略工厂】

这里写自定义目录标题

实现了一个策略工厂,通过 strategyMap 存储不同的策略实例,并提供了 getStrategy 方法来根据指定的键获取相应的策略实例。如果指定的键对应的策略不存在,则抛出异常。

package com.chinaztt.mes.production.factory;

import com.chinaztt.mes.production.service.IProductReportStrategy;
import com.chinaztt.mes.production.service.IReportStrategy;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

@Service
public class ProdunctFactory {
    @Resource
    private Map<String, IReportStrategy> strategyMap = new ConcurrentHashMap<>();

    public IReportStrategy getStrategy(String com)throws RuntimeException {
        IReportStrategy iReportStrategy = strategyMap.get(com);
        if (iReportStrategy == null) {
            throw new RuntimeException("no strategy defined");
        }

        return iReportStrategy;
    }


}

下面写个基础的策略接口

package com.chinaztt.mes.production.service;

import com.chinaztt.mes.production.dto.ProductReportDTO;

public interface IReportStrategy<T> {
    /**
     * <p>
     * 报工
     * <p/>
     *
     * @param productReport 报工信息
     */
    void report(ProductReportDTO productReport);
}

然后再新建的接口extends 下策略接口

package com.chinaztt.mes.production.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.chinaztt.mes.production.entity.ProductReportTongpai;


/**
 * @author zhougc
 */
public interface IReportDayuService extends IService<ProductReportTongpai>, IReportStrategy  {
}

写对应的实现类

package com.chinaztt.mes.production.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chinaztt.mes.common.constant.Constant;
import com.chinaztt.mes.production.dto.ProductReportDTO;
import com.chinaztt.mes.production.entity.ProductReportTongpai;
import com.chinaztt.mes.production.entity.ProductReportZongjian;
import com.chinaztt.mes.production.mapper.ProductReportTongpaiMapper;
import com.chinaztt.mes.production.mapper.ProductReportZongjianMapper;
import com.chinaztt.mes.production.service.IReportDayuService;
import com.ctc.wstx.exc.WstxOutputException;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

@Service("dayu")
@AllArgsConstructor
public class ReportDayuServiceImpl extends ServiceImpl<ProductReportTongpaiMapper, ProductReportTongpai> implements IReportDayuService {
    @Override
    public void report(ProductReportDTO productReport) {
        System.out.println("Dayu");
    }
}

然后再写类似的service 和在实现下

package com.chinaztt.mes.production.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.chinaztt.mes.production.entity.ProductReportDiezhuang;
import com.chinaztt.mes.production.entity.ProductReportOther;
import com.chinaztt.mes.production.entity.ProductReportTongpai;

/**
 * @author zhougc
 */
public interface IReportXiaoyuService extends IService<ProductReportOther>,IReportStrategy {
}

package com.chinaztt.mes.production.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chinaztt.mes.production.dto.ProductReportDTO;
import com.chinaztt.mes.production.entity.ProductReportOther;
import com.chinaztt.mes.production.mapper.ProductReportOtherMapper;
import com.chinaztt.mes.production.service.IReportXiaoyuService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;


@Service("xiaoyu")
@AllArgsConstructor
public class ReportXiaoyuServiceimpl extends ServiceImpl<ProductReportOtherMapper,ProductReportOther> implements IReportXiaoyuService {

    @Override
    public void report(ProductReportDTO productReport) {
        System.out.println("xiaoyu");
    }
}

然后写个controller 进行测试下

package com.chinaztt.mes.production.controller;


import com.chinaztt.mes.production.dto.ProductReportDTO;
import com.chinaztt.mes.production.factory.ProdunctFactory;
import com.chinaztt.mes.production.mapper.ProductReportMapper;
import com.chinaztt.ztt.common.core.util.R;
import com.chinaztt.ztt.common.log.annotation.SysLog;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;

/**
 * <p>
 * 报工主表 前端控制器
 * </p>
 *
 * @author tangzb
 * @since 2024-05-06
 */
@RestController
@RequestMapping("/productReport11")
@AllArgsConstructor
@Api(value = "productReport", tags = "钣金车间报工")
public class ProductReportTestController {

    private final ProdunctFactory productReportFactory;

    private final ProductReportMapper productReportMapper;

    /**
     * 报工
     *
     * @param productReport 报工表单信息
     * @return R
     */
    @ApiOperation(value = "工作台-报工", notes = "工作台-报工")
    @SysLog("工作台-报工")
    @PostMapping
    public R save(@RequestBody @Valid ProductReportDTO productReport) {
        productReportFactory.getStrategy(productReport.getReportType()).report(productReport);
        return R.ok();
    }

}

写下DTO

package com.chinaztt.mes.production.dto;

import com.chinaztt.mes.production.entity.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.List;


/**
 * <p>
 * 车间报工
 * </p>
 *
 * @author tangzb
 * @since 2024-05-06
 */
@Data
public class ProductReportDTO {

    /**
     * 报工类型
     */
    @ApiModelProperty(value = "报工类型")
    @NotBlank(message = "报工类型不能为空")
    private String reportType;

    /**
     * 报工时间
     */
    @ApiModelProperty(value = "报工时间")
    @NotNull(message = "报工时间不能为空")
    private LocalDateTime reportTime;
    /**
     * 报工人员
     */
    @ApiModelProperty(value = "报工人员")
    private List<String> reportUserList;
    /**
     * 工单id
     */
    @ApiModelProperty(value = "工单ID")
    @NotNull(message = "工单ID不能为空")
    private Long operationTaskId;

    /**
     * 库位id
     */
    @ApiModelProperty(value = "库位id")
    @NotNull(message = "库位id不能为空")
    private Long locationId;

    /**
     * 工序id
     */
    @ApiModelProperty(value = "工序id")
    private Long operationId;

    @ApiModelProperty(value = "钣金车间报工信息")
    private ProductReport productReport;

    @ApiModelProperty(value = "铜排车间报工信息")
    private ProductReportTongpai productReportTongpai;

    @ApiModelProperty(value = "贴芯车间纵剪报工信息")
    private ProductReportZongjian productReportZongjian;

    @ApiModelProperty(value = "贴芯车间横剪报工信息")
    private ProductReportHengjian productReportHengjian;

    @ApiModelProperty(value = "贴芯车间叠装报工信息")
    private ProductReportDiezhuang productReportDiezhuang;

    @ApiModelProperty(value = "贴芯车间其他车间及工艺流程报工信息")
    private ProductReportOther productReportOther;

    @ApiModelProperty(value = "外壳车间报工信息")
    private ProductReportWaike productReportWaike;

    @ApiModelProperty(value = "线圈车间第一道工序报工")
    private ProductReportXianquanFirst productReportXianquanFirst;


    @ApiModelProperty(value = "线圈车间非一道工序报工 (非绕线)")
    private ProductReportXianquanNonFirst productReportXianquanNonFirst;

}

然后看下在请求接口中reportType传不同的值就会掉不同的service

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值