pruple_boy 8 months ago
parent
commit
fc97bee97e

+ 2 - 2
mjava-aiwei/src/main/java/com/malk/aiwei/controller/TBxYDController.java

@@ -441,7 +441,7 @@ public class TBxYDController {
      * 提供verifier数据读取服务
      */
     @GetMapping("verifier/sync")
-    McR syncVerifier(String projectCode) {
+    McR syncVerifier(@RequestParam String projectCode) {
 
         List<Map> dataList = awydClient.syncVerifier(projectCode);
         log.info("syncVerifier, {}, {}", projectCode, dataList.size());
@@ -518,7 +518,7 @@ public class TBxYDController {
 
         Map<String, ?> data = UtilServlet.getParamMap(request);
         log.info("test, {}", data);
-        
+
         try {
             Map body = TBConf.assembleCustomFieldName(AWServer.TASK_TRANSMIT, "已下达");
             tbClient.updateTaskCustomField("659a681d44ade3345fdc0d39", tbConf.getOperatorId(), body);

+ 44 - 18
mjava-aiwei/src/main/java/com/malk/aiwei/service/impl/AWYDImplClient.java

@@ -5,9 +5,12 @@ import com.alibaba.fastjson.JSONObject;
 import com.malk.aiwei.service.AWYDClient;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
+import com.malk.server.common.McException;
 import com.malk.server.dingtalk.DDR_New;
 import com.malk.service.aliwork.YDClient;
 import com.malk.service.aliwork.YDService;
+import com.malk.utils.UtilDateTime;
+import com.malk.utils.UtilList;
 import com.malk.utils.UtilMap;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -32,21 +35,6 @@ public class AWYDImplClient implements AWYDClient {
     @Autowired
     private YDService ydService;
 
-    /**
-     * 提供verifier数据读取服务
-     */
-    @Override
-    public List<Map> syncVerifier(String projectCode) {
-        List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
-                .formUuid("FORM-23B67983E91C4ED3B063F9B629D6E964SGHH")
-                .searchCondition(JSON.toJSONString(UtilMap.map("textField_lt6xd8lm", projectCode)))
-                .build());
-
-        return dataList.stream().map(item -> {
-            return item;
-        }).collect(Collectors.toList());
-    }
-
     /// 产品需求
     String appType_pr = "APP_YQY0OH7953OKBTM57PLL";
     String systemToken_pr = "PGC66MB1H2RLXMFQ7XKW4BC3BDFJ2UDM909XL18";
@@ -359,9 +347,6 @@ public class AWYDImplClient implements AWYDClient {
     }
 
     /// 产品规格
-//    String appType_ps = "APP_SQB02DVSNJJJ9XE2XEW4";
-//    String systemToken_ps = "Q9966X618IQLEQ166YMEWC3DJYU9310KY1AXLUL";
-
     String appType_ps = "APP_DINTFSNSIJPX533M3CQK";
     String systemToken_ps = "PTA66DA1S5QO5MDPBPN8V6CS4Q0O2LYISD91M024";
 
@@ -535,6 +520,47 @@ public class AWYDImplClient implements AWYDClient {
         }
     }
 
+    /**
+     * 提供verifier数据读取服务
+     */
+    @Override
+    public List<Map> syncVerifier(String projectCode) {
+
+        // 查询最新审批通过项目,规格列表
+        List<Map> dataList = (List<Map>) ydClient.queryData(YDParam.builder()
+                .appType(appType_ps)
+                .systemToken(systemToken_ps)
+                .formUuid("FORM-A1809FBB82E54CB387B372E3B15457E7IOVV")
+                .searchCondition(JSON.toJSONString(UtilMap.map("textField_lt6xd8lm", projectCode)))
+                .approvedResult("agree")
+                .build(), YDConf.FORM_QUERY.retrieve_search_process).getData();
+        dataList = dataList.stream().filter(item -> projectCode.equals(UtilMap.getMap(item, "data").get("textField_lt6xd8lm"))).collect(Collectors.toList());
+        McException.assertAccessException(dataList.isEmpty(), "项目规格评审通过信息为空");
+        // 按照修改时间排序, 通过修改日期排序审批通过日期
+        dataList.sort(Comparator.comparingLong(item -> UtilDateTime.parse(UtilMap.getString(item, "modifiedTimeGMT"), "yyyy-MM-dd'T'HH:mm").getTime()));
+
+        Map formData = UtilMap.getMap((Map) UtilList.getLast(dataList), "data");
+        List<Map> details = (List<Map>) formData.get("tableField_lt2d2x78");
+        return details.stream().map(row -> {
+            // Type, MinSpec, MaxSpec, Unit, Description 规格描述
+            Map r = UtilMap.map("Type, MinSpec, MaxSpec, Unit, Description", "textField_lubo7pf2, textField_lubo7pf3, textField_lubo7pf4, textField_lubo7pf5, textField_lt2vdhtf", row);
+            // ID 规格编号 + 需求编号
+            r.put("ID", UtilMap.getString(row, "textField_m18x4yqo") + "_" + UtilMap.getString(row, "textField_m0vvv72j"));
+            List<String> tList = UtilMap.getList(row, "employeeField_m1zxtrbz_id");
+            if (!tList.isEmpty()) {
+                r.put("Owner", String.join(",", tList)); // 用户人名或工号(支持多个用户,使用逗号分割)
+            }
+            r.put("Title", r.get("Description"));
+            r.put("Domain", UtilMap.getString(UtilMap.map("数字, 模拟", "analog, digital"), UtilMap.getString(row, "selectField_lti2e638")));
+            r.put("Scope", UtilMap.getString(formData, "selectField_lt6xc8eg")); // 产品型号
+            r.put("Version", UtilMap.getString(formData, "selectField_lxmi8w6o")); // 产品版本
+            r.put("Category", UtilMap.getString(row, "textField_lt2vdhtd")); // 规格类型
+            r.put("Subclass", UtilMap.getString(row, "textField_lt2vdhte")); // 规格子类
+            r.put("Condition", UtilMap.getString(row, "textField_lt2vdhtg")); // 规格条件
+            return r;
+        }).collect(Collectors.toList());
+    }
+
 
     @Override
     public void test() {

+ 46 - 0
mjava-aiwei/src/main/resources/application-tmp.yml

@@ -0,0 +1,46 @@
+# 环境配置
+server:
+  port: 9011
+  servlet:
+    context-path: /api/aiwei
+
+# condition
+spel:
+  scheduling: false        # 定时任务是否执行
+  multiSource: false       # 是否多数据源配置
+
+spring:
+  # database
+  datasource:
+    hikari:
+      connection-init-sql: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci           # SqlServer, Oracle 无需设置类型
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    username: root
+    password: mu123
+    url: jdbc:mysql://127.0.0.1:3306/mjava?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+  jpa:
+    database: MYSQL
+    database-platform: org.hibernate.dialect.MySQL57Dialect
+
+# dingtalk
+dingtalk:
+  agentId: 2848797049
+  appKey: dingbqy1qugrihao43dl
+  appSecret: UUaTKTWgLdduHvMSl0ipm19f_PDarHLHqnpz4vFZXjkkmFNmfWuwoPF1evjIRwvd
+  corpId: ding5fcad818b0d9f62c35c2f4657eb6378f
+  aesKey:
+  token:
+  operator: "0249EDD1-754E-44C8-87F0-255B0E32021F"   # OA管理员账号
+
+# aliwork
+aliwork:
+  appType: "APP_R5EBUF2FPN3Y8DRF93M4"
+  systemToken: "ON566NC1VNIHPANP9TNVHB3TBIWS3E0TUZ5RLF3"
+
+# teambition
+teambition:
+  AppID: 66b5cec1dbcd57b14046af05
+  AppSecret: jyd7DVu3MGYwzt562qPmLAaacV65FIyQ
+  TenantId: 658e7239b580fdc87e4a7ca4                # 管理后台 - 企业xx - 企业ID
+  OperatorId: 667e8282df3131f8e588526e              # 公共账号, 需要有操作权限 [x]
+  ApiHost: https://tbtest.awinic.com:443/gateway    # 私有部署

+ 12 - 1
mjava-fengkaili/src/main/java/com/malk/fengkaili/service/impl/FKLImplService.java

@@ -254,7 +254,7 @@ public class FKLImplService implements FKLService {
                             type = "zc";
                             day_1 = type;
                             day_2 = type;
-                        } else if (result.contains("产假") || result.contains("陪产假") || result.contains("婚假") || result.contains("丧假")) {
+                        } else if (result.contains("产假") || result.contains("陪产假") || result.contains("婚假") || result.contains("丧假") || result.contains("育儿假")) {
                             type = result.split("假")[0] + "假"; // 按天请假
                             day_1 = type;
                             day_2 = type;
@@ -421,6 +421,17 @@ public class FKLImplService implements FKLService {
                                 }
                             }
                         }
+                        // prd 9/29 存在请假半天, 早退或迟到情况, 3小时以上才算次数 [兼容早退和迟到情况下, 还存在请假情况]
+                        if (type.contains(",")) {
+                            for (String tmp : type.split(",")) {
+                                if (tmp.contains("迟到") || tmp.contains("早退")) {
+                                    continue;
+                                }
+                                type = tmp;
+                                day_1 = tmp;
+                                day_2 = tmp;
+                            }
+                        }
                         // 日期动态列头
                         if (!days.contains(date)) {
                             days.add(date);

+ 66 - 2
mjava-ruisi/src/main/java/com/malk/ruisi/controller/DDController.java

@@ -4,6 +4,7 @@ package com.malk.ruisi.controller;
  * 错误抛出与拦截详见 CatchException
  */
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.malk.ruisi.service.RSService;
 import com.malk.server.aliwork.YDConf;
@@ -11,9 +12,11 @@ import com.malk.server.aliwork.YDParam;
 import com.malk.server.common.McException;
 import com.malk.server.common.McR;
 import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilDateTime;
 import com.malk.utils.UtilMap;
 import com.malk.utils.UtilServlet;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -21,8 +24,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.Arrays;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Slf4j
 @RestController
@@ -58,9 +61,70 @@ public class DDController {
     }
 
 
+    public void xxx() {
+        portal_cache = new HashMap();
+
+        _portalList("财务专区");
+    }
+
     @Autowired
     private YDClient ydClient;
 
+    /// 数据缓存 + 图片缓存, 10 分钟更新一次
+    private Map portal_cache = new HashMap();
+
+    /**
+     * 工作台数据
+     */
+    private List<Map> _portalList(String type) {
+
+        List<Map> pList = UtilMap.getList(portal_cache, type);
+
+        if (pList.isEmpty()) {
+            List<Map> dataList = (List<Map>) ydClient.queryData(YDParam.builder()
+                    .formUuid("FORM-D46C46DACD644467B8F6902EBFD8FDFEYFOX")
+                    .pageSize(5)
+                    .searchFieldJson(JSONObject.toJSONString(UtilMap.map("selectField_m17kv4an", type)))
+                    .build(), YDConf.FORM_QUERY.retrieve_search_form).getData();
+
+            dataList.sort(Comparator.comparingInt(item -> UtilMap.getInt(item, "numberField_m17kv4ao"))); // 排序
+            pList = dataList.stream().map(item -> {
+                Map formData = UtilMap.getMap(item, "formData");
+
+                Map row = UtilMap.map("title, source, link", UtilMap.getString(formData, "textField_m17kv4aq"), UtilMap.getString(formData, "textField_m17kv4as"), UtilMap.getString(formData, "textField_m17kv4at"));
+                long date = UtilMap.getLong(formData, "dateField_m17kv4ar");
+                if (date > 0L) {
+                    row.put("dateTime", UtilDateTime.format(new Date(date), "yyyy-MM-dd HH:mm"));
+                }
+                // 图片免登处理
+                String image = UtilMap.getString(formData, "imageField_m1abjxl0");
+                if (StringUtils.isNotBlank(image)) {
+                    List<Map> attas = (List<Map>) JSON.parse(image);
+                    row.put("image", ydClient.convertTemporaryUrl(UtilMap.getString(attas.get(0), "url")));
+                }
+                return row;
+            }).collect(Collectors.toList());
+
+            portal_cache.put(type, pList);
+        }
+
+        return pList;
+    }
+
+    /**
+     * 资讯卡片
+     * 1. 接口格式为 formData, 宜搭服务注册一致
+     * 2. 工作台页面不支持配置参数, 需要通过接口区分
+     */
+    @PostMapping("portal/cw")
+    List<Map> portal(HttpServletRequest request) {
+
+        Map data = UtilServlet.getParamMap(request);
+        log.info("工作台数据, {}", data);
+        return _portalList("财务专区");
+    }
+
+
     @GetMapping("test")
     McR test() {
 

+ 91 - 11
mjava-ruisi/src/main/java/com/malk/ruisi/controller/YDController.java

@@ -5,6 +5,7 @@ package com.malk.ruisi.controller;
  */
 
 import com.alibaba.fastjson.JSON;
+import com.malk.delegate.McDelegate;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
 import com.malk.server.common.McException;
@@ -15,12 +16,10 @@ import com.malk.utils.UtilServlet;
 import lombok.Synchronized;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -32,9 +31,10 @@ public class YDController {
     @Autowired
     private YDClient ydClient;
 
+    @Autowired
+    private McDelegate delegate;
 
-    // 接口校验通用逻辑
-
+    /// 接口校验通用逻辑
     @Synchronized
     @PostMapping("/invokeThird")
     McR invokeThird(HttpServletRequest request) {
@@ -50,22 +50,101 @@ public class YDController {
         }
 
         boolean isSuccess = true;
-        String message = "";
+        String message = "记录推送成功";
         try {
             /// 调用服务, 若也存在异常, 抛出
 
-
         } catch (McException exception) {
             isSuccess = true;
             message = exception.getMessage();
             log.error(exception.getMessage(), exception);
         }
 
+        // ppExt: 避免同意的数据更新, 与接口更新重复, 导致更新失败
+        boolean finalIsSuccess = isSuccess;
+        String finalMessage = message;
+        delegate.setTimeout(() -> {
+            ydClient.operateData(YDParam.builder()
+                    .formInstId(UtilMap.getString(data, "instanceId"))
+                    .updateFormDataJson(JSON.toJSONString(UtilMap.map("radioField_m1hmte37, textareaField_lntocd8u", finalIsSuccess ? "成功" : "失败", finalMessage)))
+                    .build(), YDConf.FORM_OPERATION.update);
+        }, isSuccess ? 0 : 2000);
+
+        McException.assertAccessException(!isSuccess, message); // 抛出异常
+
+        return McR.success();
+    }
+
+    /// 获取审批节点 1. 未到达审批前权限问题, 2. 抄送人\审批人不能评论权限问题, 3. 或签非审批操作人无打印权限问题
+    @PostMapping("approval/record")
+    McR approvalRecord(@RequestParam String processInstanceId, @RequestBody Map data) {
+
+        log.info("获取审批节点, {}, {}", processInstanceId, data);
+
+        List<Map> records = (List<Map>) ydClient.queryData(YDParam.builder()
+                .processInstanceId(processInstanceId)
+                .build(), YDConf.FORM_QUERY.retrieve_approval_record).getResult();
+
+        List<String> userIds = new ArrayList<>();   // 后端格式
+        List<Map> users = new ArrayList<>();        // 前端格式
+        for (Map record : records) {
+
+            // 节点多人情况处理
+            List<Map> domainList = UtilMap.getList(record, "domainList");
+            if (!domainList.isEmpty()) {
+                for (Map operator : domainList) {
+                    String userId = UtilMap.getString(operator, "operator");
+                    if (!userIds.contains(userId)) {
+                        userIds.add(userId);
+                        // 前端格式显示通过label控制
+                        users.add(UtilMap.map("name, label, value", operator.get("operatorName"), operator.get("operatorName"), userId));
+                    }
+                }
+            } else {
+                // 单人审批节点处理
+                String userId = UtilMap.getString(record, "operatorUserId");
+                if (!userIds.contains(userId)) {
+                    userIds.add(userId);
+                    // 前端格式显示通过label控制
+                    users.add(UtilMap.map("name, label, value", record.get("operatorName"), record.get("operatorName"), userId));
+                }
+            }
+        }
+
+        // 执行更新逻辑
+        if (UtilMap.getBoolean(data, "isUpdate")) {
+            McException.assertParamException_Null(data, "compId");
+            ydClient.operateData(YDParam.builder()
+                    .formInstId(processInstanceId)
+                    .updateFormDataJson(JSON.toJSONString(UtilMap.map(UtilMap.getString(data, "compId"), userIds)))
+                    .build(), YDConf.FORM_OPERATION.update);
+        }
+        return McR.success(UtilMap.map("users, userIds", users, userIds));
+    }
+
+    /// 流程分享权限 1. 发起人可操作权限 2. 配置弹出框在可编辑权限
+    @PostMapping("share/record")
+    McR shareRecord(@RequestParam String processInstanceId, @RequestBody Map data) {
+
+        log.info("流程分享权限, {}, {}", processInstanceId, data);
+
+        // 执行分享逻辑 [ 拼接后的权限组 ]
+        McException.assertParamException_Null(data, "compId, userIds, userId, content");
         ydClient.operateData(YDParam.builder()
-                .formInstId(UtilMap.getString(data, "instanceId"))
-                .updateFormDataJson(JSON.toJSONString(UtilMap.map("radioField_m1hmte37, textareaField_lntocd8u", isSuccess ? "成功" : "失败", message)))
+                .formInstId(processInstanceId)
+                .updateFormDataJson(JSON.toJSONString(UtilMap.map(UtilMap.getString(data, "compId"), UtilMap.getList(data, "userIds"))))
                 .build(), YDConf.FORM_OPERATION.update);
-        McException.assertAccessException(!isSuccess, message); // 抛出异常
+
+        YDParam ydParam = YDParam.builder()
+                .formInstanceId(processInstanceId)
+                .userId(UtilMap.getString(data, "userId"))
+                .content(UtilMap.getString(data, "content"))
+                .build();
+        if (UtilMap.getBoolean(data, "isNotice")) {
+            ydParam.setAtUserId(UtilMap.getString(data, "atUserId"));
+        }
+        ydClient.operateData(ydParam, YDConf.FORM_OPERATION.remarks);
+
 
         return McR.success();
     }
@@ -73,6 +152,7 @@ public class YDController {
     // 重新发起请假流程
     @GetMapping("/test21")
     McR test21() {
+
         String formInstanceId = "35c8ba1b-2c5b-4581-bf75-a53f9f3b4657";
         String userId = "1007054";
         Map formData = (Map) ydClient.queryData(YDParam.builder().formInstId(formInstanceId)

+ 6 - 1
mjava/src/main/java/com/malk/server/aliwork/YDConf.java

@@ -82,12 +82,17 @@ public class YDConf {
         create,
         delete,                     // 传入为body, 文档为param
         update,
-        upsert,                     // fixme: 不支持新增字段更新, 若有可先更新版本后执行 [无版本和更新json参数]; ppExt: 不会触发消息通知, 需要 start / creat
+
+        // fixme: 不支持新增字段更新, 若有可先更新版本后执行 [无版本和更新json参数];
+        // ppExt: 不会触发消息通知, 需要 start / creat. todo 通过架包形式会触发通知
+        upsert,                     // insertOrUpdate
         multi_create,               // 批量操作
         delete_batch,               // 批量删除
         multi_update,               // 批量更新
         start,                      // 发起流程
         batchSave,                  // 批量创建
+
+        remarks,  // 评论
     }
 
     /**

+ 18 - 8
mjava/src/main/java/com/malk/server/aliwork/YDParam.java

@@ -50,10 +50,10 @@ public class YDParam extends BaseDto {
     // 流程暂不支持排序
     private String dynamicOrder;
 
-    // 修改开始时间, ppExt: 需要同时传递开始和就结束才会生效; 其次日期格式yyyy-MM-dd, 但默认是0点, 结束日期j建议加1
+    // 修改开始时间, ppExt: 需要同时传递开始和就结束才会生效; 其次日期格式yyyy-MM-dd, 但默认是0点, 结束日期建议加1
     private String modifiedFromTimeGMT;
 
-    // 修改结束时间, ppExt: 需要同时传递开始和就结束才会生效; 其次日期格式yyyy-MM-dd, 但默认是0点, 结束日期j建议加1
+    // 修改结束时间, ppExt: 需要同时传递开始和就结束才会生效; 其次日期格式yyyy-MM-dd, 但默认是0点, 结束日期建议加1
     private String modifiedToTimeGMT;
 
     @NotNull(message = "实例ID不能为空", groups = {Update.class, Delete.class, Retrieve_FormInstId.class})
@@ -75,8 +75,10 @@ public class YDParam extends BaseDto {
     @NotNull(message = "实例ID不能为空", groups = Retrieve_ProcessInstanceIds.class)
     private String processInstanceIds;
 
+    /// RUNNING / NEW / PAUSED / TERMINATED / COMPLETED / ERROR / CANCELED
     private String instanceStatus;
 
+    /// disagree / agree
     private String approvedResult;
 
     /**
@@ -152,27 +154,35 @@ public class YDParam extends BaseDto {
 
     // 是否需要宜搭服务端异步执行该任务
     @Builder.Default
-    boolean asynchronousExecution = false;
+    private boolean asynchronousExecution = false;
 
     // 是否需要触发表单绑定的校验规则、关联业务规则和第三方服务回调
     @Builder.Default
-    boolean executeExpression = false;
+    private boolean executeExpression = false;
 
     // 是否不触发表单绑定的校验规则、关联业务规则和第三方服务回调。
     @Builder.Default
-    boolean noExecuteExpression = true;
+    private boolean noExecuteExpression = true;
 
     // 是否忽略空值。
     @Builder.Default
-    boolean ignoreEmpty = true;
+    private boolean ignoreEmpty = true;
 
     // 是否使用最新的表单schema版本。
     @Builder.Default
-    boolean useLatestFormSchemaVersion = true;
+    private boolean useLatestFormSchemaVersion = true;
 
     // 使用最新的表单版本进行更新。
     @Builder.Default
-    boolean useLatestVersion = false;
+    private boolean useLatestVersion = false;
+
+    /**
+     * 评论
+     */
+    private String atUserId;
+
+    private String content;
+
 
     /**
      * 分组校验

+ 5 - 1
mjava/src/main/java/com/malk/service/aliwork/impl/YDClientImpl.java

@@ -64,7 +64,7 @@ public class YDClientImpl implements YDClient {
                 break;
             case upsert:
                 ddr_new = (DDR_New) UtilHttp.doPost(this.getRequestUrl("/forms/instances/insertOrUpdate"), this.ddClient.initTokenHeader(), bodys, DDR_New.class);
-
+                break;
             case delete:
                 ddr_new = (DDR_New) UtilHttp.doDelete(getRequestUrl("/forms/instances"), ddClient.initTokenHeader(), bodys, DDR_New.class);
                 break;
@@ -80,6 +80,10 @@ public class YDClientImpl implements YDClient {
             case batchSave:
                 ddr_new = (DDR_New) UtilHttp.doPost(getRequestUrl("/forms/instances/batchSave"), ddClient.initTokenHeader(), null, _initBodyParam(ydParam), DDR_New.class);
                 break;
+            case remarks:
+                ddr_new = (DDR_New) UtilHttp.doPost(getRequestUrl("/forms/remarks"), ddClient.initTokenHeader(), null, _initBodyParam(ydParam), DDR_New.class);
+                break;
+
             default:
                 break;
         }