这里写自定义目录标题
实现了一个策略工厂,通过 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