若依实现代码模块化多客户公用
ImplBeanUtils.resolveBeanNameByShipCodes()方法就是流程图中提到的”在该方法中查找客户对应的文件地址并进行比较确认地址路径“现场需求:多客户使用同一套代码,不同用户的word模板不同(入职申请,工作时间表。)系统需要根据不同客户根据他们自己的模板生成各自的word。然后就可以把这个根据不同客户获取到的不同模块的fileConfigBase发给需要使用的ser
现场需求:多客户使用同一套代码,不同用户的word模板不同(入职申请,工作时间表。。。。)系统需要根据不同客户根据他们自己的模板生成各自的word。
多模块化进行管理word模板
实现思想:
代码路径如下:
fileConfigBase方法:
@PostConstruct
public void initCrewDocDataBean() throws IOException {
String module = FileConfigCrew.getModule();
String defaultBean = FileConfigCrew.getDefaultBean();
String configValue = configService.selectConfigByKey("yuyou_customer_code");
BasYuyouCustomer basYuyouCustomer = yuyouCustomerMapper.selectOne(Wrappers.<BasYuyouCustomer>lambdaQuery()
.eq(BasYuyouCustomer::getYuyouCustCode, configValue));
//模块地址
directory = basYuyouCustomer.getDirectory();
//TODO 改名字
String beanName = ImplBeanUtils.resolveBeanNameByShipCodes(directory, module, defaultBean, platformId);
fileConfigBase = SpringUtils.getBean(beanName);
}
注: @PostConstruct注解表示在代码构建时就运行,只运行一次(这里有个坑你们应该踩不到)!
ImplBeanUtils.resolveBeanNameByShipCodes()方法就是流程图中提到的”在该方法中查找客户对应的文件地址并进行比较确认地址路径“
获取模块地址的方法就是我们公司自己的代码了 这里就不多说了!
主要介绍一下resolveBeanNameByShipCodes()方法:
/**
* 获取className通过shipCodes
*
* @param directory 船舶身份Id号,唯一
* @param module 模块
* @param defaultBean 默认实现类
* @param platformId 平台Id
* @return
*/
public static String resolveBeanNameByShipCodes(String directory, String module, String defaultBean, Long platformId) {
String ymlFilePath = module + "-impl-" + platformId + ".yml";
//System.err.println("ymlFilePath="+ymlFilePath);
List<ImplBean> implBeanList = readImplBean(ymlFilePath);
String beanName = defaultBean;
//若是配置内容为空,则默认用配置类
if (CollectionUtils.isEmpty(implBeanList)) {
return beanName;
}
for (ImplBean implBean : implBeanList) {
String shipIdCodes = implBean.getShipCodes();
if (StringUtils.isEmpty(shipIdCodes)) {
return beanName;
}
String[] shipIdNoArr = shipIdCodes.split(",");
for (String shipIdNoTmp : shipIdNoArr) {
if (StringUtils.equalsIgnoreCase(shipIdNoTmp, directory)) {
String beanNameTmp = implBean.getBeanName();
return beanNameTmp;
}
}
}
return beanName;
}
可以看得到他是读取了相应的yml文件,并获取到需要的beanName
这里有个文件集成构造模式如下
其中FileConfigBase是基础类
内容如下:
public abstract class FileConfigBase {
//doc数据转化
public abstract void delopyDoc(Map<String, Object> map, HttpServletResponse response,
XWPFTemplate template, BasSystemDoc systemDoc) throws IOException;
}
下面是继承他的三个模块化方法:
举个例子:
注:@Service(“fileConfigZhongjiao”)就是用来
fileConfigBase = SpringUtils.getBean(beanName);获取bean时所需的beanName
下面是实现了父类中定义的方法。
然后就可以把这个根据不同客户获取到的不同模块的fileConfigBase发给需要使用的service方法。
以上就完成了简单的不同客户对应不同word模板的需求。
更多推荐
所有评论(0)