package com.iplatform.base.cache;
import com.iplatform.base.Constants;
import com.iplatform.base.PlatformRuntimeException;
import com.iplatform.base.pojo.form.FormData;
import com.iplatform.base.pojo.form.FormDataItem;
import com.iplatform.base.service.ConfigFormServiceImpl;
import com.iplatform.base.util.ConfigFormValidateUtils;
import com.iplatform.model.po.S_config_form;
import com.iplatform.model.vo.ConfigFormItemConfigRegListVo;
import com.iplatform.model.vo.ConfigFormItemVo;
import com.iplatform.model.vo.ConfigFormVo;
import com.walker.cache.AbstractCacheProvider;
import com.walker.cache.Cache;
import com.walker.infrastructure.utils.JsonUtils;
import com.walker.infrastructure.utils.StringUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 自定义表单缓存。
*
1、因为这个数据不会动态变动,因此不需要Redis负载支持。
* @author 时克英
* @date 2023-05-18
*/
public class FormCacheProvider extends AbstractCacheProvider {
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~ 用于验证配置表单的相关方法,后续需要增加表单引擎(对象)来单独处理,
//~~ 现在临时使用缓存对象处理。2023-05-20
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* 校验提交的表单是否正确。
* 1) 当前在功能:分组(组合数据)添加数据项时被调用。
* @param formData
* @date 2023-05-20
*/
public void validateForm(FormData formData){
//循环取出item数据, 组合成 key => val 的map格式
Map map = new HashMap<>();
String formItemValue = null;
for (FormDataItem formDataItem : formData.getFields()) {
// 2023-05-21 把value中json转字符串时,包含的:\"去掉。
// 由于还没有使用到,需要后续评估看用那种方法能获取值。
// formItemValue = formDataItem.getValue();
// if(StringUtils.isNotEmpty(formItemValue)){
// formDataItem.setValue(formItemValue.replaceAll("\"", StringUtils.EMPTY_STRING));
// }
// 算法临时缓存
map.put(formDataItem.getName(), formDataItem.getValue());
}
//取出表单模型的数据
S_config_form form = this.getCacheData(formData.getId().toString());
//解析表单规则进行验证
ConfigFormVo systemConfigFormVo = null;
try {
systemConfigFormVo = JsonUtils.jsonStringToObject(form.getContent(), ConfigFormVo.class);
} catch (Exception e) {
logger.error("formData.getId()=" + formData.getId() + ", " + e.getMessage(), e);
throw new PlatformRuntimeException("模板表单 【" + form.getName() + "】 内容不正确,请检查JSON格式!", e);
}
// ConfigFormItemVo configFormItemVo;
// for (String item : systemConfigFormVo.getFields()) {
for (ConfigFormItemVo configFormItemVo : systemConfigFormVo.getFields()) {
// systemConfigFormItemVo = JSONObject.parseObject(item, SystemConfigFormItemVo.class);
// try {
// configFormItemVo = JsonUtils.jsonStringToObject(item, ConfigFormItemVo.class);
// } catch (Exception e) {
// throw new PlatformRuntimeException("ConfigFormItemVo转换错误:" + item, e);
// }
String model = configFormItemVo.get__vModel__(); //字段 name
if(configFormItemVo.get__config__().getRequired() && map.get(model).equals(StringUtils.EMPTY_STRING)) {
throw new PlatformRuntimeException(configFormItemVo.get__config__().getLabel() + "不能为空!");
}
//正则验证
checkRule(configFormItemVo.get__config__().getRegList(), map.get(model), configFormItemVo.get__config__().getLabel());
}
}
/**
* 验证item规则
* @param regList List regList, String value, String name) {
if(regList.size() > 0) {
for (ConfigFormItemConfigRegListVo systemConfigFormItemConfigRegListVo : regList) {
if(!ConfigFormValidateUtils.regular(value, name, systemConfigFormItemConfigRegListVo.getPattern())) {
throw new PlatformRuntimeException(systemConfigFormItemConfigRegListVo.getMessage());
}
}
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ end ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@Override
protected int loadDataToCache(Cache cache) {
List hosts = this.configFormService.selectAll(new S_config_form());
if(!StringUtils.isEmptyList(hosts)){
for(S_config_form h : hosts){
cache.put(String.valueOf(h.getId()), h);
}
return hosts.size();
}
return 0;
}
@Override
public String getProviderName() {
return Constants.CACHE_NAME_FORM;
}
@Override
public Class> getProviderType() {
return S_config_form.class;
}
public void setConfigFormService(ConfigFormServiceImpl configFormService) {
this.configFormService = configFormService;
}
private ConfigFormServiceImpl configFormService;
}