| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446 |
- package jnpf.base.util;
- import cn.hutool.core.util.ObjectUtil;
- import jnpf.model.visualJson.FieLdsModel;
- import jnpf.model.visualJson.config.ConfigModel;
- import jnpf.util.*;
- import jnpf.util.visiual.JnpfKeyConsts;
- import java.math.BigDecimal;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.*;
- import java.util.stream.Collectors;
- /**
- * 在线开发公用
- *
- * @author JNPF开发平台组
- * @version V3.1.0
- * @copyright 引迈信息技术有限公司(https://www.jnpfsoft.com)
- * @date 2021/7/28
- */
- public class FormPublicUtils {
- /**
- * 递归控件,除子表外控件全部提到同级
- * 取子集,子表不外提
- *
- * @return
- */
- public static void recursionFieldsExceptChild(List<FieLdsModel> allFields, List<FieLdsModel> fieLdsModelList) {
- for (FieLdsModel fieLdsModel : fieLdsModelList) {
- ConfigModel config = fieLdsModel.getConfig();
- String jnpfKey = config.getJnpfKey();
- if (JnpfKeyConsts.CHILD_TABLE.equals(jnpfKey)) {
- allFields.add(fieLdsModel);
- continue;
- } else {
- if (config.getChildren() != null) {
- recursionFieldsExceptChild(allFields, config.getChildren());
- } else {
- if (jnpfKey == null) {
- continue;
- }
- allFields.add(fieLdsModel);
- }
- }
- }
- }
- /**
- * 转换时间格式
- *
- * @param time
- * @return
- */
- public static String getTimeFormat(String time) {
- String result;
- switch (time.length()) {
- case 16:
- result = time + ":00";
- break;
- case 19:
- result = time;
- break;
- case 21:
- result = time.substring(0, time.length() - 2);
- break;
- case 10:
- result = time + " 00:00:00";
- break;
- case 8:
- result = "2000-01-01 " + time;
- break;
- case 7:
- result = time + "-01 00:00:00";
- break;
- case 4:
- result = time + "-01-01 00:00:00";
- break;
- default:
- result = "";
- break;
- }
- return result;
- }
- public static String getLastTimeFormat(String time) {
- String result;
- switch (time.length()) {
- case 16:
- result = time + ":00";
- break;
- case 19:
- result = time;
- break;
- case 10:
- result = time + " 23:59:59";
- break;
- case 8:
- result = "2000-01-01 " + time;
- break;
- case 7:
- //获取月份最后一天
- String[] split = time.split("-");
- Calendar cale = Calendar.getInstance();
- cale.set(Calendar.YEAR, Integer.valueOf(split[0]));//赋值年份
- cale.set(Calendar.MONTH, Integer.valueOf(split[1]) - 1);//赋值月份
- int lastDay = cale.getActualMaximum(Calendar.DAY_OF_MONTH);//获取月最大天数
- cale.set(Calendar.DAY_OF_MONTH, lastDay);//设置日历中月份的最大天数
- cale.set(Calendar.HOUR_OF_DAY, 23);
- cale.set(Calendar.SECOND, 59);
- cale.set(Calendar.MINUTE, 59);
- result = DateUtil.daFormatHHMMSS(cale.getTime().getTime());
- break;
- case 4:
- result = time + "-12-31 23:59:59";
- break;
- default:
- result = "";
- break;
- }
- return result;
- }
- /**
- * 判断时间是否在设置范围内
- *
- * @param swapDataVo
- * @param format
- * @param value
- * @param data
- * @param jnpfKey
- * @return
- */
- public static boolean dateTimeCondition(FieLdsModel swapDataVo, String format, Object value, Map<String, Object> data, String jnpfKey) {
- long valueTimeLong;
- //输入值转long
- if (value instanceof String) {
- valueTimeLong = cn.hutool.core.date.DateUtil.parse(String.valueOf(value), format).getTime();
- } else {
- //输入值按格式补全
- String timeFormat = getTimeFormat(String.valueOf(value));
- valueTimeLong = DateUtil.stringToDate(timeFormat).getTime();
- }
- boolean timeHasRangeError = false;
- //开始时间判断
- if (swapDataVo.getConfig().getStartTimeRule()) {
- String startTimeValue = swapDataVo.getConfig().getStartTimeValue();
- String startTimeType = swapDataVo.getConfig().getStartTimeType();
- String startTimeTarget = swapDataVo.getConfig().getStartTimeTarget();
- String startTimeRelationField = swapDataVo.getConfig().getStartRelationField();
- //根据类型获取开始时间戳
- long startTimeLong = getDateTimeLong(data, jnpfKey, startTimeValue, startTimeType, startTimeTarget, startTimeRelationField, format);
- if (startTimeLong != 0 && valueTimeLong < startTimeLong) {
- timeHasRangeError = true;
- }
- }
- //结束时间判断
- if (swapDataVo.getConfig().getEndTimeRule()) {
- String endTimeValue = swapDataVo.getConfig().getEndTimeValue();
- String endTimeType = swapDataVo.getConfig().getEndTimeType();
- String endTimeTarget = swapDataVo.getConfig().getEndTimeTarget();
- String endTimeRelationField = swapDataVo.getConfig().getEndRelationField();
- //根据类型获取开始时间戳
- long endTimeLong = getDateTimeLong(data, jnpfKey, endTimeValue, endTimeType, endTimeTarget, endTimeRelationField, format);
- if (endTimeLong != 0 && valueTimeLong > endTimeLong) {
- timeHasRangeError = true;
- }
- }
- return timeHasRangeError;
- }
- /**
- * 根据类型获取时间戳
- *
- * @param data
- * @param jnpfKey
- * @param timeValue
- * @param timeType
- * @param timeTarget
- * @return
- */
- public static long getDateTimeLong(Map<String, Object> data, String jnpfKey, String timeValue, String timeType, String timeTarget,
- String stringimeRelationField, String format) {
- if (StringUtil.isEmpty(timeValue)) {
- timeValue = "0";
- }
- long startTimeLong = 0;
- //当前格式的当前时间戳
- long timestampInMillis = new Date().getTime();
- try {
- SimpleDateFormat sdf = new SimpleDateFormat(format);
- String s = sdf.format(new Date());
- timestampInMillis = sdf.parse(s).getTime();
- } catch (ParseException e) {
- }
- switch (timeType) {
- case "1"://特定时间
- if (JnpfKeyConsts.DATE.equals(jnpfKey)) {
- startTimeLong = Long.parseLong(timeValue);
- } else {
- String newDateStr = DateUtil.daFormat(new Date()) + " " + timeValue + (timeValue.length() > 6 ? "" : ":00");
- startTimeLong = DateUtil.stringToDate(newDateStr).getTime();
- }
- break;
- case "2"://表单字段
- if (stringimeRelationField != null) {
- String fieldValue = "";
- if (stringimeRelationField.toLowerCase().contains(JnpfKeyConsts.CHILD_TABLE_PREFIX)) {//子
- String[] split = stringimeRelationField.split("-");
- fieldValue = data.get(split[1]) != null ? data.get(split[1]).toString() : "";
- } else {//主副
- Map<String, Object> mainAndMast = data.get("mainAndMast") != null ? JsonUtil.entityToMap(data.get("mainAndMast")) : data;
- fieldValue = mainAndMast.get(stringimeRelationField) != null ? mainAndMast.get(stringimeRelationField).toString() : "";
- }
- if (StringUtil.isNotEmpty(fieldValue)) {
- String timeFormat = getTimeFormat(fieldValue);
- startTimeLong = cn.hutool.core.date.DateUtil.parse(timeFormat, "yyyy-MM-dd HH:mm:ss").getTime();
- }
- }
- break;
- case "3"://填写当前时间
- startTimeLong = timestampInMillis;
- break;
- case "4"://当前时间前
- Calendar caledel = Calendar.getInstance();
- caledel.setTimeInMillis(timestampInMillis);
- if (JnpfKeyConsts.DATE.equals(jnpfKey)) {
- switch (timeTarget) {
- case "1"://年
- caledel.set(Calendar.YEAR, caledel.get(Calendar.YEAR) - Integer.valueOf(timeValue));//赋值年份
- break;
- case "2"://月
- caledel.set(Calendar.MONTH, caledel.get(Calendar.MONTH) - Integer.valueOf(timeValue));
- break;
- case "3"://日
- caledel.set(Calendar.DAY_OF_MONTH, caledel.get(Calendar.DAY_OF_MONTH) - Integer.valueOf(timeValue));
- break;
- }
- } else {
- switch (timeTarget) {
- case "1"://时
- caledel.set(Calendar.HOUR_OF_DAY, caledel.get(Calendar.HOUR_OF_DAY) - Integer.valueOf(timeValue));
- break;
- case "2"://分
- caledel.set(Calendar.MINUTE, caledel.get(Calendar.MINUTE) - Integer.valueOf(timeValue));
- break;
- case "3"://秒
- caledel.set(Calendar.SECOND, caledel.get(Calendar.SECOND) - Integer.valueOf(timeValue));
- break;
- }
- }
- startTimeLong = caledel.getTime().getTime();
- break;
- case "5"://当前时间后
- Calendar cale = Calendar.getInstance();
- cale.setTimeInMillis(timestampInMillis);
- if (JnpfKeyConsts.DATE.equals(jnpfKey)) {
- switch (timeTarget) {
- case "1"://年
- cale.set(Calendar.YEAR, cale.get(Calendar.YEAR) + Integer.valueOf(timeValue));//赋值年份
- break;
- case "2"://月
- cale.set(Calendar.MONTH, cale.get(Calendar.MONTH) + Integer.valueOf(timeValue));
- break;
- case "3"://日
- cale.set(Calendar.DAY_OF_MONTH, cale.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(timeValue));
- break;
- }
- } else {
- switch (timeTarget) {
- case "1"://时
- cale.set(Calendar.HOUR_OF_DAY, cale.get(Calendar.HOUR_OF_DAY) + Integer.valueOf(timeValue));
- break;
- case "2"://分
- cale.set(Calendar.MINUTE, cale.get(Calendar.MINUTE) + Integer.valueOf(timeValue));
- break;
- case "3"://秒
- cale.set(Calendar.SECOND, cale.get(Calendar.SECOND) + Integer.valueOf(timeValue));
- break;
- }
- }
- startTimeLong = cale.getTime().getTime();
- break;
- default:
- break;
- }
- return startTimeLong;
- }
- /**
- * 字符串转数组
- *
- * @param value 值
- * @return
- */
- public static Object getDataConversion(Object value) {
- if (value instanceof Integer || value instanceof Long || value instanceof Float || value instanceof Double || value instanceof BigDecimal)
- return value;
- Object dataValue = getDataConversion(null, value, false, "/");
- return dataValue;
- }
- /**
- * 字符串转数组
- *
- * @param redis 转换对象
- * @param value 值
- * @return
- */
- public static Object getDataConversion(Map<String, Object> redis, Object value, boolean isMultiple, String separator) {
- Object dataValue = value;
- boolean iszhuanhuan = redis != null;
- try {
- List<List> list = JsonUtil.getJsonToList(String.valueOf(value), List.class);
- dataValue = list;
- if (iszhuanhuan) {
- //一级分隔符
- StringJoiner joiner = new StringJoiner(",");
- for (List listChild : list) {
- StringJoiner aa = new StringJoiner(separator);
- for (Object object : listChild) {
- String value1 = redis.get(String.valueOf(object)) != null ? String.valueOf(redis.get(String.valueOf(object))) : "";
- if (StringUtil.isNotEmpty(value1)) {
- aa.add(value1);
- }
- }
- joiner.add(aa.toString());
- }
- dataValue = joiner.toString();
- }
- } catch (Exception e) {
- try {
- List<String> list = JsonUtil.getJsonToList(String.valueOf(value), String.class);
- dataValue = list;
- if (iszhuanhuan) {
- if (isMultiple) {//一级分隔符
- separator = ",";
- }
- StringJoiner joiner = new StringJoiner(separator);
- for (Object listChild : list) {
- String value1 = redis.get(String.valueOf(listChild)) != null ? String.valueOf(redis.get(String.valueOf(listChild))) : "";
- if (StringUtil.isNotEmpty(value1)) {
- joiner.add(value1);
- }
- }
- dataValue = joiner.toString();
- }
- } catch (Exception e1) {
- dataValue = String.valueOf(value);
- if (iszhuanhuan) {
- dataValue = redis.get(String.valueOf(value)) != null ? String.valueOf(redis.get(String.valueOf(value))) : "";
- }
- }
- }
- return dataValue;
- }
- /**
- * 给列表数据添加id
- *
- * @param dataList
- * @param key
- */
- public static List<Map<String, Object>> addIdToList(List<Map<String, Object>> dataList, String key) {
- return dataList.stream().map(data -> {
- data.put(FlowFormConstant.ID, data.get(key));
- String flwoId = null;
- if (data.get(TableFeildsEnum.FLOWID.getField()) != null) {
- flwoId = String.valueOf(data.get(TableFeildsEnum.FLOWID.getField()));
- }
- if (data.get(TableFeildsEnum.FLOWID.getField().toUpperCase()) != null) {
- flwoId = String.valueOf(data.get(TableFeildsEnum.FLOWID.getField().toUpperCase()));
- }
- data.put(FlowFormConstant.FLOWID, flwoId);
- String flowTaskId = null;
- if (data.get(TableFeildsEnum.FLOWTASKID.getField()) != null) {
- flowTaskId = String.valueOf(data.get(TableFeildsEnum.FLOWTASKID.getField()));
- }
- if (data.get(TableFeildsEnum.FLOWTASKID.getField().toUpperCase()) != null) {
- flowTaskId = String.valueOf(data.get(TableFeildsEnum.FLOWTASKID.getField().toUpperCase()));
- }
- data.put(FlowFormConstant.FLOWTASKID, flowTaskId);
- return data;
- }).collect(Collectors.toList());
- }
- /**
- * 关联表单获取原字段数据(数据类型也要转换)
- *
- * @param dataMap
- * @param jnpfKey
- * @param obj
- * @param vModel
- */
- public static void relationGetJnpfId(Map<String, Object> dataMap, String jnpfKey, Object obj, String vModel) {
- String vModeljnpfId = vModel + "_jnpfId";
- switch (jnpfKey) {
- case JnpfKeyConsts.CREATETIME:
- case JnpfKeyConsts.MODIFYTIME:
- case JnpfKeyConsts.DATE:
- case JnpfKeyConsts.DATE_CALCULATE:
- Long dateTime = DateTimeFormatConstant.getDateObjToLong(dataMap.get(vModel));
- dataMap.put(vModeljnpfId, dateTime != null ? dateTime : dataMap.get(vModel));
- break;
- case JnpfKeyConsts.CHILD_TABLE:
- break;
- case JnpfKeyConsts.SWITCH:
- case JnpfKeyConsts.SLIDER:
- case JnpfKeyConsts.RATE:
- case JnpfKeyConsts.CALCULATE:
- case JnpfKeyConsts.NUM_INPUT:
- dataMap.put(vModeljnpfId, ObjectUtil.isNotEmpty(obj) ? new BigDecimal(String.valueOf(obj)) : dataMap.get(vModel));
- break;
- default:
- dataMap.put(vModeljnpfId, obj);
- break;
- }
- if (JnpfKeyConsts.getArraysKey().contains(jnpfKey) && obj != null) {
- String o = String.valueOf(obj);
- try {
- List<List> jsonToList = JsonUtil.getJsonToList(o, List.class);
- List<Object> res = new ArrayList<>();
- for (List listChild : jsonToList) {
- List<Object> res2 = new ArrayList<>();
- for (Object object : listChild) {
- if (object != null && StringUtil.isNotEmpty(String.valueOf(object))) {
- res2.add(object);
- }
- }
- res.add(res2);
- }
- dataMap.put(vModeljnpfId, res);
- } catch (Exception e) {
- try {
- List<Object> jsonToList = JsonUtil.getJsonToList(o, Object.class);
- dataMap.put(vModeljnpfId, jsonToList);
- } catch (Exception e1) {
- }
- }
- }
- }
- }
|