提交 bece214c 编写于 作者: NoSubject's avatar NoSubject

Merge branch 'release' into 'develop'

Release

See merge request o2oa/o2oa!1707
......@@ -26,7 +26,7 @@
"###enable": "是否启用###",
"###cron": "定时cron表达式###"
},
"combine": {
"merge": {
"enable": false,
"cron": "30 30 6 * * ?",
"thresholdDays": 730.0,
......@@ -69,7 +69,7 @@
"###urge": "催办任务设置,发现即将过期时发送提醒消息.###",
"###expire": "将已经过了截至时间的待办标记过期.###",
"###touchDelay": "延时任务设置,定时触发延时任务,当超过延时时间后继续流转.###",
"###combine": "合并任务设置,定时触发合并任务,将已完成工作的Data从Item表中提取合并到WorkCompleted的Data字段中,默认工作完成后2年开始进行合并.###",
"###merge": "合并任务设置,定时触发合并任务,将已完成工作的Data从Item表中提取合并到WorkCompleted的Data字段中,默认工作完成后2年开始进行合并.###",
"###deleteDraft": "清除草稿状态的工作.###",
"###passExpired": "超时工作路由设置.###",
"###touchDetained": "触发长时间未处理的工作.###",
......
......@@ -29,10 +29,10 @@ public class Components extends ConfigObject {
public static final String NAME_TASKCENTER = "TaskCenter";
public static final String NAME_HOMEPAGE = "Homepage";
public static final String NAME_HOTARTICLE = "HotArticle";
public static final String NAME_FILE = "File";
// public static final String NAME_FILE = "File";
public static final String NAME_NOTE = "Note";
public static final String NAME_MEETING = "Meeting";
public static final String NAME_ONLINEMEETING = "OnlineMeeting";
//public static final String NAME_ONLINEMEETING = "OnlineMeeting";
public static final String NAME_ATTENDANCE = "Attendance";
public static final String NAME_FORUM = "Forum";
public static final String NAME_MINDER = "Minder";
......@@ -44,7 +44,7 @@ public class Components extends ConfigObject {
public static List<String> SYSTEM_NAME_NAMES = ListTools.toList(NAME_SETTING, NAME_ORG, NAME_CMSMANAGER,
NAME_APPLICATIONEXPLORER, NAME_PORTALEXPLORER, NAME_DATAEXPLORER, NAME_SERVICEMANAGER, NAME_APPMARKET,
NAME_APPCENTER, NAME_LOGVIEWER, NAME_PROFILE, NAME_BAM, NAME_CMS, NAME_TASKCENTER, NAME_HOMEPAGE,
NAME_HOTARTICLE, NAME_FILE, NAME_NOTE, NAME_MEETING, NAME_ONLINEMEETING, NAME_ATTENDANCE, NAME_FORUM,
NAME_HOTARTICLE, NAME_NOTE, NAME_MEETING, NAME_ATTENDANCE, NAME_FORUM,
NAME_MINDER, NAME_CALENDAR, NAME_ANN, NAME_SEARCH, NAME_IM);
public static final String APPICON_PNG = "appicon.png";
......@@ -87,15 +87,15 @@ public class Components extends ConfigObject {
return new Component(NAME_HOMEPAGE, NAME_HOMEPAGE, "首页", APPICON_PNG, 14, Component.TYPE_SYSTEM);
case NAME_HOTARTICLE:
return new Component(NAME_HOTARTICLE, NAME_HOTARTICLE, "热点", APPICON_PNG, 15, Component.TYPE_SYSTEM);
case NAME_FILE:
return new Component(NAME_FILE, NAME_FILE, "云文件", APPICON_PNG, 16, Component.TYPE_SYSTEM);
// case NAME_FILE:
// return new Component(NAME_FILE, NAME_FILE, "云文件", APPICON_PNG, 16, Component.TYPE_SYSTEM);
case NAME_NOTE:
return new Component(NAME_NOTE, NAME_NOTE, "便签", APPICON_PNG, 17, Component.TYPE_SYSTEM);
case NAME_MEETING:
return new Component(NAME_MEETING, NAME_MEETING, "会议管理", APPICON_PNG, 18, Component.TYPE_SYSTEM);
case NAME_ONLINEMEETING:
return new Component(NAME_ONLINEMEETING, NAME_ONLINEMEETING, "网络会议", APPICON_PNG, 19,
Component.TYPE_SYSTEM);
// case NAME_ONLINEMEETING:
// return new Component(NAME_ONLINEMEETING, NAME_ONLINEMEETING, "网络会议", APPICON_PNG, 19,
// Component.TYPE_SYSTEM);
case NAME_ATTENDANCE:
return new Component(NAME_ATTENDANCE, NAME_ATTENDANCE, "考勤管理", APPICON_PNG, 20, Component.TYPE_SYSTEM);
case NAME_FORUM:
......@@ -133,10 +133,10 @@ public class Components extends ConfigObject {
o.systems.add(systemComponent(NAME_TASKCENTER));
o.systems.add(systemComponent(NAME_HOMEPAGE));
o.systems.add(systemComponent(NAME_HOTARTICLE));
o.systems.add(systemComponent(NAME_FILE));
// o.systems.add(systemComponent(NAME_FILE));
o.systems.add(systemComponent(NAME_NOTE));
o.systems.add(systemComponent(NAME_MEETING));
o.systems.add(systemComponent(NAME_ONLINEMEETING));
// o.systems.add(systemComponent(NAME_ONLINEMEETING));
o.systems.add(systemComponent(NAME_ATTENDANCE));
o.systems.add(systemComponent(NAME_FORUM));
o.systems.add(systemComponent(NAME_MINDER));
......
......@@ -69,7 +69,7 @@ public class ProcessPlatform extends ConfigObject {
this.urge = new Urge();
this.expire = new Expire();
this.touchDelay = new TouchDelay();
this.combine = new Combine();
this.merge = new Merge();
this.touchDetained = new TouchDetained();
this.deleteDraft = new DeleteDraft();
this.passExpired = new PassExpired();
......@@ -146,7 +146,7 @@ public class ProcessPlatform extends ConfigObject {
private TouchDelay touchDelay;
@FieldDescribe("合并任务设置,定时触发合并任务,将已完成工作的Data从Item表中提取合并到WorkCompleted的Data字段中,默认工作完成后2年开始进行合并.")
private Combine combine;
private Merge merge;
@FieldDescribe("清除草稿状态的工作.")
private DeleteDraft deleteDraft;
......@@ -211,8 +211,8 @@ public class ProcessPlatform extends ConfigObject {
return this.logLongDetained == null ? new LogLongDetained() : this.logLongDetained;
}
public Combine getCombine() {
return this.combine == null ? new Combine() : this.combine;
public Merge getMerge() {
return this.merge == null ? new Merge() : this.merge;
}
public Press getPress() {
......@@ -328,10 +328,10 @@ public class ProcessPlatform extends ConfigObject {
}
public static class Combine extends ConfigObject {
public static class Merge extends ConfigObject {
public static Combine defaultInstance() {
Combine o = new Combine();
public static Merge defaultInstance() {
Merge o = new Merge();
return o;
}
......
......@@ -82,7 +82,7 @@ public class MappingExecuteQueue extends AbstractQueue<String> {
}
private Data data(Business business, WorkCompleted workCompleted) throws Exception {
if (BooleanUtils.isTrue(workCompleted.getMerged()) && (null!= workCompleted.getProperties().getData())) {
if (BooleanUtils.isTrue(workCompleted.getMerged()) && (null != workCompleted.getProperties().getData())) {
return workCompleted.getProperties().getData();
}
List<Item> items = business.entityManagerContainer().listEqualAndEqual(Item.class, Item.bundle_FIELDNAME,
......
......@@ -20,15 +20,14 @@ import com.x.base.core.entity.dataitem.DataItemConverter;
import com.x.base.core.entity.dataitem.ItemCategory;
import com.x.base.core.project.exception.ExceptionAccessDenied;
import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.gson.XGsonBuilder;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.jaxrs.WrapInteger;
import com.x.base.core.project.tools.ListTools;
import com.x.processplatform.assemble.designer.Business;
import com.x.processplatform.core.entity.content.Data;
import com.x.processplatform.core.entity.content.Record;
import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.core.entity.content.Data;
import com.x.processplatform.core.entity.content.WorkCompleted_;
import com.x.processplatform.core.entity.element.Application;
import com.x.processplatform.core.entity.element.Process;
......
......@@ -188,6 +188,8 @@ abstract class BaseAction extends StandardJaxrsAction {
public static class AbstractWo extends GsonPropertyObject {
private String id;
private WoForm form;
private Map<String, WoForm> relatedFormMap = new HashMap<>();
......@@ -218,6 +220,15 @@ abstract class BaseAction extends StandardJaxrsAction {
this.relatedScriptMap = relatedScriptMap;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
}
\ No newline at end of file
......@@ -141,23 +141,78 @@ public class FormAction extends StandardJaxrsAction {
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
// @JaxrsMethodDescribe(value = "V2根据工作或完成工作标识获取表单,合并关联表单和关联脚本输出.", action = V2GetWithWorkOrWorkCompleted.class)
// @GET
// @Path("v2/workorworkcompleted/{workOrWorkCompleted}")
// @Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
// @Consumes(MediaType.APPLICATION_JSON)
// public void V2GetWithWorkOrWorkCompleted(@Suspended final AsyncResponse asyncResponse,
// @Context HttpServletRequest request,
// @JaxrsParameterDescribe("工作或完成工作标识") @PathParam("workOrWorkCompleted") String workOrWorkCompleted) {
// ActionResult<V2GetWithWorkOrWorkCompleted.Wo> result = new ActionResult<>();
// EffectivePerson effectivePerson = this.effectivePerson(request);
// try {
// result = new V2GetWithWorkOrWorkCompleted().execute(effectivePerson, workOrWorkCompleted);
// } catch (Exception e) {
// logger.error(e, effectivePerson, request, null);
// result.error(e);
// }
// asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
// }
@JaxrsMethodDescribe(value = "查询表单,如果有表单那么返回表单id,如果使用的是combine的表单直接返回内容.", action = V2LookupWorkOrWorkCompleted.class)
@GET
@Path("v2/lookup/workorworkcompleted/{workOrWorkCompleted}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void V2LookupWorkOrWorkCompleted(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request,
@JaxrsParameterDescribe("工作或已完成工作标识") @PathParam("workOrWorkCompleted") String workOrWorkCompleted) {
ActionResult<V2LookupWorkOrWorkCompleted.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new V2LookupWorkOrWorkCompleted().execute(effectivePerson, workOrWorkCompleted);
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "查询移动端表单,如果有表单那么返回表单id,如果使用的是combine的表单直接返回内容.", action = V2LookupWorkOrWorkCompletedMobile.class)
@GET
@Path("v2/lookup/workorworkcompleted/{workOrWorkCompleted}/mobile")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void V2LookupWorkOrWorkCompletedMobile(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request,
@JaxrsParameterDescribe("工作或已完成工作标识") @PathParam("workOrWorkCompleted") String workOrWorkCompleted) {
ActionResult<V2LookupWorkOrWorkCompletedMobile.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new V2LookupWorkOrWorkCompletedMobile().execute(effectivePerson, workOrWorkCompleted);
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "获取表单.", action = V2Get.class)
@GET
@Path("v2/{id}")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void V2Get(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
@JaxrsParameterDescribe("标识") @PathParam("id") String id) {
ActionResult<V2Get.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new V2Get().execute(effectivePerson, id);
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "获取表单Mobile.", action = V2GetMobile.class)
@GET
@Path("v2/{id}/mobile")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void V2GetMobile(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
@JaxrsParameterDescribe("标识") @PathParam("id") String id) {
ActionResult<V2GetMobile.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new V2GetMobile().execute(effectivePerson, id);
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
}
\ No newline at end of file
package com.x.processplatform.assemble.surface.jaxrs.form;
import java.util.Map.Entry;
import java.util.Objects;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.core.entity.content.WorkCompletedProperties;
import com.x.processplatform.core.entity.element.Form;
import com.x.processplatform.core.entity.element.Script;
class V2Get extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(V2Get.class);
ActionResult<Wo> execute(EffectivePerson effectivePerson, String id) throws Exception {
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
ActionResult<Wo> result = new ActionResult<>();
Business business = new Business(emc);
Form form = emc.find(id, Form.class);
if (Objects.isNull(form)) {
throw new ExceptionEntityNotExist(id, Form.class);
}
Wo wo = new Wo();
wo.setForm(toWoFormDataOrMobileData(form));
related(business, wo, form);
result.setData(wo);
return result;
}
}
private void related(Business business, Wo wo, Form form) throws Exception {
if (StringUtils.isNotBlank(form.getData())) {
for (String relatedFormId : form.getProperties().getRelatedFormList()) {
Form relatedForm = business.form().pick(relatedFormId);
if (null != relatedForm) {
wo.getRelatedFormMap().put(relatedFormId, toWoFormDataOrMobileData(relatedForm));
}
}
} else {
for (String mobileRelatedFormId : form.getProperties().getMobileRelatedFormList()) {
Form mobileRelatedForm = business.form().pick(mobileRelatedFormId);
if (null != mobileRelatedForm) {
wo.getRelatedFormMap().put(mobileRelatedFormId, toWoFormMobileDataOrData(mobileRelatedForm));
}
}
}
relatedScript(business, wo, form);
}
protected void relatedScript(Business business, AbstractWo wo, Form form) throws Exception {
for (Entry<String, String> entry : form.getProperties().getRelatedScriptMap().entrySet()) {
switch (entry.getValue()) {
case WorkCompletedProperties.Script.TYPE_PROCESSPLATFORM:
Script relatedScript = business.script().pick(entry.getKey());
if (null != relatedScript) {
wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedScript));
}
break;
case WorkCompletedProperties.Script.TYPE_CMS:
com.x.cms.core.entity.element.Script relatedCmsScript = business.cms().script().pick(entry.getKey());
if (null != relatedCmsScript) {
wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedCmsScript));
}
break;
case WorkCompletedProperties.Script.TYPE_PORTAL:
com.x.portal.core.entity.Script relatedPortalScript = business.portal().script().pick(entry.getKey());
if (null != relatedPortalScript) {
wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedPortalScript));
}
break;
default:
break;
}
}
}
public static class Wo extends AbstractWo {
}
}
\ No newline at end of file
package com.x.processplatform.assemble.surface.jaxrs.form;
import java.util.Objects;
import java.util.Map.Entry;
import org.apache.commons.lang3.StringUtils;
import com.google.gson.JsonElement;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.project.exception.ExceptionAccessDenied;
import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.logger.Audit;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.tools.PropertyTools;
import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.assemble.surface.jaxrs.form.ActionGetWithWorkOrWorkCompletedMobile.Wo;
import com.x.processplatform.assemble.surface.jaxrs.form.BaseAction.AbstractWo;
import com.x.processplatform.core.entity.content.Work;
import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.core.entity.content.WorkCompletedProperties;
import com.x.processplatform.core.entity.element.Activity;
import com.x.processplatform.core.entity.element.Form;
import com.x.processplatform.core.entity.element.Script;
class V2GetMobile extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(V2GetMobile.class);
ActionResult<Wo> execute(EffectivePerson effectivePerson, String id) throws Exception {
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
ActionResult<Wo> result = new ActionResult<>();
Business business = new Business(emc);
Form form = emc.find(id, Form.class);
if (Objects.isNull(form)) {
throw new ExceptionEntityNotExist(id, Form.class);
}
Wo wo = new Wo();
wo.setForm(toWoFormMobileDataOrData(form));
related(business, wo, form);
result.setData(wo);
return result;
}
}
private void related(Business business, Wo wo, Form form) throws Exception {
if (StringUtils.isNotBlank(form.getMobileData())) {
for (String mobileRelatedFormId : form.getProperties().getMobileRelatedFormList()) {
Form relatedForm = business.form().pick(mobileRelatedFormId);
if (null != relatedForm) {
wo.getRelatedFormMap().put(mobileRelatedFormId, toWoFormMobileDataOrData(relatedForm));
}
}
} else {
for (String relatedFormId : form.getProperties().getRelatedFormList()) {
Form relatedForm = business.form().pick(relatedFormId);
if (null != relatedForm) {
wo.getRelatedFormMap().put(relatedFormId, toWoFormDataOrMobileData(relatedForm));
}
}
}
relatedScript(business, wo, form);
}
protected void relatedScript(Business business, AbstractWo wo, Form form) throws Exception {
for (Entry<String, String> entry : form.getProperties().getMobileRelatedScriptMap().entrySet()) {
switch (entry.getValue()) {
case WorkCompletedProperties.Script.TYPE_PROCESSPLATFORM:
Script relatedScript = business.script().pick(entry.getKey());
if (null != relatedScript) {
wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedScript));
}
break;
case WorkCompletedProperties.Script.TYPE_CMS:
com.x.cms.core.entity.element.Script relatedCmsScript = business.cms().script().pick(entry.getKey());
if (null != relatedCmsScript) {
wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedCmsScript));
}
break;
case WorkCompletedProperties.Script.TYPE_PORTAL:
com.x.portal.core.entity.Script relatedPortalScript = business.portal().script().pick(entry.getKey());
if (null != relatedPortalScript) {
wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedPortalScript));
}
break;
default:
break;
}
}
}
public static class Wo extends AbstractWo {
}
}
\ No newline at end of file
......@@ -4,14 +4,12 @@ import java.util.Map.Entry;
import org.apache.commons.lang3.StringUtils;
import com.google.gson.JsonElement;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.project.exception.ExceptionAccessDenied;
import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.logger.Audit;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.tools.PropertyTools;
......@@ -23,56 +21,42 @@ import com.x.processplatform.core.entity.element.Activity;
import com.x.processplatform.core.entity.element.Form;
import com.x.processplatform.core.entity.element.Script;
class V2FindWithWorkOrWorkCompleted2 extends BaseAction {
class V2LookupWorkOrWorkCompleted extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(V2FindWithWorkOrWorkCompleted2.class);
private static Logger logger = LoggerFactory.getLogger(V2LookupWorkOrWorkCompleted.class);
ActionResult<JsonElement> execute(EffectivePerson effectivePerson, String workOrWorkCompleted) throws Exception {
ActionResult<Wo> execute(EffectivePerson effectivePerson, String workOrWorkCompleted) throws Exception {
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
Audit audit = logger.audit(effectivePerson);
ActionResult<JsonElement> result = new ActionResult<>();
ActionResult<Wo> result = new ActionResult<>();
Business business = new Business(emc);
if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
new ExceptionEntityNotExist(workOrWorkCompleted))) {
throw new ExceptionAccessDenied(effectivePerson);
}
JsonElement wo = null;
Wo wo = new Wo();
Work work = emc.find(workOrWorkCompleted, Work.class);
if (null != work) {
wo = gson.toJsonTree(this.work(business, work));
this.work(business, work, wo);
} else {
wo = gson.toJsonTree(this.workCompleted(business, emc.flag(workOrWorkCompleted, WorkCompleted.class)));
this.workCompleted(business, emc.flag(workOrWorkCompleted, WorkCompleted.class), wo);
}
audit.log(null, "查看");
result.setData(wo);
return result;
}
}
private Wo work(Business business, Work work) throws Exception {
Wo wo = new Wo();
private void work(Business business, Work work, Wo wo) throws Exception {
String id = work.getForm();
if (StringUtils.isEmpty(id)) {
if (!StringUtils.isEmpty(id)) {
wo.setId(id);
} else {
Activity activity = business.getActivity(work);
id = PropertyTools.getOrElse(activity, Activity.form_FIELDNAME, String.class, "");
}
if (StringUtils.isNotEmpty(id)) {
Form form = business.form().pick(id);
if (null != form) {
wo.setForm(toWoFormDataOrMobileData(form));
related(business, wo, form);
}
}
return wo;
wo.setId(id);
}
private Wo workCompleted(Business business, WorkCompleted workCompleted) throws Exception {
Wo wo = new Wo();
private void workCompleted(Business business, WorkCompleted workCompleted, Wo wo) throws Exception {
// 先使用当前库的表单,如果不存在使用储存的表单.
if (StringUtils.isNotEmpty(workCompleted.getForm())) {
Form form = business.form().pick(workCompleted.getForm());
......@@ -92,7 +76,6 @@ class V2FindWithWorkOrWorkCompleted2 extends BaseAction {
}
workCompleted.getProperties().getRelatedScriptList().stream()
.forEach(o -> wo.getRelatedScriptMap().put(o.getId(), toWoScript(o)));
return wo;
}
private void related(Business business, Wo wo, Form form) throws Exception {
......
package com.x.processplatform.assemble.surface.jaxrs.form;
import java.util.Map.Entry;
import org.apache.commons.lang3.StringUtils;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.project.exception.ExceptionAccessDenied;
import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.tools.PropertyTools;
import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.assemble.surface.jaxrs.form.ActionGetWithWorkOrWorkCompletedMobile.Wo;
import com.x.processplatform.assemble.surface.jaxrs.form.BaseAction.AbstractWo;
import com.x.processplatform.core.entity.content.Work;
import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.core.entity.content.WorkCompletedProperties;
import com.x.processplatform.core.entity.element.Activity;
import com.x.processplatform.core.entity.element.Form;
import com.x.processplatform.core.entity.element.Script;
class V2LookupWorkOrWorkCompletedMobile extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(V2LookupWorkOrWorkCompletedMobile.class);
ActionResult<Wo> execute(EffectivePerson effectivePerson, String workOrWorkCompleted) throws Exception {
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
ActionResult<Wo> result = new ActionResult<>();
Business business = new Business(emc);
if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
new ExceptionEntityNotExist(workOrWorkCompleted))) {
throw new ExceptionAccessDenied(effectivePerson);
}
Wo wo = new Wo();
Work work = emc.find(workOrWorkCompleted, Work.class);
if (null != work) {
this.work(business, work, wo);
} else {
this.workCompleted(business, emc.flag(workOrWorkCompleted, WorkCompleted.class), wo);
}
result.setData(wo);
return result;
}
}
private void work(Business business, Work work, Wo wo) throws Exception {
String id = work.getForm();
if (!StringUtils.isEmpty(id)) {
wo.setId(id);
} else {
Activity activity = business.getActivity(work);
id = PropertyTools.getOrElse(activity, Activity.form_FIELDNAME, String.class, "");
}
wo.setId(id);
}
private void workCompleted(Business business, WorkCompleted workCompleted, Wo wo) throws Exception {
// 先使用当前库的表单,如果不存在使用储存的表单.
if (StringUtils.isNotEmpty(workCompleted.getForm())) {
Form form = business.form().pick(workCompleted.getForm());
if (null != form) {
wo.setForm(toWoFormDataOrMobileData(form));
related(business, wo, form);
}
} else if (null != workCompleted.getProperties().getForm()) {
wo.setForm(toWoFormDataOrMobileData(workCompleted.getProperties().getForm()));
if (StringUtils.isNotBlank(workCompleted.getProperties().getForm().getData())) {
workCompleted.getProperties().getRelatedFormList()
.forEach(o -> wo.getRelatedFormMap().put(o.getId(), toWoFormDataOrMobileData(o)));
} else {
workCompleted.getProperties().getMobileRelatedFormList()
.forEach(o -> wo.getRelatedFormMap().put(o.getId(), toWoFormMobileDataOrData(o)));
}
}
workCompleted.getProperties().getRelatedScriptList().stream()
.forEach(o -> wo.getRelatedScriptMap().put(o.getId(), toWoScript(o)));
}
private void related(Business business, Wo wo, Form form) throws Exception {
if (StringUtils.isNotBlank(form.getMobileData())) {
for (String mobileRelatedFormId : form.getProperties().getMobileRelatedFormList()) {
Form relatedForm = business.form().pick(mobileRelatedFormId);
if (null != relatedForm) {
wo.getRelatedFormMap().put(mobileRelatedFormId, toWoFormMobileDataOrData(relatedForm));
}
}
} else {
for (String relatedFormId : form.getProperties().getRelatedFormList()) {
Form relatedForm = business.form().pick(relatedFormId);
if (null != relatedForm) {
wo.getRelatedFormMap().put(relatedFormId, toWoFormDataOrMobileData(relatedForm));
}
}
}
relatedScript(business, wo, form);
}
protected void relatedScript(Business business, AbstractWo wo, Form form) throws Exception {
for (Entry<String, String> entry : form.getProperties().getMobileRelatedScriptMap().entrySet()) {
switch (entry.getValue()) {
case WorkCompletedProperties.Script.TYPE_PROCESSPLATFORM:
Script relatedScript = business.script().pick(entry.getKey());
if (null != relatedScript) {
wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedScript));
}
break;
case WorkCompletedProperties.Script.TYPE_CMS:
com.x.cms.core.entity.element.Script relatedCmsScript = business.cms().script().pick(entry.getKey());
if (null != relatedCmsScript) {
wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedCmsScript));
}
break;
case WorkCompletedProperties.Script.TYPE_PORTAL:
com.x.portal.core.entity.Script relatedPortalScript = business.portal().script().pick(entry.getKey());
if (null != relatedPortalScript) {
wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedPortalScript));
}
break;
default:
break;
}
}
}
public static class Wo extends AbstractWo {
}
}
\ No newline at end of file
......@@ -166,18 +166,6 @@ class ActionGetWithWorkOrWorkCompleted extends BaseAction {
for (WoTask task : wo.getTaskList()) {
if (effectivePerson.isPerson(task.getPerson())) {
wo.setCurrentTaskIndex(loop);
// /* 发送抢办信号 */
// if (Objects.equals(ManualMode.grab, wo.getActivity().getManualMode())) {
// CompletableFuture.runAsync(() -> {
// try {
// ThisApplication.context().applications().getQuery(
// x_processplatform_service_processing.class,
// Applications.joinQueryUri("task", task.getId(), "grab"));
// } catch (Exception e) {
// logger.error(e);
// }
// });
// }
break;
}
loop++;
......
......@@ -16,6 +16,11 @@ import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;
import org.apache.commons.lang3.StringUtils;
import org.apache.openjpa.persistence.Persistent;
import org.apache.openjpa.persistence.jdbc.Index;
import org.apache.openjpa.persistence.jdbc.Strategy;
import com.x.base.core.entity.JpaObject;
import com.x.base.core.entity.SliceJpaObject;
import com.x.base.core.entity.annotation.CheckPersist;
......@@ -26,12 +31,6 @@ import com.x.base.core.project.tools.DateTools;
import com.x.base.core.project.tools.StringTools;
import com.x.processplatform.core.entity.PersistenceProperties;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.openjpa.persistence.Persistent;
import org.apache.openjpa.persistence.jdbc.Index;
import org.apache.openjpa.persistence.jdbc.Strategy;
@Entity
@ContainerEntity(dumpSize = 100, type = ContainerEntity.Type.content, reference = ContainerEntity.Reference.strong)
@Table(name = PersistenceProperties.Content.WorkCompleted.table, uniqueConstraints = {
......@@ -155,10 +154,6 @@ public class WorkCompleted extends SliceJpaObject implements ProjectionInterface
}
}
public Boolean getMerged() {
return BooleanUtils.isTrue(merged);
}
public static final String job_FIELDNAME = "job";
@FieldDescribe("工作")
@Column(length = JpaObject.length_id, name = ColumnNamePrefix + job_FIELDNAME)
......@@ -375,7 +370,7 @@ public class WorkCompleted extends SliceJpaObject implements ProjectionInterface
private WorkCompletedProperties properties;
public static final String merged_FIELDNAME = "merged";
@FieldDescribe("业务数据是否从item表中合并至data字段")
@FieldDescribe("合并数据")
@Column(name = ColumnNamePrefix + merged_FIELDNAME)
@Index(name = TABLE + IndexNameMiddle + merged_FIELDNAME)
@CheckPersist(allowEmpty = true)
......@@ -1047,6 +1042,10 @@ public class WorkCompleted extends SliceJpaObject implements ProjectionInterface
this.timeValue02 = timeValue02;
}
public Boolean getMerged() {
return merged;
}
public void setMerged(Boolean merged) {
this.merged = merged;
}
......
......@@ -9,6 +9,15 @@ import com.x.processplatform.core.entity.element.Form;
public class WorkCompletedProperties extends JsonProperties {
@FieldDescribe("合并已办对象")
private List<TaskCompleted> taskCompletedList = new ArrayList<>();
@FieldDescribe("合并已阅对象")
private List<ReadCompleted> readCompletedList = new ArrayList<>();
@FieldDescribe("合并参阅对象")
private List<Review> reviewList = new ArrayList<>();
@FieldDescribe("合并记录对象")
private List<Record> recordList = new ArrayList<>();
......@@ -108,6 +117,30 @@ public class WorkCompletedProperties extends JsonProperties {
this.mobileRelatedScriptList = mobileRelatedScriptList;
}
public List<TaskCompleted> getTaskCompletedList() {
return taskCompletedList;
}
public void setTaskCompletedList(List<TaskCompleted> taskCompletedList) {
this.taskCompletedList = taskCompletedList;
}
public List<ReadCompleted> getReadCompletedList() {
return readCompletedList;
}
public void setReadCompletedList(List<ReadCompleted> readCompletedList) {
this.readCompletedList = readCompletedList;
}
public List<Review> getReviewList() {
return reviewList;
}
public void setReviewList(List<Review> reviewList) {
this.reviewList = reviewList;
}
public static class Script {
public static final String TYPE_PROCESSPLATFORM = "processPlatform";
......
package com.x.processplatform.service.processing;
import org.apache.commons.lang3.BooleanUtils;
import com.x.base.core.project.Context;
import com.x.base.core.project.cache.CacheManager;
import com.x.base.core.project.config.Config;
......@@ -8,17 +10,15 @@ import com.x.base.core.project.message.MessageConnector;
import com.x.processplatform.service.processing.processor.embed.SyncEmbedQueue;
import com.x.processplatform.service.processing.processor.invoke.SyncJaxrsInvokeQueue;
import com.x.processplatform.service.processing.processor.invoke.SyncJaxwsInvokeQueue;
import com.x.processplatform.service.processing.schedule.Combine;
import com.x.processplatform.service.processing.schedule.DeleteDraft;
import com.x.processplatform.service.processing.schedule.Expire;
import com.x.processplatform.service.processing.schedule.LogLongDetained;
import com.x.processplatform.service.processing.schedule.Merge;
import com.x.processplatform.service.processing.schedule.PassExpired;
import com.x.processplatform.service.processing.schedule.TouchDelay;
import com.x.processplatform.service.processing.schedule.TouchDetained;
import com.x.processplatform.service.processing.schedule.Urge;
import org.apache.commons.lang3.BooleanUtils;
public class ThisApplication {
private ThisApplication() {
......@@ -51,8 +51,8 @@ public class ThisApplication {
context().startQueue(syncJaxrsInvokeQueue);
context().startQueue(syncJaxwsInvokeQueue);
context().startQueue(syncEmbedQueue);
if (BooleanUtils.isTrue(Config.processPlatform().getCombine().getEnable())) {
context.schedule(Combine.class, Config.processPlatform().getCombine().getCron());
if (BooleanUtils.isTrue(Config.processPlatform().getMerge().getEnable())) {
context.schedule(Merge.class, Config.processPlatform().getMerge().getCron());
}
if (BooleanUtils.isTrue(Config.processPlatform().getDeleteDraft().getEnable())) {
context.schedule(DeleteDraft.class, Config.processPlatform().getDeleteDraft().getCron());
......
......@@ -5,7 +5,6 @@ import java.util.concurrent.Callable;
import org.apache.commons.lang3.BooleanUtils;
import com.google.gson.Gson;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.entity.dataitem.ItemPrimitiveType;
......@@ -26,7 +25,7 @@ import com.x.query.core.entity.Item;
class ActionUpdateWithWorkCompletedPrimitivePath0 extends BaseAction {
/*
* 更新workCompletedPath0 基本类型数据
* */
*/
@ActionLogger
private static Logger logger = LoggerFactory.getLogger(ActionUpdateWithWorkCompletedPrimitivePath0.class);
......@@ -38,7 +37,8 @@ class ActionUpdateWithWorkCompletedPrimitivePath0 extends BaseAction {
String executorSeed = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
WorkCompleted workCompleted = emc.fetch(id, WorkCompleted.class, ListTools.toList(WorkCompleted.job_FIELDNAME));
WorkCompleted workCompleted = emc.fetch(id, WorkCompleted.class,
ListTools.toList(WorkCompleted.job_FIELDNAME));
if (null == workCompleted) {
throw new ExceptionEntityNotExist(id, WorkCompleted.class);
}
......@@ -63,25 +63,26 @@ class ActionUpdateWithWorkCompletedPrimitivePath0 extends BaseAction {
if (1 == exists.size()) {
Item existsItem = exists.get(0);
if (existsItem.getItemType().equals(ItemType.p) || existsItem.getItemType().equals(ItemType.n)) {
if (existsItem.getItemType().equals(ItemType.p)
|| existsItem.getItemType().equals(ItemType.n)) {
if (existsItem.getItemPrimitiveType().equals(ItemPrimitiveType.s)) {
//字符
// 字符
existsItem.setStringShortValue(val);
}
if (existsItem.getItemPrimitiveType().equals(ItemPrimitiveType.b)) {
//Boolean
// Boolean
existsItem.setBooleanValue(Boolean.parseBoolean(val));
}
if (existsItem.getItemPrimitiveType().equals(ItemPrimitiveType.n)) {
//number
// number
existsItem.setNumberValue(Double.parseDouble(val));
}
if (existsItem.getItemPrimitiveType().equals(ItemPrimitiveType.u)) {
//这是啥?问狗哥去吧。
// 这是啥?问狗哥去吧。
existsItem.setStringShortValue(val);
}
business.entityManagerContainer().beginTransaction(Item.class);
......
......@@ -6,14 +6,14 @@ import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.jaxrs.WrapBoolean;
import com.x.processplatform.service.processing.ThisApplication;
import com.x.processplatform.service.processing.schedule.Combine;
import com.x.processplatform.service.processing.schedule.Merge;
class ActionCombine extends BaseAction {
ActionResult<Wo> execute(EffectivePerson effectivePerson) throws Exception {
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
ActionResult<Wo> result = new ActionResult<>();
ThisApplication.context().scheduleLocal(Combine.class, 1);
ThisApplication.context().scheduleLocal(Merge.class, 1);
Wo wo = new Wo();
wo.setValue(true);
result.setData(wo);
......
......@@ -5,6 +5,7 @@ import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.stream.Collectors;
import com.google.gson.JsonElement;
import com.x.base.core.container.EntityManagerContainer;
......@@ -22,7 +23,10 @@ import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.tools.ListTools;
import com.x.processplatform.core.entity.content.Data;
import com.x.processplatform.core.entity.content.DocumentVersion;
import com.x.processplatform.core.entity.content.ReadCompleted;
import com.x.processplatform.core.entity.content.Record;
import com.x.processplatform.core.entity.content.Review;
import com.x.processplatform.core.entity.content.TaskCompleted;
import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.core.entity.content.WorkLog;
import com.x.processplatform.service.processing.Business;
......@@ -66,14 +70,17 @@ class ActionCombine extends BaseAction {
workCompleted = emc.find(id, WorkCompleted.class);
Business business = new Business(emc);
if (null != workCompleted) {
emc.beginTransaction(WorkCompleted.class);
List<Item> items = mergeItem(business, workCompleted);
List<WorkLog> workLogs = mergeWorkLog(business, workCompleted);
List<Record> records = mergeRecord(business, workCompleted);
List<DocumentVersion> documentVersions = listDocumentVersion(business, workCompleted);
List<Item> items = combineItem(business, workCompleted);
List<TaskCompleted> taskCompleteds = combineTaskCompleted(business, workCompleted);
List<ReadCompleted> readCompleteds = combineReadCompleted(business, workCompleted);
List<Review> reviews = combineReview(business, workCompleted);
List<WorkLog> workLogs = combineWorkLog(business, workCompleted);
List<Record> records = combineRecord(business, workCompleted);
emc.beginTransaction(WorkCompleted.class);
workCompleted.setMerged(true);
emc.commit();
this.remove(business, items, workLogs, records,documentVersions);
this.remove(business, items, workLogs, records, documentVersions);
logger.print("已完成工作合并, id: {}, title:{}, sequence:{}.", workCompleted.getId(),
workCompleted.getTitle(), workCompleted.getSequence());
}
......@@ -87,8 +94,8 @@ class ActionCombine extends BaseAction {
return result;
}
private void remove(Business business, List<Item> items, List<WorkLog> workLogs, List<Record> records,List<DocumentVersion> documentVersions)
throws Exception {
private void remove(Business business, List<Item> items, List<WorkLog> workLogs, List<Record> records,
List<DocumentVersion> documentVersions) throws Exception {
EntityManagerContainer emc = business.entityManagerContainer();
if (!items.isEmpty()) {
emc.beginTransaction(Item.class);
......@@ -108,7 +115,7 @@ class ActionCombine extends BaseAction {
emc.remove(o, CheckRemoveType.all);
}
}
if (!documentVersions.isEmpty()) {
emc.beginTransaction(DocumentVersion.class);
for (DocumentVersion o : documentVersions) {
......@@ -118,12 +125,45 @@ class ActionCombine extends BaseAction {
emc.commit();
}
private List<DocumentVersion> listDocumentVersion(Business business, WorkCompleted workCompleted) throws Exception {
return business.entityManagerContainer().listEqual(DocumentVersion.class, DocumentVersion.job_FIELDNAME,
private List<TaskCompleted> combineTaskCompleted(Business business, WorkCompleted workCompleted)
throws Exception {
List<TaskCompleted> list = business.entityManagerContainer().listEqual(TaskCompleted.class,
TaskCompleted.job_FIELDNAME, workCompleted.getJob());
list = list.stream()
.sorted(Comparator.comparing(TaskCompleted::getCreateTime, Comparator.nullsLast(Date::compareTo)))
.collect(Collectors.toList());
workCompleted.getProperties().setTaskCompletedList(list);
return list;
}
private List<ReadCompleted> combineReadCompleted(Business business, WorkCompleted workCompleted)
throws Exception {
List<ReadCompleted> list = business.entityManagerContainer().listEqual(ReadCompleted.class,
ReadCompleted.job_FIELDNAME, workCompleted.getJob());
list = list.stream()
.sorted(Comparator.comparing(ReadCompleted::getCreateTime, Comparator.nullsLast(Date::compareTo)))
.collect(Collectors.toList());
workCompleted.getProperties().setReadCompletedList(list);
return list;
}
private List<Review> combineReview(Business business, WorkCompleted workCompleted) throws Exception {
List<Review> list = business.entityManagerContainer().listEqual(Review.class, Review.job_FIELDNAME,
workCompleted.getJob());
list = list.stream()
.sorted(Comparator.comparing(Review::getCreateTime, Comparator.nullsLast(Date::compareTo)))
.collect(Collectors.toList());
workCompleted.getProperties().setReviewList(list);
return list;
}
private List<Item> mergeItem(Business business, WorkCompleted workCompleted) throws Exception {
private List<DocumentVersion> listDocumentVersion(Business business, WorkCompleted workCompleted)
throws Exception {
return business.entityManagerContainer().listEqual(DocumentVersion.class, DocumentVersion.job_FIELDNAME,
workCompleted.getJob());
}
private List<Item> combineItem(Business business, WorkCompleted workCompleted) throws Exception {
List<Item> list = business.entityManagerContainer().listEqualAndEqual(Item.class, Item.bundle_FIELDNAME,
workCompleted.getJob(), Item.itemCategory_FIELDNAME, ItemCategory.pp);
DataItemConverter<Item> converter = new DataItemConverter<Item>(Item.class);
......@@ -132,7 +172,7 @@ class ActionCombine extends BaseAction {
return list;
}
private List<Record> mergeRecord(Business business, WorkCompleted workCompleted) throws Exception {
private List<Record> combineRecord(Business business, WorkCompleted workCompleted) throws Exception {
List<Record> list = business.entityManagerContainer().listEqual(Record.class, Record.job_FIELDNAME,
workCompleted.getJob());
Collections.sort(list, Comparator.comparing(Record::getOrder, Comparator.nullsLast(Long::compareTo)));
......@@ -140,13 +180,14 @@ class ActionCombine extends BaseAction {
return list;
}
private List<WorkLog> mergeWorkLog(Business business, WorkCompleted workCompleted) throws Exception {
private List<WorkLog> combineWorkLog(Business business, WorkCompleted workCompleted) throws Exception {
List<WorkLog> list = business.entityManagerContainer().listEqual(WorkLog.class, WorkCompleted.job_FIELDNAME,
workCompleted.getJob());
Collections.sort(list, Comparator.comparing(WorkLog::getCreateTime, Comparator.nullsLast(Date::compareTo)));
workCompleted.getProperties().setWorkLogList(list);
return list;
}
}
}
\ No newline at end of file
......@@ -13,6 +13,10 @@ import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.apache.commons.lang3.time.DateUtils;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.entity.JpaObject_;
......@@ -28,15 +32,11 @@ import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.core.entity.content.WorkCompleted_;
import com.x.processplatform.service.processing.ThisApplication;
import org.apache.commons.lang3.time.DateUtils;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import fr.opensagres.poi.xwpf.converter.core.utils.StringUtils;
public class Combine extends AbstractJob {
public class Merge extends AbstractJob {
private static Logger logger = LoggerFactory.getLogger(Combine.class);
private static Logger logger = LoggerFactory.getLogger(Merge.class);
@Override
public void schedule(JobExecutionContext jobExecutionContext) throws Exception {
......@@ -78,7 +78,7 @@ public class Combine extends AbstractJob {
private List<WorkCompleted> list(EntityManagerContainer emc, String sequence) throws Exception {
Date date = new Date();
date = DateUtils.addDays(date, 0 - Config.processPlatform().getCombine().getThresholdDays());
date = DateUtils.addDays(date, 0 - Config.processPlatform().getMerge().getThresholdDays());
EntityManager em = emc.get(WorkCompleted.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> cq = cb.createQuery(Tuple.class);
......
......@@ -276,7 +276,7 @@ o2.widget.Panel = new Class({
this.returnMaxContainerSize = this.container.getSize();
var size = $(document.body).getSize();
var size = this.container.getOffsetParent().getSize();
this.container.setStyles({
"position": "absolute",
"top": 2,
......@@ -483,4 +483,4 @@ o2.widget.Panel = new Class({
}).inject(this.bottomNode);
}
});
o2.widget.Panel.panels = [];
\ No newline at end of file
o2.widget.Panel.panels = [];
......@@ -86,7 +86,7 @@ MWF.xDesktop.Authentication = new Class({
this.socket.close();
this.socket = null;
}
Cookie.dispose("x-token");
//Cookie.dispose("x-token");
if (layout.session && layout.session.user) layout.session.user.token = "";
if( callback ){
callback()
......
!function(e,n){"function"==typeof define&&(define.amd||define.cmd)?define(function(){return n(e)}):n(e,!0)}(this,function(o,e){if(!o.jWeixin){var n,c={config:"preVerifyJSAPI",onMenuShareTimeline:"menu:share:timeline",onMenuShareAppMessage:"menu:share:appmessage",onMenuShareQQ:"menu:share:qq",onMenuShareWeibo:"menu:share:weiboApp",onMenuShareQZone:"menu:share:QZone",previewImage:"imagePreview",getLocation:"geoLocation",openProductSpecificView:"openProductViewWithPid",addCard:"batchAddCard",openCard:"batchViewCard",chooseWXPay:"getBrandWCPayRequest",openEnterpriseRedPacket:"getRecevieBizHongBaoRequest",startSearchBeacons:"startMonitoringBeacons",stopSearchBeacons:"stopMonitoringBeacons",onSearchBeacons:"onBeaconsInRange",consumeAndShareCard:"consumedShareCard",openAddress:"editAddress"},a=function(){var e={};for(var n in c)e[c[n]]=n;return e}(),i=o.document,t=i.title,r=navigator.userAgent.toLowerCase(),s=navigator.platform.toLowerCase(),d=!(!s.match("mac")&&!s.match("win")),u=-1!=r.indexOf("wxdebugger"),l=-1!=r.indexOf("micromessenger"),p=-1!=r.indexOf("android"),f=-1!=r.indexOf("iphone")||-1!=r.indexOf("ipad"),m=(n=r.match(/micromessenger\/(\d+\.\d+\.\d+)/)||r.match(/micromessenger\/(\d+\.\d+)/))?n[1]:"",g={initStartTime:L(),initEndTime:0,preVerifyStartTime:0,preVerifyEndTime:0},h={version:1,appId:"",initTime:0,preVerifyTime:0,networkType:"",isPreVerifyOk:1,systemType:f?1:p?2:-1,clientVersion:m,url:encodeURIComponent(location.href)},v={},S={_completes:[]},y={state:0,data:{}};O(function(){g.initEndTime=L()});var I=!1,_=[],w={config:function(e){B("config",v=e);var t=!1!==v.check;O(function(){if(t)M(c.config,{verifyJsApiList:C(v.jsApiList),verifyOpenTagList:C(v.openTagList)},function(){S._complete=function(e){g.preVerifyEndTime=L(),y.state=1,y.data=e},S.success=function(e){h.isPreVerifyOk=0},S.fail=function(e){S._fail?S._fail(e):y.state=-1};var t=S._completes;return t.push(function(){!function(){if(!(d||u||v.debug||m<"6.0.2"||h.systemType<0)){var i=new Image;h.appId=v.appId,h.initTime=g.initEndTime-g.initStartTime,h.preVerifyTime=g.preVerifyEndTime-g.preVerifyStartTime,w.getNetworkType({isInnerInvoke:!0,success:function(e){h.networkType=e.networkType;var n="https://open.weixin.qq.com/sdk/report?v="+h.version+"&o="+h.isPreVerifyOk+"&s="+h.systemType+"&c="+h.clientVersion+"&a="+h.appId+"&n="+h.networkType+"&i="+h.initTime+"&p="+h.preVerifyTime+"&u="+h.url;i.src=n}})}}()}),S.complete=function(e){for(var n=0,i=t.length;n<i;++n)t[n]();S._completes=[]},S}()),g.preVerifyStartTime=L();else{y.state=1;for(var e=S._completes,n=0,i=e.length;n<i;++n)e[n]();S._completes=[]}}),w.invoke||(w.invoke=function(e,n,i){o.WeixinJSBridge&&WeixinJSBridge.invoke(e,x(n),i)},w.on=function(e,n){o.WeixinJSBridge&&WeixinJSBridge.on(e,n)})},ready:function(e){0!=y.state?e():(S._completes.push(e),!l&&v.debug&&e())},error:function(e){m<"6.0.2"||(-1==y.state?e(y.data):S._fail=e)},checkJsApi:function(e){M("checkJsApi",{jsApiList:C(e.jsApiList)},(e._complete=function(e){if(p){var n=e.checkResult;n&&(e.checkResult=JSON.parse(n))}e=function(e){var n=e.checkResult;for(var i in n){var t=a[i];t&&(n[t]=n[i],delete n[i])}return e}(e)},e))},onMenuShareTimeline:function(e){P(c.onMenuShareTimeline,{complete:function(){M("shareTimeline",{title:e.title||t,desc:e.title||t,img_url:e.imgUrl||"",link:e.link||location.href,type:e.type||"link",data_url:e.dataUrl||""},e)}},e)},onMenuShareAppMessage:function(n){P(c.onMenuShareAppMessage,{complete:function(e){"favorite"===e.scene?M("sendAppMessage",{title:n.title||t,desc:n.desc||"",link:n.link||location.href,img_url:n.imgUrl||"",type:n.type||"link",data_url:n.dataUrl||""}):M("sendAppMessage",{title:n.title||t,desc:n.desc||"",link:n.link||location.href,img_url:n.imgUrl||"",type:n.type||"link",data_url:n.dataUrl||""},n)}},n)},onMenuShareQQ:function(e){P(c.onMenuShareQQ,{complete:function(){M("shareQQ",{title:e.title||t,desc:e.desc||"",img_url:e.imgUrl||"",link:e.link||location.href},e)}},e)},onMenuShareWeibo:function(e){P(c.onMenuShareWeibo,{complete:function(){M("shareWeiboApp",{title:e.title||t,desc:e.desc||"",img_url:e.imgUrl||"",link:e.link||location.href},e)}},e)},onMenuShareQZone:function(e){P(c.onMenuShareQZone,{complete:function(){M("shareQZone",{title:e.title||t,desc:e.desc||"",img_url:e.imgUrl||"",link:e.link||location.href},e)}},e)},updateTimelineShareData:function(e){M("updateTimelineShareData",{title:e.title,link:e.link,imgUrl:e.imgUrl},e)},updateAppMessageShareData:function(e){M("updateAppMessageShareData",{title:e.title,desc:e.desc,link:e.link,imgUrl:e.imgUrl},e)},startRecord:function(e){M("startRecord",{},e)},stopRecord:function(e){M("stopRecord",{},e)},onVoiceRecordEnd:function(e){P("onVoiceRecordEnd",e)},playVoice:function(e){M("playVoice",{localId:e.localId},e)},pauseVoice:function(e){M("pauseVoice",{localId:e.localId},e)},stopVoice:function(e){M("stopVoice",{localId:e.localId},e)},onVoicePlayEnd:function(e){P("onVoicePlayEnd",e)},uploadVoice:function(e){M("uploadVoice",{localId:e.localId,isShowProgressTips:0==e.isShowProgressTips?0:1},e)},downloadVoice:function(e){M("downloadVoice",{serverId:e.serverId,isShowProgressTips:0==e.isShowProgressTips?0:1},e)},translateVoice:function(e){M("translateVoice",{localId:e.localId,isShowProgressTips:0==e.isShowProgressTips?0:1},e)},chooseImage:function(e){M("chooseImage",{scene:"1|2",count:e.count||9,sizeType:e.sizeType||["original","compressed"],sourceType:e.sourceType||["album","camera"]},(e._complete=function(e){if(p){var n=e.localIds;try{n&&(e.localIds=JSON.parse(n))}catch(e){}}},e))},getLocation:function(e){},previewImage:function(e){M(c.previewImage,{current:e.current,urls:e.urls},e)},uploadImage:function(e){M("uploadImage",{localId:e.localId,isShowProgressTips:0==e.isShowProgressTips?0:1},e)},downloadImage:function(e){M("downloadImage",{serverId:e.serverId,isShowProgressTips:0==e.isShowProgressTips?0:1},e)},getLocalImgData:function(e){!1===I?(I=!0,M("getLocalImgData",{localId:e.localId},(e._complete=function(e){if(I=!1,0<_.length){var n=_.shift();wx.getLocalImgData(n)}},e))):_.push(e)},getNetworkType:function(e){M("getNetworkType",{},(e._complete=function(e){e=function(e){var n=e.errMsg;e.errMsg="getNetworkType:ok";var i=e.subtype;if(delete e.subtype,i)e.networkType=i;else{var t=n.indexOf(":"),o=n.substring(t+1);switch(o){case"wifi":case"edge":case"wwan":e.networkType=o;break;default:e.errMsg="getNetworkType:fail"}}return e}(e)},e))},openLocation:function(e){M("openLocation",{latitude:e.latitude,longitude:e.longitude,name:e.name||"",address:e.address||"",scale:e.scale||28,infoUrl:e.infoUrl||""},e)},getLocation:function(e){M(c.getLocation,{type:(e=e||{}).type||"wgs84"},(e._complete=function(e){delete e.type},e))},hideOptionMenu:function(e){M("hideOptionMenu",{},e)},showOptionMenu:function(e){M("showOptionMenu",{},e)},closeWindow:function(e){M("closeWindow",{},e=e||{})},hideMenuItems:function(e){M("hideMenuItems",{menuList:e.menuList},e)},showMenuItems:function(e){M("showMenuItems",{menuList:e.menuList},e)},hideAllNonBaseMenuItem:function(e){M("hideAllNonBaseMenuItem",{},e)},showAllNonBaseMenuItem:function(e){M("showAllNonBaseMenuItem",{},e)},scanQRCode:function(e){M("scanQRCode",{needResult:(e=e||{}).needResult||0,scanType:e.scanType||["qrCode","barCode"]},(e._complete=function(e){if(f){var n=e.resultStr;if(n){var i=JSON.parse(n);e.resultStr=i&&i.scan_code&&i.scan_code.scan_result}}},e))},openAddress:function(e){M(c.openAddress,{},(e._complete=function(e){e=function(e){return e.postalCode=e.addressPostalCode,delete e.addressPostalCode,e.provinceName=e.proviceFirstStageName,delete e.proviceFirstStageName,e.cityName=e.addressCitySecondStageName,delete e.addressCitySecondStageName,e.countryName=e.addressCountiesThirdStageName,delete e.addressCountiesThirdStageName,e.detailInfo=e.addressDetailInfo,delete e.addressDetailInfo,e}(e)},e))},openProductSpecificView:function(e){M(c.openProductSpecificView,{pid:e.productId,view_type:e.viewType||0,ext_info:e.extInfo},e)},addCard:function(e){for(var n=e.cardList,i=[],t=0,o=n.length;t<o;++t){var r=n[t],a={card_id:r.cardId,card_ext:r.cardExt};i.push(a)}M(c.addCard,{card_list:i},(e._complete=function(e){var n=e.card_list;if(n){for(var i=0,t=(n=JSON.parse(n)).length;i<t;++i){var o=n[i];o.cardId=o.card_id,o.cardExt=o.card_ext,o.isSuccess=!!o.is_succ,delete o.card_id,delete o.card_ext,delete o.is_succ}e.cardList=n,delete e.card_list}},e))},chooseCard:function(e){M("chooseCard",{app_id:v.appId,location_id:e.shopId||"",sign_type:e.signType||"SHA1",card_id:e.cardId||"",card_type:e.cardType||"",card_sign:e.cardSign,time_stamp:e.timestamp+"",nonce_str:e.nonceStr},(e._complete=function(e){e.cardList=e.choose_card_info,delete e.choose_card_info},e))},openCard:function(e){for(var n=e.cardList,i=[],t=0,o=n.length;t<o;++t){var r=n[t],a={card_id:r.cardId,code:r.code};i.push(a)}M(c.openCard,{card_list:i},e)},consumeAndShareCard:function(e){M(c.consumeAndShareCard,{consumedCardId:e.cardId,consumedCode:e.code},e)},chooseWXPay:function(e){M(c.chooseWXPay,V(e),e)},openEnterpriseRedPacket:function(e){M(c.openEnterpriseRedPacket,V(e),e)},startSearchBeacons:function(e){M(c.startSearchBeacons,{ticket:e.ticket},e)},stopSearchBeacons:function(e){M(c.stopSearchBeacons,{},e)},onSearchBeacons:function(e){P(c.onSearchBeacons,e)},openEnterpriseChat:function(e){M("openEnterpriseChat",{useridlist:e.userIds,chatname:e.groupName},e)},launchMiniProgram:function(e){M("launchMiniProgram",{targetAppId:e.targetAppId,path:function(e){if("string"==typeof e&&0<e.length){var n=e.split("?")[0],i=e.split("?")[1];return n+=".html",void 0!==i?n+"?"+i:n}}(e.path),envVersion:e.envVersion},e)},openBusinessView:function(e){M("openBusinessView",{businessType:e.businessType,queryString:e.queryString||"",envVersion:e.envVersion},(e._complete=function(n){if(p){var e=n.extraData;if(e)try{n.extraData=JSON.parse(e)}catch(e){n.extraData={}}}},e))},miniProgram:{navigateBack:function(e){e=e||{},O(function(){M("invokeMiniProgramAPI",{name:"navigateBack",arg:{delta:e.delta||1}},e)})},navigateTo:function(e){O(function(){M("invokeMiniProgramAPI",{name:"navigateTo",arg:{url:e.url}},e)})},redirectTo:function(e){O(function(){M("invokeMiniProgramAPI",{name:"redirectTo",arg:{url:e.url}},e)})},switchTab:function(e){O(function(){M("invokeMiniProgramAPI",{name:"switchTab",arg:{url:e.url}},e)})},reLaunch:function(e){O(function(){M("invokeMiniProgramAPI",{name:"reLaunch",arg:{url:e.url}},e)})},postMessage:function(e){O(function(){M("invokeMiniProgramAPI",{name:"postMessage",arg:e.data||{}},e)})},getEnv:function(e){O(function(){e({miniprogram:"miniprogram"===o.__wxjs_environment})})}}},T=1,k={};return i.addEventListener("error",function(e){if(!p){var n=e.target,i=n.tagName,t=n.src;if("IMG"==i||"VIDEO"==i||"AUDIO"==i||"SOURCE"==i)if(-1!=t.indexOf("wxlocalresource://")){e.preventDefault(),e.stopPropagation();var o=n["wx-id"];if(o||(o=T++,n["wx-id"]=o),k[o])return;k[o]=!0,wx.ready(function(){wx.getLocalImgData({localId:t,success:function(e){n.src=e.localData}})})}}},!0),i.addEventListener("load",function(e){if(!p){var n=e.target,i=n.tagName;n.src;if("IMG"==i||"VIDEO"==i||"AUDIO"==i||"SOURCE"==i){var t=n["wx-id"];t&&(k[t]=!1)}}},!0),e&&(o.wx=o.jWeixin=w),w}function M(n,e,i){o.WeixinJSBridge?WeixinJSBridge.invoke(n,x(e),function(e){A(n,e,i)}):B(n,i)}function P(n,i,t){o.WeixinJSBridge?WeixinJSBridge.on(n,function(e){t&&t.trigger&&t.trigger(e),A(n,e,i)}):B(n,t||i)}function x(e){return(e=e||{}).appId=v.appId,e.verifyAppId=v.appId,e.verifySignType="sha1",e.verifyTimestamp=v.timestamp+"",e.verifyNonceStr=v.nonceStr,e.verifySignature=v.signature,e}function V(e){return{timeStamp:e.timestamp+"",nonceStr:e.nonceStr,package:e.package,paySign:e.paySign,signType:e.signType||"SHA1"}}function A(e,n,i){"openEnterpriseChat"!=e&&"openBusinessView"!==e||(n.errCode=n.err_code),delete n.err_code,delete n.err_desc,delete n.err_detail;var t=n.errMsg;t||(t=n.err_msg,delete n.err_msg,t=function(e,n){var i=e,t=a[i];t&&(i=t);var o="ok";if(n){var r=n.indexOf(":");"confirm"==(o=n.substring(r+1))&&(o="ok"),"failed"==o&&(o="fail"),-1!=o.indexOf("failed_")&&(o=o.substring(7)),-1!=o.indexOf("fail_")&&(o=o.substring(5)),"access denied"!=(o=(o=o.replace(/_/g," ")).toLowerCase())&&"no permission to execute"!=o||(o="permission denied"),"config"==i&&"function not exist"==o&&(o="ok"),""==o&&(o="fail")}return n=i+":"+o}(e,t),n.errMsg=t),(i=i||{})._complete&&(i._complete(n),delete i._complete),t=n.errMsg||"",v.debug&&!i.isInnerInvoke&&alert(JSON.stringify(n));var o=t.indexOf(":");switch(t.substring(o+1)){case"ok":i.success&&i.success(n);break;case"cancel":i.cancel&&i.cancel(n);break;default:i.fail&&i.fail(n)}i.complete&&i.complete(n)}function C(e){if(e){for(var n=0,i=e.length;n<i;++n){var t=e[n],o=c[t];o&&(e[n]=o)}return e}}function B(e,n){if(!(!v.debug||n&&n.isInnerInvoke)){var i=a[e];i&&(e=i),n&&n._complete&&delete n._complete,console.log('"'+e+'",',n||"")}}function L(){return(new Date).getTime()}function O(e){l&&(o.WeixinJSBridge?e():i.addEventListener&&i.addEventListener("WeixinJSBridgeReady",e,!1))}});
\ No newline at end of file
......@@ -473,9 +473,9 @@ MWF.xApplication.Setting.UIModuleDocument.DeployEdit = new Class({
this.pathInputNode.set("value", this.data.path);
if (this.data.visible){
this.visibleInputNode.getFirst("option").set("checked", true);
this.visibleInputNode.getFirst("option").set("selected", true);
}else{
this.visibleInputNode.getLast("option").set("checked", true);
this.visibleInputNode.getLast("option").set("selected", true);
}
// this.widgetNameInputNode.set("value", this.data.widgetName);
......@@ -648,4 +648,4 @@ MWF.xApplication.Setting.UIModuleDocument.Deploy.Icon = new Class({
}
}
});
\ No newline at end of file
});
......@@ -35,27 +35,8 @@
style="height: 4em;overflow: hidden; border-top: 1px solid #dfdfdf; display: block; position: absolute; bottom: 0px; background: #ffffff; width: 100%; z-index:100;">
</div>
<script>
//动态添加 微信的 jssdk
function addWxJsSdk() {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://res.wx.qq.com/open/js/jweixin-1.6.0.js";
document.body.appendChild(script);
}
//判断是否是在小程序中
// function ready() {
// if (window.__wxjs_environment === 'miniprogram') { // true
// addWxJsSdk();
// }
// }
//微信的WeixinJSBridgeReady加载完成后进行判断
if (!window.WeixinJSBridge || !WeixinJSBridge.invoke) {
document.addEventListener('WeixinJSBridgeReady', addWxJsSdk, false);
} else {
addWxJsSdk();
}
</script>
<script type="text/javascript" src="/o2_lib/wechat/jweixin-1.6.0.js"></script>
</body>
</html>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册