提交 64159458 编写于 作者: ibiz4j's avatar ibiz4j

合并分支 'dev' 到 'master'

Dev

查看合并请求 !12
......@@ -2,8 +2,8 @@
TARGET=PSSYSAPP
</#ibiztemplate>
<#assign httpPort = "8080">
<#assign nacosUrl = "172.16.102.211:8848" >
<#assign redisHost = "172.16.100.243" >
<#assign nacosUrl = "127.0.0.1:8848" >
<#assign redisHost = "127.0.0.1" >
<#assign redisPort = "6379" >
<#assign redisDataBase = "0" >
<#assign dbUserName="root">
......@@ -18,8 +18,8 @@ TARGET=PSSYSAPP
<#if depApp.getPSDCMSPlatformNode()??>
<#assign appPlatformNode=depApp.getPSDCMSPlatformNode()>
<#assign appPlatform=depApp.getPSDCMSPlatform()>
<#if appPlatform.getUserParam("nacos","172.16.102.211:8848")??>
<#assign nacosUrl = appPlatform.getUserParam("nacos","172.16.102.211:8848")>
<#if appPlatform.getUserParam("nacos","127.0.0.1:8848")??>
<#assign nacosUrl = appPlatform.getUserParam("nacos","127.0.0.1:8848")>
</#if>
<#if depApp.getUserParam("spring.redis.host","")?? && depApp.getUserParam("spring.redis.host","")!="">
<#assign redisHost = depApp.getUserParam("spring.redis.host","")>
......
......@@ -12,6 +12,10 @@ TARGET=PSSYSAPP
</#if>
server:
port: ${httpPort}
#Log配置
logging:
level:
${pub.getPKGCodeName()}: info
<#if item.getAllPSAppDataEntities?? && app.getAllPSAppDataEntities()??>
#zuul网关路由设置
zuul:
......
<#ibiztemplate>
TARGET=PSSYSAPP
</#ibiztemplate>
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<property name="LOG_PATH" value="logs" />
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %-40.40logger{39} : %msg%n" />
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="LOG_PATTERN2" value="${r'${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr([${LOG_LEVEL_PATTERN:-%5p}]) %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}'}" />
<!-- 控制台输出 -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${r'${LOG_PATTERN}'}</pattern>
</encoder>
</appender>
<#--<!-- LOGSTASH &ndash;&gt;-->
<#--<appender name="LOGSTASH"-->
<#-- class="net.logstash.logback.appender.LogstashTcpSocketAppender">-->
<#-- <destination>172.16.102.211:9601</destination>-->
<#-- <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">-->
<#-- <customFields>{"appname":"${app.getPKGCodeName()?lower_case}"}</customFields>-->
<#-- </encoder>-->
<#--</appender>-->
<!-- 按照每天生成日志文件 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${r'${LOG_PATH}'}/${sys.getCodeName()?lower_case}-${app.getPKGCodeName()?lower_case}.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${r'${LOG_PATTERN}'}</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="Console" />
<appender-ref ref="file" />
<#-- <appender-ref ref="LOGSTASH" />-->
</root>
</configuration>
<#ibiztemplate>
TARGET=PSSYSTEM
</#ibiztemplate>
<#assign bmogo=false>
<#if sys.getAllPSDataEntities()??>
<#list sys.getAllPSDataEntities() as de>
<#if de.getStorageMode()?? && de.getStorageMode()==2>
<#assign bmogo=true>
<#break >
</#if>
</#list>
</#if>
<#if bmogo==true>
version: "3.2"
services:
${sys.name}-mongodb:
image: mongo:4.2.3
ports:
- 27017:27017
volumes:
- $PWD/../../../../volumes/mongodb/:/data/db/
networks:
- agent_network
networks:
agent_network:
attachable: true
</#if>
\ No newline at end of file
<#ibiztemplate>
TARGET=PSSYSTEM
</#ibiztemplate>
<#assign dbUserName="root">
<#assign bflag=false>
<#if sys.getAllPSDevSlnMSDepAPIs()??>
<#list sys.getAllPSDevSlnMSDepAPIs() as depSysApi>
<#if depSysApi.getPSDBDevInst()??>
<#assign sysApiDBInst=depSysApi.getPSDBDevInst()>
<#assign dbUserName=sysApiDBInst.getUserName()>
<#if (sysApiDBInst.getDBType()=='MYSQL5')>
<#assign bflag=true>
</#if>
<#break>
</#if>
</#list>
</#if>
<#if bflag==true>
version: "3.2"
services:
${sys.name}-mysql:
image: mysql:5.7.20
volumes:
- $PWD/../../../../volumes/mysql/:/var/lib/mysql/
networks:
- agent_network
environment:
- TZ=Asia/Shanghai
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=${dbUserName}
ports:
- 3306:3306
command: mysqld --lower_case_table_names=1 --skip-ssl --character_set_server=utf8 --explicit_defaults_for_timestamp
networks:
agent_network:
attachable: true
</#if>
\ No newline at end of file
<#ibiztemplate>
TARGET=PSSYSTEM
</#ibiztemplate>
version: "3.2"
services:
${sys.name}-nacos:
image: nacos/nacos-server:latest
container_name: nacos-standalone
environment:
- PREFER_HOST_MODE=hostname
- MODE=standalone
ports:
- "8848:8848"
networks:
- agent_network
networks:
agent_network:
attachable: true
<#ibiztemplate>
TARGET=PSSYSTEM
</#ibiztemplate>
<#assign bflag=false>
<#if sys.getAllPSDevSlnMSDepAPIs()??>
<#list sys.getAllPSDevSlnMSDepAPIs() as depSysApi>
<#if depSysApi.getPSDBDevInst()??>
<#assign sysApiDBInst=depSysApi.getPSDBDevInst()>
<#if (sysApiDBInst.getDBType()=='ORACLE')>
<#assign bflag=true>
</#if>
<#break>
</#if>
</#list>
</#if>
<#if bflag==true>
version: "3.2"
services:
${sys.name}-orcl:
image: liumiaocn/oracle:11.2.0
ports:
- "38080:8080"
- "1521:1521"
environment:
- DEFAULT_SYS_PASS=root
- processes=500
- sessions=555
- transactions=611
volumes:
- $PWD/../../../../volumes/orcl/:/u01/app/oracle/
networks:
- agent_network
networks:
agent_network:
attachable: true
</#if>
\ No newline at end of file
<#ibiztemplate>
TARGET=PSSYSTEM
</#ibiztemplate>
<#assign dbUserName="root">
<#assign bflag=false>
<#if sys.getAllPSDevSlnMSDepAPIs()??>
<#list sys.getAllPSDevSlnMSDepAPIs() as depSysApi>
<#if depSysApi.getPSDBDevInst()??>
<#assign sysApiDBInst=depSysApi.getPSDBDevInst()>
<#assign dbUserName=sysApiDBInst.getUserName()>
<#if (sysApiDBInst.getDBType()=='POSTGRESQL')>
<#assign bflag=true>
</#if>
<#break>
</#if>
</#list>
</#if>
<#if bflag==true>
version: "3.2"
services:
${sys.name}-postgresql:
container_name: postgres
image: postgres
restart: always
environment:
POSTGRES_DB: ${dbUserName}
POSTGRES_USER: ${dbUserName}
POSTGRES_PASSWORD: root
ports:
- 5432:5432
volumes:
- $PWD/../../../../volumes/postgresql/:/var/lib/postgresql/data
networks:
- agent_network
networks:
agent_network:
attachable: true
</#if>
\ No newline at end of file
<#ibiztemplate>
TARGET=PSSYSTEM
</#ibiztemplate>
version: "3.2"
services:
${sys.name}-redis:
image: redis
ports:
- 6379:6379
environment:
- TZ=Asia/Shanghai
logging:
driver: "json-file"
command: redis-server
networks:
- agent_network
networks:
agent_network:
attachable: true
<#ibiztemplate>
TARGET=PSSYSTEM
</#ibiztemplate>
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<property name="LOG_PATH" value="logs" />
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %-40.40logger{39} : %msg%n" />
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="LOG_PATTERN2" value="${r'${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr([${LOG_LEVEL_PATTERN:-%5p}]) %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}'}" />
<!-- 控制台输出 -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${r'${LOG_PATTERN}'}</pattern>
</encoder>
</appender>
<#--<!-- LOGSTASH &ndash;&gt;-->
<#--<appender name="LOGSTASH"-->
<#-- class="net.logstash.logback.appender.LogstashTcpSocketAppender">-->
<#-- <destination>172.16.102.211:9601</destination>-->
<#-- <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">-->
<#-- <customFields>{"appname":"${app.getPKGCodeName()?lower_case}"}</customFields>-->
<#-- </encoder>-->
<#--</appender>-->
<!-- 按照每天生成日志文件 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${r'${LOG_PATH}'}/${sys.getCodeName()?lower_case}.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${r'${LOG_PATTERN}'}</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="Console" />
<appender-ref ref="file" />
<#-- <appender-ref ref="LOGSTASH" />-->
</root>
</configuration>
......@@ -95,10 +95,10 @@ TARGET=PSSYSTEM
<artifactId>liquibase-core</artifactId>
</dependency>
<!--xxl-job定时服务 -->
<!--baomidou-jobs定时服务 -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<groupId>com.baomidou</groupId>
<artifactId>jobs-spring-boot-starter</artifactId>
</dependency>
</dependencies>
......
......@@ -97,8 +97,10 @@ public class ${item.getCodeName()} extends EntityMP implements Serializable {
<#if defield.isKeyDEField()==true>
<#if defield.getDataType() == "ACID">
@TableId(value= "${columnname}",type=IdType.AUTO)
<#elseif defield.getDataType() == "BIGINT">
@TableId(value= "${columnname}",type=IdType.ASSIGN_ID)
<#else>
@TableId(value= "${columnname}",type=IdType.UUID)
@TableId(value= "${columnname}",type=IdType.ASSIGN_UUID)
</#if>
<#elseif defield.isPhisicalDEField()==false>
@TableField(exist = false)
......
......@@ -20,7 +20,20 @@ TARGET=PSDATAENTITY
</#if>
</#list>
</#if>
<#break>
</#list>
</#if>
<#comment>判断是否有1N的主关系属性映射(sum.avg.max.min.count..)</#comment>
<#assign hasPSDERsMapping=false>
<#if item.getMinorPSDERs?? && item.getMinorPSDERs()??>
<#list item.getMinorPSDERs() as MinorPSDER>
<#if MinorPSDER.getPSDER1NDEFieldMaps?? && MinorPSDER.getPSDER1NDEFieldMaps()?? && MinorPSDER.getDERType() =='DER1N' && (MinorPSDER.getMajorPSDataEntity().getStorageMode()==1||MinorPSDER.getMajorPSDataEntity().getStorageMode()==2||MinorPSDER.getMajorPSDataEntity().getStorageMode()==4) >
<#list MinorPSDER.getPSDER1NDEFieldMaps() as derField>
<#if derField.getMapType()=="COUNT" || derField.getMapType()=="SUM"|| derField.getMapType()=="AVG" || derField.getMapType()=="MAX" || derField.getMapType()=="MIN">
<#assign hasPSDERsMapping=true>
<#break>
</#if>
</#list>
</#if>
</#list>
</#if>
<#comment>判断当前实体是否为索引子实体</#comment>
......@@ -263,6 +276,9 @@ ${deaction.getRender().code}
</#if>
<#comment>成功后get填充一次完整信息</#comment>
CachedBeanCopier.copy(get(et.get${srfcaseformat(keyfield.codeName,'l_u2lC')?cap_first}()),et);
<#if hasPSDERsMapping>
updateParentData(et);
</#if>
<#comment>附加数据逻辑-操作后</#comment>
<@addAfterLogic deaction/>
return true;
......@@ -279,6 +295,10 @@ ${deaction.getRender().code}
<#else>
this.saveBatch(list,batchSize);
</#if>
<#comment>批量更新父数据(实体关系属性映射)</#comment>
<#if hasPSDERsMapping>
updateParentDataBatch(list);
</#if>
}
<#elseif deaction.getCodeName()?lower_case == "update">
......@@ -323,6 +343,9 @@ ${deaction.getRender().code}
</#if>
<#comment>成功后get填充一次完整信息</#comment>
CachedBeanCopier.copy(get(et.get${srfcaseformat(keyfield.codeName,'l_u2lC')?cap_first}()),et);
<#if hasPSDERsMapping>
updateParentData(et);
</#if>
<#comment>附加数据逻辑-操作后</#comment>
<@addAfterLogic deaction/>
return true;
......@@ -337,6 +360,10 @@ ${deaction.getRender().code}
list.forEach(item->fillParentData(item));
</#if>
updateBatchById(list,batchSize);
<#comment>批量更新父数据(实体关系属性映射)</#comment>
<#if hasPSDERsMapping>
updateParentDataBatch(list);
</#if>
}
<#elseif deaction.getCodeName()?lower_case == "save">
......@@ -388,6 +415,9 @@ ${deaction.getRender().code}
<#comment>附加数据逻辑-操作前,通过key构造entity传入逻辑中</#comment>
<@buildEntityParam deaction/>
<@addBoforeLogic deaction/>
<#if hasPSDERsMapping>
${item.getCodeName()} entity=this.get(key);
</#if>
<#if de.getMajorPSDERs()??>
<#list de.getMajorPSDERs() as der>
<#if der.getDERType() =='DER1N' && der.isNestedRS() && der.getMinorPSDataEntity()?? && (der.getMinorPSDataEntity().getStorageMode()==1||der.getMinorPSDataEntity().getStorageMode()==2||der.getMinorPSDataEntity().getStorageMode()==4) >
......@@ -402,6 +432,9 @@ ${deaction.getRender().code}
<#if isIndexSubDE>
${srfcaseformat(majorIndexDECodeName,'l_u2lC')}Service.remove(key);
</#if>
<#if hasPSDERsMapping>
updateParentData(entity);
</#if>
<#comment>附加数据逻辑-操作后</#comment>
<@addAfterLogic deaction/>
return result ;
......@@ -409,7 +442,14 @@ ${deaction.getRender().code}
@Override
public void removeBatch(Collection<${srfjavatype(keyfield.stdDataType)}> idList) {
<#if hasPSDERsMapping>
List<${item.getCodeName()}> entities= baseMapper.selectBatchIds(idList);
</#if>
removeByIds(idList);
<#comment>批量更新父数据(实体关系属性映射)</#comment>
<#if hasPSDERsMapping>
updateParentDataBatch(entities);
</#if>
}
<#elseif deaction.getCodeName()?lower_case == "getdraft">
......@@ -624,6 +664,88 @@ ${deaction.getRender().code}
}
</#if>
<#comment>更新父数据(实体关系属性映射)</#comment>
<#if hasPSDERsMapping>
/**
* 更新父数据(实体关系属性映射)
* @param et
*/
private void updateParentData(${item.getCodeName()} et){
<#list item.getMinorPSDERs() as MinorPSDER>
<#if MinorPSDER?? && MinorPSDER.getDERType()=='DER1N' && (MinorPSDER.getMajorPSDataEntity().getStorageMode()==1||MinorPSDER.getMajorPSDataEntity().getStorageMode()==2||MinorPSDER.getMajorPSDataEntity().getStorageMode()==4)>
<#if MinorPSDER.getMajorPSDataEntity?? && MinorPSDER.getMajorPSDataEntity()?? && MinorPSDER.getCodeName?? && MinorPSDER.getCodeName()??>
<#assign MajorEntity = MinorPSDER.getMajorPSDataEntity()>
<#assign MajorEntityName=srfcaseformat(MinorPSDER.getCodeName(),'l_u2lC')>
<#assign MajorKeyFieldName =MinorPSDER.getPSPickupDEField().name?lower_case>
<#assign MajorKeyFieldCodeName =srfcaseformat(MinorPSDER.getPSPickupDEField().codeName,'l_u2lC')?cap_first>
//实体关系[${MinorPSDER.name}]
if(!ObjectUtils.isEmpty(et.get${MajorKeyFieldCodeName}())){
<#if MinorPSDER.getPSDER1NDEFieldMaps?? && MinorPSDER.getPSDER1NDEFieldMaps()??>
${pub.getPKGCodeName()}.core.${MajorEntity.getPSSystemModule().getCodeName()?lower_case}.domain.${MajorEntity.getCodeName()} ${MajorEntityName}=new ${pub.getPKGCodeName()}.core.${MajorEntity.getPSSystemModule().getCodeName()?lower_case}.domain.${MajorEntity.getCodeName()}();
<#list MinorPSDER.getPSDER1NDEFieldMaps() as derField>
<#if derField.getMapType()=="COUNT" || derField.getMapType()=="SUM"|| derField.getMapType()=="AVG" || derField.getMapType()=="MAX" || derField.getMapType()=="MIN">
<#assign MajorEntityDEFieldCodeName=srfcaseformat(derField.getMajorPSDEField().codeName,'l_u2lC')>
<#if derField.getMapType()=="COUNT">
${MajorEntityName}.set("${MajorEntityDEFieldCodeName}",baseMapper.selectCount(new QueryWrapper().eq(true,"${MajorKeyFieldName}",et.get${MajorKeyFieldCodeName}())));
<#else>
<#assign MinorEntityDEFieldName=derField.getMinorPSDEField().name?lower_case>
<#if derField.getMapType()=="SUM">
<#assign derFieldType="sum("+MinorEntityDEFieldName+")">
<#elseif derField.getMapType()=="AVG">
<#assign derFieldType="avg("+MinorEntityDEFieldName+")">
<#elseif derField.getMapType()=="MAX">
<#assign derFieldType="max("+MinorEntityDEFieldName+")">
<#elseif derField.getMapType()=="MIN">
<#assign derFieldType="min("+MinorEntityDEFieldName+")">
</#if>
<#if derFieldType??>
List<Object> objects_${derField_index} = baseMapper.selectObjs(new QueryWrapper().select("${derFieldType}").eq(true,"${MajorKeyFieldName}",et.get${MajorKeyFieldCodeName}()));
if(!ObjectUtils.isEmpty(objects_${derField_index}) && objects_${derField_index}.size()>0){
${MajorEntityName}.set("${MajorEntityDEFieldCodeName}",objects_${derField_index}.get(0));
}
</#if>
</#if>
</#if>
</#list>
${MajorEntityName}.set("${MajorKeyFieldCodeName?lower_case}",et.get${MajorKeyFieldCodeName}());
${srfcaseformat(MinorPSDER.getMajorPSDataEntity().getCodeName(),'l_u2lC')}Service.update(${MajorEntityName});
</#if>
}
</#if>
</#if>
</#list>
}
</#if>
<#comment>批量更新父数据(实体关系属性映射)</#comment>
<#if hasPSDERsMapping>
/**
* 批量更新父数据(实体关系属性映射)
* @param entities
*/
private void updateParentDataBatch(List <${item.getCodeName()}> entities){
Map <Object,${item.getCodeName()}> map =new HashMap<>();
if(entities.size()>0){
for(${item.getCodeName()} entity: entities){
<#list item.getMinorPSDERs() as MinorPSDER>
<#if MinorPSDER?? && MinorPSDER.getDERType()=='DER1N' && (MinorPSDER.getMajorPSDataEntity().getStorageMode()==1||MinorPSDER.getMajorPSDataEntity().getStorageMode()==2||MinorPSDER.getMajorPSDataEntity().getStorageMode()==4)>
<#if MinorPSDER.getMajorPSDataEntity?? && MinorPSDER.getMajorPSDataEntity()?? && MinorPSDER.getCodeName?? && MinorPSDER.getCodeName()??>
<#assign MajorKeyFieldCodeName =srfcaseformat(MinorPSDER.getPSPickupDEField().codeName,'l_u2lC')?cap_first>
//实体关系[${MinorPSDER.name}]
if(!ObjectUtils.isEmpty(entity.get${MajorKeyFieldCodeName}()) && !map.containsKey(entity.get${MajorKeyFieldCodeName}())){
map.put(entity.get${MajorKeyFieldCodeName}(),entity);
}
</#if>
</#if>
</#list>
}
if(map.size()>0){
map.values().forEach(entity -> updateParentData(entity));
}
}
}
</#if>
<#comment>同步数据到索引主实体</#comment>
<#if isIndexSubDE && indexPSDER??>
@Autowired
......@@ -2003,7 +2125,9 @@ ${deaction.getRender().code}
<#comment>实体行为参数</#comment>
<#macro addDEActionParam deaction>
<#if deaction.getParamMode?? && deaction.getParamMode()?? && deaction.getPSDEActionParams()??>
<#assign hasDEActionParam=false>
<#list deaction.getPSDEActionParams() as actionParam>
<#assign hasDEActionParam=true>
<#assign actionParamValue="null">
<#assign targetFieldName="null">
<#if actionParam.getValueType()=='SESSION' || actionParam.getValueType()=='PARAM'|| actionParam.getValueType()=='CONTEXT'>
......@@ -2033,8 +2157,18 @@ ${deaction.getRender().code}
<#assign actionParamValue="new java.sql.Timestamp(new java.util.Date().getTime())">
<#elseif actionParam.getValueType()=='APPDATA'><#comment>当前应用数据</#comment>
</#if>
<#if actionParam.getPSDEField().isKeyDEField()==true && actionParamValue=='null'>
<#else>
et.set("${actionParamFieldCodeName}",${actionParamValue});
</#if>
</#list>
<#if hasDEActionParam>
<#if deaction.getActionType()== "USERCREATE">
create(et);
<#elseif deaction.getActionType()== "USERUPDATE">
update(et);
</#if>
</#if>
</#if>
</#macro>
......
......@@ -2,82 +2,25 @@
TARGET=PSSYSTEM
</#ibiztemplate>
package ${pub.getPKGCodeName()}.core.util.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
<#assign enableBackService=false>
<#if sys.getAllPSSysBackServices()??>
<#list sys.getAllPSSysBackServices() as backService>
<#assign enableBackService=true>
<#break>
</#list>
</#if>
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;
/**
* xxl-job config
* 分布式任务调度平台XXL-JOB配置加载
* @author xuxueli 2017-04-28
*/
<#if enableBackService>
import com.baomidou.jobs.starter.EnableJobs;
</#if>
@ConditionalOnExpression("!'${r'${jobs.admin-address:NA}'}'.equals('NA')")
<#if enableBackService>
@EnableJobs
</#if>
@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${r'${xxl.job.admin.addresses:}'}")
private String adminAddresses;
@Value("${r'${xxl.job.accessToken:}'}")
private String accessToken;
@Value("${r'$'}{xxl.job.executor.appname:${sys.getName()}}")
private String appName;
@Value("${r'${xxl.job.executor.ip:127.0.0.1}'}")
private String ip;
@Value("${r'${xxl.job.executor.port:9999}'}")
private int port;
@Value("${r'${xxl.job.executor.logpath:/app/joblog}'}")
private String logPath;
@Value("${r'${xxl.job.executor.logretentiondays:-1}'}")
private int logRetentionDays;
@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobSpringExecutor xxlJobExecutor() {
if(!StringUtils.isEmpty(adminAddresses)){
logger.info(">>>>>>>>>>> xxl-job config init.");
logger.info(">>>>>>>>>>> adminAddresses:"+adminAddresses);
logger.info(">>>>>>>>>>> appName:"+appName);
logger.info(">>>>>>>>>>> ip:"+ip);
logger.info(">>>>>>>>>>> port:"+port);
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppName(appName);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
logger.info(">>>>>>>>>>> xxl-job config not init.");
return null;
}
/**
* 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP
*
* 1、引入依赖:
* <dependency>
* <groupId>org.springframework.cloud</groupId>
* <artifactId>spring-cloud-commons</artifactId>
* <version>${r'${version}"'}</version>
* </dependency>
*
* 2、配置文件,或者容器启动变量
* spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
*
* 3、获取IP
* String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
*/
}
......@@ -3,18 +3,17 @@ TARGET=PSSYSBACKSERVICE
</#ibiztemplate>
package ${pub.getPKGCodeName()}.core.util.job;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import org.springframework.beans.factory.annotation.Autowired;
import com.baomidou.jobs.api.JobsResponse;
import com.baomidou.jobs.exception.JobsException;
import com.baomidou.jobs.handler.IJobsHandler;
import org.springframework.stereotype.Component;
@JobHandler(value="${item.codeName}JobHandler")
@Component
public class ${item.codeName}JobHandler extends IJobHandler {
@Component("${item.codeName}JobHandler")
public class ${item.codeName}JobHandler implements IJobsHandler {
@Override
public ReturnT<String> execute(String params) throws Exception {
return new ReturnT(200, "服务调用成功");
public JobsResponse execute(String tenantId, String param) throws JobsException {
System.out.println("执行 DemoJobHandler tenantId=" + tenantId + ",param=" + param);
return JobsResponse.ok();
}
}
......@@ -175,14 +175,25 @@ TARGET=PSDATAENTITY
<#if singleQuery.getAllPSDEDataQueryCodes()??>
<#list singleQuery.getAllPSDEDataQueryCodes() as dedqcode>
<#assign dbtype=dedqcode.getDBType()?lower_case?replace("mysql5","mysql")>
<#assign hasIgnoreNullValueCond=checkIgnoreNullvalueCond(dedqcode)>
<!--数据查询[${singleQuery.getCodeName()}]-->
<sql id="${singleQuery.getCodeName()}" databaseId="${dbtype}">
<![CDATA[ ${contextParamConvert(srfjavasqlcode(dedqcode.getQueryCode()))}
<#if dedqcode.getPSDEDataQueryCodeConds()??>
<#list dedqcode.getPSDEDataQueryCodeConds() as dedqfieldcond>
<#if (dedqfieldcond_index==0)> WHERE </#if> <#if (dedqfieldcond_index>0)> AND </#if>${contextParamConvert(srfjavasqlcode(dedqfieldcond.getCustomCond()))}
</#list>
<#comment>判断是否存在忽略空值条件</#comment>
<#if hasIgnoreNullValueCond>
<![CDATA[ ${contextParamConvert(srfjavasqlcode(dedqcode.getQueryCode()))} ]]>
<#if dedqcode.getPSDEDataQueryCodeConds()??>
<#list dedqcode.getPSDEDataQueryCodeConds() as dedqfieldcond>
<#if (dedqfieldcond_index==0)> WHERE </#if> <#if (dedqfieldcond_index>0)> AND </#if>${checkNullContextParamConvert(srfjavasqlcode(dedqfieldcond.getCustomCond()))}
</#list>
</#if>
<#else>
<![CDATA[ ${contextParamConvert(srfjavasqlcode(dedqcode.getQueryCode()))}
<#if dedqcode.getPSDEDataQueryCodeConds()??>
<#list dedqcode.getPSDEDataQueryCodeConds() as dedqfieldcond>
<#if (dedqfieldcond_index==0)> WHERE </#if> <#if (dedqfieldcond_index>0)> AND </#if>${contextParamConvert(srfjavasqlcode(dedqfieldcond.getCustomCond()))}
</#list>
</#if>]]>
</#if>
</sql>
</#list>
</#if>
......@@ -191,18 +202,47 @@ TARGET=PSDATAENTITY
</mapper>
</#if>
<#comment>上下文参数转换 原字符串:${srfdatacontext('field','{"defname":"PORGNAME","dename":"IBZORG"}')})</#comment>
<#comment>第一次替换:#{srf.datacontext.field','{"defname":"PORGNAME","dename":"IBZORG"}')})</#comment>
<#comment>第二次替换:#{srf.datacontext.field}</#comment>
<#comment>第三次替换: #{srf.datacontext.ORGID} --> #{srf.datacontext.orgid} </#comment>
<#comment>数据查询context条件转换</#comment>
<#function contextParamConvert contextParam>
<#assign resultParam="">
<#assign resultParam=contextParam?replace('$\{srfdatacontext(\'','#\{srf.datacontext.')?replace("','\\{[\\S]*}'\\)}","\\}","r")><#comment>数据上下文</#comment>
<#assign resultParam=resultParam?replace('$\{srfsessioncontext(\'','#\{srf.sessioncontext.')?replace("','\\{[\\S]*}'\\)}","\\}","r")><#comment>用户上下文</#comment>
<#assign resultParam=resultParam?replace('$\{srfwebcontext(\'','#\{srf.webcontext.')?replace("','\\{[\\S]*}'\\)}","\\}","r")><#comment>网页请求上下文</#comment>
<#assign params=resultParam?matches('#\\{srf.[\\S]*}')>
<#comment>平台配置格式替换${srfdatacontext('cityid','{"defname":"CITYID","dename":"CITY"}')} --> #{srf.srfdatacontext.cityid} </#comment>
<#assign resultParam=contextParam?replace("\\$\\{srf(datacontext|sessioncontext|webcontext)\\('(\\w+)','(.*?)'\\)}","#\{srf.$1.$2}","r")>
<#comment>用户配置格式替换${srfdatacontext('cityid')} --> #{srf.srfdatacontext.cityid} </#comment>
<#assign resultParam=resultParam?replace("\\$\\{srf(datacontext|sessioncontext|webcontext)\\('(\\w+)'\\)}","#\{srf.$1.$2}","r")>
<#comment>将上下文参数转小写 #{srf.srfdatacontext.SRFORGID} --> #{srf.srfdatacontext.srforgid}</#comment>
<#assign params=resultParam?matches('srf.(datacontext|sessioncontext|webcontext).(\\w+)')>
<#list params as param>
<#assign resultParam=resultParam?replace(param,param?lower_case)><#comment>将上下文参数转小写</#comment>
<#assign resultParam=resultParam?replace(param,param?lower_case,'i')>
</#list>
<#--<#assign resultParam="">-->
<#--<#assign resultParam=contextParam?replace('$\{srfdatacontext(\'','#\{srf.datacontext.')?replace("','\\{[\\S]*}'\\)}","\\}","r")><#comment>数据上下文</#comment>-->
<#--<#assign resultParam=resultParam?replace('$\{srfsessioncontext(\'','#\{srf.sessioncontext.')?replace("','\\{[\\S]*}'\\)}","\\}","r")><#comment>用户上下文</#comment>-->
<#--<#assign resultParam=resultParam?replace('$\{srfwebcontext(\'','#\{srf.webcontext.')?replace("','\\{[\\S]*}'\\)}","\\}","r")><#comment>网页请求上下文</#comment>-->
<#--<#assign params=resultParam?matches('#\\{srf.[\\S]*}')>-->
<#--<#list params as param>-->
<#--<#assign resultParam=resultParam?replace(param,param?lower_case)><#comment>将上下文参数转小写</#comment>-->
<#--</#list>-->
<#return resultParam>
</#function>
<#comment>数据查询忽略空值条件转换</#comment>
<#function checkNullContextParamConvert contextParam>
<#comment>获取数据查询中的条件,并对条件进行转义 <![CDATA[ age <='20' ]]></#comment>
<#assign resultParam=contextParam?replace("(\\s+[\\w|\\.|\\`]+\\s*?)(<>|<=|<|>=|>)(\\s*[\\w|\\'|$\{}()'\",:\\\\]+\\s+?)"," <![CDATA[ $1$2$3 ]]> ","r")>
<#comment>获取模型中的空值条件,在条件外层补充mybatis判断条件 <choose><when test="srf.datacontext.name != null"> <![CDATA[ t1.`NAME` <= #{srf.datacontext.name} ]]> </when><otherwise>1=1</otherwise></choose> </#comment>
<#assign resultParam=resultParam?replace("<#assign _value=srf(datacontext|sessioncontext|webcontext)\\('(\\w+)','(.*?)'\\)><#if _value\\?length gt 0>(.*?)=(.*?)<#else>1=1</#if>","<choose><when test=\"srf.$1.$2 != null\"> <![CDATA[ $4= #\{srf.$1.$2} ]]> </when><otherwise>1=1</otherwise></choose>","r")>
<#comment>对数据查询中的其余条件的context进行解析</#comment>
<#assign resultParam=contextParamConvert(resultParam)>
<#return resultParam>
</#function>
<#comment>计算当前数据查询中是否包含空值忽略的条件</#comment>
<#function checkIgnoreNullvalueCond dataQueryCode>
<#if dataQueryCode.getPSDEDataQueryCodeConds()??>
<#list dataQueryCode.getPSDEDataQueryCodeConds() as dedqfieldcond>
<#if srfjavasqlcode(dedqfieldcond.getCustomCond())?matches("(.*?)srfdatacontext(.*?)\\\\\"ignoreempty\\\\\":true(.*?)")>
<#return true>
</#if>
</#list>
</#if>
<#return false>
</#function>
......@@ -78,8 +78,8 @@ TARGET=PSSYSTEM
<!--httpClient -->
<openfeign-httpclient.version>11.0</openfeign-httpclient.version>
<!--xxl-job定时服务 -->
<xxl-job.version>2.1.0</xxl-job.version>
<!--baomidou-jobs定时服务 -->
<baomidou-jobs.version>1.0.3</baomidou-jobs.version>
<#if sys.getAllPSSystemDBConfigs()??>
<#list sys.getAllPSSystemDBConfigs() as dbConfig>
......@@ -279,9 +279,9 @@ TARGET=PSSYSTEM
</dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>${r'${xxl-job.version}'}</version>
<groupId>com.baomidou</groupId>
<artifactId>jobs-spring-boot-starter</artifactId>
<version>${r'${baomidou-jobs.version}'}</version>
</dependency>
</dependencies>
......
......@@ -2,8 +2,8 @@
TARGET=PSSYSSERVICEAPI
</#ibiztemplate>
<#assign httpPort = "8081">
<#assign nacosUrl = "172.16.102.211:8848" >
<#assign redisHost = "172.16.100.243" >
<#assign nacosUrl = "127.0.0.1:8848" >
<#assign redisHost = "127.0.0.1" >
<#assign redisPort = "6379" >
<#assign redisDataBase = "0" >
<#assign dbUserName="root">
......@@ -18,8 +18,8 @@ TARGET=PSSYSSERVICEAPI
<#if depSysApi.getPSDCMSPlatformNode()??>
<#assign depSysApiPlatformNode=depSysApi.getPSDCMSPlatformNode()>
<#assign depSysApiPlatform=depSysApi.getPSDCMSPlatform()>
<#if depSysApiPlatform.getUserParam("nacos","172.16.102.211:8848")??>
<#assign nacosUrl = depSysApiPlatform.getUserParam("nacos","172.16.102.211:8848")>
<#if depSysApiPlatform.getUserParam("nacos","127.0.0.1:8848")??>
<#assign nacosUrl = depSysApiPlatform.getUserParam("nacos","127.0.0.1:8848")>
</#if>
<#if depSysApi.getUserParam("spring.redis.host","")?? && depSysApi.getUserParam("spring.redis.host","")!="">
<#assign redisHost = depSysApi.getUserParam("spring.redis.host","")>
......
......@@ -12,3 +12,7 @@ TARGET=PSSYSSERVICEAPI
</#if>
server:
port: ${httpPort}
#Log配置
logging:
level:
${pub.getPKGCodeName()}: info
\ No newline at end of file
<#ibiztemplate>
TARGET=PSSYSSERVICEAPI
</#ibiztemplate>
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<property name="LOG_PATH" value="logs" />
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %-40.40logger{39} : %msg%n" />
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="LOG_PATTERN2" value="${r'${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr([${LOG_LEVEL_PATTERN:-%5p}]) %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}'}" />
<!-- 控制台输出 -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${r'${LOG_PATTERN}'}</pattern>
</encoder>
</appender>
<#--<!-- LOGSTASH &ndash;&gt;-->
<#--<appender name="LOGSTASH"-->
<#-- class="net.logstash.logback.appender.LogstashTcpSocketAppender">-->
<#-- <destination>172.16.102.211:9601</destination>-->
<#-- <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">-->
<#-- <customFields>{"appname":"${app.getPKGCodeName()?lower_case}"}</customFields>-->
<#-- </encoder>-->
<#--</appender>-->
<!-- 按照每天生成日志文件 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${r'${LOG_PATH}'}/${sys.getCodeName()?lower_case}-${item.getCodeName()?lower_case}.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${r'${LOG_PATTERN}'}</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>100MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="Console" />
<appender-ref ref="file" />
<#-- <appender-ref ref="LOGSTASH" />-->
</root>
</configuration>
......@@ -2,12 +2,12 @@
TARGET=PSSYSTEM
</#ibiztemplate>
<#comment>通用配置文件</#comment>
<#assign nacosUrl = "172.16.102.211:8848" >
<#assign redisHost = "172.16.100.243" >
<#assign nacosUrl = "127.0.0.1:8848" >
<#assign redisHost = "127.0.0.1" >
<#assign redisPort = "6379" >
<#assign redisDataBase = "0" >
<#assign dbUserName="root">
<#assign dbPassWord="123456">
<#assign dbPassWord="root">
<#assign dbUrl="jdbc:mysql://127.0.0.1:3306/"+sys.name+"?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true">
<#assign dbDriver="com.mysql.jdbc.Driver">
<#comment>前端应用微服务平台配置</#comment>
......@@ -15,11 +15,11 @@ TARGET=PSSYSTEM
<#list sys.getAllPSDevSlnMSDepApps() as depApp>
<#if depApp.getPSDCMSPlatform()??>
<#assign appPlatform=depApp.getPSDCMSPlatform()>
<#if appPlatform.getUserParam("nacos","172.16.102.211:8848")??>
<#assign nacosUrl = appPlatform.getUserParam("nacos","172.16.102.211:8848")>
<#if appPlatform.getUserParam("nacos","127.0.0.1:8848")??>
<#assign nacosUrl = appPlatform.getUserParam("nacos","127.0.0.1:8848")>
</#if>
<#if appPlatform.getUserParam("spring.redis.host","172.16.100.243")??>
<#assign redisHost = appPlatform.getUserParam("spring.redis.host","172.16.100.243")>
<#if appPlatform.getUserParam("spring.redis.host","127.0.0.1")??>
<#assign redisHost = appPlatform.getUserParam("spring.redis.host","127.0.0.1")>
</#if>
<#if appPlatform.getUserParam("spring.redis.port","6379")??>
<#assign redisPort = appPlatform.getUserParam("spring.redis.port","6379")>
......@@ -36,11 +36,11 @@ TARGET=PSSYSTEM
<#list sys.getAllPSDevSlnMSDepAPIs() as depSysApi>
<#if depSysApi.getPSDCMSPlatform()?? >
<#assign sysApiPlatform=depSysApi.getPSDCMSPlatform()>
<#if sysApiPlatform.getUserParam("nacos","172.16.102.211:8848")??>
<#assign nacosUrl = sysApiPlatform.getUserParam("nacos","172.16.102.211:8848")>
<#if sysApiPlatform.getUserParam("nacos","127.0.0.1:8848")??>
<#assign nacosUrl = sysApiPlatform.getUserParam("nacos","127.0.0.1:8848")>
</#if>
<#if sysApiPlatform.getUserParam("spring.redis.host","172.16.100.243")??>
<#assign redisHost = sysApiPlatform.getUserParam("spring.redis.host","172.16.100.243")>
<#if sysApiPlatform.getUserParam("spring.redis.host","127.0.0.1")??>
<#assign redisHost = sysApiPlatform.getUserParam("spring.redis.host","127.0.0.1")>
</#if>
<#if sysApiPlatform.getUserParam("spring.redis.port","6379")??>
<#assign redisPort = sysApiPlatform.getUserParam("spring.redis.port","6379")>
......@@ -191,6 +191,13 @@ feign:
enabled: true
sentinel:
enabled: true
compression:
request:
enabled: true
mime-types: application/javascript,text/css,application/json,application/xml,text/html,text/xml,text/plain
min-response-size: 10240
response:
enabled: true
#Log配置
logging:
......@@ -213,16 +220,17 @@ ibiz:
enablePermissionValid: ${enableDataAcc}
cacheLevel: L1 #(L1)一级本地caffeine缓存;(L2)caffeine缓存+Redis缓存
#xxl-job定时服务
xxl:
job:
accessToken:
admin:
addresses: #127.0.0.1
executor:
appname: ${sys.getName()}
ip:
port: 9999
logpath: /app/joblog
logretentiondays: -1
### jobs
jobs:
#admin-address: http://127.0.0.1:40005
app-name: ${sys.getName()}
app-port: 9999
#app-ip: 127.0.0.1
### 启用Gzip压缩
server:
compression:
enabled: true
mime-types: application/javascript,text/css,application/json,application/xml,text/html,text/xml,text/plain
min-response-size: 10240
<#ibiztemplate>
TARGET=PSSYSTEM
</#ibiztemplate>
*volumes
*target
.settings
*node_modules
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册