Mendix Studio pro 是一个能够开发复合场景,具有通用性的软件开发平台。Mendix平台的软件开发基于模型驱动(model driven development)。
感谢来自杭州幂链科技有限公司的马军妹、朱丹晖,徐以林对次技术分享做出的贡献,感谢您对mendix的支持以及做出的知识分享。
将交易或仓库管理,等涉及金钱的表单生成打印时,业务需求:要把最终的金钱数 =>中文金钱数。
举例:12=>拾贰
此场景具有通用性,在此分享给大家
点击add ,输入变量名称-可自定义举例’Price‘ , 设置变量类型为’Decimal‘
// BEGIN EXTRA CODE和// END USER CODE 之间是逻辑实现代码。
import com.mendix.systemwideinterfaces.core.IContext; import com.mendix.webui.CustomJavaAction; import org.apache.commons.lang3.StringUtils; public class Java_action extends CustomJavaAction<java.lang.String> { private java.math.BigDecimal Price; public Java_action(IContext context, java.math.BigDecimal Price) { super(context); this.Price = Price; } @java.lang.Override public java.lang.String executeAction() throws Exception { // BEGIN USER CODE java.lang.String result=toChinese(this.Price.toString()); return result; // END USER CODE } /** * Returns a string representation of this action */ @java.lang.Override public java.lang.String toString() { return "Java_action"; } // BEGIN EXTRA CODE //大写数字 private static final java.lang.String[] NUMBERS= {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; // 整数部分的单位 private static final java.lang.String[] IUNIT = {"元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万","拾","佰","仟"}; // 小数部分的单位 private static final java.lang.String[] DUNIT = {"角","分","厘"}; public java.lang.String toChinese(java.lang.String Price) { // 判断输入的金额字符串是否符合要求 if (StringUtils.isBlank(Price) || !Price.matches("(-)?[\\d]*(.)?[\\d]*")) { return "抱歉,请输入数字!"; } if("0".equals(Price) || "0.00".equals(Price) || "0.0".equals(Price)) { return "零元"; } // 判断金额数字中是否存在负号"-" java.lang.Boolean flag = false; if(Price.startsWith("-")){ // 标志位,标志此金额数字为负数 flag = true; Price = Price.replaceAll("-", ""); } // 去掉金额数字中的逗号"," Price = Price.replaceAll(",", ""); java.lang.String integerStr;//整数部分数字 java.lang.String decimalStr;//小数部分数字 // 初始化:分离整数部分和小数部分 if(Price.indexOf(".")>0) { integerStr = Price.substring(0,Price.indexOf(".")); decimalStr = Price.substring(Price.indexOf(".") + 1); }else if(Price.indexOf(".")==0) { integerStr = ""; decimalStr = Price.substring(1); }else { integerStr = Price; decimalStr = ""; } // beyond超出计算能力,直接返回 if(integerStr.length()>IUNIT.length) { return "超出计算能力!"; } // 整数部分数字 java.lang.Integer[] integers = toIntArray(integerStr); // 判断整数部分是否存在输入012的情况 if (integers.length>1 && integers[0] == 0) { return "抱歉,输入数字不符合要求!"; } // 设置万单位 java.lang.Boolean isWan = isWan5(integerStr); // 小数部分数字 java.lang.Integer[] decimals = toIntArray(decimalStr); // 返回最终的大写金额 java.lang.String result = getChineseInteger(integers, isWan) + getChineseDecimal(decimals); if(flag){ // 如果是负数,加上"负" return "负" + result; }else{ return result; } } /** * 将字符串转为int数组 * @param number 数字 * @return */ private java.lang.Integer[] toIntArray(java.lang.String number) { java.lang.Integer[] array = new java.lang.Integer[number.length()]; for(java.lang.Integer i = 0;i<number.length();i++) { array[i] = Integer.parseInt(number.substring(i,i+1)); } return array; } /** * 将整数部分转为大写的金额 * @param integers 整数部分数字 * @param isWan 整数部分是否已经是达到【万】 * @return */ public java.lang.String getChineseInteger(java.lang.Integer[] integers,java.lang.Boolean isWan) { StringBuffer chineseInteger = new StringBuffer(""); java.lang.Integer length = integers.length; if (length == 1 && integers[0] == 0) { return ""; } for(java.lang.Integer i=0; i<length; i++) { java.lang.String key = ""; if(integers[i] == 0) { if((length - i) == 13)//万(亿) key = IUNIT[4]; else if((length - i) == 9) {//亿 key = IUNIT[8]; }else if((length - i) == 5 && isWan) {//万 key = IUNIT[4]; }else if((length - i) == 1) {//元 key = IUNIT[0]; } if((length - i)>1 && integers[i+1]!=0) { key += NUMBERS[0]; } } chineseInteger.append(integers[i]==0?key:(NUMBERS[integers[i]]+IUNIT[length - i -1])); } return chineseInteger.toString(); } /** * 将小数部分转为大写的金额 * @param decimals 小数部分的数字 * @return */ private java.lang.String getChineseDecimal(java.lang.Integer[] decimals) { StringBuffer chineseDecimal = new StringBuffer(""); for(java.lang.Integer i = 0;i<decimals.length;i++) { if(i == 3) { break; } chineseDecimal.append(decimals[i]==0?"":(NUMBERS[decimals[i]]+DUNIT[i])); } return chineseDecimal.toString(); } /** * 判断当前整数部分是否已经是达到【万】 * @param integerStr 整数部分数字 * @return */ private java.lang.Boolean isWan5(java.lang.String integerStr) { java.lang.Integer length = integerStr.length(); if(length > 4) { java.lang.String subInteger = ""; if(length > 8) { subInteger = integerStr.substring(length- 8,length -4); }else { subInteger = integerStr.substring(0,length - 4); } return java.lang.Integer.parseInt(subInteger) > 0; }else { return false; } } // END EXTRA CODE }
杭州幂链科技有限公司 : 马军妹、朱丹晖,徐以林
2021年8月25日
更多信息,请访问以下链接:
Mendix官网:低代码应用开发平台 - 快速高效地构建应用 | Mendix
Mendix中国论坛:Mendix开发者论坛-加入Mendix开发者论坛,一起引领创新
Mendix行业解决方案:Low-Code Solution Gallery | Customizable Solutions For Every Industry
Mendix平台指南:Low-Code Application Development Platform Evaluation Guide | Mendix
Mendix动画展示:Application Development Demos – Mendix Low-Code Platform
感谢阅读!