/*!
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("此表�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本项目是一个基于Java语言开发的企业库存运输生产系统,包含1501个文件,主要文件类型包括Java源代码、字体文件、JavaScript脚本、属性文件、CSS样式表、HTML页面、图片、SVG矢量图、JSON配置文件和PDF文件。系统设计旨在为用户提供一个高度可配置化的企业管理解决方案,支持CRM客户关系管理、WMS库存管理、TMS运输管理、SCM供应链管理,外贸管理以及ERP企业资源计划等模块,满足企业内部管理和业务需求。
资源推荐
资源详情
资源评论
收起资源包目录
基于Java的企业库存运输生产系统设计源码 (1501个子文件)
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
共 1501 条
- 1
- 2
- 3
- 4
- 5
- 6
- 16
资源评论
沐知全栈开发
- 粉丝: 4778
- 资源: 4143
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功