All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edi.rule.model.JSRuleAdd Maven / Gradle / Ivy

package edi.rule.model;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import edi.rule.annotation.JSRuleCheck;
import edi.rule.annotation.JSRuleInject;
import edi.rule.config.JSRuleMessage;
import edi.rule.core.JSRuleDBCompatible;
import edi.rule.core.JSRuleArgsVessel;
import edi.rule.core.JSRuleJdbc;
import edi.rule.core.JSRuleMethod;
import edi.rule.util.ZSNumber;
import edi.rule.util.ZSObject;
import edi.rule.util.ZSString;
import edi.rule.util.ZSVessel;
import edi.rule.work.cache.JSRuleMappingInfo;
import edi.rule.work.enums.JSRuleCrudEnum;
import edi.rule.work.custom.JSRuleException;
import edi.rule.work.interfaces.IJSRuleDmlModel;
import lombok.Data;

/**
 * @author 摩拉克斯
 * @date 2022年1月4日 下午1:42:10
 * 

插入数据模型 */ @Data @JsonIgnoreProperties(ignoreUnknown=true) public class JSRuleAdd> implements IJSRuleDmlModel{ /** *

映射类的类名,别名class,必须存在的属性,用于指定关联要插入的表 * */ @JsonAlias({"class"}) @JSRuleCheck(required=true) public String className; /** *

待插入的数据集合 * */ public List> data; /** *

数据列默认值,key为数据列名,value为默认值 * */ public Map defaults; /** *

指定数据列自动生成uuid,通常用于主键id生成策略,可以指定多个列,数组中的字符串表示要生成uuid的列名 * */ public String[] uuid; /** *

雪花id算法,用于主键id生成策略,可以指定多个列,数组中的字符串表示要生成雪花id算法的列名 * */ public String[] snowFlake; /** *

校验本次请求的每一条数据中某一列不能为空,数组中的字符串表示所要校验的列是否为空 * */ public String[] required; /** *

列计算规则,字符串数学计算,在插入数据前进行转换,例子:"calculate":{"salary:-+0.5*(-10*10)","bonus:-100"} * */ public Map calculate; @JSRuleInject @JsonIgnore private JSRuleArgsVessel vessel; @JSRuleInject @JsonIgnore private JSRuleJdbc jdbc; @Override public final Object startCrudModel(A action) { if (ZSVessel.isNotEmpty(this.getData())) { JSRuleMappingInfo mappingInfo = action.cache.getMappingInfo(this.getClassName()); if (mappingInfo.isView) { throw new JSRuleException(action.cache.name, JSRuleMessage.read("can't.insert.view")); } List> addList = new ArrayList<>(); for (Map data:this.getData()) { ruleProcess(data,action); dataProcess(data,action); addList.add(JSRuleMethod.toDatabase(data,action.cache)); } addList = beforeAdd(addList,action); int result = jdbc.add(mappingInfo.tableName,addList); return JSRuleDBCompatible.getAddsNum(result,addList.size()); }else { return 0; } } /** *

检查映射类信息以及对应的角色信息是否具有add操作权限 * */ @Override public final void checkCrudPermit(A action) { checkCrudPermit(action.name,JSRuleCrudEnum.C, vessel.getGlobalArgs().getRoles()); } /** *

扩展方法,重写此方法可在数据转换类型前对数据进行处理 * @param data 一条数据 * */ protected void dataProcess(Map data,A action) {} /** *

插入数据前执行 * @param data 待插入的数据集合 * */ protected List> beforeAdd(List> data,A action) {return data;} private void ruleProcess(Map data,A action) { if (ZSVessel.isNotEmpty(action.getAdd().getDefaults())) { for (Entry entry:action.getAdd().getDefaults().entrySet()) { data.putIfAbsent(action.cache.getFieldInfo(entry.getKey()).classFieldName, entry.getValue()); } } if (ZSVessel.isNotEmpty(action.getAdd().getUuid())) { for (String field:action.getAdd().getUuid()) { data.put(action.cache.getFieldInfo(field).classFieldName, ZSString.getUUid()); } } if (ZSVessel.isNotEmpty(action.getAdd().getSnowFlake())) { for (String field:action.getAdd().getSnowFlake()) { data.put(action.cache.getFieldInfo(field).classFieldName, ZSNumber.getSnowFlakeId()); } } if (ZSVessel.isNotEmpty(action.getAdd().getCalculate())) { JSRuleMethod.calculate(data,action.getAdd().getCalculate(),action.cache); } if (ZSVessel.isNotEmpty(action.getAdd().getRequired())) { for (String field:action.getAdd().getRequired()) { if (ZSObject.isBlankOrEmpty(data.get(field))) { throw new JSRuleException(action.cache.name,JSRuleMessage.read("field.value.is.required"),field); } } } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy