diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderDetailDto.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderDetailDto.java index 23193a8..f220d93 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderDetailDto.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/domain/OrderDetailDto.java @@ -85,6 +85,9 @@ public class OrderDetailDto { @ApiModelProperty(value = "总金额") private BigDecimal costs; + @ApiModelProperty(value = "累计租金") + private BigDecimal totalCost; + @ApiModelProperty(value = "改价金额") private BigDecimal changeCost; @@ -117,7 +120,7 @@ public class OrderDetailDto { private String preOutboundUser; @ApiModelProperty(value = "出库时间") - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private String preOutboundTime; @ApiModelProperty(value = "收货人") @@ -180,4 +183,11 @@ public class OrderDetailDto { @ApiModelProperty(value = "单位") private String unitName; + @ApiModelProperty(value = "接单人") + private String receivingUser; + + @ApiModelProperty(value = "接单时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private String receivingTime; + } diff --git a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/service/impl/OrderServiceImpl.java b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/service/impl/OrderServiceImpl.java index 7b301bb..0a93db3 100644 --- a/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/service/impl/OrderServiceImpl.java +++ b/bonus-modules/bonus-material-mall/src/main/java/com/bonus/material/order/service/impl/OrderServiceImpl.java @@ -43,7 +43,12 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; +import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; import java.util.*; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; @@ -256,10 +261,65 @@ public class OrderServiceImpl implements OrderService { orderInfoDto.setPhoneNumber(Sm4Utils.decrypt(orderInfoDto.getPhoneNumber())); orderInfoDto.setStartTime(list.get(0).getRentBeginTime()); orderInfoDto.setEndTime(list.get(0).getRentEndTime()); + for (OrderDetailDto orderDetailDto : list) { + orderDetailDto.setTotalCost(orderDetailDto.getCosts()); + // 出库时间设置为租赁开始时间 + if (StringUtils.isNotBlank(orderDetailDto.getPreOutboundTime())) { + // 租赁天数为租期结束时间减去出库时间,计算天数差 + String dateStr1 = orderDetailDto.getPreOutboundTime(); + Date dateStr2 = orderDetailDto.getRentEndTime(); + long daysDifference = calculateDaysDifference(dateStr1, dateStr2); + // 计算累计租金 + BigDecimal totalCost = orderDetailDto.getDayLeasePrice().multiply(new BigDecimal(daysDifference)); + orderDetailDto.setDays(String.valueOf(daysDifference)); + orderDetailDto.setTotalCost(totalCost); + } + } orderInfoDto.setDetailsList(list); return orderInfoDto; } + /** + * 计算两个日期之间的天数差 + * @param preOutboundTimeStr + * @param rentEndTime + * @return + */ + public static long calculateDaysDifference(String preOutboundTimeStr, Date rentEndTime) { + try { + // 定义日期格式 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + // 将字符串转换为 Date 类型 + Date preOutboundDate = sdf.parse(preOutboundTimeStr); + + // 将 java.util.Date 转换为 java.time.LocalDate + LocalDate preOutboundLocalDate = convertToLocalDate(preOutboundDate); + LocalDate rentEndLocalDate = convertToLocalDate(rentEndTime); + + // 计算天数差 + long days = ChronoUnit.DAYS.between(preOutboundLocalDate, rentEndLocalDate); + if (days == 0) { + days = 1; + } else { + days = days + 1; + } + return days; + } catch (ParseException e) { + throw new RuntimeException("日期转换错误", e); + } + } + + /** + * 将 java.util.Date 转换为 java.time.LocalDate + * @param date + * @return + */ + public static LocalDate convertToLocalDate(Date date) { + return Instant.ofEpochMilli(date.getTime()) + .atZone(ZoneId.systemDefault()) + .toLocalDate(); + } + @Override public List getOrderStatusCount(OrderDetailDto dto) throws Exception { //true:出租方 false:承租方 diff --git a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/order/OrderInfoMapper.xml b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/order/OrderInfoMapper.xml index fce8714..c273cb2 100644 --- a/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/order/OrderInfoMapper.xml +++ b/bonus-modules/bonus-material-mall/src/main/resources/mapper/material/order/OrderInfoMapper.xml @@ -52,6 +52,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + ,pre_outbound_user = #{userName} + ,pre_outbound_time = now() ,take_over_user = #{userName} ,take_over_time = now() ,order_remark = #{remark} @@ -295,6 +297,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" hh.take_over_time, hh.rent_over_user, hh.rent_over_time, + hh.receiving_user as receivingUser, + hh.receiving_time as receivingTime, hh.change_cost as changeCost, hh.relief_cost as reliefCost, hh.relief_change_cost as reliefChangeCost,