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

合并分支 'dev' 到 'master'

Dev

查看合并请求 !15
# **iBiz4j Spring R7 Template ChangeLog**
## [v2020.07.02]
- 支持测试行为模式
- 数据保存时增加版本检查
- 调整Service扩展目录
- 补充数据查询上下级权限控制
- 关闭mybatis-plus分页数量大小限制
\ No newline at end of file
...@@ -57,7 +57,6 @@ public interface I${item.codeName}Service extends IService<${item.codeName}>{ ...@@ -57,7 +57,6 @@ public interface I${item.codeName}Service extends IService<${item.codeName}>{
List<${de.codeName}> get${deCodeNameCamel}ByIds(List<String> ids) ; List<${de.codeName}> get${deCodeNameCamel}ByIds(List<String> ids) ;
List<${de.codeName}> get${deCodeNameCamel}ByEntities(List<${de.codeName}> entities) ; List<${de.codeName}> get${deCodeNameCamel}ByEntities(List<${de.codeName}> entities) ;
</#if> </#if>
} }
<#comment>NoSQL存储-MongoDB</#comment> <#comment>NoSQL存储-MongoDB</#comment>
<#elseif de.getStorageMode()==2> <#elseif de.getStorageMode()==2>
...@@ -146,6 +145,7 @@ public interface I${item.codeName}Service{ ...@@ -146,6 +145,7 @@ public interface I${item.codeName}Service{
<#else> <#else>
${item.codeName} ${srfmethodname(deaction.getCodeName())}(${item.codeName} et) ; ${item.codeName} ${srfmethodname(deaction.getCodeName())}(${item.codeName} et) ;
</#if> </#if>
<@outputTestActionDetail deaction />
</#if> </#if>
</#list> </#list>
</#if> </#if>
...@@ -196,4 +196,42 @@ public interface I${item.codeName}Service{ ...@@ -196,4 +196,42 @@ public interface I${item.codeName}Service{
</#if> </#if>
</#macro> </#macro>
<#comment>输出测试行为</#comment>
<#macro outputTestActionDetail deaction>
<#if deaction.getTestActionMode?? && deaction.getTestActionMode()?? && (deaction.getTestActionMode() ==1 ||deaction.getTestActionMode() ==3) >
<#if (deaction.getActionType()=='USERCUSTOM')>
boolean test${srfmethodname(deaction.getCodeName())?cap_first}(${item.getCodeName()} et);
<#elseif deaction.getActionType()=='DELOGIC'>
boolean test${srfmethodname(deaction.getCodeName())?cap_first}(${item.getCodeName()} et);
<#elseif deaction.getCodeName()?lower_case == 'get'>
boolean testGet(${srfjavatype(keyfield.stdDataType)} key);
<#elseif deaction.getCodeName()?lower_case == "createbatch">
<#elseif deaction.getCodeName()?lower_case == "updatebatch">
<#elseif deaction.getCodeName()?lower_case == "removebatch">
<#elseif deaction.getCodeName()?lower_case == "savebatch">
<#elseif deaction.getCodeName()?lower_case == "create">
boolean testCreate(${item.getCodeName()} et);
boolean testCreateBatch(List<${item.getCodeName()}> list);
<#elseif deaction.getCodeName()?lower_case == "update">
boolean testUpdate(${item.getCodeName()} et);
boolean testUpdateBatch(List<${item.getCodeName()}> list);
<#elseif deaction.getCodeName()?lower_case == "save">
boolean testSave(${item.getCodeName()} et);
boolean testSaveOrUpdate(${item.getCodeName()} et);
boolean testSaveBatch(Collection<${item.getCodeName()}> list);
boolean testSaveBatch(List<${item.getCodeName()}> list);
<#elseif deaction.getCodeName()?lower_case == "remove">
boolean testRemove(${srfjavatype(keyfield.stdDataType)} key);
boolean testRemoveBatch(Collection<${srfjavatype(keyfield.stdDataType)}> idList);
<#elseif deaction.getCodeName()?lower_case == "getdraft">
boolean testGetDraft(${item.getCodeName()} et);
<#elseif deaction.getCodeName()?lower_case == "checkkey">
boolean testCheckKey(${item.getCodeName()} et);
<#else>
boolean test${srfmethodname(deaction.getCodeName())?cap_first}(${item.getCodeName()} et);
</#if>
</#if>
</#macro>
</#if> </#if>
\ No newline at end of file
...@@ -110,11 +110,11 @@ public class ${item.getCodeName()}ServiceImpl extends ServiceImpl<${de.getCodeNa ...@@ -110,11 +110,11 @@ public class ${item.getCodeName()}ServiceImpl extends ServiceImpl<${de.getCodeNa
<#if !P.exists('DER1N',der.getMinorPSDataEntity().getCodeName())> <#if !P.exists('DER1N',der.getMinorPSDataEntity().getCodeName())>
<#if der.getMinorPSDataEntity().getCodeName()==de.codeName> <#if der.getMinorPSDataEntity().getCodeName()==de.codeName>
private ${pub.getPKGCodeName()}.core.${der.getMinorPSDataEntity().getPSSystemModule().getCodeName()?lower_case}.service.I${der.getMinorPSDataEntity().getCodeName()}Service ${srfcaseformat(der.getMinorPSDataEntity().getCodeName(),'l_u2lC')}Service = this; protected ${pub.getPKGCodeName()}.core.${der.getMinorPSDataEntity().getPSSystemModule().getCodeName()?lower_case}.service.I${der.getMinorPSDataEntity().getCodeName()}Service ${srfcaseformat(der.getMinorPSDataEntity().getCodeName(),'l_u2lC')}Service = this;
<#else> <#else>
@Autowired @Autowired
@Lazy @Lazy
private ${pub.getPKGCodeName()}.core.${der.getMinorPSDataEntity().getPSSystemModule().getCodeName()?lower_case}.service.I${der.getMinorPSDataEntity().getCodeName()}Service ${srfcaseformat(der.getMinorPSDataEntity().getCodeName(),'l_u2lC')}Service; protected ${pub.getPKGCodeName()}.core.${der.getMinorPSDataEntity().getPSSystemModule().getCodeName()?lower_case}.service.I${der.getMinorPSDataEntity().getCodeName()}Service ${srfcaseformat(der.getMinorPSDataEntity().getCodeName(),'l_u2lC')}Service;
</#if> </#if>
</#if> </#if>
</#if> </#if>
...@@ -127,11 +127,11 @@ public class ${item.getCodeName()}ServiceImpl extends ServiceImpl<${de.getCodeNa ...@@ -127,11 +127,11 @@ public class ${item.getCodeName()}ServiceImpl extends ServiceImpl<${de.getCodeNa
<#if !P.exists('DER1N',der.getMajorPSDataEntity().getCodeName())> <#if !P.exists('DER1N',der.getMajorPSDataEntity().getCodeName())>
<#if der.getMajorPSDataEntity().getCodeName()==de.codeName> <#if der.getMajorPSDataEntity().getCodeName()==de.codeName>
private ${pub.getPKGCodeName()}.core.${der.getMajorPSDataEntity().getPSSystemModule().getCodeName()?lower_case}.service.I${der.getMajorPSDataEntity().getCodeName()}Service ${srfcaseformat(der.getMajorPSDataEntity().getCodeName(),'l_u2lC')}Service = this; protected ${pub.getPKGCodeName()}.core.${der.getMajorPSDataEntity().getPSSystemModule().getCodeName()?lower_case}.service.I${der.getMajorPSDataEntity().getCodeName()}Service ${srfcaseformat(der.getMajorPSDataEntity().getCodeName(),'l_u2lC')}Service = this;
<#else> <#else>
@Autowired @Autowired
@Lazy @Lazy
private ${pub.getPKGCodeName()}.core.${der.getMajorPSDataEntity().getPSSystemModule().getCodeName()?lower_case}.service.I${der.getMajorPSDataEntity().getCodeName()}Service ${srfcaseformat(der.getMajorPSDataEntity().getCodeName(),'l_u2lC')}Service; protected ${pub.getPKGCodeName()}.core.${der.getMajorPSDataEntity().getPSSystemModule().getCodeName()?lower_case}.service.I${der.getMajorPSDataEntity().getCodeName()}Service ${srfcaseformat(der.getMajorPSDataEntity().getCodeName(),'l_u2lC')}Service;
</#if> </#if>
</#if> </#if>
</#if> </#if>
...@@ -148,14 +148,16 @@ public class ${item.getCodeName()}ServiceImpl extends ServiceImpl<${de.getCodeNa ...@@ -148,14 +148,16 @@ public class ${item.getCodeName()}ServiceImpl extends ServiceImpl<${de.getCodeNa
<#comment>实体行为附加逻辑</#comment> <#comment>实体行为附加逻辑</#comment>
<#if deAction.getPSDEActionLogics()??> <#if deAction.getPSDEActionLogics()??>
<#list deAction.getPSDEActionLogics() as deActionLogic> <#list deAction.getPSDEActionLogics() as deActionLogic>
<#if deActionLogic.isInternalLogic()>
<#assign deLogic=deActionLogic.getPSDELogic()> <#assign deLogic=deActionLogic.getPSDELogic()>
<@importDELogic deLogic /> <@importDELogic deLogic />
</#if>
</#list> </#list>
</#if> </#if>
</#list> </#list>
</#if> </#if>
private int batchSize = 500; protected int batchSize = 500;
<#comment>输出实体行为</#comment> <#comment>输出实体行为</#comment>
<#if item.getAllPSDEActions()??> <#if item.getAllPSDEActions()??>
...@@ -168,6 +170,8 @@ ${deaction.getRender().code} ...@@ -168,6 +170,8 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) { public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "usercustom"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
//自定义代码 //自定义代码
...@@ -180,6 +184,8 @@ ${deaction.getRender().code} ...@@ -180,6 +184,8 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) { public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "delogic"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
${deaction.getPSDELogic().getCodeName()?lower_case}Logic.execute(et); ${deaction.getPSDELogic().getCodeName()?lower_case}Logic.execute(et);
...@@ -192,6 +198,8 @@ ${deaction.getRender().code} ...@@ -192,6 +198,8 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public ${item.getCodeName()} get(${srfjavatype(keyfield.stdDataType)} key) { public ${item.getCodeName()} get(${srfjavatype(keyfield.stdDataType)} key) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "get"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@buildEntityParam deaction/> <@buildEntityParam deaction/>
<@addGetActionBoforeLogic deaction/> <@addGetActionBoforeLogic deaction/>
...@@ -239,6 +247,8 @@ ${deaction.getRender().code} ...@@ -239,6 +247,8 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public boolean create(${item.getCodeName()} et) { public boolean create(${item.getCodeName()} et) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "create"/>
<#if hasMinorPSDERs gt 0> <#if hasMinorPSDERs gt 0>
fillParentData(et); fillParentData(et);
</#if> </#if>
...@@ -286,6 +296,8 @@ ${deaction.getRender().code} ...@@ -286,6 +296,8 @@ ${deaction.getRender().code}
@Override @Override
public void createBatch(List<${item.getCodeName()}> list) { public void createBatch(List<${item.getCodeName()}> list) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "createBatch"/>
<#if hasMinorPSDERs gt 0> <#if hasMinorPSDERs gt 0>
list.forEach(item->fillParentData(item)); list.forEach(item->fillParentData(item));
</#if> </#if>
...@@ -305,6 +317,8 @@ ${deaction.getRender().code} ...@@ -305,6 +317,8 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public boolean update(${item.getCodeName()} et) { public boolean update(${item.getCodeName()} et) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "update"/>
<#if hasMinorPSDERs gt 0> <#if hasMinorPSDERs gt 0>
fillParentData(et); fillParentData(et);
</#if> </#if>
...@@ -356,6 +370,8 @@ ${deaction.getRender().code} ...@@ -356,6 +370,8 @@ ${deaction.getRender().code}
@Override @Override
public void updateBatch(List<${item.getCodeName()}> list) { public void updateBatch(List<${item.getCodeName()}> list) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "updateBatch"/>
<#if hasMinorPSDERs gt 0> <#if hasMinorPSDERs gt 0>
list.forEach(item->fillParentData(item)); list.forEach(item->fillParentData(item));
</#if> </#if>
...@@ -370,6 +386,8 @@ ${deaction.getRender().code} ...@@ -370,6 +386,8 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public boolean save(${item.getCodeName()} et) { public boolean save(${item.getCodeName()} et) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "save"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
if(!saveOrUpdate(et)) if(!saveOrUpdate(et))
...@@ -384,6 +402,8 @@ ${deaction.getRender().code} ...@@ -384,6 +402,8 @@ ${deaction.getRender().code}
rollbackFor = {Exception.class} rollbackFor = {Exception.class}
) )
public boolean saveOrUpdate(${item.getCodeName()} et) { public boolean saveOrUpdate(${item.getCodeName()} et) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "saveOrUpdate"/>
if (null == et) { if (null == et) {
return false; return false;
} else { } else {
...@@ -393,6 +413,8 @@ ${deaction.getRender().code} ...@@ -393,6 +413,8 @@ ${deaction.getRender().code}
@Override @Override
public boolean saveBatch(Collection<${item.getCodeName()}> list) { public boolean saveBatch(Collection<${item.getCodeName()}> list) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "saveBatch"/>
<#if hasMinorPSDERs gt 0> <#if hasMinorPSDERs gt 0>
list.forEach(item->fillParentData(item)); list.forEach(item->fillParentData(item));
</#if> </#if>
...@@ -402,6 +424,8 @@ ${deaction.getRender().code} ...@@ -402,6 +424,8 @@ ${deaction.getRender().code}
@Override @Override
public void saveBatch(List<${item.getCodeName()}> list) { public void saveBatch(List<${item.getCodeName()}> list) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "saveBatch"/>
<#if hasMinorPSDERs gt 0> <#if hasMinorPSDERs gt 0>
list.forEach(item->fillParentData(item)); list.forEach(item->fillParentData(item));
</#if> </#if>
...@@ -412,6 +436,8 @@ ${deaction.getRender().code} ...@@ -412,6 +436,8 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public boolean remove(${srfjavatype(keyfield.stdDataType)} key) { public boolean remove(${srfjavatype(keyfield.stdDataType)} key) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "remove"/>
<#comment>附加数据逻辑-操作前,通过key构造entity传入逻辑中</#comment> <#comment>附加数据逻辑-操作前,通过key构造entity传入逻辑中</#comment>
<@buildEntityParam deaction/> <@buildEntityParam deaction/>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
...@@ -442,6 +468,8 @@ ${deaction.getRender().code} ...@@ -442,6 +468,8 @@ ${deaction.getRender().code}
@Override @Override
public void removeBatch(Collection<${srfjavatype(keyfield.stdDataType)}> idList) { public void removeBatch(Collection<${srfjavatype(keyfield.stdDataType)}> idList) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "removeBatch"/>
<#if hasPSDERsMapping> <#if hasPSDERsMapping>
List<${item.getCodeName()}> entities= baseMapper.selectBatchIds(idList); List<${item.getCodeName()}> entities= baseMapper.selectBatchIds(idList);
</#if> </#if>
...@@ -455,6 +483,8 @@ ${deaction.getRender().code} ...@@ -455,6 +483,8 @@ ${deaction.getRender().code}
<#elseif deaction.getCodeName()?lower_case == "getdraft"> <#elseif deaction.getCodeName()?lower_case == "getdraft">
@Override @Override
public ${item.getCodeName()} getDraft(${item.getCodeName()} et) { public ${item.getCodeName()} getDraft(${item.getCodeName()} et) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "getdraft"/>
<#if hasMinorPSDERs gt 0> <#if hasMinorPSDERs gt 0>
fillParentData(et); fillParentData(et);
</#if> </#if>
...@@ -468,6 +498,8 @@ ${deaction.getRender().code} ...@@ -468,6 +498,8 @@ ${deaction.getRender().code}
<#elseif deaction.getCodeName()?lower_case == "checkkey"> <#elseif deaction.getCodeName()?lower_case == "checkkey">
@Override @Override
public boolean checkKey(${item.getCodeName()} et) { public boolean checkKey(${item.getCodeName()} et) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "checkkey"/>
return (!ObjectUtils.isEmpty(et.get${srfcaseformat(keyfield.codeName,'l_u2lC')?cap_first}()))&&(!Objects.isNull(this.getById(et.get${srfcaseformat(keyfield.codeName,'l_u2lC')?cap_first}()))); return (!ObjectUtils.isEmpty(et.get${srfcaseformat(keyfield.codeName,'l_u2lC')?cap_first}()))&&(!Objects.isNull(this.getById(et.get${srfcaseformat(keyfield.codeName,'l_u2lC')?cap_first}())));
} }
<#comment>用户扩展新建、更新</#comment> <#comment>用户扩展新建、更新</#comment>
...@@ -475,6 +507,8 @@ ${deaction.getRender().code} ...@@ -475,6 +507,8 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) { public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "userex"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
<#comment>附加实体行为参数</#comment> <#comment>附加实体行为参数</#comment>
...@@ -487,6 +521,8 @@ ${deaction.getRender().code} ...@@ -487,6 +521,8 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) { public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) {
<#comment>输出测试行为</#comment>
<@outputTestAction deaction "other"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
<#comment>附加数据逻辑-操作后</#comment> <#comment>附加数据逻辑-操作后</#comment>
...@@ -496,6 +532,8 @@ ${deaction.getRender().code} ...@@ -496,6 +532,8 @@ ${deaction.getRender().code}
} }
</#if> </#if>
<#comment>输出测试实体行为</#comment>
<@outputTestActionDetail deaction/>
</#if> </#if>
</#if> </#if>
</#list> </#list>
...@@ -753,7 +791,7 @@ ${deaction.getRender().code} ...@@ -753,7 +791,7 @@ ${deaction.getRender().code}
<#if !P.exists('DER1N',majorIndexDECodeName)> <#if !P.exists('DER1N',majorIndexDECodeName)>
@Autowired @Autowired
@Lazy @Lazy
private ${pub.getPKGCodeName()}.core.${majorIndexDE.getPSSystemModule().getCodeName()?lower_case}.service.I${majorIndexDECodeName}Service ${srfcaseformat(majorIndexDECodeName,'l_u2lC')}Service; protected ${pub.getPKGCodeName()}.core.${majorIndexDE.getPSSystemModule().getCodeName()?lower_case}.service.I${majorIndexDECodeName}Service ${srfcaseformat(majorIndexDECodeName,'l_u2lC')}Service;
</#if> </#if>
/** /**
...@@ -835,7 +873,7 @@ import com.mongodb.QueryBuilder; ...@@ -835,7 +873,7 @@ import com.mongodb.QueryBuilder;
public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Service { public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Service {
@Autowired @Autowired
private ${item.getCodeName()}Repository repository; protected ${item.getCodeName()}Repository repository;
<#assign keyfield=de.getKeyPSDEField()> <#assign keyfield=de.getKeyPSDEField()>
<#comment>引入关联依赖</#comment> <#comment>引入关联依赖</#comment>
...@@ -845,7 +883,7 @@ public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Ser ...@@ -845,7 +883,7 @@ public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Ser
<#if !P.exists('DEMinorPSDataEntity',der.getMinorPSDataEntity().getCodeName())> <#if !P.exists('DEMinorPSDataEntity',der.getMinorPSDataEntity().getCodeName())>
@Autowired @Autowired
@Lazy @Lazy
private ${pub.getPKGCodeName()}.core.${der.getMinorPSDataEntity().getPSSystemModule().getCodeName()?lower_case}.service.I${der.getMinorPSDataEntity().getCodeName()}Service ${srfcaseformat(der.getMinorPSDataEntity().getCodeName(),'l_u2lC')}Service; protected ${pub.getPKGCodeName()}.core.${der.getMinorPSDataEntity().getPSSystemModule().getCodeName()?lower_case}.service.I${der.getMinorPSDataEntity().getCodeName()}Service ${srfcaseformat(der.getMinorPSDataEntity().getCodeName(),'l_u2lC')}Service;
</#if> </#if>
</#if> </#if>
</#list> </#list>
...@@ -861,8 +899,10 @@ public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Ser ...@@ -861,8 +899,10 @@ public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Ser
<#comment>实体行为附加逻辑</#comment> <#comment>实体行为附加逻辑</#comment>
<#if deAction.getPSDEActionLogics()??> <#if deAction.getPSDEActionLogics()??>
<#list deAction.getPSDEActionLogics() as deActionLogic> <#list deAction.getPSDEActionLogics() as deActionLogic>
<#if deActionLogic.isInternalLogic()>
<#assign deLogic=deActionLogic.getPSDELogic()> <#assign deLogic=deActionLogic.getPSDELogic()>
<@importDELogic deLogic /> <@importDELogic deLogic />
</#if>
</#list> </#list>
</#if> </#if>
</#list> </#list>
...@@ -879,6 +919,7 @@ ${deaction.getRender().code} ...@@ -879,6 +919,7 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) { public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) {
<@outputTestAction deaction "usercustom"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
//自定义代码 //自定义代码
...@@ -891,6 +932,7 @@ ${deaction.getRender().code} ...@@ -891,6 +932,7 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) { public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) {
<@outputTestAction deaction "delogic"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
${deaction.getPSDELogic().getCodeName()?lower_case}Logic.execute(et); ${deaction.getPSDELogic().getCodeName()?lower_case}Logic.execute(et);
...@@ -903,6 +945,7 @@ ${deaction.getRender().code} ...@@ -903,6 +945,7 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public ${item.getCodeName()} get(${srfjavatype(keyfield.stdDataType)} key) { public ${item.getCodeName()} get(${srfjavatype(keyfield.stdDataType)} key) {
<@outputTestAction deaction "get"/>
<@buildEntityParam deaction/> <@buildEntityParam deaction/>
<@addGetActionBoforeLogic deaction/> <@addGetActionBoforeLogic deaction/>
Optional<${item.getCodeName()}> result = repository.findById(key); Optional<${item.getCodeName()}> result = repository.findById(key);
...@@ -951,6 +994,7 @@ ${deaction.getRender().code} ...@@ -951,6 +994,7 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public boolean create(${item.getCodeName()} et) { public boolean create(${item.getCodeName()} et) {
<@outputTestAction deaction "create"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
repository.insert(et); repository.insert(et);
...@@ -987,6 +1031,7 @@ ${deaction.getRender().code} ...@@ -987,6 +1031,7 @@ ${deaction.getRender().code}
@Override @Override
public void createBatch(List<${item.getCodeName()}> list) { public void createBatch(List<${item.getCodeName()}> list) {
<@outputTestAction deaction "createBatch"/>
<#comment>联合主键,走SaveOrUpdateBatch,防止因主键冲突导致后续数据无法保存</#comment> <#comment>联合主键,走SaveOrUpdateBatch,防止因主键冲突导致后续数据无法保存</#comment>
<#if item.getUnionKeyValuePSDEFields()??> <#if item.getUnionKeyValuePSDEFields()??>
repository.saveAll(list); repository.saveAll(list);
...@@ -999,6 +1044,7 @@ ${deaction.getRender().code} ...@@ -999,6 +1044,7 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public boolean update(${item.getCodeName()} et) { public boolean update(${item.getCodeName()} et) {
<@outputTestAction deaction "update"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
<#if de.getKeyPSDEField()??> <#if de.getKeyPSDEField()??>
...@@ -1039,6 +1085,7 @@ ${deaction.getRender().code} ...@@ -1039,6 +1085,7 @@ ${deaction.getRender().code}
@Override @Override
public void updateBatch(List<${item.getCodeName()}> list) { public void updateBatch(List<${item.getCodeName()}> list) {
<@outputTestAction deaction "updateBatch"/>
repository.saveAll(list); repository.saveAll(list);
} }
...@@ -1046,6 +1093,7 @@ ${deaction.getRender().code} ...@@ -1046,6 +1093,7 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public boolean save(${item.getCodeName()} et) { public boolean save(${item.getCodeName()} et) {
<@outputTestAction deaction "save"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
<#if de.getKeyPSDEField()??> <#if de.getKeyPSDEField()??>
...@@ -1087,6 +1135,7 @@ ${deaction.getRender().code} ...@@ -1087,6 +1135,7 @@ ${deaction.getRender().code}
@Override @Override
public void saveBatch(List<${item.getCodeName()}> list) { public void saveBatch(List<${item.getCodeName()}> list) {
<@outputTestAction deaction "saveBatch"/>
repository.saveAll(list); repository.saveAll(list);
} }
...@@ -1094,6 +1143,7 @@ ${deaction.getRender().code} ...@@ -1094,6 +1143,7 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public boolean remove(${srfjavatype(keyfield.stdDataType)} key) { public boolean remove(${srfjavatype(keyfield.stdDataType)} key) {
<@outputTestAction deaction "remove"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@buildEntityParam deaction/> <@buildEntityParam deaction/>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
...@@ -1114,12 +1164,14 @@ ${deaction.getRender().code} ...@@ -1114,12 +1164,14 @@ ${deaction.getRender().code}
@Override @Override
public void removeBatch(Collection<${srfjavatype(keyfield.stdDataType)}> idList) { public void removeBatch(Collection<${srfjavatype(keyfield.stdDataType)}> idList) {
<@outputTestAction deaction "removeBatch"/>
repository.deleteAll(repository.findAllById(idList)); repository.deleteAll(repository.findAllById(idList));
} }
<#elseif deaction.getCodeName()?lower_case == "getdraft"> <#elseif deaction.getCodeName()?lower_case == "getdraft">
@Override @Override
public ${item.getCodeName()} getDraft(${item.getCodeName()} et) { public ${item.getCodeName()} getDraft(${item.getCodeName()} et) {
<@outputTestAction deaction "getdraft"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
<#comment>附加数据逻辑-操作后</#comment> <#comment>附加数据逻辑-操作后</#comment>
...@@ -1130,6 +1182,7 @@ ${deaction.getRender().code} ...@@ -1130,6 +1182,7 @@ ${deaction.getRender().code}
<#elseif deaction.getCodeName()?lower_case == "checkkey"> <#elseif deaction.getCodeName()?lower_case == "checkkey">
@Override @Override
public boolean checkKey(${item.getCodeName()} et) { public boolean checkKey(${item.getCodeName()} et) {
<@outputTestAction deaction "checkkey"/>
return repository.findById(et.get${srfcaseformat(keyfield.codeName,'l_u2lC')?cap_first}()).isPresent(); return repository.findById(et.get${srfcaseformat(keyfield.codeName,'l_u2lC')?cap_first}()).isPresent();
} }
...@@ -1137,7 +1190,7 @@ ${deaction.getRender().code} ...@@ -1137,7 +1190,7 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) { public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) {
//自定义代码 <@outputTestAction deaction "other"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
<#comment>附加数据逻辑-操作后</#comment> <#comment>附加数据逻辑-操作后</#comment>
...@@ -1146,6 +1199,8 @@ ${deaction.getRender().code} ...@@ -1146,6 +1199,8 @@ ${deaction.getRender().code}
} }
</#if> </#if>
<#comment>输出测试实体行为</#comment>
<@outputTestActionDetail deaction/>
</#if> </#if>
</#if> </#if>
</#list> </#list>
...@@ -1233,7 +1288,7 @@ ${deaction.getRender().code} ...@@ -1233,7 +1288,7 @@ ${deaction.getRender().code}
@Resource @Resource
private MongoTemplate mongoTemplate; protected MongoTemplate mongoTemplate;
<#comment>输出数据查询</#comment> <#comment>输出数据查询</#comment>
<#if item.getAllPSDEDataSets()??> <#if item.getAllPSDEDataSets()??>
...@@ -1311,7 +1366,7 @@ public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Ser ...@@ -1311,7 +1366,7 @@ public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Ser
<#if !P.exists('DEMinorPSDataEntity',der.getMinorPSDataEntity().getCodeName())> <#if !P.exists('DEMinorPSDataEntity',der.getMinorPSDataEntity().getCodeName())>
@Autowired @Autowired
@Lazy @Lazy
private ${pub.getPKGCodeName()}.core.${der.getMinorPSDataEntity().getPSSystemModule().getCodeName()?lower_case}.service.I${der.getMinorPSDataEntity().getCodeName()}Service ${srfcaseformat(der.getMinorPSDataEntity().getCodeName(),'l_u2lC')}Service; protected ${pub.getPKGCodeName()}.core.${der.getMinorPSDataEntity().getPSSystemModule().getCodeName()?lower_case}.service.I${der.getMinorPSDataEntity().getCodeName()}Service ${srfcaseformat(der.getMinorPSDataEntity().getCodeName(),'l_u2lC')}Service;
</#if> </#if>
</#if> </#if>
</#list> </#list>
...@@ -1328,6 +1383,7 @@ ${deaction.getRender().code} ...@@ -1328,6 +1383,7 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) { public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) {
<@outputTestAction deaction "usercustom"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
//自定义代码 //自定义代码
...@@ -1340,6 +1396,7 @@ ${deaction.getRender().code} ...@@ -1340,6 +1396,7 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) { public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) {
<@outputTestAction deaction "delogic"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
${deaction.getPSDELogic().getCodeName()?lower_case}Logic.execute(et); ${deaction.getPSDELogic().getCodeName()?lower_case}Logic.execute(et);
...@@ -1351,6 +1408,7 @@ ${deaction.getRender().code} ...@@ -1351,6 +1408,7 @@ ${deaction.getRender().code}
<#elseif deaction.getCodeName()?lower_case == 'get'> <#elseif deaction.getCodeName()?lower_case == 'get'>
@Override @Override
public ${item.getCodeName()} get(${srfjavatype(keyfield.stdDataType)} ${keyfield.getCodeName()?lower_case}) { public ${item.getCodeName()} get(${srfjavatype(keyfield.stdDataType)} ${keyfield.getCodeName()?lower_case}) {
<@outputTestAction deaction "get"/>
<#if item.isEnableAPIStorage()> <#if item.isEnableAPIStorage()>
<#if deaction.getPSSubSysServiceAPIDEMethod()?? > <#if deaction.getPSSubSysServiceAPIDEMethod()?? >
<#--<#comment>附加数据逻辑-操作前</#comment>--> <#--<#comment>附加数据逻辑-操作前</#comment>-->
...@@ -1403,6 +1461,7 @@ ${deaction.getRender().code} ...@@ -1403,6 +1461,7 @@ ${deaction.getRender().code}
<#elseif deaction.getCodeName()?lower_case == "create"> <#elseif deaction.getCodeName()?lower_case == "create">
@Override @Override
public boolean create(${item.getCodeName()} et) { public boolean create(${item.getCodeName()} et) {
<@outputTestAction deaction "create"/>
<#if item.isEnableAPIStorage()> <#if item.isEnableAPIStorage()>
<#if deaction.getPSSubSysServiceAPIDEMethod()?? > <#if deaction.getPSSubSysServiceAPIDEMethod()?? >
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
...@@ -1448,6 +1507,7 @@ ${deaction.getRender().code} ...@@ -1448,6 +1507,7 @@ ${deaction.getRender().code}
} }
public void createBatch(List<${item.codeName}> list){ public void createBatch(List<${item.codeName}> list){
<@outputTestAction deaction "createBatch"/>
<#if item.isEnableAPIStorage()> <#if item.isEnableAPIStorage()>
<#if deaction.getPSSubSysServiceAPIDEMethod()?? > <#if deaction.getPSSubSysServiceAPIDEMethod()?? >
${subSysServiceApiDECodeName?uncap_first}FeignClient.createBatch(list) ; ${subSysServiceApiDECodeName?uncap_first}FeignClient.createBatch(list) ;
...@@ -1458,6 +1518,7 @@ ${deaction.getRender().code} ...@@ -1458,6 +1518,7 @@ ${deaction.getRender().code}
<#elseif deaction.getCodeName()?lower_case == "update"> <#elseif deaction.getCodeName()?lower_case == "update">
@Override @Override
public boolean update(${item.getCodeName()} et) { public boolean update(${item.getCodeName()} et) {
<@outputTestAction deaction "update"/>
<#if item.isEnableAPIStorage()> <#if item.isEnableAPIStorage()>
<#if deaction.getPSSubSysServiceAPIDEMethod()?? > <#if deaction.getPSSubSysServiceAPIDEMethod()?? >
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
...@@ -1504,6 +1565,7 @@ ${deaction.getRender().code} ...@@ -1504,6 +1565,7 @@ ${deaction.getRender().code}
} }
public void updateBatch(List<${item.codeName}> list){ public void updateBatch(List<${item.codeName}> list){
<@outputTestAction deaction "updateBatch"/>
<#if item.isEnableAPIStorage()> <#if item.isEnableAPIStorage()>
<#if deaction.getPSSubSysServiceAPIDEMethod()?? > <#if deaction.getPSSubSysServiceAPIDEMethod()?? >
${subSysServiceApiDECodeName?uncap_first}FeignClient.updateBatch(list) ; ${subSysServiceApiDECodeName?uncap_first}FeignClient.updateBatch(list) ;
...@@ -1515,6 +1577,7 @@ ${deaction.getRender().code} ...@@ -1515,6 +1577,7 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public boolean save(${item.getCodeName()} et) { public boolean save(${item.getCodeName()} et) {
<@outputTestAction deaction "save"/>
<#if item.isEnableAPIStorage()> <#if item.isEnableAPIStorage()>
<#if deaction.getPSSubSysServiceAPIDEMethod()?? > <#if deaction.getPSSubSysServiceAPIDEMethod()?? >
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
...@@ -1560,6 +1623,7 @@ ${deaction.getRender().code} ...@@ -1560,6 +1623,7 @@ ${deaction.getRender().code}
@Override @Override
public void saveBatch(List<${item.getCodeName()}> list) { public void saveBatch(List<${item.getCodeName()}> list) {
<@outputTestAction deaction "saveBatch"/>
<#if item.isEnableAPIStorage()> <#if item.isEnableAPIStorage()>
<#if deaction.getPSSubSysServiceAPIDEMethod()?? > <#if deaction.getPSSubSysServiceAPIDEMethod()?? >
${subSysServiceApiDECodeName?uncap_first}FeignClient.saveBatch(list) ; ${subSysServiceApiDECodeName?uncap_first}FeignClient.saveBatch(list) ;
...@@ -1570,6 +1634,7 @@ ${deaction.getRender().code} ...@@ -1570,6 +1634,7 @@ ${deaction.getRender().code}
<#elseif deaction.getCodeName()?lower_case == "remove"> <#elseif deaction.getCodeName()?lower_case == "remove">
@Override @Override
public boolean remove(${srfjavatype(keyfield.stdDataType)} ${keyfield.getCodeName()?lower_case}) { public boolean remove(${srfjavatype(keyfield.stdDataType)} ${keyfield.getCodeName()?lower_case}) {
<@outputTestAction deaction "remove"/>
<#if de.getMajorPSDERs()??> <#if de.getMajorPSDERs()??>
<#list de.getMajorPSDERs() as der> <#list de.getMajorPSDERs() as der>
<#if der.getDERType() =='DER1N' && der.isNestedRS() && der.getMinorPSDataEntity()?? && (der.getMinorPSDataEntity().getStorageMode()==1||der.getMinorPSDataEntity().getStorageMode()==2) > <#if der.getDERType() =='DER1N' && der.isNestedRS() && der.getMinorPSDataEntity()?? && (der.getMinorPSDataEntity().getStorageMode()==1||der.getMinorPSDataEntity().getStorageMode()==2) >
...@@ -1597,6 +1662,7 @@ ${deaction.getRender().code} ...@@ -1597,6 +1662,7 @@ ${deaction.getRender().code}
} }
public void removeBatch(Collection<${srfjavatype(keyfield.stdDataType)}> idList){ public void removeBatch(Collection<${srfjavatype(keyfield.stdDataType)}> idList){
<@outputTestAction deaction "removeBatch"/>
<#if item.isEnableAPIStorage()> <#if item.isEnableAPIStorage()>
<#if deaction.getPSSubSysServiceAPIDEMethod()?? > <#if deaction.getPSSubSysServiceAPIDEMethod()?? >
${subSysServiceApiDECodeName?uncap_first}FeignClient.removeBatch(idList); ${subSysServiceApiDECodeName?uncap_first}FeignClient.removeBatch(idList);
...@@ -1607,6 +1673,7 @@ ${deaction.getRender().code} ...@@ -1607,6 +1673,7 @@ ${deaction.getRender().code}
<#elseif deaction.getCodeName()?lower_case == "getdraft"> <#elseif deaction.getCodeName()?lower_case == "getdraft">
@Override @Override
public ${item.getCodeName()} getDraft(${item.getCodeName()} et) { public ${item.getCodeName()} getDraft(${item.getCodeName()} et) {
<@outputTestAction deaction "getdraft"/>
<#if item.isEnableAPIStorage()> <#if item.isEnableAPIStorage()>
<#if deaction.getPSSubSysServiceAPIDEMethod()?? > <#if deaction.getPSSubSysServiceAPIDEMethod()?? >
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
...@@ -1626,6 +1693,7 @@ ${deaction.getRender().code} ...@@ -1626,6 +1693,7 @@ ${deaction.getRender().code}
<#elseif deaction.getCodeName()?lower_case == "checkkey"> <#elseif deaction.getCodeName()?lower_case == "checkkey">
@Override @Override
public boolean checkKey(${item.getCodeName()} et) { public boolean checkKey(${item.getCodeName()} et) {
<@outputTestAction deaction "checkkey"/>
<#if item.isEnableAPIStorage()> <#if item.isEnableAPIStorage()>
<#if deaction.getPSSubSysServiceAPIDEMethod()?? > <#if deaction.getPSSubSysServiceAPIDEMethod()?? >
return ${subSysServiceApiDECodeName?uncap_first}FeignClient.checkKey(et); return ${subSysServiceApiDECodeName?uncap_first}FeignClient.checkKey(et);
...@@ -1639,6 +1707,7 @@ ${deaction.getRender().code} ...@@ -1639,6 +1707,7 @@ ${deaction.getRender().code}
<#else> <#else>
@Override @Override
public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) { public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) {
<@outputTestAction deaction "other"/>
<#if item.isEnableAPIStorage()> <#if item.isEnableAPIStorage()>
<#if deaction.getPSSubSysServiceAPIDEMethod()?? > <#if deaction.getPSSubSysServiceAPIDEMethod()?? >
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
...@@ -1650,11 +1719,13 @@ ${deaction.getRender().code} ...@@ -1650,11 +1719,13 @@ ${deaction.getRender().code}
<#else> <#else>
return null; return null;
</#if> </#if>
<#else> <#else>
return null; return null;
</#if> </#if>
} }
</#if> </#if>
<#comment>输出测试实体行为</#comment>
<@outputTestActionDetail deaction/>
</#if> </#if>
</#if> </#if>
</#list> </#list>
...@@ -1788,7 +1859,7 @@ public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Ser ...@@ -1788,7 +1859,7 @@ public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Ser
<#if !P.exists('DEMinorPSDataEntity',der.getMinorPSDataEntity().getCodeName())> <#if !P.exists('DEMinorPSDataEntity',der.getMinorPSDataEntity().getCodeName())>
@Autowired @Autowired
@Lazy @Lazy
private ${pub.getPKGCodeName()}.core.${der.getMinorPSDataEntity().getPSSystemModule().getCodeName()?lower_case}.service.I${der.getMinorPSDataEntity().getCodeName()}Service ${srfcaseformat(der.getMinorPSDataEntity().getCodeName(),'l_u2lC')}Service; protected ${pub.getPKGCodeName()}.core.${der.getMinorPSDataEntity().getPSSystemModule().getCodeName()?lower_case}.service.I${der.getMinorPSDataEntity().getCodeName()}Service ${srfcaseformat(der.getMinorPSDataEntity().getCodeName(),'l_u2lC')}Service;
</#if> </#if>
</#if> </#if>
</#list> </#list>
...@@ -1804,8 +1875,10 @@ public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Ser ...@@ -1804,8 +1875,10 @@ public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Ser
<#comment>实体行为附加逻辑</#comment> <#comment>实体行为附加逻辑</#comment>
<#if deAction.getPSDEActionLogics()??> <#if deAction.getPSDEActionLogics()??>
<#list deAction.getPSDEActionLogics() as deActionLogic> <#list deAction.getPSDEActionLogics() as deActionLogic>
<#if deActionLogic.isInternalLogic()>
<#assign deLogic=deActionLogic.getPSDELogic()> <#assign deLogic=deActionLogic.getPSDELogic()>
<@importDELogic deLogic /> <@importDELogic deLogic />
</#if>
</#list> </#list>
</#if> </#if>
</#list> </#list>
...@@ -1822,6 +1895,7 @@ ${deaction.getRender().code} ...@@ -1822,6 +1895,7 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) { public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) {
<@outputTestAction deaction "usercustom"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
//自定义代码 //自定义代码
...@@ -1834,6 +1908,7 @@ ${deaction.getRender().code} ...@@ -1834,6 +1908,7 @@ ${deaction.getRender().code}
@Override @Override
@Transactional @Transactional
public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) { public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) {
<@outputTestAction deaction "delogic"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
${deaction.getPSDELogic().getCodeName()?lower_case}Logic.execute(et); ${deaction.getPSDELogic().getCodeName()?lower_case}Logic.execute(et);
...@@ -1845,6 +1920,7 @@ ${deaction.getRender().code} ...@@ -1845,6 +1920,7 @@ ${deaction.getRender().code}
<#elseif deaction.getCodeName()?lower_case == 'get'> <#elseif deaction.getCodeName()?lower_case == 'get'>
@Override @Override
public ${item.getCodeName()} get(${srfjavatype(keyfield.stdDataType)} key) { public ${item.getCodeName()} get(${srfjavatype(keyfield.stdDataType)} key) {
<@outputTestAction deaction "get"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@buildEntityParam deaction/> <@buildEntityParam deaction/>
<@addGetActionBoforeLogic deaction/> <@addGetActionBoforeLogic deaction/>
...@@ -1862,6 +1938,7 @@ ${deaction.getRender().code} ...@@ -1862,6 +1938,7 @@ ${deaction.getRender().code}
<#elseif deaction.getCodeName()?lower_case == "create"> <#elseif deaction.getCodeName()?lower_case == "create">
@Override @Override
public boolean create(${item.getCodeName()} et) { public boolean create(${item.getCodeName()} et) {
<@outputTestAction deaction "create"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
//代码实现 //代码实现
...@@ -1871,12 +1948,13 @@ ${deaction.getRender().code} ...@@ -1871,12 +1948,13 @@ ${deaction.getRender().code}
} }
public void createBatch(List<${item.codeName}> list){ public void createBatch(List<${item.codeName}> list){
<@outputTestAction deaction "createBatch"/>
} }
<#elseif deaction.getCodeName()?lower_case == "update"> <#elseif deaction.getCodeName()?lower_case == "update">
@Override @Override
public boolean update(${item.getCodeName()} et) { public boolean update(${item.getCodeName()} et) {
<@outputTestAction deaction "update"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
//代码实现 //代码实现
...@@ -1886,13 +1964,14 @@ ${deaction.getRender().code} ...@@ -1886,13 +1964,14 @@ ${deaction.getRender().code}
} }
public void updateBatch(List<${item.codeName}> list){ public void updateBatch(List<${item.codeName}> list){
<@outputTestAction deaction "updateBatch"/>
} }
<#elseif deaction.getCodeName()?lower_case == "save"> <#elseif deaction.getCodeName()?lower_case == "save">
@Override @Override
@Transactional @Transactional
public boolean save(${item.getCodeName()} et) { public boolean save(${item.getCodeName()} et) {
<@outputTestAction deaction "save"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
//代码实现 //代码实现
...@@ -1903,12 +1982,13 @@ ${deaction.getRender().code} ...@@ -1903,12 +1982,13 @@ ${deaction.getRender().code}
@Override @Override
public void saveBatch(List<${item.getCodeName()}> list) { public void saveBatch(List<${item.getCodeName()}> list) {
<@outputTestAction deaction "saveBatch"/>
} }
<#elseif deaction.getCodeName()?lower_case == "remove"> <#elseif deaction.getCodeName()?lower_case == "remove">
@Override @Override
public boolean remove(${srfjavatype(keyfield.stdDataType)} key) { public boolean remove(${srfjavatype(keyfield.stdDataType)} key) {
<@outputTestAction deaction "remove"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@buildEntityParam deaction/> <@buildEntityParam deaction/>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
...@@ -1918,12 +1998,13 @@ ${deaction.getRender().code} ...@@ -1918,12 +1998,13 @@ ${deaction.getRender().code}
} }
public void removeBatch(Collection<${srfjavatype(keyfield.stdDataType)}> idList){ public void removeBatch(Collection<${srfjavatype(keyfield.stdDataType)}> idList){
<@outputTestAction deaction "removeBatch"/>
} }
<#elseif deaction.getCodeName()?lower_case == "getdraft"> <#elseif deaction.getCodeName()?lower_case == "getdraft">
@Override @Override
public ${item.getCodeName()} getDraft(${item.getCodeName()} et) { public ${item.getCodeName()} getDraft(${item.getCodeName()} et) {
<@outputTestAction deaction "getdraft"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
<#comment>附加数据逻辑-操作后</#comment> <#comment>附加数据逻辑-操作后</#comment>
...@@ -1934,6 +2015,7 @@ ${deaction.getRender().code} ...@@ -1934,6 +2015,7 @@ ${deaction.getRender().code}
<#elseif deaction.getCodeName()?lower_case == "checkkey"> <#elseif deaction.getCodeName()?lower_case == "checkkey">
@Override @Override
public boolean checkKey(${item.getCodeName()} et) { public boolean checkKey(${item.getCodeName()} et) {
<@outputTestAction deaction "checkkey"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
<#comment>附加数据逻辑-操作后</#comment> <#comment>附加数据逻辑-操作后</#comment>
...@@ -1943,6 +2025,7 @@ ${deaction.getRender().code} ...@@ -1943,6 +2025,7 @@ ${deaction.getRender().code}
<#else> <#else>
@Override @Override
public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) { public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) {
<@outputTestAction deaction "other"/>
<#comment>附加数据逻辑-操作前</#comment> <#comment>附加数据逻辑-操作前</#comment>
<@addBoforeLogic deaction/> <@addBoforeLogic deaction/>
<#comment>附加数据逻辑-操作后</#comment> <#comment>附加数据逻辑-操作后</#comment>
...@@ -1950,6 +2033,8 @@ ${deaction.getRender().code} ...@@ -1950,6 +2033,8 @@ ${deaction.getRender().code}
return et; return et;
} }
</#if> </#if>
<#comment>输出测试实体行为</#comment>
<@outputTestActionDetail deaction/>
</#if> </#if>
</#if> </#if>
</#list> </#list>
...@@ -2118,7 +2203,7 @@ ${deaction.getRender().code} ...@@ -2118,7 +2203,7 @@ ${deaction.getRender().code}
@Autowired @Autowired
@Lazy @Lazy
private ${pub.getPKGCodeName()}.core.${de.getPSSystemModule().getCodeName()?lower_case}.service.logic.I${de.getCodeName()}${deLogic.codeName}Logic ${deLogic.getCodeName()?lower_case}Logic; protected ${pub.getPKGCodeName()}.core.${de.getPSSystemModule().getCodeName()?lower_case}.service.logic.I${de.getCodeName()}${deLogic.codeName}Logic ${deLogic.getCodeName()?lower_case}Logic;
</#if> </#if>
</#macro> </#macro>
...@@ -2172,4 +2257,141 @@ ${deaction.getRender().code} ...@@ -2172,4 +2257,141 @@ ${deaction.getRender().code}
</#if> </#if>
</#macro> </#macro>
<#comment>输出测试行为</#comment>
<#macro outputTestAction deaction actionParam>
<#if deaction.isEnableBackend() && deaction.getTestActionMode?? && deaction.getTestActionMode()??>
<#if deaction.getTestActionMode() ==1 || deaction.getTestActionMode() ==3 >
<#if (deaction.getActionType()=='USERCUSTOM')>
test${srfmethodname(deaction.getCodeName())?cap_first}(et);
<#elseif deaction.getActionType()=='DELOGIC'>
test${srfmethodname(deaction.getCodeName())?cap_first}(et);
<#elseif deaction.getCodeName()?lower_case == 'get'>
testGet(key);
<#elseif deaction.getCodeName()?lower_case == "createbatch">
<#elseif deaction.getCodeName()?lower_case == "updatebatch">
<#elseif deaction.getCodeName()?lower_case == "removebatch">
<#elseif deaction.getCodeName()?lower_case == "savebatch">
<#elseif deaction.getCodeName()?lower_case == "create">
<#if actionParam=='createBatch'>
testCreateBatch(list);
<#else>
testCreate(et);
</#if>
<#elseif deaction.getCodeName()?lower_case == "update">
<#if actionParam=='updateBatch'>
testUpdateBatch(list);
<#else>
testUpdate(et);
</#if>
<#elseif deaction.getCodeName()?lower_case == "save">
<#if actionParam=='saveBatch'>
testSaveBatch(list);
<#elseif actionParam=='saveOrUpdate'>
testSaveOrUpdate(et);
<#else>
testSave(et);
</#if>
<#elseif deaction.getCodeName()?lower_case == "remove">
<#if actionParam=='removeBatch'>
testRemoveBatch(idList);
<#else>
testRemove(key);
</#if>
<#elseif deaction.getCodeName()?lower_case == "getdraft">
testGetDraft(et);
<#elseif deaction.getCodeName()?lower_case == "checkkey">
testCheckKey(et);
<#else>
test${srfmethodname(deaction.getCodeName())?cap_first}(et);
</#if>
</#if>
</#if>
</#macro>
<#comment>输出测试行为</#comment>
<#macro outputTestActionDetail deaction>
<#if deaction.isEnableBackend() && deaction.getTestActionMode?? && deaction.getTestActionMode()??>
<#if deaction.getTestActionMode() ==1 || deaction.getTestActionMode() ==3>
<#if (deaction.getActionType()=='USERCUSTOM')>
public boolean test${srfmethodname(deaction.getCodeName())?cap_first}(${item.getCodeName()} et) {
return true;
}
<#elseif deaction.getActionType()=='DELOGIC'>
public boolean test${srfmethodname(deaction.getCodeName())?cap_first}(${item.getCodeName()} et) {
return true;
}
<#elseif deaction.getCodeName()?lower_case == 'get'>
public boolean testGet(${srfjavatype(keyfield.stdDataType)} key) {
return true;
}
<#elseif deaction.getCodeName()?lower_case == "createbatch">
<#elseif deaction.getCodeName()?lower_case == "updatebatch">
<#elseif deaction.getCodeName()?lower_case == "removebatch">
<#elseif deaction.getCodeName()?lower_case == "savebatch">
<#elseif deaction.getCodeName()?lower_case == "create">
public boolean testCreate(${item.getCodeName()} et) {
return true;
}
public boolean testCreateBatch(List<${item.getCodeName()}> list) {
return true;
}
<#elseif deaction.getCodeName()?lower_case == "update">
public boolean testUpdate(${item.getCodeName()} et) {
return true;
}
public boolean testUpdateBatch(List<${item.getCodeName()}> list) {
return true;
}
<#elseif deaction.getCodeName()?lower_case == "save">
public boolean testSave(${item.getCodeName()} et) {
return true;
}
public boolean testSaveOrUpdate(${item.getCodeName()} et) {
return true;
}
public boolean testSaveBatch(Collection<${item.getCodeName()}> list) {
return true;
}
public boolean testSaveBatch(List<${item.getCodeName()}> list) {
return true;
}
<#elseif deaction.getCodeName()?lower_case == "remove">
public boolean testRemove(${srfjavatype(keyfield.stdDataType)} key) {
return true;
}
public boolean testRemoveBatch(Collection<${srfjavatype(keyfield.stdDataType)}> idList) {
return true;
}
<#elseif deaction.getCodeName()?lower_case == "getdraft">
public boolean testGetDraft(${item.getCodeName()} et) {
return true;
}
<#elseif deaction.getCodeName()?lower_case == "checkkey">
public boolean testCheckKey(${item.getCodeName()} et) {
return true;
}
<#else>
public boolean test${srfmethodname(deaction.getCodeName())?cap_first}(${item.getCodeName()} et) {
return true;
}
</#if>
</#if>
</#if>
</#macro>
</#if> </#if>
...@@ -6,54 +6,24 @@ TARGET=PSDATAENTITY ...@@ -6,54 +6,24 @@ TARGET=PSDATAENTITY
<#if item.getAllPSDEActions()??> <#if item.getAllPSDEActions()??>
<#list item.getAllPSDEActions() as deaction> <#list item.getAllPSDEActions() as deaction>
<#if deaction.isEnableBackend() && deaction.getActionType()=='USERCUSTOM'> <#if deaction.isEnableBackend() && deaction.getActionType()=='USERCUSTOM'>
<#assign hasServiceEx=true> <#assign hasServiceEx=true>
<#break> <#break>
<#elseif deaction.isEnableBackend() && deaction.getTestActionMode?? && deaction.getTestActionMode()?? && (deaction.getTestActionMode() ==1 || deaction.getTestActionMode() ==3)>
<#assign hasServiceEx=true>
<#break>
</#if> </#if>
</#list> </#list>
</#if> </#if>
<#if hasServiceEx && (de.getStorageMode()==1 || de.getStorageMode()==2 ||de.getStorageMode()==4||de.getStorageMode()==0 ) > <#if hasServiceEx && (de.getStorageMode()==1 || de.getStorageMode()==2 ||de.getStorageMode()==4||de.getStorageMode()==0 ) >
package ${pub.getPKGCodeName()}.core.extensions.service; package ${pub.getPKGCodeName()}.core.extensions.service;
import ${pub.getPKGCodeName()}.core.${item.getPSSystemModule().getCodeName()?lower_case}.service.impl.${item.codeName}ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import ${pub.getPKGCodeName()}.core.${item.getPSSystemModule().getCodeName()?lower_case}.domain.${item.codeName};
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.context.annotation.Primary;
/** /**
* 实体[${item.getLogicName()}] 自定义服务对象 * 扩展目录已变更,请到[${pub.getPKGCodeName()}.core.extensions.service.xxExService]中来进行扩展
* 若您之前有在当前目录下扩展过其它的service对象,请将扩展的代码移到新的扩展类中,并注释掉老的扩展类,防止Bean重复
*/ */
@Slf4j @Deprecated
@Primary public class ${item.codeName}ServiceEx{
@Service("${item.codeName}ServiceEx")
public class ${item.codeName}ServiceEx extends ${item.codeName}ServiceImpl {
<#comment>SQL存储:解决mybatis继承service批操作报错</#comment>
<#if de.getStorageMode()==1>
@Override
protected Class currentModelClass() {
return com.baomidou.mybatisplus.core.toolkit.ReflectionKit.getSuperClassGenericType(this.getClass().getSuperclass(), 1);
}
</#if>
<#comment>输出实体行为</#comment>
<#if item.getAllPSDEActions()??>
<#list item.getAllPSDEActions() as deaction>
<#if deaction.isEnableBackend() && deaction.getActionType()=='USERCUSTOM'>
/**
* 自定义行为[${deaction.getCodeName()}]用户扩展
* @param et
* @return
*/
@Override
@Transactional
public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) {
return super.${srfmethodname(deaction.getCodeName())}(et);
}
</#if>
</#list>
</#if>
} }
</#if> </#if>
......
<#ibiztemplate>
TARGET=PSDATAENTITY
</#ibiztemplate>
<#comment>判断当前实体是否包含自定义行为</#comment>
<#assign hasServiceEx=false>
<#if item.getAllPSDEActions()??>
<#list item.getAllPSDEActions() as deaction>
<#if deaction.isEnableBackend() && deaction.getActionType()=='USERCUSTOM'>
<#assign hasServiceEx=true>
<#break>
<#elseif deaction.isEnableBackend() && deaction.getTestActionMode?? && deaction.getTestActionMode()?? && (deaction.getTestActionMode() ==1 || deaction.getTestActionMode() ==3)>
<#assign hasServiceEx=true>
<#break>
</#if>
</#list>
</#if>
<#if hasServiceEx && (de.getStorageMode()==1 || de.getStorageMode()==2 ||de.getStorageMode()==4||de.getStorageMode()==0 ) >
package ${pub.getPKGCodeName()}.core.extensions.service;
import ${pub.getPKGCodeName()}.core.${item.getPSSystemModule().getCodeName()?lower_case}.service.impl.${item.codeName}ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import ${pub.getPKGCodeName()}.core.${item.getPSSystemModule().getCodeName()?lower_case}.domain.${item.codeName};
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.context.annotation.Primary;
import java.util.*;
/**
* 实体[${item.getLogicName()}] 自定义服务对象
*/
@Slf4j
@Primary
@Service("${item.codeName}ExService")
public class ${item.codeName}ExService extends ${item.codeName}ServiceImpl {
<#assign keyfield=de.getKeyPSDEField()>
<#comment>SQL存储:解决mybatis继承service批操作报错</#comment>
<#if de.getStorageMode()==1>
@Override
protected Class currentModelClass() {
return com.baomidou.mybatisplus.core.toolkit.ReflectionKit.getSuperClassGenericType(this.getClass().getSuperclass(), 1);
}
</#if>
<#comment>输出实体行为</#comment>
<#if item.getAllPSDEActions()??>
<#list item.getAllPSDEActions() as deaction>
<#if deaction.isEnableBackend()>
<#if deaction.getActionType()=='USERCUSTOM'>
/**
* 自定义行为[${deaction.getCodeName()}]用户扩展
* @param et
* @return
*/
@Override
@Transactional
public ${item.getCodeName()} ${srfmethodname(deaction.getCodeName())}(${item.getCodeName()} et) {
return super.${srfmethodname(deaction.getCodeName())}(et);
}
</#if>
<#comment>输出测试行为</#comment>
<@outputTestActionDetail deaction />
</#if>
</#list>
</#if>
}
</#if>
<#comment>输出测试行为</#comment>
<#macro outputTestActionDetail deaction>
<#if deaction.isEnableBackend() && deaction.getTestActionMode?? && deaction.getTestActionMode()??>
<#if deaction.getTestActionMode() ==1 || deaction.getTestActionMode() ==3>
<#if (deaction.getActionType()=='USERCUSTOM')>
@Override
public boolean test${srfmethodname(deaction.getCodeName())?cap_first}(${item.getCodeName()} et) {
return super.test${srfmethodname(deaction.getCodeName())?cap_first}(et);
}
<#elseif deaction.getActionType()=='DELOGIC'>
@Override
public boolean test${srfmethodname(deaction.getCodeName())?cap_first}(${item.getCodeName()} et) {
return super.test${srfmethodname(deaction.getCodeName())?cap_first}(et);
}
<#elseif deaction.getCodeName()?lower_case == 'get'>
@Override
public boolean testGet(${srfjavatype(keyfield.stdDataType)} key) {
return super.testGet(key);
}
<#elseif deaction.getCodeName()?lower_case == "createbatch">
<#elseif deaction.getCodeName()?lower_case == "updatebatch">
<#elseif deaction.getCodeName()?lower_case == "removebatch">
<#elseif deaction.getCodeName()?lower_case == "savebatch">
<#elseif deaction.getCodeName()?lower_case == "create">
@Override
public boolean testCreate(${item.getCodeName()} et) {
return super.testCreate(et);
}
@Override
public boolean testCreateBatch(List<${item.getCodeName()}> list) {
return super.testCreateBatch(list);
}
<#elseif deaction.getCodeName()?lower_case == "update">
@Override
public boolean testUpdate(${item.getCodeName()} et) {
return super.testUpdate(et);
}
@Override
public boolean testUpdateBatch(List<${item.getCodeName()}> list) {
return super.testUpdateBatch(list);
}
<#elseif deaction.getCodeName()?lower_case == "save">
@Override
public boolean testSave(${item.getCodeName()} et) {
return super.testSave(et);
}
@Override
public boolean testSaveOrUpdate(${item.getCodeName()} et) {
return super.testSaveOrUpdate(et);
}
@Override
public boolean testSaveBatch(Collection<${item.getCodeName()}> list) {
return super.testSaveBatch(list);
}
@Override
public boolean testSaveBatch(List<${item.getCodeName()}> list) {
return super.testSaveBatch(list);
}
<#elseif deaction.getCodeName()?lower_case == "remove">
@Override
public boolean testRemove(${srfjavatype(keyfield.stdDataType)} key) {
return super.testRemove(key);
}
@Override
public boolean testRemoveBatch(Collection<${srfjavatype(keyfield.stdDataType)}> idList) {
return super.testRemoveBatch(idList);
}
<#elseif deaction.getCodeName()?lower_case == "getdraft">
@Override
public boolean testGetDraft(${item.getCodeName()} et) {
return super.testGetDraft(et);
}
<#elseif deaction.getCodeName()?lower_case == "checkkey">
@Override
public boolean testCheckKey(${item.getCodeName()} et) {
return super.testCheckKey(et);
}
<#else>
@Override
public boolean test${srfmethodname(deaction.getCodeName())?cap_first}(${item.getCodeName()} et) {
return super.test${srfmethodname(deaction.getCodeName())?cap_first}(et);
}
</#if>
</#if>
</#if>
</#macro>
...@@ -9,6 +9,7 @@ import ${pub.getPKGCodeName()}.util.helper.UniqueNameGenerator; ...@@ -9,6 +9,7 @@ import ${pub.getPKGCodeName()}.util.helper.UniqueNameGenerator;
import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.baomidou.mybatisplus.core.injector.ISqlInjector;
<#--import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;--> <#--import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;-->
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.apache.ibatis.mapping.DatabaseIdProvider; import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.mapping.VendorDatabaseIdProvider; import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
...@@ -46,7 +47,14 @@ public class MybatisConfiguration { ...@@ -46,7 +47,14 @@ public class MybatisConfiguration {
*/ */
@Bean @Bean
public PaginationInterceptor paginationInterceptor() { public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor(); PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
paginationInterceptor.setLimit(-1);
// 开启 count join 优化,只针对部分 left join
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
} }
<#--/**--> <#--/**-->
......
...@@ -27,9 +27,9 @@ TARGET=PSSYSSERVICEAPI ...@@ -27,9 +27,9 @@ TARGET=PSSYSSERVICEAPI
<#assign redisHost = depSysApiPlatform.getUserParam("spring.redis.host","")> <#assign redisHost = depSysApiPlatform.getUserParam("spring.redis.host","")>
</#if> </#if>
<#if depSysApi.getUserParam("spring.redis.port","")?? && depSysApi.getUserParam("spring.redis.port","")!=""> <#if depSysApi.getUserParam("spring.redis.port","")?? && depSysApi.getUserParam("spring.redis.port","")!="">
<#assign redisPort = depSysApi.getUserParam("")> <#assign redisPort = depSysApi.getUserParam("spring.redis.port")>
<#elseif depSysApiPlatform.getUserParam("spring.redis.port","")?? && depSysApiPlatform.getUserParam("spring.redis.port","")!=""> <#elseif depSysApiPlatform.getUserParam("spring.redis.port","")?? && depSysApiPlatform.getUserParam("spring.redis.port","")!="">
<#assign redisPort = depSysApiPlatform.getUserParam("")> <#assign redisPort = depSysApiPlatform.getUserParam("spring.redis.port")>
</#if> </#if>
<#if depSysApi.getUserParam("spring.redis.database","")?? && depSysApi.getUserParam("spring.redis.database","")!=""> <#if depSysApi.getUserParam("spring.redis.database","")?? && depSysApi.getUserParam("spring.redis.database","")!="">
<#assign redisDataBase = depSysApi.getUserParam("spring.redis.database","")> <#assign redisDataBase = depSysApi.getUserParam("spring.redis.database","")>
......
...@@ -56,6 +56,7 @@ import ${pubPkgCodeName}.${itemSysApiCodeNameLC}.mapping.*; ...@@ -56,6 +56,7 @@ import ${pubPkgCodeName}.${itemSysApiCodeNameLC}.mapping.*;
import ${pubPkgCodeName}.core.${deModelCodeNameLC}.domain.${deCodeName}; import ${pubPkgCodeName}.core.${deModelCodeNameLC}.domain.${deCodeName};
import ${pubPkgCodeName}.core.${deModelCodeNameLC}.service.I${deCodeName}Service; import ${pubPkgCodeName}.core.${deModelCodeNameLC}.service.I${deCodeName}Service;
import ${pubPkgCodeName}.core.${deModelCodeNameLC}.filter.${deCodeName}SearchContext; import ${pubPkgCodeName}.core.${deModelCodeNameLC}.filter.${deCodeName}SearchContext;
import ${pubPkgCodeName}.util.annotation.VersionCheck;
<#if item.getPSDEServiceAPIRSs()??> <#if item.getPSDEServiceAPIRSs()??>
<#list item.getPSDEServiceAPIRSs() as apider> <#list item.getPSDEServiceAPIRSs() as apider>
<#assign deapide=apider.getMinorPSDEServiceAPI().getPSDataEntity()> <#assign deapide=apider.getMinorPSDEServiceAPI().getPSDataEntity()>
...@@ -140,6 +141,8 @@ public class ${itemCodeName}Resource { ...@@ -140,6 +141,8 @@ public class ${itemCodeName}Resource {
<#assign deaction = apiMethod.getPSDEAction()> <#assign deaction = apiMethod.getPSDEAction()>
<#assign deactionName = deaction.getName()> <#assign deactionName = deaction.getName()>
<#assign deactionCodeName = deaction.getCodeName()> <#assign deactionCodeName = deaction.getCodeName()>
<#comment>输出主接口测试行为</#comment>
<@outputTestActionDetail deaction/>
<#if deaction.codeName?lower_case == 'create'> <#if deaction.codeName?lower_case == 'create'>
<@SecurityAnnotation deaction/> <@SecurityAnnotation deaction/>
@ApiOperation(value = "新建${deLogicName}", tags = {"${deLogicName}" }, notes = "新建${deLogicName}") @ApiOperation(value = "新建${deLogicName}", tags = {"${deLogicName}" }, notes = "新建${deLogicName}")
...@@ -161,6 +164,7 @@ public class ${itemCodeName}Resource { ...@@ -161,6 +164,7 @@ public class ${itemCodeName}Resource {
} }
<#elseif deaction.codeName?lower_case == 'update'> <#elseif deaction.codeName?lower_case == 'update'>
<@VersionCheckAnnotation/>
<@SecurityAnnotation deaction/> <@SecurityAnnotation deaction/>
@ApiOperation(value = "更新${deLogicName}", tags = {"${deLogicName}" }, notes = "更新${deLogicName}") @ApiOperation(value = "更新${deLogicName}", tags = {"${deLogicName}" }, notes = "更新${deLogicName}")
@RequestMapping(method = RequestMethod.PUT, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}") @RequestMapping(method = RequestMethod.PUT, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}")
...@@ -249,18 +253,17 @@ public class ${itemCodeName}Resource { ...@@ -249,18 +253,17 @@ public class ${itemCodeName}Resource {
@RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/${deactionCodeName?lower_case}") @RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/${deactionCodeName?lower_case}")
<#if de.getStorageMode()==4><#else> @Transactional</#if> <#if de.getStorageMode()==4><#else> @Transactional</#if>
public ResponseEntity<${itemCodeName}DTO> ${deactionCodeName?uncap_first}(${id_etParams}) { public ResponseEntity<${itemCodeName}DTO> ${deactionCodeName?uncap_first}(${id_etParams}) {
${deCodeName} ${deCodeNameLC} = ${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dto); ${deCodeName} domain = ${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dto);
${deCodeNameLC}.set${dePKCodeName}(${itemCodeNameLC + keyCNLC}); domain.set${dePKCodeName}(${itemCodeNameLC + keyCNLC});
${deCodeNameLC} = ${deCodeNameLC}Service.${srfmethodname(deactionCodeName)}(${deCodeNameLC}); domain = ${deCodeNameLC}Service.${srfmethodname(deactionCodeName)}(domain);
${itemCodeNameLC}dto = ${itemCodeNameLC}Mapping.toDto(${deCodeNameLC}); ${itemCodeNameLC}dto = ${itemCodeNameLC}Mapping.toDto(domain);
return ResponseEntity.status(HttpStatus.OK).body(${itemCodeNameLC}dto); return ResponseEntity.status(HttpStatus.OK).body(${itemCodeNameLC}dto);
} }
</#if> </#if>
<#elseif apiMethod.getActionType()=='FETCH'> <#elseif apiMethod.getActionType()=='FETCH'>
<#assign deds = apiMethod.getPSDEDataSet()> <#assign deds = apiMethod.getPSDEDataSet()>
@PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','${sys.codeName}-${de.codeName}-search${deds.codeName}-all')") <@DataQuerySecurityAnnotation deds/>
<#--<@SecurityAnnotation deds/>-->
@ApiOperation(value = "获取${deds.getLogicName()}", tags = {"${deLogicName}" } ,notes = "获取${deds.getLogicName()}") @ApiOperation(value = "获取${deds.getLogicName()}", tags = {"${deLogicName}" } ,notes = "获取${deds.getLogicName()}")
@RequestMapping(method= RequestMethod.${reqMtd} , value="${fullPath}/fetch<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()?lower_case}<#else>${deds.getCodeName()?lower_case}</#if>") @RequestMapping(method= RequestMethod.${reqMtd} , value="${fullPath}/fetch<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()?lower_case}<#else>${deds.getCodeName()?lower_case}</#if>")
public ResponseEntity<List<<#if deds.isEnableGroup()>HashMap<#else>${itemCodeName}DTO</#if>>> fetch<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()}<#else>${deds.getCodeName()}</#if>(${deCodeName}SearchContext context) { public ResponseEntity<List<<#if deds.isEnableGroup()>HashMap<#else>${itemCodeName}DTO</#if>>> fetch<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()}<#else>${deds.getCodeName()}</#if>(${deCodeName}SearchContext context) {
...@@ -283,8 +286,7 @@ public class ${itemCodeName}Resource { ...@@ -283,8 +286,7 @@ public class ${itemCodeName}Resource {
</#if> </#if>
} }
@PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','${sys.codeName}-${de.codeName}-search${deds.codeName}-all')") <@DataQuerySecurityAnnotation deds/>
<#--<@SecurityAnnotation deds/>-->
@ApiOperation(value = "查询${deds.getLogicName()}", tags = {"${deLogicName}" } ,notes = "查询${deds.getLogicName()}") @ApiOperation(value = "查询${deds.getLogicName()}", tags = {"${deLogicName}" } ,notes = "查询${deds.getLogicName()}")
@RequestMapping(method= RequestMethod.POST , value="${fullPath}/search<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()?lower_case}<#else>${deds.getCodeName()?lower_case}</#if>") @RequestMapping(method= RequestMethod.POST , value="${fullPath}/search<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()?lower_case}<#else>${deds.getCodeName()?lower_case}</#if>")
public ResponseEntity<Page<<#if deds.isEnableGroup()>HashMap<#else>${itemCodeName}DTO</#if>>> search<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()}<#else>${deds.getCodeName()}</#if>(@RequestBody ${deCodeName}SearchContext context) { public ResponseEntity<Page<<#if deds.isEnableGroup()>HashMap<#else>${itemCodeName}DTO</#if>>> search<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()}<#else>${deds.getCodeName()}</#if>(@RequestBody ${deCodeName}SearchContext context) {
...@@ -389,6 +391,8 @@ public class ${itemCodeName}Resource { ...@@ -389,6 +391,8 @@ public class ${itemCodeName}Resource {
<#assign deaction = apiMethod.getPSDEAction()> <#assign deaction = apiMethod.getPSDEAction()>
<#assign deactionName = deaction.getName()> <#assign deactionName = deaction.getName()>
<#assign deactionCodeName = deaction.getCodeName()> <#assign deactionCodeName = deaction.getCodeName()>
<#comment>输出从接口测试行为</#comment>
<@outputTestActionDetail2 deaction/>
<#if deaction.codeName?lower_case == 'create'> <#if deaction.codeName?lower_case == 'create'>
<@SecurityAnnotation deaction/> <@SecurityAnnotation deaction/>
@ApiOperation(value = "${byTagParams}建立${deLogicName}", tags = {"${deLogicName}" }, notes = "${byTagParams}建立${deLogicName}") @ApiOperation(value = "${byTagParams}建立${deLogicName}", tags = {"${deLogicName}" }, notes = "${byTagParams}建立${deLogicName}")
...@@ -415,6 +419,7 @@ public class ${itemCodeName}Resource { ...@@ -415,6 +419,7 @@ public class ${itemCodeName}Resource {
} }
<#elseif deaction.codeName?lower_case == 'update'> <#elseif deaction.codeName?lower_case == 'update'>
<@VersionCheckAnnotation/>
<@SecurityAnnotation deaction/> <@SecurityAnnotation deaction/>
@ApiOperation(value = "${byTagParams}更新${deLogicName}", tags = {"${deLogicName}" }, notes = "${byTagParams}更新${deLogicName}") @ApiOperation(value = "${byTagParams}更新${deLogicName}", tags = {"${deLogicName}" }, notes = "${byTagParams}更新${deLogicName}")
@RequestMapping(method = RequestMethod.PUT, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}") @RequestMapping(method = RequestMethod.PUT, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}")
...@@ -565,8 +570,7 @@ public class ${itemCodeName}Resource { ...@@ -565,8 +570,7 @@ public class ${itemCodeName}Resource {
</#if> </#if>
<#elseif apiMethod.getActionType()=='FETCH'> <#elseif apiMethod.getActionType()=='FETCH'>
<#assign deds = apiMethod.getPSDEDataSet()> <#assign deds = apiMethod.getPSDEDataSet()>
@PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','${sys.codeName}-${de.codeName}-search${deds.codeName}-all')") <@DataQuerySecurityAnnotation deds/>
<#--<@SecurityAnnotation deds/>-->
@ApiOperation(value = "${byTagParams}获取${deds.getLogicName()}", tags = {"${deLogicName}" } ,notes = "${byTagParams}获取${deds.getLogicName()}") @ApiOperation(value = "${byTagParams}获取${deds.getLogicName()}", tags = {"${deLogicName}" } ,notes = "${byTagParams}获取${deds.getLogicName()}")
@RequestMapping(method= RequestMethod.${reqMtd} , value="${fullPath}/fetch<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()?lower_case}<#else>${deds.getCodeName()?lower_case}</#if>") @RequestMapping(method= RequestMethod.${reqMtd} , value="${fullPath}/fetch<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()?lower_case}<#else>${deds.getCodeName()?lower_case}</#if>")
public ResponseEntity<List<<#if deds.isEnableGroup()>HashMap<#else>${itemCodeName}DTO</#if>>> fetch${itemCodeName}<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()}<#else>${deds.getCodeName()}</#if>${byParams}(<#if parentParams!="">${parentParams},</#if>${deCodeName}SearchContext context) { public ResponseEntity<List<<#if deds.isEnableGroup()>HashMap<#else>${itemCodeName}DTO</#if>>> fetch${itemCodeName}<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()}<#else>${deds.getCodeName()}</#if>${byParams}(<#if parentParams!="">${parentParams},</#if>${deCodeName}SearchContext context) {
...@@ -589,8 +593,7 @@ public class ${itemCodeName}Resource { ...@@ -589,8 +593,7 @@ public class ${itemCodeName}Resource {
</#if> </#if>
} }
@PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','${sys.codeName}-${de.codeName}-search${deds.codeName}-all')") <@DataQuerySecurityAnnotation deds/>
<#--<@SecurityAnnotation deds/>-->
@ApiOperation(value = "${byTagParams}查询${deds.getLogicName()}", tags = {"${deLogicName}" } ,notes = "${byTagParams}查询${deds.getLogicName()}") @ApiOperation(value = "${byTagParams}查询${deds.getLogicName()}", tags = {"${deLogicName}" } ,notes = "${byTagParams}查询${deds.getLogicName()}")
@RequestMapping(method= RequestMethod.POST , value="${fullPath}/search<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()?lower_case}<#else>${deds.getCodeName()?lower_case}</#if>") @RequestMapping(method= RequestMethod.POST , value="${fullPath}/search<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()?lower_case}<#else>${deds.getCodeName()?lower_case}</#if>")
public ResponseEntity<Page<<#if deds.isEnableGroup()>HashMap<#else>${itemCodeName}DTO</#if>>> search${itemCodeName}<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()}<#else>${deds.getCodeName()}</#if>${byParams}(<#if parentParams!="">${parentParams}, @RequestBody </#if>${deCodeName}SearchContext context) { public ResponseEntity<Page<<#if deds.isEnableGroup()>HashMap<#else>${itemCodeName}DTO</#if>>> search${itemCodeName}<#if (deds.getName()=='DEFAULT')>${deds.getCodeName()}<#else>${deds.getCodeName()}</#if>${byParams}(<#if parentParams!="">${parentParams}, @RequestBody </#if>${deCodeName}SearchContext context) {
...@@ -616,6 +619,17 @@ public class ${itemCodeName}Resource { ...@@ -616,6 +619,17 @@ public class ${itemCodeName}Resource {
</#if> </#if>
</#if> </#if>
<#comment>数据查询Security权限校验</#comment>
<#macro DataQuerySecurityAnnotation dataset>
<#if de.getStorageMode()==1 || de.getStorageMode()==2>
<#if hasDEPrefield==false>
@PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','${sys.codeName}-${de.codeName}-search${dataset.codeName}-all')")
<#else>
@PreAuthorize("hasAnyAuthority('ROLE_SUPERADMIN','${sys.codeName}-${de.codeName}-search${dataset.codeName}-all') and hasPermission(#context,'${sys.codeName}-${de.codeName}-Get')")
</#if>
</#if>
</#macro>
<#comment>单条数据Security权限校验</#comment> <#comment>单条数据Security权限校验</#comment>
<#macro SecurityAnnotation deaction> <#macro SecurityAnnotation deaction>
<#if de.getStorageMode()==1 || de.getStorageMode()==2> <#if de.getStorageMode()==1 || de.getStorageMode()==2>
...@@ -652,6 +666,267 @@ public class ${itemCodeName}Resource { ...@@ -652,6 +666,267 @@ public class ${itemCodeName}Resource {
</#if> </#if>
</#macro> </#macro>
<#comment>数据库版本检查注解</#comment>
<#macro VersionCheckAnnotation>
<#if item.getPSDEServiceAPIFields()??>
<#list item.getPSDEServiceAPIFields() as apifield>
<#if apifield.getPSDEField?? && apifield.getPSDEField()??>
<#assign defield=apifield.getPSDEField()>
<#if defield.getPredefinedType?? && defield.getPredefinedType()??>
<#if defield.getPredefinedType()=='UPDATEDATE'>
<#assign updatedateField=srfcaseformat(defield.codeName,'l_u2lC')>
@VersionCheck(entity = "${deCodeNameLC}" , versionfield = "${updatedateField}")
<#break>
</#if>
</#if>
</#if>
</#list>
</#if>
</#macro>
<#comment>输出主接口测试行为</#comment>
<#macro outputTestActionDetail deaction>
<#if deaction.getTestActionMode?? && deaction.getTestActionMode()?? && (deaction.getTestActionMode() ==3) >
<#assign deactionName = deaction.getName()>
<#assign deactionCodeName = deaction.getCodeName()>
<#if deaction.codeName?lower_case == 'create'>
<@SecurityAnnotation deaction/>
@ApiOperation(value = "新建${deLogicName}", tags = {"${deLogicName}" }, notes = "新建${deLogicName}")
@RequestMapping(method = RequestMethod.POST, value = "${fullPath}/test")
<#if de.getStorageMode()==4><#else> @Transactional</#if>
public ResponseEntity<Boolean> testCreate(${etParams}) {
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testCreate(${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dto)));
}
<@SecurityBatchAnnotation deaction/>
@ApiOperation(value = "批量新建${deLogicName}", tags = {"${deLogicName}" }, notes = "批量新建${deLogicName}")
@RequestMapping(method = RequestMethod.POST, value = "${fullPath}/batch/test")
public ResponseEntity<Boolean> testCreateBatch(${etParamsList}) {
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testCreateBatch(${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dtos)));
}
<#elseif deaction.codeName?lower_case == 'update'>
<@SecurityAnnotation deaction/>
@ApiOperation(value = "更新${deLogicName}", tags = {"${deLogicName}" }, notes = "更新${deLogicName}")
@RequestMapping(method = RequestMethod.PUT, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/test")
<#if de.getStorageMode()==4><#else> @Transactional</#if>
public ResponseEntity<Boolean> testUpdate(${id_etParams}) {
${deCodeName} domain = ${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dto);
domain .set${dePKCodeName}(${itemCodeNameLC + keyCNLC});
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testUpdate(domain));
}
<@SecurityBatchAnnotation deaction/>
@ApiOperation(value = "批量更新${deLogicName}", tags = {"${deLogicName}" }, notes = "批量更新${deLogicName}")
@RequestMapping(method = RequestMethod.PUT, value = "${fullPath}/batch/test")
public ResponseEntity<Boolean> testUpdateBatch(${etParamsList}) {
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testUpdateBatch(${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dtos)));
}
<#elseif deaction.codeName?lower_case == 'save'>
<@SecurityAnnotation deaction/>
@ApiOperation(value = "保存${deLogicName}", tags = {"${deLogicName}" }, notes = "保存${deLogicName}")
@RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/${deactionCodeName?lower_case}/test")
public ResponseEntity<Boolean> testSave(${etParams}) {
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testSave(${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dto)));
}
<@SecurityBatchAnnotation deaction/>
@ApiOperation(value = "批量保存${deLogicName}", tags = {"${deLogicName}" }, notes = "批量保存${deLogicName}")
@RequestMapping(method = RequestMethod.POST, value = "${fullPath}/savebatch/test")
public ResponseEntity<Boolean> testSaveBatch(${etParamsList}) {
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testSaveBatch(${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dtos)));
}
<#elseif deaction.codeName?lower_case == 'remove'>
<@SecurityAnnotation deaction/>
@ApiOperation(value = "删除${deLogicName}", tags = {"${deLogicName}" }, notes = "删除${deLogicName}")
@RequestMapping(method = RequestMethod.DELETE, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/test")
<#if de.getStorageMode()==4><#else> @Transactional</#if>
public ResponseEntity<Boolean> testRemove(${idParams}) {
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testRemove(${itemCodeNameLC + keyCNLC}));
}
<@SecurityBatchAnnotation deaction/>
@ApiOperation(value = "批量删除${deLogicName}", tags = {"${deLogicName}" }, notes = "批量删除${deLogicName}")
@RequestMapping(method = RequestMethod.DELETE, value = "${fullPath}/batch/test")
public ResponseEntity<Boolean> testRemoveBatch(@RequestBody List<${srfjavatype(de.getKeyPSDEField().getStdDataType())}> ids) {
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testRemoveBatch(ids));
}
<#elseif deaction.codeName?lower_case == 'get'>
<@SecurityAnnotation deaction/>
@ApiOperation(value = "获取${deLogicName}", tags = {"${deLogicName}" }, notes = "获取${deLogicName}")
@RequestMapping(method = RequestMethod.GET, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/test")
public ResponseEntity<Boolean> testGet(${idParams}) {
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testGet(${itemCodeNameLC + keyCNLC}));
}
<#elseif deaction.codeName?lower_case == 'checkkey'>
@ApiOperation(value = "检查${deLogicName}", tags = {"${deLogicName}" }, notes = "检查${deLogicName}")
@RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/${deactionCodeName?lower_case}/test")
public ResponseEntity<Boolean> testCheckKey(${etParams}) {
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testCheckKey(${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dto)));
}
<#elseif deaction.codeName?lower_case == 'getdraft'><#comment>前端支持临时模式,后台不做处理</#comment>
@ApiOperation(value = "获取${deLogicName}草稿", tags = {"${deLogicName}" }, notes = "获取${deLogicName}草稿")
@RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/${deactionCodeName?lower_case}/test")
public ResponseEntity<Boolean> testGetDraft() {
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testGetDraft(new ${deCodeName}()));
}
<#elseif deaction.codeName?lower_case == 'createbatch'>
<#elseif deaction.codeName?lower_case == 'updatebatch'>
<#elseif deaction.codeName?lower_case == 'removebatch'>
<#elseif deaction.codeName?lower_case == 'savebatch'>
<#elseif deaction.getUserTag()?? && deaction.getActionType()?? && deaction.getUserTag() == 'REGIST' && deaction.getActionType() == 'USERCREATE'>
<#else>
<@SecurityAnnotation deaction/>
@ApiOperation(value = "${deaction.getLogicName()}", tags = {"${deLogicName}" }, notes = "${deaction.getLogicName()}")
@RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/${deactionCodeName?lower_case}/test")
<#if de.getStorageMode()==4><#else> @Transactional</#if>
public ResponseEntity<Boolean> test${deactionCodeName?cap_first}(${id_etParams}) {
${deCodeName} domain = ${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dto);
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.test${srfmethodname(deactionCodeName)?cap_first}(domain));
}
</#if>
</#if>
</#macro>
<#comment>输出关系接口测试行为</#comment>
<#macro outputTestActionDetail2 deaction>
<#if deaction.getTestActionMode?? && deaction.getTestActionMode()?? && (deaction.getTestActionMode() ==3) >
<#assign deactionName = deaction.getName()>
<#assign deactionCodeName = deaction.getCodeName()>
<#if deaction.codeName?lower_case == 'create'>
<@SecurityAnnotation deaction/>
@ApiOperation(value = "${byTagParams}建立${deLogicName}", tags = {"${deLogicName}" }, notes = "${byTagParams}建立${deLogicName}")
@RequestMapping(method = RequestMethod.POST, value = "${fullPath}/test")
<#if de.getStorageMode()==4><#else> @Transactional</#if>
public ResponseEntity<Boolean> testCreate${byParams}(${etParams}) {
${deCodeName} domain = ${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dto);
${parentSetParams}
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testCreate(domain));
}
<@SecurityBatchAnnotation deaction/>
@ApiOperation(value = "${byTagParams}批量建立${deLogicName}", tags = {"${deLogicName}" }, notes = "${byTagParams}批量建立${deLogicName}")
@RequestMapping(method = RequestMethod.POST, value = "${fullPath}/batch/test")
public ResponseEntity<Boolean> testCreateBatch${byParams}(${etParamsList}) {
List<${deCodeName}> domainlist=${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dtos);
for(${deCodeName} domain:domainlist){
${parentSetParams}
}
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testCreateBatch(domainlist));
}
<#elseif deaction.codeName?lower_case == 'update'>
<@SecurityAnnotation deaction/>
@ApiOperation(value = "${byTagParams}更新${deLogicName}", tags = {"${deLogicName}" }, notes = "${byTagParams}更新${deLogicName}")
@RequestMapping(method = RequestMethod.PUT, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/test")
<#if de.getStorageMode()==4><#else> @Transactional</#if>
public ResponseEntity<Boolean> testUpdate${byParams}(${id_etParams}) {
${deCodeName} domain = ${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dto);
${parentSetParams}
domain.set${dePKCodeName}(${itemCodeNameLC + keyCNLC});
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testUpdate(domain));
}
<@SecurityBatchAnnotation deaction/>
@ApiOperation(value = "${byTagParams}批量更新${deLogicName}", tags = {"${deLogicName}" }, notes = "${byTagParams}批量更新${deLogicName}")
@RequestMapping(method = RequestMethod.PUT, value = "${fullPath}/batch/test")
public ResponseEntity<Boolean> testUpdateBatch${byParams}(${etParamsList}) {
List<${deCodeName}> domainlist=${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dtos);
for(${deCodeName} domain:domainlist){
${parentSetParams}
}
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testUpdateBatch(domainlist));
}
<#elseif deaction.codeName?lower_case == 'remove'>
<@SecurityAnnotation deaction/>
@ApiOperation(value = "${byTagParams}删除${deLogicName}", tags = {"${deLogicName}" }, notes = "${byTagParams}删除${deLogicName}")
@RequestMapping(method = RequestMethod.DELETE, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/test")
<#if de.getStorageMode()==4><#else> @Transactional</#if>
public ResponseEntity<Boolean> testRemove${byParams}(${idParams}) {
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testRemove(${itemCodeNameLC + keyCNLC}));
}
<@SecurityBatchAnnotation deaction/>
@ApiOperation(value = "${byTagParams}批量删除${deLogicName}", tags = {"${deLogicName}" }, notes = "${byTagParams}批量删除${deLogicName}")
@RequestMapping(method = RequestMethod.DELETE, value = "${fullPath}/batch/test")
public ResponseEntity<Boolean> testRemoveBatch${byParams}(@RequestBody List<${srfjavatype(de.getKeyPSDEField().getStdDataType())}> ids) {
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testRemoveBatch(ids));
}
<#elseif deaction.codeName?lower_case == 'save'>
<@SecurityAnnotation deaction/>
@ApiOperation(value = "${byTagParams}保存${deLogicName}", tags = {"${deLogicName}" }, notes = "${byTagParams}保存${deLogicName}")
@RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/${deactionCodeName?lower_case}/test")
public ResponseEntity<Boolean> testSave${byParams}(${etParams}) {
${deCodeName} domain = ${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dto);
${parentSetParams}
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testSave(domain));
}
<@SecurityBatchAnnotation deaction/>
@ApiOperation(value = "${byTagParams}批量保存${deLogicName}", tags = {"${deLogicName}" }, notes = "${byTagParams}批量保存${deLogicName}")
@RequestMapping(method = RequestMethod.POST, value = "${fullPath}/savebatch/test")
public ResponseEntity<Boolean> testSaveBatch${byParams}(${etParamsList}) {
List<${deCodeName}> domainlist=${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dtos);
for(${deCodeName} domain:domainlist){
${parentSetParams}
}
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testSaveBatch(domainlist));
}
<#elseif deaction.codeName?lower_case == 'get'>
<@SecurityAnnotation deaction/>
@ApiOperation(value = "${byTagParams}获取${deLogicName}", tags = {"${deLogicName}" }, notes = "${byTagParams}获取${deLogicName}")
@RequestMapping(method = RequestMethod.GET, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/test")
public ResponseEntity<Boolean> testGet${byParams}(${idParams}) {
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testGet(${itemCodeNameLC + keyCNLC}));
}
<#elseif deaction.codeName?lower_case == 'checkkey'>
@ApiOperation(value = "${byTagParams}检查${deLogicName}", tags = {"${deLogicName}" }, notes = "${byTagParams}检查${deLogicName}")
@RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/${deactionCodeName?lower_case}/test")
public ResponseEntity<Boolean> testCheckKey${byParams}(${etParams}) {
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.testCheckKey(${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dto)));
}
<#elseif deaction.codeName?lower_case == 'getdraft'>
@ApiOperation(value = "${byTagParams}获取${deLogicName}草稿", tags = {"${deLogicName}" }, notes = "${byTagParams}获取${deLogicName}草稿")
@RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/${deactionCodeName?lower_case}/test")
public ResponseEntity<Boolean> testGetDraft${byParams}(${parentParams}) {
${deCodeName} domain = new ${deCodeName}();
${parentSetParams}
return ResponseEntity.status(HttpStatus.OK).body(${itemCodeNameLC}Mapping.toDto(${deCodeNameLC}Service.testGetDraft(domain)));
}
<#elseif deaction.codeName?lower_case == 'createbatch'>
<#elseif deaction.codeName?lower_case == 'updatebatch'>
<#elseif deaction.codeName?lower_case == 'removebatch'>
<#elseif deaction.codeName?lower_case == 'savebatch'>
<#elseif deaction.getUserTag()?? && deaction.getActionType()?? && deaction.getUserTag() == 'REGIST' && deaction.getActionType() == 'USERCREATE'>
<#else>
<@SecurityAnnotation deaction/>
@ApiOperation(value = "${byTagParams}${deLogicName}", tags = {"${deLogicName}" }, notes = "${byTagParams}${deLogicName}")
@RequestMapping(method = RequestMethod.${reqMtd}, value = "${fullPath}/{${itemCodeNameLC + keyCNLC}}/${deactionCodeName?lower_case}/test")
<#if de.getStorageMode()==4><#else> @Transactional</#if>
public ResponseEntity<Boolean> test${deactionCodeName?cap_first}${byParams}(${id_etParams}) {
${deCodeName} domain = ${itemCodeNameLC}Mapping.toDomain(${itemCodeNameLC}dto);
${parentSetParams}
return ResponseEntity.status(HttpStatus.OK).body(${deCodeNameLC}Service.test${srfmethodname(deactionCodeName)?cap_first}(domain));
}
</#if>
</#if>
</#macro>
<#ibiztemplate>
TARGET=PSSYSTEM
</#ibiztemplate>
package ${pub.getPKGCodeName()}.util.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD})
public @interface VersionCheck
{
String entity();
String versionfield();
}
...@@ -26,7 +26,7 @@ import java.util.Map; ...@@ -26,7 +26,7 @@ import java.util.Map;
* 实体属性默认值切面,只有新建(Create)时才会填充默认值 * 实体属性默认值切面,只有新建(Create)时才会填充默认值
*/ */
@Aspect @Aspect
@Order(0) @Order(50)
@Component @Component
public class DEFieldDefaultValueAspect public class DEFieldDefaultValueAspect
{ {
......
<#ibiztemplate>
TARGET=PSSYSTEM
</#ibiztemplate>
package ${pub.getPKGCodeName()}.util.aspect;
import lombok.SneakyThrows;
import ${pub.getPKGCodeName()}.util.annotation.VersionCheck;
import ${pub.getPKGCodeName()}.util.domain.EntityBase;
import ${pub.getPKGCodeName()}.util.errors.BadRequestAlertException;
import ${pub.getPKGCodeName()}.util.helper.RuleUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import java.lang.reflect.Field;
/**
* 数据库版本检查
*/
@Aspect
@Order(50)
@Component
public class VersionCheckAspect
{
private final ExpressionParser parser = new SpelExpressionParser();
@SneakyThrows
@Before("execution(* ${pub.getPKGCodeName()}.*.rest.*.update(..)) && @annotation(versionCheck)")
public void BeforeUpdate(JoinPoint point, VersionCheck versionCheck){
Object[] args = point.getArgs();
Object id=args[0];
Object dto=args[1];
if(ObjectUtils.isEmpty(id) || ObjectUtils.isEmpty(dto))
return;
String versionField=versionCheck.versionfield();
if(StringUtils.isEmpty(versionField))
return;
versionCheck(versionCheck,point.getTarget(),dto,id);
}
@SneakyThrows
@Before("execution(* ${pub.getPKGCodeName()}.*.rest.*.updateBy*(..)) && @annotation(versionCheck)")
public void BeforeUpdateBy(JoinPoint point, VersionCheck versionCheck){
Object[] args = point.getArgs();
Object id=args[1];
Object dto=args[2];
if(ObjectUtils.isEmpty(id) || ObjectUtils.isEmpty(dto))
return;
String versionField=versionCheck.versionfield();
if(StringUtils.isEmpty(versionField))
return;
versionCheck(versionCheck,point.getTarget(),dto,id);
}
private void versionCheck(VersionCheck versionCheck,Object resource,Object dto,Object id ){
EvaluationContext context = new StandardEvaluationContext();
context.setVariable("dto",dto);
Expression newExp = parser.parseExpression(String.format("#dto.%s",versionCheck.versionfield()));
Object newVersion=newExp.getValue(context);
if(ObjectUtils.isEmpty(newVersion))
return;
//进行版本检查
Object oldVersion =getDBVersion(versionCheck,getService(resource,versionCheck.entity()),id);
if(!ObjectUtils.isEmpty(oldVersion)){
if(RuleUtils.gt(newVersion,oldVersion))
throw new BadRequestAlertException("数据已变更,可能后台数据已被修改,请重新加载数据","VersionCheckAspect","versionCheck");
}
}
/**
* 获取实体服务对象
* @param resource
* @param entity
* @return
*/
@SneakyThrows
private Object getService(Object resource,String entity){
Object service = null;
Field[] fields= resource.getClass().getDeclaredFields();
for(Field field : fields){
if(field.getModifiers()==1 && field.getName().equalsIgnoreCase(String.format("%sService",entity))){
service=field.get(resource);
break;
}
}
return service;
}
/**
* 获取数据库版本
* @param versionCheck
* @param service
* @param id
* @return
*/
@SneakyThrows
private Object getDBVersion(VersionCheck versionCheck,Object service,Object id){
Object dbVersion=null;
String versionField=versionCheck.versionfield();
if(!ObjectUtils.isEmpty(service)){
EvaluationContext oldContext = new StandardEvaluationContext();
oldContext.setVariable("service",service);
oldContext.setVariable("id",id);
Expression oldExp = parser.parseExpression("#service.get(#id)");
EntityBase oldEntity =oldExp.getValue(oldContext, EntityBase.class);
return oldEntity.get(versionField);
}
return dbVersion;
}
}
...@@ -97,8 +97,10 @@ public class LayeringCache extends AbstractValueAdaptingCache { ...@@ -97,8 +97,10 @@ public class LayeringCache extends AbstractValueAdaptingCache {
@Override @Override
public void put(Object key, Object value) { public void put(Object key, Object value) {
caffeineCache.put(key, value); if(value!=null) {
redisCache.put(key, value); caffeineCache.put(key, value);
redisCache.put(key, value);
}
} }
@Override @Override
......
...@@ -95,7 +95,7 @@ public class DEFieldCacheMap { ...@@ -95,7 +95,7 @@ public class DEFieldCacheMap {
if(cacheDEField.containsKey(className)) if(cacheDEField.containsKey(className))
return cacheDEField.get(className); return cacheDEField.get(className);
else{ else{
DEFieldCacheMap.getFieldMap(clazz); DEFieldCacheMap.getFieldMap(className);
return cacheDEField.get(className); return cacheDEField.get(className);
} }
} }
...@@ -112,7 +112,7 @@ public class DEFieldCacheMap { ...@@ -112,7 +112,7 @@ public class DEFieldCacheMap {
if(cacheDEKeyField.containsKey(className)) if(cacheDEKeyField.containsKey(className))
return cacheDEKeyField.get(className); return cacheDEKeyField.get(className);
else{ else{
DEFieldCacheMap.getFieldMap(clazz); DEFieldCacheMap.getFieldMap(className);
return cacheDEKeyField.get(className); return cacheDEKeyField.get(className);
} }
} }
...@@ -130,7 +130,7 @@ public class DEFieldCacheMap { ...@@ -130,7 +130,7 @@ public class DEFieldCacheMap {
if(cacheList.containsKey(className)) if(cacheList.containsKey(className))
return cacheList.get(className); return cacheList.get(className);
else{ else{
DEFieldCacheMap.getFieldMap(clazz); DEFieldCacheMap.getFieldMap(className);
return cacheList.get(className); return cacheList.get(className);
} }
} }
...@@ -158,7 +158,7 @@ public class DEFieldCacheMap { ...@@ -158,7 +158,7 @@ public class DEFieldCacheMap {
if(cacheKey.containsKey(className)) if(cacheKey.containsKey(className))
return cacheKey.get(className); return cacheKey.get(className);
else{ else{
DEFieldCacheMap.getFieldMap(clazz); DEFieldCacheMap.getFieldMap(className);
return cacheKey.get(className); return cacheKey.get(className);
} }
} }
......
...@@ -58,6 +58,10 @@ public class AppController { ...@@ -58,6 +58,10 @@ public class AppController {
appData.put("unires",uniRes); appData.put("unires",uniRes);
appData.put("appmenu",appMenu); appData.put("appmenu",appMenu);
appData.put("enablepermissionvalid",enablePermissionValid); appData.put("enablepermissionvalid",enablePermissionValid);
if(curUser.getSuperuser()==1)
appData.put("enablepermissionvalid",false);
else
appData.put("enablepermissionvalid",enablePermissionValid);
return ResponseEntity.status(HttpStatus.OK).body(appData); return ResponseEntity.status(HttpStatus.OK).body(appData);
} }
......
...@@ -3,9 +3,12 @@ TARGET=PSSYSTEM ...@@ -3,9 +3,12 @@ TARGET=PSSYSTEM
</#ibiztemplate> </#ibiztemplate>
package ${pub.getPKGCodeName()}.util.security; package ${pub.getPKGCodeName()}.util.security;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.SneakyThrows;
import ${pub.getPKGCodeName()}.util.annotation.DEField; import ${pub.getPKGCodeName()}.util.annotation.DEField;
import ${pub.getPKGCodeName()}.util.domain.EntityBase; import ${pub.getPKGCodeName()}.util.domain.EntityBase;
import ${pub.getPKGCodeName()}.util.enums.DEPredefinedFieldType; import ${pub.getPKGCodeName()}.util.enums.DEPredefinedFieldType;
import ${pub.getPKGCodeName()}.util.filter.QueryWrapperContext;
import ${pub.getPKGCodeName()}.util.helper.DEFieldCacheMap; import ${pub.getPKGCodeName()}.util.helper.DEFieldCacheMap;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.PermissionEvaluator; import org.springframework.security.access.PermissionEvaluator;
...@@ -14,7 +17,10 @@ import org.springframework.security.core.GrantedAuthority; ...@@ -14,7 +17,10 @@ import org.springframework.security.core.GrantedAuthority;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.io.Serializable; import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.*; import java.util.*;
import java.util.function.Consumer;
/** /**
* spring security 权限管理类 * spring security 权限管理类
...@@ -26,44 +32,144 @@ public class AuthPermissionEvaluator implements PermissionEvaluator { ...@@ -26,44 +32,144 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
@Value("${r'${ibiz.enablePermissionValid:false}'}") @Value("${r'${ibiz.enablePermissionValid:false}'}")
boolean enablePermissionValid; //是否开启权限校验 boolean enablePermissionValid; //是否开启权限校验
/** /**
* 实体行为鉴权 * 服务接口鉴权
* @param authentication * @param authentication 用户
* @param entity * @param entity 实体
* @param action * @param action 操作
* @return * @return
*/ */
@Override @Override
@SneakyThrows
public boolean hasPermission(Authentication authentication, Object entity, Object action) { public boolean hasPermission(Authentication authentication, Object entity, Object action) {
if(!enablePermissionValid)
//未开启权限校验、超级管理员则不进行权限检查 return true;
if(AuthenticationUser.getAuthenticationUser().getSuperuser()==1 || !enablePermissionValid) Object principal = authentication.getPrincipal();
if(ObjectUtils.isEmpty(principal))
return false;
AuthenticationUser authenticationUser= (AuthenticationUser) authentication.getPrincipal();
if(authenticationUser.getSuperuser()==1)
return true; return true;
String strAction=String.valueOf(action); String strAction=String.valueOf(action);
Set<String> userAuthorities = getAuthorities(authentication,strAction); Set<String> userAuthorities = getAuthorities(authentication,strAction);
if(userAuthorities.size()==0) if(userAuthorities.size()==0)
return false; return false;
//拥有全部数据访问权限时,则跳过权限检查
if(isAllData(strAction,userAuthorities)){ if(isAllData(strAction,userAuthorities)){
return true; return true;
} }
if(entity instanceof ArrayList){ if(entity instanceof ArrayList){
List<EntityBase> entities= (List<EntityBase>) entity; List<EntityBase> entities= (List<EntityBase>) entity;
for(EntityBase entityBase: entities){ for(EntityBase entityBase: entities){
boolean result=actionValid(entityBase, strAction ,userAuthorities); boolean result=actionValid(entityBase, strAction ,userAuthorities,authenticationUser);
if(!result){ if(!result){
return false; return false;
} }
} }
} }
else if (entity instanceof QueryWrapperContext){
QueryWrapperContext queryWrapperContext= (QueryWrapperContext) entity;
setPermissionCondToSearchContext(getEntity(queryWrapperContext),queryWrapperContext,userAuthorities,authenticationUser);
}
else{ else{
EntityBase entityBase= (EntityBase) entity; EntityBase entityBase= (EntityBase) entity;
return actionValid(entityBase , strAction ,userAuthorities); return actionValid(entityBase , strAction ,userAuthorities,authenticationUser);
} }
return true; return true;
} }
/**
* 获取实体信息
* @param qc
* @return
*/
@SneakyThrows
private EntityBase getEntity(QueryWrapperContext qc){
EntityBase entity=null;
Type type =qc.getClass().getGenericSuperclass();
if(type instanceof ParameterizedType){
ParameterizedType parameterizedType= (ParameterizedType) qc.getClass().getGenericSuperclass();
Type [] typeArr= parameterizedType.getActualTypeArguments();
if(typeArr.length>0){
Class<EntityBase> entityClass = (Class) typeArr[0];
return entityClass.newInstance();
}
}
return entity;
}
/**
* searchContext中拼接权限条件
* @param entity 实体
* @param qc 查询上下文
* @param userAuthorities 用户权限
* @param authenticationUser 当前用户
*/
@SneakyThrows
private void setPermissionCondToSearchContext(EntityBase entity, QueryWrapperContext qc , Set<String> userAuthorities ,AuthenticationUser authenticationUser){
if(entity==null)
return ;
Map<String,String> permissionField=getPermissionField(entity);//获取组织、部门预置属性
String orgField=permissionField.get("orgfield");
String orgDeptField=permissionField.get("orgsecfield");
String createManField=permissionField.get("createmanfield");
Map<String, Set<String>> userInfo = authenticationUser.getOrgInfo();
Set<String> orgParent = userInfo.get("parentorg");
Set<String> orgChild = userInfo.get("suborg");
Set<String> orgDeptParent = userInfo.get("parentdept");
Set<String> orgDeptChild = userInfo.get("subdept");
Set<String> userOrg = new HashSet<>();
Set<String> userOrgDept = new HashSet<>();
Set<String> userCreateMan = new HashSet<>();
for(String authority:userAuthorities){
if(authority.endsWith("curorg")){ //本单位
userOrg.add(authenticationUser.getOrgid());
}
else if(authority.endsWith("porg")){//上级单位
userOrg.addAll(orgParent);
}
else if(authority.endsWith("sorg")){//下级单位
userOrg.addAll(orgChild);
}
else if(authority.endsWith("curorgdept")){//本部门
userOrgDept.add(authenticationUser.getMdeptid());
}
else if(authority.endsWith("porgdept")){//上级部门
userOrgDept.addAll(orgDeptParent);
}
else if(authority.endsWith("sorgdept")){//下级部门
userOrgDept.addAll(orgDeptChild);
}
else if (authority.endsWith("createman")){
userCreateMan.add(authority);
}
}
if(userOrg.size()==0 && userOrgDept.size()==0 && userCreateMan.size()==0){
qc.getSelectCond().apply("1<>1");
}
else{
Consumer<QueryWrapper> consumer = qw -> {
if(userOrg.size()>0){
Consumer<QueryWrapper> org = orgQw -> {
orgQw.in(orgField,userOrg);
};
qw.or(org);
}
if(userOrgDept.size()>0){
Consumer<QueryWrapper> dept = deptQw -> {
deptQw.in(orgDeptField,userOrgDept);
};
qw.or(dept);
}
if(userCreateMan.size()>0){
Consumer<QueryWrapper> createMan = createManQw -> {
createManQw.eq(createManField,authenticationUser.getUserid());
};
qw.or(createMan);
}
};
qc.getSelectCond().and(consumer);
}
}
@Override @Override
public boolean hasPermission(Authentication authentication, Serializable id, String action, Object params) { public boolean hasPermission(Authentication authentication, Serializable id, String action, Object params) {
...@@ -109,13 +215,12 @@ public class AuthPermissionEvaluator implements PermissionEvaluator { ...@@ -109,13 +215,12 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
* @param userAuthorities * @param userAuthorities
* @return * @return
*/ */
private boolean actionValid(EntityBase entity, String action , Set<String> userAuthorities){ private boolean actionValid(EntityBase entity, String action , Set<String> userAuthorities ,AuthenticationUser authenticationUser){
Map<String,String> permissionField=getPermissionField(entity);//获取组织、部门预置属性 Map<String,String> permissionField=getPermissionField(entity);//获取组织、部门预置属性
String orgField=permissionField.get("orgfield"); String orgField=permissionField.get("orgfield");
String orgDeptField=permissionField.get("orgsecfield"); String orgDeptField=permissionField.get("orgsecfield");
String createManField=permissionField.get("createmanfield"); String createManField=permissionField.get("createmanfield");
AuthenticationUser authenticationUser = AuthenticationUser.getAuthenticationUser();
Map<String, Set<String>> userInfo = authenticationUser.getOrgInfo(); Map<String, Set<String>> userInfo = authenticationUser.getOrgInfo();
Set<String> orgParent = userInfo.get("parentorg"); Set<String> orgParent = userInfo.get("parentorg");
Set<String> orgChild = userInfo.get("suborg"); Set<String> orgChild = userInfo.get("suborg");
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册