/*!
Copyright (c) REBUILD <https://getrebuild.com/> and/or its owners. All rights reserved.
rebuild is dual-licensed under commercial and open source licenses (GPLv3).
See LICENSE and COMMERCIAL in the project root for license information.
*/
package com.rebuild.core.configuration.general;
import cn.devezhao.commons.CalendarUtils;
import cn.devezhao.persist4j.Entity;
import cn.devezhao.persist4j.Field;
import cn.devezhao.persist4j.Record;
import cn.devezhao.persist4j.dialect.FieldType;
import cn.devezhao.persist4j.engine.ID;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.rebuild.core.Application;
import com.rebuild.core.configuration.ConfigBean;
import com.rebuild.core.metadata.EntityHelper;
import com.rebuild.core.metadata.MetadataHelper;
import com.rebuild.core.metadata.MetadataSorter;
import com.rebuild.core.metadata.easymeta.DisplayType;
import com.rebuild.core.metadata.easymeta.EasyDecimal;
import com.rebuild.core.metadata.easymeta.EasyField;
import com.rebuild.core.metadata.easymeta.EasyMetaFactory;
import com.rebuild.core.metadata.impl.EasyEntityConfigProps;
import com.rebuild.core.metadata.impl.EasyFieldConfigProps;
import com.rebuild.core.privileges.UserFilters;
import com.rebuild.core.privileges.bizz.Department;
import com.rebuild.core.privileges.bizz.User;
import com.rebuild.core.service.NoRecordFoundException;
import com.rebuild.core.service.approval.ApprovalState;
import com.rebuild.core.service.approval.RobotApprovalManager;
import com.rebuild.core.service.query.ParseHelper;
import com.rebuild.core.service.query.QueryHelper;
import com.rebuild.core.support.general.FieldValueHelper;
import com.rebuild.core.support.i18n.Language;
import com.rebuild.core.support.state.StateManager;
import com.rebuild.utils.JSONUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.util.Assert;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Slf4j
public class FormsBuilder extends FormsManager {
public static final FormsBuilder instance = new FormsBuilder();
protected FormsBuilder() {
}
public static final String DIVIDER_LINE = "$DIVIDER$";
public static final String REFFORM_LINE = "$REFFORM$";
public static final String DV_MAINID = "$MAINID$";
public static final String DV_REFERENCE_PREFIX = "&";
private static final int READONLYW_RO = 2;
private static final int READONLYW_RW = 3;
public JSON buildForm(String entity, ID user, ID recordId) {
return buildModel(entity, user, recordId, false);
}
public JSON buildView(String entity, ID user, ID recordId) {
Assert.notNull(recordId, "[recordId] cannot be null");
return buildModel(entity, user, recordId, true);
}
private JSON buildModel(String entity, ID user, ID recordId, boolean viewMode) {
Assert.notNull(entity, "[entity] cannot be null");
Assert.notNull(user, "[user] cannot be null");
final Entity entityMeta = MetadataHelper.getEntity(entity);
if (recordId != null) {
Assert.isTrue(entityMeta.getEntityCode().equals(recordId.getEntityCode()), "[entity] and [recordId] do not matchs");
if (MetadataHelper.isBizzEntity(entityMeta) && !UserFilters.allowAccessBizz(user, recordId)) {
return formatModelError(Language.L("无权读取此记录或记录已被删除"));
}
}
final Entity hasMainEntity = entityMeta.getMainEntity();
ApprovalState approvalState;
String readonlyMessage = null;
if (recordId == null) {
if (hasMainEntity != null) {
ID mainid = FormsBuilderContextHolder.getMainIdOfDetail(false);
Assert.notNull(mainid, "Call `FormBuilderContextHolder#setMainIdOfDetail` first!");
approvalState = EntityHelper.isUnsavedId(mainid) ? null : getHadApproval(hasMainEntity, mainid);
if ((approvalState == ApprovalState.PROCESSING || approvalState == ApprovalState.APPROVED)) {
readonlyMessage = approvalState == ApprovalState.APPROVED
? Language.L("主记录已完成审批,不能添加明细")
: Language.L("主记录正在审批中,不能添加明细");
}
approvalState = null;
if (!EntityHelper.isUnsavedId(mainid)
&& !Application.getPrivilegesManager().allowUpdate(user, mainid)) {
return formatModelError(Language.L("你没有添加明细权限"));
}
} else if (!Application.getPrivilegesManager().allowCreate(user, entityMeta.getEntityCode())) {
return formatModelError(Language.L("你没有新建权限" ));
} else {
approvalState = getHadApproval(entityMeta, null);
}
}
else if (viewMode) {
if (!Application.getPrivilegesManager().allowRead(user, recordId)) {
return formatModelError(Language.L("无权读取此记录或记录已被删除"));
}
approvalState = getHadApproval(entityMeta, recordId);
}
else {
if (!Application.getPrivilegesManager().allowUpdate(user, recordId)) {
return formatModelError(Language.L("你没有修改此记录的权限"));
}
approvalState = getHadApproval(entityMeta, recordId);
if (approvalState != null) {
String recordType = hasMainEntity == null ? Language.L("记录") : Language.L("主记录");
if (approvalState == ApprovalState.APPROVED) {
readonlyMessage = Language.L("%s已完成审批,禁止编辑", recordType);
} else if (approvalState == ApprovalState.PROCESSING) {
readonlyMessage = Language.L("%s正在审批中,禁止编辑", recordType);
}
}
}
ConfigBean model = getFormLayout(entity, user);
JSONArray elements = (JSONArray) model.getJSON("elements");
if (elements == null || elements.isEmpty()) {
return formatModelError(Language.L("此表单布局尚未配置,请配置后使用"));
}
Record recordData = null;
if (recordId != null) {
recordData = findRecord(recordId, user, elements);
if (recordData == null) {
return formatModelError(Language.L("无权读取此记录或记录已被删除"));
}
}
Set<String> roAutos = EasyMetaFactory.getAutoReadonlyFields(entity);
Set<String> roAutosWithout = recordId == null ? null : Collections.emptySet();
for (Object o : elements) {
JSONObject field = (JSONObject) o;
if (roAutos.contains(field.getString("field")) || readonlyMessage != null) {
field.put("readonly", true);
if (roAutosWithout == null) roAutosWithout = AutoFillinManager.instance.getAutoReadonlyFields(entity);
if (roAutosWithout.contains(field.getString("field"))) {
field.put("readonlyw", READONLYW_RW);
} else {
field.put("readonlyw", READONLYW_RO);
}
}
}
buildModelElements(elements, entityMeta, recordData, user, viewMode, !viewMode);
if (elements.isEmpty()) {
return formatModelError(Language.L("此表�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
高度可配置化的企业管理系统!企业内部可免费使用!零代码/低代码快速搭建企业中台、CRM客户关系管理、WMS库存管理、TMS运输管理、SCM供应链管理、MES/MOM,甚至是 ERP 企业资源计划!
资源推荐
资源详情
资源评论
收起资源包目录
rebuild-WMS-TMS-MES-库存运输生产系统,高度可配置化的企业管理系统 (1500个子文件)
UniCNS-UTF8-H.bcmap 52KB
UniCNS-UTF32-H.bcmap 51KB
UniCNS-UTF16-H.bcmap 49KB
UniCNS-UCS2-H.bcmap 47KB
UniGB-UTF8-H.bcmap 46KB
UniGB-UTF32-H.bcmap 45KB
UniGB-UTF16-H.bcmap 43KB
UniGB-UCS2-H.bcmap 42KB
UniJIS2004-UTF8-H.bcmap 41KB
UniJIS-UTF8-H.bcmap 41KB
Adobe-CNS1-UCS2.bcmap 40KB
Adobe-Japan1-UCS2.bcmap 40KB
UniJIS2004-UTF32-H.bcmap 40KB
UniJISX02132004-UTF32-H.bcmap 40KB
UniJIS-UTF32-H.bcmap 40KB
UniJISX0213-UTF32-H.bcmap 40KB
UniJIS2004-UTF16-H.bcmap 39KB
UniJIS-UTF16-H.bcmap 39KB
Adobe-GB1-UCS2.bcmap 33KB
UniKS-UTF8-H.bcmap 27KB
UniKS-UTF32-H.bcmap 26KB
UniKS-UTF16-H.bcmap 26KB
UniKS-UCS2-H.bcmap 25KB
UniJIS-UCS2-H.bcmap 25KB
Adobe-Korea1-UCS2.bcmap 23KB
GBK2K-H.bcmap 19KB
KSC-Johab-H.bcmap 16KB
GBK-EUC-H.bcmap 14KB
GBKp-EUC-H.bcmap 14KB
GBTpc-EUC-H.bcmap 7KB
GBT-EUC-H.bcmap 7KB
GBT-H.bcmap 7KB
HKscs-B5-H.bcmap 4KB
ETHK-B5-H.bcmap 4KB
KSCms-UHC-HW-H.bcmap 3KB
KSCms-UHC-H.bcmap 3KB
NWP-H.bcmap 3KB
HKdla-B5-H.bcmap 3KB
78ms-RKSJ-H.bcmap 3KB
Ext-RKSJ-H.bcmap 2KB
Ext-H.bcmap 2KB
Add-H.bcmap 2KB
HKdlb-B5-H.bcmap 2KB
Add-RKSJ-H.bcmap 2KB
78-EUC-H.bcmap 2KB
78-RKSJ-H.bcmap 2KB
78-H.bcmap 2KB
HKgccs-B5-H.bcmap 2KB
HKm471-B5-H.bcmap 2KB
KSCpc-EUC-H.bcmap 2KB
CNS-EUC-V.bcmap 2KB
KSC-EUC-H.bcmap 2KB
KSC-H.bcmap 2KB
CNS-EUC-H.bcmap 2KB
HKm314-B5-H.bcmap 2KB
ETen-B5-H.bcmap 1KB
B5pc-H.bcmap 1KB
B5-H.bcmap 1KB
90pv-RKSJ-H.bcmap 982B
83pv-RKSJ-H.bcmap 905B
UniJISPro-UTF8-V.bcmap 726B
90ms-RKSJ-H.bcmap 721B
90msp-RKSJ-H.bcmap 715B
CNS1-H.bcmap 706B
UniJISPro-UCS2-HW-V.bcmap 705B
UniJISPro-UCS2-V.bcmap 689B
UniJISX02132004-UTF32-V.bcmap 688B
UniJISX0213-UTF32-V.bcmap 684B
UniJIS2004-UTF8-V.bcmap 682B
UniJIS2004-UTF32-V.bcmap 681B
UniJIS-UCS2-HW-V.bcmap 680B
UniJIS-UTF8-V.bcmap 678B
UniJIS-UTF32-V.bcmap 677B
UniJIS-UCS2-V.bcmap 664B
UniJIS2004-UTF16-V.bcmap 647B
UniJIS-UTF16-V.bcmap 643B
Adobe-GB1-5.bcmap 625B
Adobe-GB1-4.bcmap 601B
EUC-H.bcmap 578B
GBpc-EUC-H.bcmap 557B
H.bcmap 553B
GB-EUC-H.bcmap 549B
RKSJ-H.bcmap 534B
GB-H.bcmap 528B
CNS2-H.bcmap 504B
Adobe-Japan1-6.bcmap 485B
Adobe-GB1-3.bcmap 470B
Adobe-GB1-2.bcmap 465B
Adobe-Japan1-5.bcmap 430B
Adobe-CNS1-6.bcmap 406B
Adobe-CNS1-5.bcmap 406B
Adobe-CNS1-4.bcmap 405B
Adobe-CNS1-3.bcmap 401B
Adobe-Korea1-2.bcmap 391B
Adobe-Korea1-1.bcmap 386B
Adobe-CNS1-2.bcmap 376B
Adobe-CNS1-1.bcmap 371B
Adobe-Japan1-4.bcmap 337B
Adobe-CNS1-0.bcmap 317B
90msp-RKSJ-V.bcmap 291B
共 1500 条
- 1
- 2
- 3
- 4
- 5
- 6
- 15
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6705
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Javascript和Python的微商城项目设计源码 - MicroMall
- 基于Java的网上订餐系统设计源码 - online ordering system
- 基于Javascript的超级美眉网络资源管理应用模块设计源码
- 基于Typescript和PHP的编程知识储备库设计源码 - study-php
- Screenshot_2024-05-28-11-40-58-177_com.tencent.mm.jpg
- 基于Dart的Flutter小提琴调音器APP设计源码 - violinhelper
- 基于JavaScript和CSS的随寻订购网页设计源码 - web-order
- 基于MATLAB的声纹识别系统设计源码 - VoiceprintRecognition
- 基于Java的微服务插件集合设计源码 - wsy-plugins
- 基于Vue和微信小程序的监理日志系统设计源码 - supervisionLog
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功