1,获取订单的总金额
代码如下:
/**
* 自定义 SQL
*/
public String getTotalPayPrice(Map<String, Object> param) {
List<String> orderIds = (List<String>) param.get("orderIds");
String join = Joiner.on(", ").join(orderIds.stream().map(o -> "'" + o + "'").collect(Collectors.toList()));
return String.format("select sum(pay_price) from ecomm_orders_goods where order_id in (%s)", join);
}
2, BigDecimal中divide方法注意问题
(1) 除以整数不保留小数
BigDecimal rate = new BigDecimal(1).divide(new BigDecimal(3));
(2)保留小数2位
BigDecimal rate = new BigDecimal(1).
divide(new BigDecimal(3), 6, BigDecimal.ROUND_HALF_UP);
3,jdk8来处理时间日期
JDK处理时间日期
重点:示例 在Java 8中处理不同的时区
Java 8不仅将日期和时间进行了分离,同时还有时区。现在已经有好几组与时区相关的类了,比如ZonId代表的是某个特定的时区,而ZonedDateTime代表的是带时区的时间。它等同于Java 8以前的GregorianCalendar类。使用这个类,你可以将本地时间转换成另一个时区中的对应时间,比如下面这个例子:
// Date and time with timezone in Java 8 ZoneId america = ZoneId.of("America/New_York");
LocalDateTime localtDateAndTime = LocalDateTime.now();
ZonedDateTime dateAndTimeInNewYork = ZonedDateTime.of(localtDateAndTime, america );
System.out.println("Current date and time in a particular timezone : " + dateAndTimeInNewYork);
Output :
Current date and time in a particular timezone : 2014-01-14T16:33:33.373-05:00[America/New_York]
示例2 带时区偏移量的日期与时间
在Java 8里面,你可以用ZoneOffset类来代表某个时区,比如印度是GMT或者UTC5:30,你可以使用它的静态方法ZoneOffset.of()方法来获取对应的时区。只要获取到了这个偏移量,你就可以拿LocalDateTime和这个偏移量创建出一个OffsetDateTime。
LocalDateTime datetime = LocalDateTime.of(2014, Month.JANUARY, 14, 19, 30);
ZoneOffset offset = ZoneOffset.of("+05:30");
OffsetDateTime date = OffsetDateTime.of(datetime, offset);
System.out.println("Date and Time with timezone offset in Java : " + date);
Output :
Date and Time with timezone offset in Java : 2014-01-14T19:30+05:30
4,订单信息变更状路径记录表
CREATE TABLE change_orders
(
uid
varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
order_id
varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
old_status
int(2) NOT NULL COMMENT ‘原状态’,
new_status
int(2) NOT NULL COMMENT ‘新状态’,
change_time
varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ‘订单变更时间’,
created_at
timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at
timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (uid
),
KEY order_id
(order_id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT=‘订单路径变更逻辑记录’;