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

合并分支 'dev' 到 '2020.08.10【669】'

Dev合并

查看合并请求 !23
# **iBiz4j Spring R7 Template ChangeLog**
## [v2020.08.31]
- 消息集成:适配RT消息接口,通过钉钉、微信消息及短信等方式发送工作流待办消息
- 数据导入:批量数据采用异步方式进行导入,避免因数据量过大导致前端请求超时问题
## [v2020.08.18]
- 实体数据查询支持配置服务插件
......
......@@ -89,6 +89,10 @@ zuul:
path: /dictionarys/**
serviceId: ${r'${ibiz.ref.service.dict:ibzdict-api}'}
stripPrefix: false
disk:
path: /net-disk/**
serviceId: ${r'${ibiz.ref.service.disk:ibzdisk-api}'}
stripPrefix: false
</#if>
</#if>
<#comment>通过设置该参数,避免Zuul转发请求时丢失Authorization请求头信息</#comment>
......
......@@ -99,6 +99,10 @@ zuul:
path: /dictionarys/**
serviceId: ${r'${ibiz.ref.service.dict:ibzdict-api}'}
stripPrefix: false
disk:
path: /net-disk/**
serviceId: ${r'${ibiz.ref.service.disk:ibzdisk-api}'}
stripPrefix: false
</#if>
</#if>
<#comment>通过设置该参数,避免Zuul转发请求时丢失Authorization请求头信息</#comment>
......
......@@ -29,6 +29,7 @@ import java.math.BigInteger;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.scheduling.annotation.Async;
import com.alibaba.fastjson.JSONObject;
import org.springframework.cache.annotation.CacheEvict;
......@@ -205,6 +206,9 @@ public interface I${item.codeName}Service{
<#comment>实体数据导入</#comment>
<#if hasDEImport>
JSONObject importData(List<${de.codeName}> entities,int batchSize,boolean isIgnoreError);
@Async("asyncExecutor")
void asyncImportData(List<${de.codeName}> entities,int batchSize,boolean isIgnoreError);
</#if>
</#macro>
......
......@@ -89,6 +89,7 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.util.ObjectUtils;
import org.springframework.beans.factory.annotation.Value;
<#if pub.isEnableGlobalTransaction?? && pub.isEnableGlobalTransaction()?? && pub.isEnableGlobalTransaction()==true>
import io.seata.spring.annotation.GlobalTransactional;
</#if>
......@@ -2458,6 +2459,10 @@ public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Ser
<#macro deImportData>
<#if hasDEImport>
<@autowiredProxyService/>
@Value("${r'${ibiz.syncImportLimit:1000}'}")
private int syncImportLimit;
/**
* 上传数据检查
* @param entities
......@@ -2556,6 +2561,31 @@ public class ${item.getCodeName()}ServiceImpl implements I${de.getCodeName()}Ser
@Override
@Transactional
public JSONObject importData(List<${de.codeName}> entities, int batchSize ,boolean isIgnoreError) {
if(entities.size()>syncImportLimit){
proxyService.asyncImportData(entities,batchSize,isIgnoreError);
JSONObject rs=new JSONObject();
rs.put("rst", 0);
rs.put("msg",String.format("当前导入数据已超过同步导入数量上限[%s],系统正在进行异步导入,请稍后!",syncImportLimit));
rs.put("data",entities);
return rs;
}
else{
return syncImportData(entities,batchSize,isIgnoreError);
}
}
@Transactional
public void asyncImportData(List<${de.codeName}> entities, int batchSize ,boolean isIgnoreError){
executeImportData(entities,batchSize,isIgnoreError);
}
@Transactional
public JSONObject syncImportData(List<${de.codeName}> entities, int batchSize ,boolean isIgnoreError){
return executeImportData(entities,batchSize,isIgnoreError);
}
@Transactional
public JSONObject executeImportData(List<${de.codeName}> entities, int batchSize ,boolean isIgnoreError) {
JSONObject rs=testImportData(entities,isIgnoreError);
if(rs.getInteger("rst")==1 && !isIgnoreError)
......
......@@ -33,8 +33,9 @@ TARGET=PSSYSTEM
<#list de.getAllPSDEFields() as defield>
<#if defield.isPhisicalDEField()==true><#comment>物理属性</#comment>
<#assign dataType="${srfdatatype(defield.getStdDataType())}">
<#assign javaType="${srfjavatype(defield.stdDataType)}">
<#comment>varchar需要设置字段长度,若不设置,则liquibase比较时会自动填充,最终恢复到生产库会报错</#comment>
<#if srfjavatype(defield.stdDataType)=='String'>
<#if javaType=='String'>
<#if defield.getLength()?? && defield.getLength()?c!='-1'>
<#assign dataType="${srfdatatype(defield.getStdDataType())}(${defield.getLength()?c})" >
<#else>
......@@ -43,6 +44,9 @@ TARGET=PSSYSTEM
<#elseif dataType?lower_case=='decimal'>
<#assign dataType="${srfdatatype(defield.getStdDataType())}(38,2)"><#comment>设置数值类型精度</#comment>
</#if>
<#if javaType='BigDecimal'>
<#assign dataType="DECIMAL(38,2)"><#comment>数据类型转换varchar-->decimal</#comment>
</#if>
<#comment>由于liquibase不支持修改mysql的remarks,修改remarks会导致启动报错,所以mysql数据库暂时不发remarks</#comment>
<column name="${defield.getName()}" remarks="<#if (dbinst.getDBType()!='MYSQL5')>${defield.getLogicName()}</#if>" type="${dataType}">
<#if defield.isKeyDEField()==true>
......
<#ibiztemplate>
TARGET=PSSYSTEM
</#ibiztemplate>
<#assign hasMsgTemplate=false>
<#if sys.getAllPSSysMsgTempls()??>
<#list sys.getAllPSSysMsgTempls() as msgTempl>
<#assign hasMsgTemplate=true>
<#break>
</#list>
</#if>
<#if hasMsgTemplate>
[
<#list sys.getAllPSSysMsgTempls() as msgTempl>
{
"tid":"${msgTempl.getCodeName()?lower_case}",
"template_name":"${msgTempl.getName()}",
"content":"${msgTempl.getContent()}"
}
<#if msgTempl_has_next>
,
</#if>
</#list>
]
</#if>
......@@ -205,6 +205,12 @@ TARGET=PSWFVERSION
</#if>
<userTask flowable:category="${r'${businessKey}'}" flowable:candidateUsers="${assignCond}" flowable:exclusive="true" id="tid-${WFProcess.getWFStepValue()}-${WFProcess.getDeployId()}" name="${WFProcess.getName()}" <#if WFProcess.getWFProcessType()?? && (WFProcess.getWFProcessType()=="CALLORGACTIVITY" || WFProcess.getWFProcessType()=="EMBED")>flowable:formKey="${WFProcess.getWFProcessType()}"</#if>><#comment>标记子流程节点</#comment>
<documentation>${r'${majortext}'}</documentation>
<#if WFProcess.isSendInform()>
<#assign msgTempl=WFProcess.getPSSysMsgTempl()>
<extensionElements>
<flowable:formProperty id="${msgTempl.getCodeName()?lower_case}" name="${msgTempl.getName()}" variable="${assignGroupCond}" type="${WFProcess.getMsgType()}" />
</extensionElements>
</#if>
<#--<#if assignGroupCond!="">-->
<#--<extensionElements>-->
<#--<flowable:field name="assignGroups"><flowable:string>${assignGroupCond}</flowable:string></flowable:field>-->
......
<#ibiztemplate>
TARGET=PSSYSTEM
</#ibiztemplate>
package ${pub.getPKGCodeName()}.util.client;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component;
@Component
public class IBZNotifyFallback implements IBZNotifyFeignClient {
@Override
public Boolean SendMsg(JSONObject msg) {
return null;
}
@Override
public Boolean createMsgTemplate(JSONObject template) {
return null;
}
}
<#ibiztemplate>
TARGET=PSSYSTEM
</#ibiztemplate>
package ${pub.getPKGCodeName()}.util.client;
import com.alibaba.fastjson.JSONObject;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
@FeignClient(value = "${r'${ibiz.ref.service.notify:ibznotify-api}'}",fallback = IBZNotifyFallback.class)
public interface IBZNotifyFeignClient
{
@RequestMapping(method = RequestMethod.POST,value = "/SendMsg")
Boolean SendMsg(@RequestBody JSONObject msg);
@RequestMapping(method = RequestMethod.POST,value = "/createMsgTemplate")
Boolean createMsgTemplate(@RequestBody JSONObject template);
}
......@@ -13,10 +13,18 @@ TARGET=PSSYSTEM
</#if>
</#list>
</#if>
<#assign hasMsgTemplate=false>
<#if sys.getAllPSSysMsgTempls()??>
<#list sys.getAllPSSysMsgTempls() as msgTempl>
<#assign hasMsgTemplate=true>
<#break>
</#list>
</#if>
package ${pub.getPKGCodeName()}.util.job;
import ${pub.getPKGCodeName()}.util.client.IBZUAAFeignClient;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONArray;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -54,6 +62,12 @@ public class PermissionSyncJob implements ApplicationRunner {
private ${pub.getPKGCodeName()}.util.client.IBZWFFeignClient client2;
</#if>
<#if hasMsgTemplate>
@Autowired
@Lazy
private ${pub.getPKGCodeName()}.util.client.IBZNotifyFeignClient notifyFeignClient;
</#if>
@Override
public void run(ApplicationArguments args) {
try {
......@@ -94,5 +108,21 @@ public class PermissionSyncJob implements ApplicationRunner {
log.error(String.format("部署流程失败,请检查[WF]服务是否正常! [%s]",ex));
}
</#if>
<#if hasMsgTemplate>
try {
InputStream msgTemplate= this.getClass().getResourceAsStream("/msgtempl/systemMsgTempl.json"); //获取当前系统所有实体资源能力
String strMsgTemplate = IOUtils.toString(msgTemplate,"UTF-8");
JSONObject template= new JSONObject();
template.put("template",JSONArray.parseArray(strMsgTemplate));
if(notifyFeignClient.createMsgTemplate(template)){
log.info("推送消息模板成功");
}else{
log.error("推送消息模板失败");
}
} catch (Exception e) {
log.error("推送消息模板失败");
}
</#if>
}
}
\ No newline at end of file
......@@ -63,7 +63,7 @@ public class AuthorizationTokenFilter extends OncePerRequestFilter {
if (authTokenUtil.validateToken(authToken, userDetails)) {
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
log.info("authorizated user '{}', setting security context", username);
// log.info("authorizated user '{}', setting security context", username);
SecurityContextHolder.getContext().setAuthentication(authentication);
}
}
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册