提交 b33cb212 编写于 作者: zhouweidong's avatar zhouweidong

虚拟联合主键

上级 249c8e84
......@@ -120,11 +120,11 @@ public class ${item.getCodeName()} extends EntityMP implements Serializable {
@Audit
</#if>
<#comment>属性默认值</#comment>
<#if defieldano?? && defieldano!='' && defield.isPhisicalDEField()==true>
<#if (defieldano?? && defieldano!='' && defield.isPhisicalDEField()==true ) || defield.isKeyDEField()>
@DEField(${defieldano})
</#if>
<#comment>主键</#comment>
<#if defield.isKeyDEField()==true>
<#if defield.isKeyDEField()==true && defield.isPhisicalDEField()==true>
<#if defield.getDataType() == "ACID">
@TableId(value= "${columnname}",type=IdType.AUTO)
<#elseif defield.getDataType() == "BIGINT">
......@@ -287,6 +287,47 @@ public class ${item.getCodeName()} extends EntityMP implements Serializable {
<#if item.getUnionKeyValuePSDEFields()??>
<#assign privateCodeName = srfcaseformat(keyField.getCodeName(),'l_u2lC') >
<#assign publicCodeName = privateCodeName?cap_first >
<#if keyField.isPhisicalDEField==false>
<#comment>虚拟联合主键</#comment>
<#assign unionKeySize=0>
<#list item.getUnionKeyValuePSDEFields() as defield>
<#assign unionKeySize=unionKeySize+1>
</#list>
/**
* 获取 [${defield.getLogicName()}]
*/
public ${srfr7javatype(keyField.getStdDataType())} get${publicCodeName}(){
Object id=getDefaultKey(true);
return ObjectUtils.isEmpty(id)?null:(${srfr7javatype(keyField.getStdDataType())})id;
}
/**
* 设置 [${defield.getLogicName()}]
*/
public void set${publicCodeName}(${srfr7javatype(defield.getStdDataType())} ${prvateCodeName}) {
if(!StringUtils.isEmpty(${prvateCodeName})){
String [] args=${prvateCodeName}.split("\\|\\|");
if(args.length==${unionKeySize}){
${checkUnionKey(item.getUnionKeyValuePSDEFields())}{
<#list item.getUnionKeyValuePSDEFields() as defield>
<#assign unionKeyPrivateCodeName = srfcaseformat(defield.getCodeName(),'l_u2lC') >
<#assign unionKeyPublicCodeName = unionKeyPrivateCodeName?cap_first >
this.set${unionKeyPublicCodeName}(args[${defield_index}]);
</#list>
}
}
this.${prvateCodeName} = ${prvateCodeName} ;
}
}
@Override
public Serializable getDefaultKey(boolean gen) {
${checkUnionKey(item.getUnionKeyValuePSDEFields())}
return ${getUnionKey(item.getUnionKeyValuePSDEFields())};
return null;
}
<#else>
/**
* 获取 [${keyField.getLogicName()}]
*/
......@@ -303,6 +344,7 @@ public class ${item.getCodeName()} extends EntityMP implements Serializable {
return DigestUtils.md5DigestAsHex(${getUnionKey(item.getUnionKeyValuePSDEFields())}.getBytes());
return null;
}
</#if>
<#comment>Long型主键</#comment>
<#elseif srfr7javatype(keyField.getStdDataType())=='Long'>
@Override
......
......@@ -90,6 +90,7 @@ import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.util.ObjectUtils;
import org.springframework.beans.factory.annotation.Value;
import ${pub.getPKGCodeName()}.util.errors.BadRequestAlertException;
<#if pub.isEnableGlobalTransaction?? && pub.isEnableGlobalTransaction()?? && pub.isEnableGlobalTransaction()==true>
import io.seata.spring.annotation.GlobalTransactional;
</#if>
......@@ -108,6 +109,7 @@ import ${pub.getPKGCodeName()}.util.helper.DEFieldCacheMap;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import ${pub.getPKGCodeName()}.core.${item.getPSSystemModule().getCodeName()?lower_case}.mapper.${item.getCodeName()}Mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.alibaba.fastjson.JSONObject;
import org.springframework.util.StringUtils;
......@@ -120,6 +122,8 @@ import org.springframework.util.StringUtils;
public class ${item.getCodeName()}ServiceImpl extends ServiceImpl<${de.getCodeName()}Mapper, ${de.getCodeName()}> implements I${de.getCodeName()}Service {
<#assign keyfield=de.getKeyPSDEField()>
<#assign keyfieldPrivateCodeName = srfcaseformat(keyfield.getCodeName(),'l_u2lC') >
<#assign keyfieldPublicCodeName = keyfieldPrivateCodeName?cap_first >
<#comment>引入关联依赖-从关系</#comment>
<#if de.getMajorPSDERs()??>
......@@ -317,6 +321,7 @@ public class ${item.getCodeName()}ServiceImpl extends ServiceImpl<${de.getCodeNa
}
@Override
<@transactionalAnno deaction/>
public void createBatch(List<${item.getCodeName()}> list) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "createBatch"/>
......@@ -351,8 +356,14 @@ public class ${item.getCodeName()}ServiceImpl extends ServiceImpl<${de.getCodeNa
${srfcaseformat(majorIndexDECodeName,'l_u2lC')}Service.update(${de.codeName?lower_case}InheritMapping.to${majorIndexDECodeNameCamel}(et));
</#if>
<#if de.getKeyPSDEField()??>
if(!update(et,(Wrapper) et.getUpdateWrapper(true).eq("${keyfield.name?lower_case}",et.get${srfcaseformat(keyfield.codeName,'l_u2lC')?cap_first}())))
<#if de.getKeyPSDEField().isPhisicalDEField==false && de.getUnionKeyValuePSDEFields()??>
<#comment>虚拟联合主键</#comment>
if(!updateById(et))
return false;
<#else>
if(!update(et,(Wrapper) et.getUpdateWrapper(true).eq("${keyfield.name?lower_case}",et.get${srfcaseformat(keyfield.codeName,'l_u2lC')?cap_first}())))
return false;
</#if>
<#comment>1N关系中,在父实体中创建子实体的List集合</#comment>
<#if de.getMajorPSDERs?? && de.getMajorPSDERs()??>
<#list de.getMajorPSDERs() as MajorPSDER>
......@@ -391,6 +402,7 @@ public class ${item.getCodeName()}ServiceImpl extends ServiceImpl<${de.getCodeNa
}
@Override
<@transactionalAnno deaction/>
public void updateBatch(List<${item.getCodeName()}> list) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "updateBatch"/>
......@@ -432,6 +444,7 @@ public class ${item.getCodeName()}ServiceImpl extends ServiceImpl<${de.getCodeNa
}
@Override
<@transactionalAnno deaction/>
public boolean saveBatch(Collection<${item.getCodeName()}> list) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "saveBatch"/>
......@@ -443,6 +456,7 @@ public class ${item.getCodeName()}ServiceImpl extends ServiceImpl<${de.getCodeNa
}
@Override
<@transactionalAnno deaction/>
public void saveBatch(List<${item.getCodeName()}> list) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "saveBatch"/>
......@@ -487,6 +501,7 @@ public class ${item.getCodeName()}ServiceImpl extends ServiceImpl<${de.getCodeNa
}
@Override
<@transactionalAnno deaction/>
public void removeBatch(Collection<${srfr7javatype(keyfield.stdDataType)}> idList) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "removeBatch"/>
......@@ -883,6 +898,55 @@ public class ${item.getCodeName()}ServiceImpl extends ServiceImpl<${de.getCodeNa
<#comment>实体数据导入</#comment>
<@deImportData/>
<#comment>虚拟联合主键</#comment>
<#if de.getKeyPSDEField().isPhisicalDEField==false && de.getUnionKeyValuePSDEFields()??>
private ${item.getCodeName()} getById(${srfr7javatype(keyfield.getStdDataType())} id){
${item.getCodeName()} entity=new ${item.getCodeName()}();
entity.set${srfcaseformat(keyfield.codeName,'l_u2lC')?cap_first}(id);
if(ObjectUtils.isEmpty(entity.get${srfcaseformat(keyfield.codeName,'l_u2lC')?cap_first}())){
log.error("获取数据失败,联合键值为空");
return entity;
}
entity=this.getOne(new QueryWrapper(entity));
return entity;
}
private boolean removeById(${srfr7javatype(keyfield.getStdDataType())} id){
${item.getCodeName()} entity=new ${item.getCodeName()}();
entity.set${srfcaseformat(keyfield.codeName,'l_u2lC')?cap_first}(id);
if(ObjectUtils.isEmpty(entity.get${srfcaseformat(keyfield.codeName,'l_u2lC')?cap_first}())){
log.error("删除数据失败,联合键值为空");
return false;
}
return this.remove(new QueryWrapper(entity));
}
public boolean updateById(${item.getCodeName()} et){
UpdateWrapper<${item.getCodeName()}> wrapper=et.getUpdateWrapper(true);
if(ObjectUtils.isEmpty(entity.get${srfcaseformat(keyfield.codeName,'l_u2lC')?cap_first}())){
log.error("更新数据失败,联合键值为空");
return false;
}
return ${getUnionKeyUpdateCond(de.getUnionKeyValuePSDEFields())};
}
private boolean updateBatchById(List<${item.getCodeName()}> ets, int batchSize){
for(${item.getCodeName()} et: ets){
if(!updateById(et))
throw new BadRequestAlertException(String.format("更新[{}]数据失败",entity.get${srfcaseformat(keyfield.codeName,'l_u2lC')?cap_first}()),"","");
}
return true;
}
public boolean removeByIds(List<${srfr7javatype(keyfield.getStdDataType())}> ids){
for(${srfr7javatype(keyfield.getStdDataType())} id:ids){
if(!removeById(id))
throw new BadRequestAlertException(String.format("删除[{}]数据失败",id),"","");
}
return true;
}
</#if>
}
<#comment>NOSQL存储</#comment>
......@@ -2487,10 +2551,18 @@ public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Ser
//主键重复性判断.外键约束判断(上传数据自身的检查/数据库的检查)
for(int i=0;i<entities.size();i++) {
${de.codeName} entity = entities.get(i);
Object id = entity.get(keyField);
Object id = entity.get${keyfieldPublicCodeName}();
if(ObjectUtils.isEmpty(id)) {
id = entity.getDefaultKey(true);
entity.set(keyField, id);
if(ObjectUtils.isEmpty(id)){
Integer lineNum = i + 1;
errorLines.add(lineNum);
errorMsgs.add("第" + lineNum + "行:无法获取当前数据主键。");
continue;
}
else{
entity.set${keyfieldPublicCodeName}((${srfr7javatype(keyfield.getStdDataType())}) id);
}
}
if(!ids.contains(id)){
ids.add(id);
......@@ -2598,7 +2670,7 @@ public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Ser
for(int i=0;i<entities.size();i++) {
${de.codeName} entity = entities.get(i);
tempDEList.add(entity);
Object id=entity.get(keyField);
Object id=entity.get${keyfieldPublicCodeName}();
if(!ObjectUtils.isEmpty(id))
tempIds.add(id);
if(tempDEList.size()>=batchSize || (tempDEList.size()<batchSize && i==entities.size()-1)){
......@@ -2627,11 +2699,11 @@ public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Ser
if(ids.size()>0){
List<${de.codeName}> oldEntities=this.listByIds(ids);
for(${de.codeName} entity:oldEntities){
oldIds.add(entity.get(keyField));
oldIds.add(entity.get${keyfieldPublicCodeName}());
}
}
for(${de.codeName} entity:entities){
Object id=entity.get(keyField);
Object id=entity.get${keyfieldPublicCodeName}();
if(oldIds.contains(id))
_update.add(entity);
else
......@@ -2656,4 +2728,17 @@ public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Ser
</#if>
</#macro>
<#comment>虚拟联合主键update条件,返回 update(et,wrapper.eq("humanname",et.getHumanname()).eq("location",et.getLocation()))</#comment>
<#function getUnionKeyUpdateCond unionKeyList>
<#assign formatValue="">
<#list item.getUnionKeyValuePSDEFields() as defield>
<#assign unionKeyPrivateCodeName = srfcaseformat(defield.getCodeName(),'l_u2lC') >
<#assign unionKeyPublicCodeName = unionKeyPrivateCodeName?cap_first >
<#assign unionKeyCodeName = unionKeyPrivateCodeName?lower_case >
<#assign formatValue=formatValue+".eq(\""+unionKeyCodeName+"\",et.get"+unionKeyPublicCodeName+"())">
</#list>
<#assign unionKeyResult="update(et,wrapper"+formatValue+")">
<#return unionKeyResult>
</#function>
</#if>
......@@ -216,7 +216,7 @@ public class DEFieldDefaultValueAspect
private void fillPreFieldValue(String fieldname , DEPredefinedFieldType preFieldType ,EntityBase et , String actionName,String logicValue ,AuthenticationUser curUser) throws Exception {
Object fieldValue = et.get(fieldname);
//为预置属性进行赋值
if( actionName.equalsIgnoreCase("create")||
if( actionName.toLowerCase().startsWith("create") ||
preFieldType== DEPredefinedFieldType.UPDATEDATE|| preFieldType== DEPredefinedFieldType.UPDATEMAN||
preFieldType== DEPredefinedFieldType.UPDATEMANNAME){
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册