模板模式使用

模板模式使用

  
public class ImportController extends AbstractController {
   
    @Autowired
    private AService aService;
    @Autowired
    private BService bService;
	//省略ngService注入....
    @RequestMapping("/import")
    public Hdi importFile(@RequestParam("file") MultipartFile file String serviceName) {
        if (dictEntity == null) {
            return Hdi.error("导入失败!找不到对应的服务");
        }
        try {
            String[][] rows = ExcelUtils.readExcelByInput(file.getInputStream(), file.getOriginalFilename(), 1);

            if (rows.length <= 1) {
                return Hdi.ok("导入失败!excel文件数据为空");
            }
            Map<String, String> message = new HashMap<>(16);
            if (ImportEnum.ASERVICE.getValue().equals(serviceName)) {
                message = AService.importData(rows);
            }
             if (ImportEnum.BSERVICE.getValue().equals(serviceName)) {
                message = BService.importData(rows);
            }
            //省略了n个服务判断..
            
            String key = "failCount";

            if (message.get(key) != null && Integer.parseInt(message.get(key)) > 0) {
                return Hdi.ok(message.get("successCount") + "条记录导入成功,\n" + message.get(key) + "条记录导入失败,失败原因:" + message.get("errorMessage"));
            }
            return Hdi.ok(message.get("successCount") + "条记录导入成功," + message.get(key) + "条记录导入失败");
        } catch (HdiException e) {
            return Hdi.ok(e.getMessage());
        } catch (Exception e) {
            logger.error(e.getMessage());
            return Hdi.error("导入失败!" + e.getMessage());
        }
    }
由于公司的导入公共类是这样子的,每次新增导入都得在公共类多加个判断和在枚举里加个value,不符合开闭原则。
后面想到用了模板模式,一开始写好了模板类,使用起来也可以。但是由于公司使用mybatisplus,service类只能继承一个父类。
public AserviceImpl extends ServiceImpl<Adao,AEntity> implementsAservice
而采取Java8的Function来实现模板模式
public class ImportCommon {
    public static Hdi importFile(@RequestParam("file") MultipartFile file,  Function<Object[],Map> execute) {
        try {
            String[][] rows = ExcelUtils.readExcelByInput(file.getInputStream(), file.getOriginalFilename(), 1);
            if(rows.length <= 1){
                return Hdi.ok("导入失败!excel文件数据为空");
            }
            Map<String,String> message = new HashMap<>(16);
            Object[] param = new Object[]{rows,message};

            message = execute.apply(param);
            String key ="failCount";

            if(message.get(key)!= null && Integer.parseInt(message.get(key) )> 0 ){
                return Hdi.ok(message.get("successCount")+"条记录导入成功,\n"+message.get(key)+"条记录导入失败,失败原因:"+message.get("errorMessage"));
            }
            return Hdi.ok(message.get("successCount")+"条记录导入成功,"+message.get(key)+"条记录导入失败");
        } catch (Exception e) {
            return Hdi.error("导入失败!"+e.getMessage());
        }
    }
}


//只需要在Controller写导入接口就行了
	/**
     * 导入
     */
    @PostMapping(value = "/import")
    public Hdi importFile(@RequestParam("file") MultipartFile file ) {
 		return  ImportCommon.importFile(file,(Object[] obj) ->{
            return AService.importData(obj[0],obj[1]);
        });
 }
发布了4 篇原创文章 · 获赞 0 · 访问量 29
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览