diff --git a/src/com/api/jygf/web/MobilePermissionsAction.java b/src/com/api/jygf/web/MobilePermissionsAction.java deleted file mode 100644 index 040835b..0000000 --- a/src/com/api/jygf/web/MobilePermissionsAction.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.api.jygf.web; - -import javax.ws.rs.Path; - -/** - * @Author weaver_cl - * @Description: - * @Date 2022/10/9 - * @Version V1.0 - **/ -@Path("/mobile/permission") -public class MobilePermissionsAction extends com.engine.jygf.web.MobilePermissionsAction { -} diff --git a/src/com/api/kr/web/KqInteractiveController.java b/src/com/api/kr/web/KqInteractiveController.java new file mode 100644 index 0000000..be8b07e --- /dev/null +++ b/src/com/api/kr/web/KqInteractiveController.java @@ -0,0 +1,12 @@ +package com.api.kr.web; + +import javax.ws.rs.Path; + +/** + * @author:dxfeng + * @createTime: 2023/05/18 + * @version: 1.0 + */ +@Path("/kangrui/kq/interactive") +public class KqInteractiveController extends com.engine.kr.web.KqInteractiveController{ +} diff --git a/src/com/engine/jygf/cmd/MobilePermissionsCmd.java b/src/com/engine/jygf/cmd/MobilePermissionsCmd.java deleted file mode 100644 index 7e4ebdd..0000000 --- a/src/com/engine/jygf/cmd/MobilePermissionsCmd.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.engine.jygf.cmd; - -import com.engine.common.biz.AbstractCommonCommand; -import com.engine.common.entity.BizLogContext; -import com.engine.core.interceptor.CommandContext; -import org.apache.commons.lang3.StringUtils; -import weaver.conn.RecordSet; -import weaver.hrm.User; -import weaver.wechat.util.Utils; - -import java.util.*; - -/** - * @Author weaver_cl - * @Description: - * @Date 2022/10/9 - * @Version V1.0 - **/ -public class MobilePermissionsCmd extends AbstractCommonCommand> { - - private static final String FIELDID = "field100026"; //移动电话自定义字段 - - private static final String SCOPE = "HrmCustomFieldByInfoType"; - - private static final String SCOPEID = "-1"; - - public MobilePermissionsCmd(Map params, User user) { - this.user = user; - this.params = params; - } - - @Override - public BizLogContext getLogContext() { - return null; - } - - - @Override - public Map execute(CommandContext commandContext) { - Map data = new HashMap<>(); - String uid = Utils.null2String(user.getUID()); - RecordSet rs = new RecordSet(); - HashSet ids = new HashSet<>(); - ids.add(uid); - rs.executeQuery("select ckr,bckr from uf_yddhqx_dt1"); - while (rs.next()) { - String ckr = Utils.null2String(rs.getString("ckr")); - String bckr = Utils.null2String(rs.getString("bckr")); - if (Arrays.asList(ckr.split(",")).contains(uid)) { - ids.addAll(Arrays.asList(bckr.split(","))); - } - } - - Map mobileInfo = new HashMap<>(); - String value = StringUtils.join(ids,","); - rs.executeQuery("select id,"+FIELDID+" from cus_fielddata where scope = ? and scopeid = ?" + - " and id in ("+value+")",SCOPE,SCOPEID); - while (rs.next()){ - mobileInfo.put(Utils.null2String(rs.getString("id")),rs.getString(FIELDID)); - } - - data.put("ids",ids); - data.put("mobileInfo",mobileInfo); - return data; - } - - -} diff --git a/src/com/engine/jygf/service/MobilePermissionsService.java b/src/com/engine/jygf/service/MobilePermissionsService.java deleted file mode 100644 index e41d2a9..0000000 --- a/src/com/engine/jygf/service/MobilePermissionsService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.engine.jygf.service; - -import weaver.hrm.User; - -import java.util.Map; - -/** - * @Author weaver_cl - * @Description: - * @Date 2022/10/9 - * @Version V1.0 - **/ -public interface MobilePermissionsService { - - Map getPermissionInfo(Map params, User user); -} diff --git a/src/com/engine/jygf/service/impl/MobilePermissionsServiceImpl.java b/src/com/engine/jygf/service/impl/MobilePermissionsServiceImpl.java deleted file mode 100644 index 579ba36..0000000 --- a/src/com/engine/jygf/service/impl/MobilePermissionsServiceImpl.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.engine.jygf.service.impl; - -import com.engine.core.impl.Service; -import com.engine.jygf.cmd.MobilePermissionsCmd; -import com.engine.jygf.service.MobilePermissionsService; -import weaver.hrm.User; - -import java.util.Map; - -/** - * @Author weaver_cl - * @Description: - * @Date 2022/10/9 - * @Version V1.0 - **/ -public class MobilePermissionsServiceImpl extends Service implements MobilePermissionsService { - - - - @Override - public Map getPermissionInfo(Map params, User user) { - return commandExecutor.execute(new MobilePermissionsCmd(params,user)); - } -} diff --git a/src/com/engine/jygf/web/MobilePermissionsAction.java b/src/com/engine/jygf/web/MobilePermissionsAction.java deleted file mode 100644 index f3cf66d..0000000 --- a/src/com/engine/jygf/web/MobilePermissionsAction.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.engine.jygf.web; - -import com.alibaba.fastjson.JSONObject; -import com.engine.common.util.ParamUtil; -import com.engine.common.util.ServiceUtil; -import com.engine.jygf.service.MobilePermissionsService; -import com.engine.jygf.service.impl.MobilePermissionsServiceImpl; -import weaver.hrm.HrmUserVarify; -import weaver.hrm.User; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import java.util.HashMap; -import java.util.Map; - -/** - * @Author weaver_cl - * @Description: - * @Date 2022/10/9 - * @Version V1.0 - **/ -public class MobilePermissionsAction { - - public MobilePermissionsService getMobilePermissionsService(User user) { - return ServiceUtil.getService(MobilePermissionsServiceImpl.class,user); - } - - /** - * 晶优光伏 移动电话通过建模控制权限 通讯录显示 - * @param request - * @param response - * @return - */ - @GET - @Path("/controller") - @Produces(MediaType.APPLICATION_JSON) - public String getPermissionInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) { - Map apidatas = new HashMap<>(); - try { - User user = HrmUserVarify.getUser(request, response); - //实例化Service 并调用业务类处理 - apidatas = getMobilePermissionsService(user).getPermissionInfo(ParamUtil.request2Map(request), user); - } catch (Exception e) { - //异常处理 - apidatas.put("api_status", false); - } - return JSONObject.toJSONString(apidatas); - } - - - -} diff --git a/src/com/engine/kr/enums/KqInteractiveEnum.java b/src/com/engine/kr/enums/KqInteractiveEnum.java new file mode 100644 index 0000000..8656398 --- /dev/null +++ b/src/com/engine/kr/enums/KqInteractiveEnum.java @@ -0,0 +1,40 @@ +package com.engine.kr.enums; + +/** + * @author:dxfeng + * @createTime: 2023/05/18 + * @version: 1.0 + */ +public enum KqInteractiveEnum { + /** + * 获取token + */ + TOKEN("TOKEN", "/Face/Person/getToken"), + LEAVE_BAL("LEAVE_BAL", "/Face/Person/iLeaveBal"), + SIGN_CREATE("SIGN_CREATE", "/Face/Person/iSignCreate"), + OVERTIME_CREATE("OVERTIME_CREATE", "/Face/Person/iOvertimeCreate"), + LEAVE_CREATE("LEAVE_CREATE", "/Face/Person/iLeaveCreate"), + ; + + /** + * 名称 + */ + private final String name; + /** + * 请求路径 + */ + private final String postPath; + + KqInteractiveEnum(String name, String postPath) { + this.name = name; + this.postPath = postPath; + } + + public String getName() { + return name; + } + + public String getPostPath() { + return postPath; + } +} diff --git a/src/com/engine/kr/exception/CustomizeRunTimeException.java b/src/com/engine/kr/exception/CustomizeRunTimeException.java new file mode 100644 index 0000000..dd3aa48 --- /dev/null +++ b/src/com/engine/kr/exception/CustomizeRunTimeException.java @@ -0,0 +1,22 @@ +package com.engine.kr.exception; + +/** + * @Author weaver_cl + * @Description: + * @Date 2023/2/21 + * @Version V1.0 + **/ +public class CustomizeRunTimeException extends RuntimeException{ + + public CustomizeRunTimeException(String message) { + super(message); + } + + public CustomizeRunTimeException(Throwable cause) { + super(cause); + } + + public CustomizeRunTimeException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/com/engine/kr/service/KqInteractiveService.java b/src/com/engine/kr/service/KqInteractiveService.java new file mode 100644 index 0000000..3909845 --- /dev/null +++ b/src/com/engine/kr/service/KqInteractiveService.java @@ -0,0 +1,19 @@ +package com.engine.kr.service; + +import java.util.Map; + +/** + * @author:dxfeng + * @createTime: 2023/05/17 + * @version: 1.0 + */ +public interface KqInteractiveService { + + /** + * 获取假期余额 + * + * @param params 参数 + * @return + */ + Map getLeaveBal(Map params); +} diff --git a/src/com/engine/kr/service/impl/KqInteractiveServiceImpl.java b/src/com/engine/kr/service/impl/KqInteractiveServiceImpl.java new file mode 100644 index 0000000..dc7aac7 --- /dev/null +++ b/src/com/engine/kr/service/impl/KqInteractiveServiceImpl.java @@ -0,0 +1,99 @@ +package com.engine.kr.service.impl; + +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.kr.enums.KqInteractiveEnum; +import com.engine.kr.exception.CustomizeRunTimeException; +import com.engine.kr.service.KqInteractiveService; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author:dxfeng + * @createTime: 2023/05/17 + * @version: 1.0 + */ +public class KqInteractiveServiceImpl extends Service implements KqInteractiveService { + /** + * 考勤系统请求地址 + */ + private static final String POST_URL = "http://192.168.11.160:8080"; + private static final String USER = "OAData"; + private static final String PASS = "a22f81793d2dfec1ccaca7d03a330324"; + + /** + * 响应成功code + */ + private static final String SUC_CODE = "1"; + + @Override + public Map getLeaveBal(Map params) { + String token = getToken(); + + String jqlx = Util.null2String(params.get("jqlx")); + String resourceId = Util.null2String(params.get("resourceId")); + String dayoffType = ""; + String workCode = ""; + RecordSet rs = new RecordSet(); + rs.executeQuery("select kqxtzdz from uf_jqzdpp where lczd =?", jqlx); + + if (rs.next()) { + dayoffType = rs.getString("kqxtzdz"); + } + if (StringUtils.isBlank(dayoffType)) { + throw new RuntimeException("假期余额获取失败,未找到假期类型对应编码[" + jqlx + "]"); + } + rs.executeQuery("select workcode from hrmresource where id = ?", resourceId); + if (rs.next()) { + workCode = rs.getString("workcode"); + } + if (StringUtils.isBlank(workCode)) { + workCode = Util.null2String(params.get("workCode")); + } + + + Map postParam = new HashMap<>(4); + postParam.put("token", token); + postParam.put("personId", workCode); + // 假别转换为代码 + postParam.put("dayoffType", dayoffType); + // 可不填 + postParam.put("leaveDate", params.get("ksrq")); + + String returnStr = HttpUtil.post(POST_URL + KqInteractiveEnum.LEAVE_BAL.getPostPath(), postParam); + JSONObject jsonObject = JSONObject.parseObject(returnStr); + String code = jsonObject.getString("code"); + + Map returnMap = new HashMap<>(); + if (SUC_CODE.equals(code)) { + returnMap.put("dayoffBalHours", jsonObject.getString("dayoffBalHours")); + } else { + throw new CustomizeRunTimeException("假期余额获取失败," + jsonObject.getString("msg")); + } + return returnMap; + } + + /** + * 请求,获取token + * + * @return + */ + private String getToken() { + Map params = new HashMap<>(2); + params.put("user", USER); + params.put("pass", PASS); + String returnStr = HttpUtil.post(POST_URL + KqInteractiveEnum.TOKEN.getPostPath(), params); + JSONObject jsonObject = JSONObject.parseObject(returnStr); + String code = jsonObject.getString("code"); + if (SUC_CODE.equals(code)) { + return jsonObject.getString("token"); + } else { + throw new CustomizeRunTimeException("token获取失败," + jsonObject.getString("msg")); + } + } +} diff --git a/src/com/engine/kr/util/ExceptionUtil.java b/src/com/engine/kr/util/ExceptionUtil.java new file mode 100644 index 0000000..74fd003 --- /dev/null +++ b/src/com/engine/kr/util/ExceptionUtil.java @@ -0,0 +1,20 @@ +package com.engine.kr.util; + +/** + * @Author weaver_cl + * @Description: + * @Date 2023/2/21 + * @Version V1.0 + **/ +public class ExceptionUtil { + public static String getRealMessage(Throwable e) { + while (e != null) { + Throwable cause = e.getCause(); + if (cause == null) { + return e.getMessage(); + } + e = cause; + } + return ""; + } +} diff --git a/src/com/engine/kr/util/ResponseResult.java b/src/com/engine/kr/util/ResponseResult.java new file mode 100644 index 0000000..9e87146 --- /dev/null +++ b/src/com/engine/kr/util/ResponseResult.java @@ -0,0 +1,170 @@ +package com.engine.kr.util; + + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.engine.core.exception.ECException; +import com.engine.kr.exception.CustomizeRunTimeException; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import weaver.general.BaseBean; +import weaver.hrm.User; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; + +/** + * 请求执行器 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Slf4j +public class ResponseResult { + + private static final long serialVersionUID = 1L; + + private final User user; + + private final BaseBean baseBean = new BaseBean(); + + private final Boolean isLog = "true".equals(baseBean.getPropValue("hrmSalary", "log")); + + public ResponseResult(User user) { + this.user = user; + } + + + /** + * 统一返回方法 + */ + public String run(Function f, T t) { + try { + if (isLog) { + log.info("run api , param {}", t); + } + return Ok(f.apply(t)); + } catch (CustomizeRunTimeException e) { + log.error("api run fail", e); + return Error(e.getMessage()); + } catch (ECException e) { + log.error("api run fail", e); + Throwable cause = e.getCause(); + return Error(cause.getMessage()); + } catch (Exception e) { + log.error("api run fail", e); + return Error("系统异常!"); + } + } + + /** + * 统一返回方法(有参无返回) + */ + public String run(Consumer f, T t) { + try { + if (isLog) { + log.info("run api , param {}", t); + } + f.accept(t); + return Ok(); + } catch (CustomizeRunTimeException e) { + log.error("api run fail", e); + return Error(e.getMessage()); + } catch (ECException e) { + log.error("api run fail", e); + return Error(ExceptionUtil.getRealMessage(e)); + } catch (Exception e) { + log.error("api run fail", e); + return Error("系统异常!", e); + } + } + + + /** + * 统一返回方法(无参有返回) + */ + public String run(Supplier f) { + try { + if (isLog) { + log.info("run api"); + } + return Ok(f.get()); + } catch (CustomizeRunTimeException e) { + log.error("api run fail", e); + return Error(e.getMessage()); + } catch (ECException e) { + log.error("api run fail", e); + Throwable cause = e.getCause(); + return Error(cause.getMessage()); + } catch (Exception e) { + log.error("api run fail", e); + return Error("系统异常!", e); + } + } + + + private static String getJsonString(Object apidatas) { + ObjectMapper mapper = new ObjectMapper(); + try { + return mapper.writeValueAsString(apidatas); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + return ""; + } + + + /** + * 成功返回 + */ + private String Ok() { + Map apidatas = new HashMap<>(); + apidatas.put("status", true); + return JSONObject.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect); + } + + + /** + * 成功返回 + */ + private String Ok(R r) { + Map apidatas = new HashMap<>(); + apidatas.put("status", true); + apidatas.put("data", r); + String success = getJsonString(apidatas); + if (isLog) { + log.info("run salary api success return {}", success); + } + return success; + } + + + /** + * 失败返回 + */ + private static String Error(String message) { + Map apidatas = new HashMap<>(); + apidatas.put("status", false); + apidatas.put("errormsg", message); + return JSONObject.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect); + } + + + /** + * 系统异常失败返回 + */ + private static String Error(String message, Exception e) { + Map apidatas = new HashMap<>(); + apidatas.put("status", false); + apidatas.put("errormsg", message); + apidatas.put("error", e.getMessage()); + return JSONObject.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect); + } + +} diff --git a/src/com/engine/kr/web/KqInteractiveController.java b/src/com/engine/kr/web/KqInteractiveController.java new file mode 100644 index 0000000..637c6b5 --- /dev/null +++ b/src/com/engine/kr/web/KqInteractiveController.java @@ -0,0 +1,36 @@ +package com.engine.kr.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.kr.service.KqInteractiveService; +import com.engine.kr.service.impl.KqInteractiveServiceImpl; +import com.engine.kr.util.ResponseResult; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.Map; + +/** + * @author:dxfeng + * @createTime: 2023/05/18 + * @version: 1.0 + */ +public class KqInteractiveController { + public KqInteractiveService getService(User user) { + return ServiceUtil.getService(KqInteractiveServiceImpl.class, user); + } + + @POST + @Path("/getLeaveBal") + @Produces(MediaType.APPLICATION_JSON) + public String getLeaveBal(@Context HttpServletRequest request, @Context HttpServletResponse response,Map params) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, Map>(user).run(getService(user)::getLeaveBal, params); + } +} diff --git a/src/weaver/interfaces/gsjrkg/action/SyncCertificateAction.java b/src/weaver/interfaces/gsjrkg/action/SyncCertificateAction.java deleted file mode 100644 index 42ba2de..0000000 --- a/src/weaver/interfaces/gsjrkg/action/SyncCertificateAction.java +++ /dev/null @@ -1,135 +0,0 @@ -package weaver.interfaces.gsjrkg.action; - -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import weaver.conn.RecordSet; -import weaver.general.Util; -import weaver.interfaces.workflow.action.Action; -import weaver.soa.workflow.request.MainTableInfo; -import weaver.soa.workflow.request.Property; -import weaver.soa.workflow.request.RequestInfo; - -import java.util.*; - -/** - * @Description: 同步证书到人员卡片个人信息 - * @author:dxfeng - * @createTime: 2023/02/20 - * @version: 1.0 - */ -public class SyncCertificateAction implements Action { - /** - * 建模表表名 - */ - private String modeTableName; - - /** - * 参数名称:建模表字段名:人员表字段名 - */ - private String params; - - private String resourceFieldGroup; - - @Override - public String execute(RequestInfo requestInfo) { - if (StringUtils.isBlank(params)) { - requestInfo.getRequestManager().setMessagecontent("自定义接口参数值配置错误"); - return Action.FAILURE_AND_CONTINUE; - } - if (StringUtils.isBlank(resourceFieldGroup)) { - // -1:基本信息,1:个人信息,3:工作信息 - resourceFieldGroup = "1"; - } - Map fieldMap = new HashMap<>(); - String[] fieldsArray = params.split(";"); - for (String fields : fieldsArray) { - String[] field = fields.split(":"); - if (field.length == 2) { - fieldMap.put(field[0], field[1]); - } - } - if (fieldMap.size() != fieldsArray.length) { - requestInfo.getRequestManager().setMessagecontent("自定义接口参数值格式错误,请检查"); - return Action.FAILURE_AND_CONTINUE; - } - Set modeFields = fieldMap.keySet(); - Map> modeMap = new HashMap<>(); - - RecordSet rs = new RecordSet(); - String resourceId = ""; - MainTableInfo mainTableInfo = requestInfo.getMainTableInfo(); - Property[] property = mainTableInfo.getProperty(); - for (Property item : property) { - String name = item.getName(); - String value = Util.null2String(item.getValue()); - if (StringUtils.isNotBlank(name) && StringUtils.isNotBlank(value)) { - if ("xm".equals(name)) { - resourceId = value; - } - } - } - // 查询当前人员的所有数据 - StringBuilder sqlBuilder = new StringBuilder("select ").append(StringUtils.join(modeFields, ",")).append(" from ").append(modeTableName).append(" where xm = ").append(resourceId).append(" order by id"); - rs.executeQuery(sqlBuilder.toString()); - while (rs.next()) { - appendIds(modeFields, rs, modeMap); - } - // 判断有无数据,没有的话插入数据 - sqlBuilder = new StringBuilder("SELECT id FROM CUS_FIELDDATA where scope ='HrmCustomFieldByInfoType' and scopeid = '").append(resourceFieldGroup).append("' and id =? "); - rs.executeQuery(sqlBuilder.toString(), resourceId); - if (!rs.next()) { - // 插入人员信息数据 - rs.executeUpdate("insert into cus_fielddata (scope,scopeid,id) values ('HrmCustomFieldByInfoType','" + resourceFieldGroup + "',?)", resourceId); - } - // 组装更新SQL语句 - sqlBuilder = new StringBuilder("update cus_fielddata set "); - for (Map.Entry entry : fieldMap.entrySet()) { - Set valueSet = modeMap.get(entry.getKey()); - String values = CollectionUtils.isEmpty(valueSet) ? "" : StringUtils.join(valueSet, ","); - sqlBuilder.append(" ").append(entry.getValue()).append(" = '").append(values).append("',"); - } - sqlBuilder.deleteCharAt(sqlBuilder.length() - 1); - sqlBuilder.append(" where scope ='HrmCustomFieldByInfoType' and scopeid = ").append(resourceFieldGroup).append(" and id = ").append(resourceId); - rs.executeUpdate(sqlBuilder.toString()); - - return Action.SUCCESS; - } - - - private void appendIds(Set modeFields, RecordSet rs, Map> modeMap) { - for (String modeField : modeFields) { - String ids = rs.getString(modeField); - if (StringUtils.isBlank(ids)) { - return; - } - if (CollectionUtils.isEmpty(modeMap.get(modeField))) { - modeMap.put(modeField, new HashSet<>()); - } - modeMap.get(modeField).addAll(Arrays.asList(ids.split(","))); - } - } - - public String getParams() { - return params; - } - - public void setParams(String params) { - this.params = params; - } - - public String getModeTableName() { - return modeTableName; - } - - public void setModeTableName(String modeTableName) { - this.modeTableName = modeTableName; - } - - public String getResourceFieldGroup() { - return resourceFieldGroup; - } - - public void setResourceFieldGroup(String resourceFieldGroup) { - this.resourceFieldGroup = resourceFieldGroup; - } -}