Эх сурвалжийг харах

1.弹性班数组函数代码

Tyx 2 өдөр өмнө
parent
commit
1cec14596b

+ 130 - 0
code/jyyy/nckd-jimin-jyyy-hr/src/main/java/nckd/jimin/jyyy/hr/wtc/wtbs/util/RetrievalItemArrUtils.java

@@ -0,0 +1,130 @@
+package nckd.jimin.jyyy.hr.wtc.wtbs.util;
+
+import com.alibaba.fastjson.JSONObject;
+import kd.bos.dataentity.resource.ResManager;
+import kd.bos.exception.KDBizException;
+import kd.bos.logging.Log;
+import kd.bos.logging.LogFactory;
+import kd.wtc.wtbs.common.util.WTCMaps;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static kd.wtc.wtp.constants.WTPProjConstants.WTC_WTP_BUSINESS;
+
+/**
+ * 取数项目中数组类型工具类
+ * @author rd_shancheng_chen
+ * @since 2024-07-16 11:11
+ */
+public final class RetrievalItemArrUtils {
+
+    private static final Log LOG = LogFactory.getLog(RetrievalItemArrUtils.class);
+
+    private static Object[] getRealLineArr(Object[] objArr) {
+        try {
+            // 空则返回空数组
+            if (objArr == null || objArr.length == 0) {
+                return null;
+            }
+            // 判断数组的类型
+            if (objArr.getClass().getComponentType() == null) {
+                throw new IllegalArgumentException("illegal input type");
+            } else if (objArr[0] instanceof Map) {
+                return objArr;
+            } else if (objArr[0].getClass().isAssignableFrom(String.class)) {
+                Object[] res = new HashMap[objArr.length];
+                for (int i = 0; i < objArr.length; i++) {
+                    JSONObject jsonObject = JSONObject.parseObject(objArr[i].toString());
+                    Map<String, Object> resultMap = WTCMaps.JsonToMap(jsonObject);
+                    res[i] = resultMap;
+                }
+                return res;
+            } else {
+                throw new IllegalArgumentException("llegal input type:" + objArr[0].getClass().getName());
+            }
+        } catch (Exception exp) {
+            LOG.warn("RetrievalItemArrUtils getRealLineArr fail:lineArr={}", objArr);
+            throw new KDBizException(ResManager.loadKDString("数组参数不符合规范:{0}", "RetrievalItemArrUtils_1", WTC_WTP_BUSINESS, exp.getMessage()));
+        }
+    }
+
+    /**
+     * 给数组对象设值
+     *
+     * @param lineArr  数组对象,[{key:value,xxx}, {xxx}]结构 
+     * @param lineArr 下标,从0开始
+     * @param fieldName fieldName字段,支持xxx.xxx.xxx
+     * @return Object  可能为NULL, boolean返回 'Y'和'N'
+     */
+    public static Object getRetrievalItemArrLineDetailValue(Object[] lineArr, Integer rowNum, String fieldName) {
+        lineArr = getRealLineArr(lineArr);
+        if (rowNum == null) {
+            LOG.warn("RetrievalItemArrUtils getRetrievalItemArrLineDetailValue fail:rowNum is null");
+            throw new KDBizException(ResManager.loadKDString("所读取的行数不得为空。", "RetrievalItemArrUtils_2", WTC_WTP_BUSINESS, rowNum));
+        }
+        if (rowNum < 0) {
+            LOG.warn("RetrievalItemArrUtils getRetrievalItemArrLineDetailValue fail:rowNum < 0,rowNum={}", rowNum);
+            throw new KDBizException(ResManager.loadKDString("所读取的行数({0})不得小于0。", "RetrievalItemArrUtils_3", WTC_WTP_BUSINESS, rowNum));
+        }
+        if (lineArr == null || lineArr.length == 0) {
+            LOG.warn("RetrievalItemArrUtils getRetrievalItemArrLineDetailValue fail:lineArr isEmpty");
+            throw new KDBizException(ResManager.loadKDString("没有可读取的数据。", "RetrievalItemArrUtils_4", WTC_WTP_BUSINESS));
+        }
+        if (rowNum >= lineArr.length) {
+            LOG.warn("RetrievalItemArrUtils getRetrievalItemArrLineDetailValue fail:rowNum >= lineArr.length,rowNum={},lineArr.length={}", rowNum, lineArr.length);
+            throw new KDBizException(ResManager.loadKDString("所读取的行数({0})超出可读取的数据范围({1})。", "RetrievalItemArrUtils_5", WTC_WTP_BUSINESS, rowNum, lineArr.length));
+        }
+        if (!(lineArr[0] instanceof Map)) {
+            LOG.warn("RetrievalItemArrUtils getRetrievalItemArrLineDetailValue fail:!(lineArr[0] instanceof Map,lineArr={}", lineArr[0].getClass().getName());
+            throw new KDBizException(ResManager.loadKDString("不是map数组。", "RetrievalItemArrUtils_6", WTC_WTP_BUSINESS));
+        }
+        Map<String, Object> line = (Map) lineArr[rowNum];
+        if (!line.containsKey(fieldName)) {
+            LOG.warn("RetrievalItemArrUtils getRetrievalItemArrLineDetailValue fail:!line.containsKey(fieldName),line={},fieldName={}", line, fieldName);
+            throw new KDBizException(ResManager.loadKDString("读取失败,不存在字段:{0}。", "RetrievalItemArrUtils_7", WTC_WTP_BUSINESS, fieldName));
+        } else {
+            Object fieldValue = line.get(fieldName);
+            if (fieldValue instanceof Boolean) {
+                if ((Boolean) fieldValue) {
+                    fieldValue = "Y";
+                } else {
+                    fieldValue = "N";
+                }
+            }
+            return fieldValue;
+        }
+    }
+
+
+    /**
+     * 给数组对象设值
+     *
+     * @param mapArray  数组对象,[{key:value,xxx}, {xxx}]结构 
+     * @param index 下标,从0开始
+     * @param key key
+     * @param value  value
+     * @return mapArray
+     */
+    public static Object[] setArrayMapValue(Object[] mapArray, Integer index, String key, Object value) {
+        if (mapArray == null) {
+            mapArray = new Object[index + 1];
+        } else {
+            Object[] newArr = new Object[index + 1];
+            if (mapArray.length < newArr.length) {
+                // 拷贝
+                System.arraycopy(mapArray, 0, newArr, 0, mapArray.length);
+                mapArray = newArr;
+            }
+        }
+        for (int i = 0; i < mapArray.length; i++) {
+            if (mapArray[i] == null) {
+                mapArray[i] = new HashMap<>();
+            }
+        }
+        ((Map) mapArray[index]).put(key, value);
+
+        return mapArray;
+    }
+
+}