找回密码
 立即注册

QQ登录

只需一步,快速开始

z1111

注册会员

5

主题

24

帖子

125

积分

注册会员

积分
125
z1111
注册会员   /  发表于:2024-5-28 10:25  /   查看:1284  /  回复:5
1金币
我用的是程杰大佬的例子,返回值有4个,我想把这4个值都进行后续操作,该如何做呢?
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

看代码第60行,如果你这个命令所创建的变量想在当前服务端命令列表中都可以使用。 直接在当前上下文的参数中添加 dataContext.getParameters().put(resultTo, res);

5 个回复

倒序浏览
最佳答案
最佳答案
Ben.C
初级会员   /  发表于:2024-5-28 10:25:59
来自 3#
看代码第60行,如果你这个命令所创建的变量想在当前服务端命令列表中都可以使用。
直接在当前上下文的参数中添加
dataContext.getParameters().put(resultTo, res);
回复 使用道具 举报
z1111
注册会员   /  发表于:2024-5-28 10:48:32
2#
  1. package org.example;

  2. import com.grapecity.forguncy.commands.ICommandExecutableInServerSide;
  3. import com.grapecity.forguncy.commands.IServerCommandExecuteContext;
  4. import com.grapecity.forguncy.commands.annotation.ResultToProperty;
  5. import com.grapecity.forguncy.commands.annotation.common.Category;
  6. import com.grapecity.forguncy.commands.entity.Command;
  7. import com.grapecity.forguncy.commands.entity.ExecuteResult;
  8. import com.grapecity.forguncy.commands.enumeration.CommandScope;
  9. import com.grapecity.forguncy.plugincommon.common.annotation.*;
  10. import lombok.Data;
  11. import org.apache.commons.codec.binary.Base64;

  12. import java.io.BufferedReader;
  13. import java.io.IOException;
  14. import java.io.UnsupportedEncodingException;
  15. import java.security.MessageDigest;
  16. import java.security.NoSuchAlgorithmException;

  17. @Data
  18. public class TestChengJie extends Command implements ICommandExecutableInServerSide {

  19.     private static final char[] DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

  20.     @DisplayName("AppSecret")
  21.     @FormulaProperty
  22.     @Required
  23.     private String appSecret;

  24.     @DisplayName("请求ID")
  25.     @FormulaProperty
  26.     @Required
  27.     private String requestId;

  28.     @DisplayName("时间戳")
  29.     @FormulaProperty
  30.     @Required
  31.     private String timestamp;

  32.     @DisplayName("数据")
  33.     @FormulaProperty
  34.     @Required
  35.     private String data;

  36.     @ResultToProperty
  37.     @FormulaProperty
  38.     @DisplayName("签名结果3")
  39.     private String resultTo = "结果4";

  40.     @Override
  41.     public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
  42.         Long innerTimestamp = Long.parseLong(timestamp);
  43.         String res = null;
  44.         try {
  45.             res = sign(appSecret, requestId, innerTimestamp, data);
  46.         } catch (Exception e) {
  47.             throw new RuntimeException(e);
  48.         }
  49.         try {
  50.             dataContext.getParameters().put(resultTo, res);
  51.         } catch (Exception e) {
  52.             throw new RuntimeException(e);
  53.         }

  54.         ExecuteResult executeResult = new ExecuteResult();
  55.         executeResult.getReturnValues().put("resultTo", "resultTo 11111");
  56.         executeResult.getReturnValues().put("结果6666", "结果6666 111111");
  57.         executeResult.getReturnValues().put("结果7777", res+2333);
  58.         executeResult.getReturnValues().put("结果8888", res+34444444);
  59.         return executeResult;
  60.     }

  61.     @Override
  62.     public boolean getDesignerPropertyVisible(String propertyName, CommandScope commandScope) {

  63.         return super.getDesignerPropertyVisible(propertyName, commandScope);
  64.     }

  65.     @Override
  66.     public String toString() {
  67.         return "签名程杰";
  68.     }

  69.     public static String sign(String appSecret, String requestId, Long timestamp, String data) throws Exception{
  70.         // 1.签名参数按自然升序排列,拼接上data
  71.         StringBuilder sb = new StringBuilder();
  72.         sb.append("appSecret=").append(appSecret).append("&")
  73.                 .append("requestId=").append(requestId).append("&")
  74.                 .append("timestamp=").append(timestamp)
  75.                 .append(data);
  76.         // 2.对签名字符串base64编码后获取32位md5值
  77.         // 2.对签名字符串base64编码后获取32位md5值
  78.         String base64Encode = base64Encode(sb.toString().getBytes("UTF-8"));
  79.         String md5Value = md5(base64Encode);
  80.         // 3.将得到的MD5值进行sha1散列,转换为16进制字符串
  81.         String sign = sha1(md5Value);
  82.         return sign;
  83.     }

  84.     /**
  85.      * 对字符串进行MD5加密,得到32位MD5值
  86.      * @param text 明文
  87.      * @return 密文
  88.      */
  89.     public static String md5(String text) {
  90.         try {
  91.             MessageDigest msgDigest = MessageDigest.getInstance("MD5");
  92.             msgDigest.update(text.getBytes("UTF-8"));
  93.             byte[] bytes = msgDigest.digest();
  94.             // 转成16进制
  95.             return new String(encodeHex(bytes));
  96.         } catch (NoSuchAlgorithmException e) {
  97.             throw new IllegalStateException("System doesn't support MD5 algorithm.");
  98.         } catch (UnsupportedEncodingException e) {
  99.             throw new IllegalStateException("System doesn't support your  EncodingException.");
  100.         }
  101.     }

  102.     /***
  103.      * SHA加密
  104.      * @return
  105.      */
  106.     public static String sha1(String content) throws Exception {
  107.         MessageDigest sha = MessageDigest.getInstance("SHA1");
  108.         byte[] byteArray = content.getBytes("UTF-8");
  109.         return new String(encodeHex(sha.digest(byteArray)));
  110.     }


  111.     /**
  112.      * base64编码
  113.      *
  114.      * @param content
  115.      * @return
  116.      * @throws Exception
  117.      */
  118.     public static String base64Encode(byte[] content) throws Exception {
  119.         return Base64.encodeBase64String(content).replaceAll("(\\\r\\\n|\\\r|\\\n|\\\n\\\r)", "");
  120.     }

  121.     /**
  122.      * base64解码
  123.      *
  124.      * @param content
  125.      * @return
  126.      * @throws Exception
  127.      */

  128.     public static byte[] base64Decode(String content) throws Exception {
  129.         return Base64.decodeBase64(content);
  130.     }

  131.     /**
  132.      * 转换成16进制
  133.      * @param data
  134.      * @return
  135.      */
  136.     private static char[] encodeHex(byte[] data) {
  137.         int l = data.length;
  138.         char[] out = new char[l << 1];
  139.         // two characters form the hex value.
  140.         for (int i = 0, j = 0; i < l; i++) {
  141.             out[j++] = DIGITS[(0xF0 & data[i]) >>> 4];
  142.             out[j++] = DIGITS[0x0F & data[i]];
  143.         }
  144.         return out;
  145.     }

复制代码
回复 使用道具 举报
z1111
注册会员   /  发表于:2024-5-28 15:05:41
4#
本帖最后由 z1111 于 2024-5-28 15:59 编辑
Ben.C 发表于 2024-5-28 14:55
看代码第60行,如果你这个命令所创建的变量想在当前服务端命令列表中都可以使用。
直接在当前上下文的参数 ...

好了,感谢
回复 使用道具 举报
z1111
注册会员   /  发表于:2024-5-28 16:00:48
5#

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Nathan.guo活字格认证 Wyn认证
超级版主   /  发表于:2024-5-29 13:42:46
6#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部