|
|
|
@ -16,6 +16,7 @@ import com.alibaba.fastjson.JSONObject; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
import com.jayway.jsonpath.JsonPath; |
|
|
|
import com.jayway.jsonpath.JsonPath; |
|
|
|
|
|
|
|
import cn.hutool.core.util.StrUtil; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.jetbrains.annotations.NotNull; |
|
|
|
import org.jetbrains.annotations.NotNull; |
|
|
|
import org.redisson.api.RBucket; |
|
|
|
import org.redisson.api.RBucket; |
|
|
|
@ -99,17 +100,24 @@ public class OnlineFormTenantSyncServiceImpl implements OnlineFormTenantSyncServ |
|
|
|
} |
|
|
|
} |
|
|
|
// 根据表单json中的relativeFormCode获取到对应的查询数据源数据
|
|
|
|
// 根据表单json中的relativeFormCode获取到对应的查询数据源数据
|
|
|
|
String widgetJson = onlineForm.getWidgetJson(); |
|
|
|
String widgetJson = onlineForm.getWidgetJson(); |
|
|
|
List<String> relativeFormCodeList = JsonPath.read(widgetJson, "$..relativeFormCode"); |
|
|
|
List<String> relativeFormCodeList = parseRelativeFormCodes(widgetJson); |
|
|
|
List<OnlCgreportHead> onlCgreportHeadList = iOnlCgreportHeadService.list(new LambdaQueryWrapper<OnlCgreportHead>() |
|
|
|
List<OnlCgreportHead> onlCgreportHeadList = relativeFormCodeList.isEmpty() |
|
|
|
|
|
|
|
? Collections.emptyList() |
|
|
|
|
|
|
|
: iOnlCgreportHeadService.list(new LambdaQueryWrapper<OnlCgreportHead>() |
|
|
|
.in(OnlCgreportHead::getCode, relativeFormCodeList)); |
|
|
|
.in(OnlCgreportHead::getCode, relativeFormCodeList)); |
|
|
|
List<String> onlCgreportHeadIdList = onlCgreportHeadList.stream().map(OnlCgreportHead::getId).collect(Collectors.toList()); |
|
|
|
List<String> onlCgreportHeadIdList = onlCgreportHeadList.stream().map(OnlCgreportHead::getId).collect(Collectors.toList()); |
|
|
|
List<OnlCgreportItem> onlCgreportItemList = iOnlCgreportItemService.list(new LambdaQueryWrapper<OnlCgreportItem>() |
|
|
|
List<OnlCgreportItem> onlCgreportItemList = onlCgreportHeadIdList.isEmpty() |
|
|
|
|
|
|
|
? Collections.emptyList() |
|
|
|
|
|
|
|
: iOnlCgreportItemService.list(new LambdaQueryWrapper<OnlCgreportItem>() |
|
|
|
.in(OnlCgreportItem::getCgrheadId, onlCgreportHeadIdList)); |
|
|
|
.in(OnlCgreportItem::getCgrheadId, onlCgreportHeadIdList)); |
|
|
|
List<OnlCgreportParam> onlCgreportParamList = iOnlCgreportParamService.list(new LambdaQueryWrapper<OnlCgreportParam>() |
|
|
|
List<OnlCgreportParam> onlCgreportParamList = onlCgreportHeadIdList.isEmpty() |
|
|
|
|
|
|
|
? Collections.emptyList() |
|
|
|
|
|
|
|
: iOnlCgreportParamService.list(new LambdaQueryWrapper<OnlCgreportParam>() |
|
|
|
.in(OnlCgreportParam::getCgrheadId, onlCgreportHeadIdList)); |
|
|
|
.in(OnlCgreportParam::getCgrheadId, onlCgreportHeadIdList)); |
|
|
|
for (Long tenantId : tenantIdSet) { |
|
|
|
for (Long tenantId : tenantIdSet) { |
|
|
|
// 表单更新同步通知
|
|
|
|
// 表单更新同步通知
|
|
|
|
JSONObject formMsgJsonData = new JSONObject(); |
|
|
|
JSONObject formMsgJsonData = new JSONObject(); |
|
|
|
|
|
|
|
formMsgJsonData.put("tenantId", tenantId); |
|
|
|
formMsgJsonData.put("adminOnlineForm", onlineForm); |
|
|
|
formMsgJsonData.put("adminOnlineForm", onlineForm); |
|
|
|
formMsgJsonData.put("originalOnlineForm", lastUpdateOnlineForm); |
|
|
|
formMsgJsonData.put("originalOnlineForm", lastUpdateOnlineForm); |
|
|
|
formMsgJsonData.put("datasourceIdSet", datasourceIdSet); |
|
|
|
formMsgJsonData.put("datasourceIdSet", datasourceIdSet); |
|
|
|
@ -122,6 +130,7 @@ public class OnlineFormTenantSyncServiceImpl implements OnlineFormTenantSyncServ |
|
|
|
TenantConstant.MESSAGE_QUEUE_SELECTOR_KEY); |
|
|
|
TenantConstant.MESSAGE_QUEUE_SELECTOR_KEY); |
|
|
|
//表单数据源更新同步新增
|
|
|
|
//表单数据源更新同步新增
|
|
|
|
JSONObject onlCgreportHeadMsgJsonData = new JSONObject(); |
|
|
|
JSONObject onlCgreportHeadMsgJsonData = new JSONObject(); |
|
|
|
|
|
|
|
onlCgreportHeadMsgJsonData.put("tenantId", tenantId); |
|
|
|
onlCgreportHeadMsgJsonData.put("onlCgreportHeadList", onlCgreportHeadList); |
|
|
|
onlCgreportHeadMsgJsonData.put("onlCgreportHeadList", onlCgreportHeadList); |
|
|
|
onlCgreportHeadMsgJsonData.put("onlCgreportItemList", onlCgreportItemList); |
|
|
|
onlCgreportHeadMsgJsonData.put("onlCgreportItemList", onlCgreportItemList); |
|
|
|
onlCgreportHeadMsgJsonData.put("onlCgreportParamList", onlCgreportParamList); |
|
|
|
onlCgreportHeadMsgJsonData.put("onlCgreportParamList", onlCgreportParamList); |
|
|
|
@ -146,6 +155,7 @@ public class OnlineFormTenantSyncServiceImpl implements OnlineFormTenantSyncServ |
|
|
|
// 表单元数据通知更新新增
|
|
|
|
// 表单元数据通知更新新增
|
|
|
|
for(Long tenantId : tenantIdSet){ |
|
|
|
for(Long tenantId : tenantIdSet){ |
|
|
|
JSONObject messageJsonData = new JSONObject(); |
|
|
|
JSONObject messageJsonData = new JSONObject(); |
|
|
|
|
|
|
|
messageJsonData.put("tenantId", tenantId); |
|
|
|
messageJsonData.put("onlFormHeadList", headList); |
|
|
|
messageJsonData.put("onlFormHeadList", headList); |
|
|
|
messageJsonData.put("onlFormFindList", findList); |
|
|
|
messageJsonData.put("onlFormFindList", findList); |
|
|
|
messageJsonData.put("onlFormFieldList", fieldList); |
|
|
|
messageJsonData.put("onlFormFieldList", fieldList); |
|
|
|
@ -165,8 +175,27 @@ public class OnlineFormTenantSyncServiceImpl implements OnlineFormTenantSyncServ |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private static @NotNull String getOnlFormHeadByPageIdSQL(Long pageId) { |
|
|
|
/** |
|
|
|
String placeholders = pageId.toString(); |
|
|
|
* 从 widgetJson 中提取所有的 relativeFormCode(查询数据源编码)。 |
|
|
|
|
|
|
|
* widgetJson 为空、非法 JSON 或没有该节点时返回空集合,不抛异常。 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
private List<String> parseRelativeFormCodes(String widgetJson) { |
|
|
|
|
|
|
|
if (StrUtil.isBlank(widgetJson)) { |
|
|
|
|
|
|
|
return Collections.emptyList(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
List<String> codes = JsonPath.read(widgetJson, "$..relativeFormCode"); |
|
|
|
|
|
|
|
if (codes == null) { |
|
|
|
|
|
|
|
return Collections.emptyList(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return codes.stream().filter(StrUtil::isNotBlank).distinct().collect(Collectors.toList()); |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
|
|
log.warn("解析 widgetJson 的 relativeFormCode 失败,按无查询数据源处理:{}", e.getMessage()); |
|
|
|
|
|
|
|
return Collections.emptyList(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static @NotNull String getOnlFormHeadByPageIdSQL(Long pageId) { String placeholders = pageId.toString(); |
|
|
|
String sql = "WITH RECURSIVE form_tree AS (" + |
|
|
|
String sql = "WITH RECURSIVE form_tree AS (" + |
|
|
|
"SELECT fh.* FROM onl_form_head fh " + |
|
|
|
"SELECT fh.* FROM onl_form_head fh " + |
|
|
|
"LEFT JOIN zz_online_page p ON p.master_table_id = fh.id " + |
|
|
|
"LEFT JOIN zz_online_page p ON p.master_table_id = fh.id " + |
|
|
|
|