diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/other/MessageCompiler.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/other/MessageCompiler.java new file mode 100644 index 0000000..8b0c0a1 --- /dev/null +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/other/MessageCompiler.java @@ -0,0 +1,66 @@ +package zcgj.zcdev.zcdev.fs.plugin.other; + +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.entity.earlywarn.EarlyWarnContext; +import kd.bos.entity.earlywarn.kit.StringTemplateParser; +import kd.bos.entity.earlywarn.kit.StringUtil; +import kd.bos.entity.earlywarn.warn.plugin.IEarlyWarnMessageCompiler; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class MessageCompiler implements IEarlyWarnMessageCompiler { + + + @Override + public String getSingleMessage(String expression, List fields, DynamicObject data, EarlyWarnContext earlyWarnContext) { + if (expression == null || data == null){ + return ""; + } + Map map = new HashMap<>(); + for (String field : fields) { + String value = ""; + if ("zcgj_beginlocal".equals(field) + || "zcgj_debitlocal".equals(field) + || "zcgj_creditlocal".equals(field) + || "zcgj_yeardebitfor".equals(field) + || "zcgj_yearcreditfor".equals(field) + || "zcgj_endlocal".equals(field)){ + String[] arr = StringUtil.split(field, "."); + Object objValue = getValue(data, arr); + value = objValue == null?"" : objValue.toString(); + if(value!=null){ + BigDecimal valBig = new BigDecimal(value); + BigDecimal divide = valBig.setScale(2, RoundingMode.HALF_UP).divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP); + value = String.valueOf(divide); + } + }else { + String[] arr = StringUtil.split(field, "."); + Object objValue = getValue(data, arr); + value = objValue == null?"" : objValue.toString(); + } + map.put(field,value); + } + StringTemplateParser parser = new StringTemplateParser(); + return parser.parse(expression,name->map.get(name)); + } + private String getValue(DynamicObject data, String[] arr) { + if(null == arr || arr.length == 0){ + return ""; + } + Object obj = data.get(arr[0]); + if(obj instanceof DynamicObject){ + return getValue((DynamicObject)obj, Arrays.copyOfRange(arr, 1, arr.length)); + } + return StringUtil.toSafeString(obj); + } + + @Override + public String getMergeMessage(String s, List list, EarlyWarnContext earlyWarnContext) { + return ""; + } +}