1. 金额工具类
import java.math.BigDecimal;
/**
* 金额工具类
*@author
*@date
*/
public class BigDecimalUtils {
public static BigDecimal zero = new BigDecimal("0.00");
public static BigDecimal one = new BigDecimal("1.00");
public static BigDecimal one_handred = new BigDecimal("100");
public static BigDecimal one_thousand = new BigDecimal("1000");
public static BigDecimal one_million = new BigDecimal("1000000");
public static BigDecimal one_handred_ten = new BigDecimal("110");
public static BigDecimal ten_thousand = new BigDecimal("10000");
/***
* 金额格式转换
* @param Object
* @return
*/
public static BigDecimal toBigDecimal(Object obj)
{
if(obj == null)
return BigDecimalUtils.zero;
if(obj instanceof BigDecimal)
return (BigDecimal)obj;
if(obj instanceof Integer)
return new BigDecimal(((Integer)obj).toString());
if(obj instanceof Long)
return new BigDecimal(((Long)obj).toString());
if(obj instanceof Double)
return new BigDecimal(((Double)obj).doubleValue());
if(obj.toString() == null)
return BigDecimalUtils.zero;
String str = obj.toString().trim();
if(str.toLowerCase().indexOf("e") > -1)
try
{
return new BigDecimal(str);
}
catch(NumberFormatException e)
{
return BigDecimalUtils.zero;
}
if(str.matches("^[+-]?\\d+[\\.\\d]?\\d*+$"))
return new BigDecimal(str);
else
return BigDecimalUtils.zero;
}
/***
* 除
* @param Object
* @param Object
* @param scale 精度
* @return 金额
*/
public static BigDecimal div(Object a, Object b,int scale) {
if (a == null)
a = zero;
if (b == null)
return zero;
if (a instanceof BigDecimal && b instanceof BigDecimal) {
BigDecimal aVal = (BigDecimal) a;
BigDecimal bVal = (BigDecimal) b;
return aVal.divide(bVal,scale,BigDecimal.ROUND_HALF_UP);
}
return zero;
}
/***
* 除
* @param BigDecimal
* @param BigDecimal
* @param scale 精度
* @return 金额
*/
public static BigDecimal div(BigDecimal aVal, BigDecimal bVal,int scale) {
if (aVal == null)
aVal = zero;
if (bVal == null)
return zero;
if (bVal.compareTo(zero) == 0)
return zero;
BigDecimal ret = aVal.divide(bVal, scale, BigDecimal.ROUND_HALF_UP);
return ret;
}
/***
* 除
* @param BigDecimal
* @param BigDecimal
* @return 整数
*/
public static BigDecimal getIntDiv(BigDecimal aVal, BigDecimal bVal) {
if (aVal == null)
aVal = zero;
if (bVal == null)
return zero;
if (bVal.compareTo(zero) == 0)
return zero;
BigDecimal ret = aVal.divide(bVal, 0, BigDecimal.ROUND_UP);
return ret;
}
/***
* 乘
* @param Object
* @param Object
* @param scale
* @return
*/
public static BigDecimal multiply(Object a, Object b,int scale) {
if (a == null)
a = zero;
if (b == null)
b = zero;
if (a instanceof BigDecimal && b instanceof BigDecimal) {
BigDecimal aVal = (BigDecimal) a;
BigDecimal bVal = (BigDecimal) b;
return aVal.multiply(bVal).setScale(scale,BigDecimal.ROUND_HALF_UP);
}
return zero;
}
/***
* 乘
* @param BigDecimal
* @param BigDecimal
* @param scale
* @return
*/
public static BigDecimal multiply(BigDecimal aVal, BigDecimal bVal,int scale) {
if (aVal == null)
aVal = zero;
if (bVal == null)
bVal = zero;
BigDecimal ret = aVal.multiply(bVal).setScale(scale,BigDecimal.ROUND_HALF_UP);
return ret;
}
/***
* 加
* @param Object
* @param Object
* @param scale
* @return
*/
public static BigDecimal add(Object a, Object b,int scale) {
if (a == null)
a = zero;
if (b == null)
b = zero;
if (a instanceof BigDecimal && b instanceof BigDecimal) {
BigDecimal aVal = (BigDecimal) a;
BigDecimal bVal = (BigDecimal) b;
return aVal.add(bVal).setScale(scale, BigDecimal.ROUND_HALF_UP);
}
return zero;
}
/***
* 加
* @param BigDecimal
* @param BigDecimal
* @param scale
* @return
*/
public static BigDecimal add(BigDecimal aVal, BigDecimal bVal,int scale) {
if (aVal == null)
aVal = zero;
if (bVal == null)
bVal = zero;
BigDecimal ret = aVal.add(bVal);
ret = ret.setScale(scale, BigDecimal.ROUND_HALF_UP);
return ret;
}
/***
* 减
* @param Object
* @param Object
* @param scale
* @return
*/
public static BigDecimal sub(Object a, Object b,int scale) {
if (a == null)
a = zero;
if (b == null)
b = zero;
if (a instanceof BigDecimal && b instanceof BigDecimal) {
BigDecimal aVal = (BigDecimal) a;
BigDecimal bVal = (BigDecimal) b;
return aVal.subtract(bVal).setScale(scale, BigDecimal.ROUND_HALF_UP);
}
return zero;
}
/***
* 减
* @param BigDecimal
* @param BigDecimal
* @param scale
* @return
*/
public static BigDecimal sub(BigDecimal aVal, BigDecimal bVal,int scale) {
if (aVal == null)
aVal = zero;
if (bVal == null)
bVal = zero;
BigDecimal ret = aVal.subtract(bVal);
ret = ret.setScale(scale, BigDecimal.ROUND_HALF_UP);
return ret;
}
// 加1
public static BigDecimal addOne(Object a,int scale) {
return add(a, one,scale);
}
// 减1
public static BigDecimal subOne(Object a,int scale) {
return sub(a, one,scale);
}
/**
* 金额转大写
* @param n
* @return
*/
public static String digitCapital(double n) {
String fraction[] = {"角", "分"};
String digit[] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
String unit[][] = {{"元", "万", "亿"}, {"", "拾", "佰", "仟"}};
String head = n < 0 ? "负" : "";
// 如果是负数取绝对值
n = Math.abs(n);
String s = "";
BigDecimal bigDecimal = new BigDecimal(Double.valueOf(n).toString());
String nStr = bigDecimal.toString();
// 小数部分
String[] split = nStr.split("\\.");
if (split.length > 1) {
// 小数点为特殊符号,在分割时需进行转义
String decimalStr = split[1];
if (decimalStr.length() > 2) {
decimalStr = decimalStr.substring(0, 2);
}
// 将小数部分转换为整数
Integer integer = Integer.valueOf(decimalStr);
String p = "";
for (int i = 0; i < decimalStr.length() && i < fraction.length; i++) {
p = digit[integer % 10] + fraction[decimalStr.length() - i - 1] + p;
integer = integer / 10;
}
s = p.replaceAll("(零.)+", "") + s;
}
if (s.length() < 1) {
s = "整";
}
int integerPart = (int)Math.floor(n);
// 整数部分
for (int i = 0; i < unit[0].length && integerPart > 0; i++) {
String p = "";
for (int j = 0; j < unit[1].length && n > 0; j++) {
p = digit[integerPart % 10] + unit[1][j] + p;
integerPart = integerPart / 10;
}
s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s;
}
return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整");
}
/*
*向上取整
*/
public static BigDecimal ceil(double aVal,int scale) {
aVal = Math.ceil(aVal);
BigDecimal aVal1=BigDecimal.valueOf(aVal);
aVal1 = aVal1.setScale(scale, BigDecimal.ROUND_HALF_UP);
return aVal1;
}
/*
* 向下取整
*/
public static BigDecimal floor(double aVal,int scale) {
aVal = Math.floor(aVal);
BigDecimal aVal1=BigDecimal.valueOf(aVal);
aVal1 = aVal1.setScale(scale, BigDecimal.ROUND_HALF_UP);
return aVal1;
}
}
2. 日期工具类
import kd.bos.exception.*;
import java.text.*;
import org.joda.time.format.*;
import java.util.*;
import org.joda.time.*;
/**
* 日期工具类
*@author
*@date
*/
public class DateUtils {
public static final String FORMAT_YMD = "yyyy-MM-dd";
public static final String FORMAT_YMDHMS = "yyyy-MM-dd HH:mm:ss";
public static final String FORMAT_yyyyMMdd = "yyyyMMdd";
public static final DateTimeFormatter DATE_FORMATTER;
public static final DateTimeFormatter DATETIME_FORMATTER;
public static Date truncateDate(final Date dt) {
if (dt == null) {
return null;
}
final Calendar cal = Calendar.getInstance();
cal.setTime(dt);
cal.set(cal.get(1), cal.get(2), cal.get(5), 0, 0, 0);
return new Date(cal.getTimeInMillis() / 1000L * 1000L);
}
public static Date getLastDay(final Date date, final int i) {
final Calendar cal = new GregorianCalendar();
cal.setTime(date);
cal.set(5, cal.get(5) - i);
return cal.getTime();
}
public static Date getNextDay(final Date date, final int i) {
final Calendar cal = new GregorianCalendar();
cal.setTime(date);
cal.set(5, cal.get(5) + i);
return cal.getTime();
}
public static int getDiffDays(final Date beginDate, final Date endDate) {
if (beginDate == null || endDate == null) {
throw new IllegalArgumentException("getDiffDays param is null!");
}
final long diff = (endDate.getTime() - beginDate.getTime()) / 86400000L;
final int days = new Long(diff).intValue() + 1;
return days;
}
public static Date getDataFormat(final Date date, final boolean isStart) {
final String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(date);
String suffix = " 00:00:00";
if (!isStart) {
suffix = " 23:59:59";
}
try {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(dateStr + suffix);
}
catch (ParseException e) {
throw new KDException((Throwable)e, BosErrorCode.systemError, new Object[0]);
}
}
public static String formatString(final Date date, final String forPattern) {
return new DateTime((Object)date).toString(DateTimeFormat.forPattern(forPattern));
}
public static int getDay(final Date date) {
return Integer.parseInt(new DateTime((Object)date).toString(DateUtils.DATE_FORMATTER).substring(8));
}
public static int getMonth(final Date date) {
return Integer.parseInt(new DateTime((Object)date).toString(DateUtils.DATE_FORMATTER).substring(5, 7));
}
public static int getYear(final Date date) {
return Integer.parseInt(new DateTime((Object)date).toString(DateUtils.DATE_FORMATTER).substring(0, 4));
}
public static Map<String, Date> getWeekDate() {
final Map<String, Date> weekDate = new HashMap<String, Date>();
final Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
int d = 0;
if (cal.get(7) == 1) {
d = -6;
}
else {
d = 2 - cal.get(7);
}
cal.add(7, d);
weekDate.put("beginDate", cal.getTime());
cal.add(7, 6);
weekDate.put("endDate", cal.getTime());
return weekDate;
}
public static Date getMinMonthDate(Date date) {
date = getDataFormat(date, true);
final Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(5, calendar.getActualMinimum(5));
return calendar.getTime();
}
public static Date getMaxMonthDate(Date date) {
date = getDataFormat(date, false);
final Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(5, calendar.getActualMaximum(5));
return calendar.getTime();
}
public static boolean isSameDay(final Date date1, final Date date2) {
if (date1 == null || date2 == null) {
return false;
}
final Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
final Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
return isSameDay(cal1, cal2);
}
public static boolean isSameDay(final Calendar cal1, final Calendar cal2) {
return cal1 != null && cal2 != null && cal1.get(0) == cal2.get(0) && cal1.get(1) == cal2.get(1) && cal1.get(6) == cal2.get(6);
}
public static boolean isSameMonth(final Date d1, final Date d2) {
return isSameDay(getMinMonthDate(d1), getMinMonthDate(d1));
}
public static void main(final String[] args) {
System.out.println(new LocalDate().toString(DateUtils.DATE_FORMATTER));
System.out.println(getDataFormat(new Date(), true));
System.out.println(getDataFormat(new Date(), false));
System.out.println(getNextDay(new Date(), -1));
}
static {
DATE_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd");
DATETIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
}
/**
* 获取指定日期添加/减去指定天数后的日期
*
* @param date
* @param days
* @return
*/
public static Date addDays(Date date, int days) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, days);
return calendar.getTime();
}
/**
* 日期格式化
* @param date
* @param format
* @return
*/
public static Date formatDate(String date, String format) {
SimpleDateFormat dt = new SimpleDateFormat(format);
try {
return dt.parse(date);
} catch (ParseException e) {
}
return null;
}
/**
* 日期格式化
* @param date
* @param format
* @return
*/
public static String getData(Date date, String format) {
SimpleDateFormat dt = new SimpleDateFormat(format);
return dt.format(date);
}
/**
* 日期格式化
* @param timeString :Sun Mar 01 00:00:00 CST 2020
* @return yyyy-MM-dd
*/
public static String DateFormat(String timeString) {
SimpleDateFormat sfEnd = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sfStart = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy",java.util.Locale.ENGLISH) ;
try {
String format = sfEnd.format(sfStart.parse(timeString));
Date time = DateUtils.formatDate(format, "yyyy-MM-dd");
timeString=DateUtils.formatString(time, DateUtils.FORMAT_YMD);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return timeString;
}
/***
* 得到两个时期相差天数
* @param one
* @param two
* @return
*/
public static int getDistanceDays(Date one, Date two){
int days=0;
long time1 = one.getTime();
long time2 = two.getTime();
long diff ;
diff = time2 - time1;
days = (int) (diff / (1000 * 60 * 60 * 24));
return days;
}
3.根据物料ID获取物料分类
调用
DynamicObject material = goodsentrys.getDynamicObject("material");
if(material!=null) {
DynamicObject materialBill = BusinessDataServiceHelper.loadSingle(material.getPkValue(), material.getDynamicObjectType().getName());
materialGroupNum = getMaterialGroupNum(materialBill);
}
/**
* 根据物料ID获取物料分类
* @param materialId
* @return
*/
public static String getMaterialGroupNum(DynamicObject materialBill) {
String groupNumber = "";
if(materialBill!=null && "".equals(groupNumber)) {
QFilter qFilter1 = new QFilter("material", "=", materialBill==null?0L:materialBill.getPkValue());
DynamicObject[] groups = BusinessDataServiceHelper.load("bd_materialgroupdetail", "standard,group,material", new QFilter[]{qFilter1});
for(int i =0;i<groups.length;i++) {
DynamicObject standard = (DynamicObject) groups[i].get("standard");
DynamicObject group = (DynamicObject) groups[i].get("group");
if(standard.getString("number").equals("JBFLBZ")) {
groupNumber = group.getString("number");
}
}
}
return groupNumber;
}
未完待续,持续更新