diff --git a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/api/XhpcInvoiceApiController.java b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/api/XhpcInvoiceApiController.java index 54adaa5c..1e86a935 100644 --- a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/api/XhpcInvoiceApiController.java +++ b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/api/XhpcInvoiceApiController.java @@ -98,11 +98,8 @@ public class XhpcInvoiceApiController extends BaseController { @GetMapping(value = "/user/history-orders") public AjaxResult findUserHistoryOrders(InvoicedOrdersRequest invoicedOrdersRequest) { - if (invoicedOrdersRequest.getCurrentPage() == null || invoicedOrdersRequest.getItems() == null) { - return AjaxResult.error("分页参数不能为空:当前页数参数或当页要显示的条数为空"); - } - InvoiceOrdersResponse invoiceOrdersResponse = xhpcInvoiceService.findUserHistoryOrders(invoicedOrdersRequest); - return AjaxResult.success(invoiceOrdersResponse); + InvoicedOrderResponse invoicedOrdersResponse = xhpcInvoiceService.findUserHistoryOrders(invoicedOrdersRequest); + return AjaxResult.success(invoicedOrdersResponse); } diff --git a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/domain/InvoiceOrdersResponse.java b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/domain/InvoiceOrdersResponse.java deleted file mode 100644 index 8cf4d597..00000000 --- a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/domain/InvoiceOrdersResponse.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.xhpc.invoice.domain; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.math.BigDecimal; -import java.util.List; - -/** - * /invoiceOrders接口的返回参数封装类 - * - * @author WH - * @date 2021/12/24 10:25 - * @since version-1.0 - */ -@NoArgsConstructor -@Data -public class InvoiceOrdersResponse { - - /** - * 符合条件的总记录条数 - */ - @JsonProperty("totalItems") - private Long totalItems; - /** - * 存放当前页要的数据的集合 - */ - @JsonProperty("items") - private List items; - - @NoArgsConstructor - @Data - public static class ItemsDTO { - - /** - * 历史订单id - */ - @JsonProperty("orderId") - private Long orderId; - /** - * 历史订单号 - */ - @JsonProperty("orderNumber") - private String orderNumber; - /** - * 订单金额 - */ - @JsonProperty("orderMoney") - private BigDecimal orderMoney; - /** - * 历史订单时间 - */ - @JsonProperty("orderTime") - private String orderTime; - - } - -} diff --git a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/domain/InvoicedOrderResponse.java b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/domain/InvoicedOrderResponse.java new file mode 100644 index 00000000..09115688 --- /dev/null +++ b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/domain/InvoicedOrderResponse.java @@ -0,0 +1,54 @@ +package com.xhpc.invoice.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.List; + +/** + * @author WH + * @date 2021/12/27 14:34 + * @since version-1.0 + */ +@NoArgsConstructor +@Data +public class InvoicedOrderResponse { + + @JsonProperty("allTotalItems") + private Integer allTotalItems; + @JsonProperty("totalItems") + private Integer totalItems; + @JsonProperty("recordsMonth") + private String recordsMonth; + @JsonProperty("items") + private List items; + + @NoArgsConstructor + @Data + public static class ItemsDTO { + + @JsonProperty("orderScopeTime") + private String orderScopeTime; + @JsonProperty("orderDatas") + private List orderDatas; + + @NoArgsConstructor + @Data + public static class OrderDatasDTO { + + @JsonProperty("orderId") + private Long orderId; + @JsonProperty("orderNumber") + private String orderNumber; + @JsonProperty("orderMoney") + private BigDecimal orderMoney; + @JsonProperty("orderTime") + private String orderTime; + + } + + } + +} diff --git a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/mapper/XhpcHistoryOrderMapper.java b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/mapper/XhpcHistoryOrderMapper.java index a32da202..31958dce 100644 --- a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/mapper/XhpcHistoryOrderMapper.java +++ b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/mapper/XhpcHistoryOrderMapper.java @@ -5,6 +5,7 @@ import com.xhpc.order.domain.XhpcHistoryOrder; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** * 专门用于发票服务的XhpcHistoryOrderMapper @@ -25,7 +26,7 @@ public interface XhpcHistoryOrderMapper { * @date 2021/12/24 14:41 * @since version-1.0 */ - List findByCondition(@Param("invoicedOrdersRequest") InvoicedOrdersRequest invoicedOrdersRequest, @Param("lockOrderNumberList") List lockOrderNumberList); + List> findByCondition(@Param("invoicedOrdersRequest") InvoicedOrdersRequest invoicedOrdersRequest, @Param("lockOrderNumberList") List lockOrderNumberList); /** * 查询用户指定时间,所有可以开发票的历史订单数量 diff --git a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/service/XhpcInvoiceService.java b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/service/XhpcInvoiceService.java index 39d0ad3b..ff392278 100644 --- a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/service/XhpcInvoiceService.java +++ b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/service/XhpcInvoiceService.java @@ -90,7 +90,7 @@ public interface XhpcInvoiceService { * @date 2021/12/24 10:42 * @since version-1.0 */ - InvoiceOrdersResponse findUserHistoryOrders(InvoicedOrdersRequest invoicedOrdersRequest); + InvoicedOrderResponse findUserHistoryOrders(InvoicedOrdersRequest invoicedOrdersRequest); /** * 根据发票id,查询回显发票所需要的数据 diff --git a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/service/impl/XhpcInvoiceServiceImpl.java b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/service/impl/XhpcInvoiceServiceImpl.java index cd96ad56..e2d32a27 100644 --- a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/service/impl/XhpcInvoiceServiceImpl.java +++ b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/service/impl/XhpcInvoiceServiceImpl.java @@ -8,10 +8,13 @@ import com.xhpc.common.core.utils.DateUtils; import com.xhpc.common.core.utils.bean.BeanUtils; import com.xhpc.common.domain.XhpcChargingStation; import com.xhpc.common.redis.service.RedisService; +import com.xhpc.common.util.DateUtil; import com.xhpc.invoice.constant.InvoiceMapHistoryOrderStatusConst; import com.xhpc.invoice.constant.InvoiceStatusConst; import com.xhpc.invoice.constant.IsReadStatusConst; import com.xhpc.invoice.domain.*; +import com.xhpc.invoice.domain.InvoicedOrderResponse.ItemsDTO; +import com.xhpc.invoice.domain.InvoicedOrderResponse.ItemsDTO.OrderDatasDTO; import com.xhpc.invoice.mapper.*; import com.xhpc.invoice.pojo.XhpcInvoice; import com.xhpc.invoice.pojo.XhpcInvoiceMapHistoryOrder; @@ -27,9 +30,10 @@ import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.*; /** * XhpcInvoiceService的实现类 @@ -234,29 +238,103 @@ public class XhpcInvoiceServiceImpl implements XhpcInvoiceService { * @since version-1.0 */ @Override - public InvoiceOrdersResponse findUserHistoryOrders(InvoicedOrdersRequest invoicedOrdersRequest) { - //计算分页索引,放置到currentPage属性中 - int startIndex = (invoicedOrdersRequest.getCurrentPage() - 1) * invoicedOrdersRequest.getItems(); - invoicedOrdersRequest.setCurrentPage(startIndex); + public InvoicedOrderResponse findUserHistoryOrders(InvoicedOrdersRequest invoicedOrdersRequest) { + + //自动生成当前时间 + if (invoicedOrdersRequest.getCurrentTime() == null) { + Date currentDate = new Date(); + String strTime = DateUtils.parseDateToStr(currentDate); + invoicedOrdersRequest.setCurrentTime(strTime); + } //先查询该用户被锁定了的订单,过滤掉它 List lockOrderNumberList = xhpcInvoiceMapHistoryOrderMapper.findLockOrdersByUserIdAndUserType(invoicedOrdersRequest); //查询该用户3个月内可以开发票的历史订单 - List xhpcHistoryOrderList = xhpcHistoryOrderMapper.findByCondition(invoicedOrdersRequest, lockOrderNumberList); - ArrayList itemsDTOList = new ArrayList<>(); - for (XhpcHistoryOrder xhpcHistoryOrder : xhpcHistoryOrderList) { - InvoiceOrdersResponse.ItemsDTO itemsDTO = new InvoiceOrdersResponse.ItemsDTO(); - itemsDTO.setOrderId(xhpcHistoryOrder.getHistoryOrderId()); - itemsDTO.setOrderNumber(xhpcHistoryOrder.getSerialNumber()); - itemsDTO.setOrderMoney(xhpcHistoryOrder.getActPrice()); - itemsDTO.setOrderTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, xhpcHistoryOrder.getCreateTime())); - itemsDTOList.add(itemsDTO); + List> xhpcHistoryOrderList = xhpcHistoryOrderMapper.findByCondition(invoicedOrdersRequest, lockOrderNumberList); + InvoicedOrderResponse invoicedOrderResponse = new InvoicedOrderResponse(); + //设置该用户3个月内可以开发票的历史订单数量 + invoicedOrderResponse.setTotalItems(xhpcHistoryOrderList.size()); + //查询该用户所有可以开的发票的历史订单数量 + Long allOrders = xhpcHistoryOrderMapper.findAllOrdersByCondition(invoicedOrdersRequest, lockOrderNumberList); + invoicedOrderResponse.setAllTotalItems(Math.toIntExact(allOrders)); + //监测器,监测集合中的时间是否发生改变,如果发生改变,则表示是其他月份的记录 + String monitor = xhpcHistoryOrderList.size() > 0 ? xhpcHistoryOrderList.get(0).get("belongsTime").toString() : ""; + //该集合用来存放一整个月的记录 + ArrayList> split = new ArrayList<>(); + //该集合存放所有分好组的每个月的记录 + Map allGroupingRecords = new HashMap<>(); + for (Map order : xhpcHistoryOrderList) { + if (!monitor.equals(order.get("belongsTime").toString())) { + allGroupingRecords.put(monitor, split); + split = new ArrayList<>(); + monitor = order.get("belongsTime").toString(); + } + split.add(order); } - InvoiceOrdersResponse invoiceOrdersResponse = new InvoiceOrdersResponse(); - invoiceOrdersResponse.setItems(itemsDTOList); - //查询该用户所有可以开发票的历史订单的数量 - Long allOrdersCount = xhpcHistoryOrderMapper.findAllOrdersByCondition(invoicedOrdersRequest, lockOrderNumberList); - invoiceOrdersResponse.setTotalItems(allOrdersCount); - return invoiceOrdersResponse; + allGroupingRecords.put(monitor, split); + //存放至包装类中 + Set keys = allGroupingRecords.keySet(); + ArrayList itemsDTOS = new ArrayList<>(); + //定义一个计数器,只要前3个月的记录 + int count = 0; + for (String key : keys) { + count++; + if (count == 4) { + break; + } + ItemsDTO itemsDTO = new ItemsDTO(); + itemsDTO.setOrderScopeTime(key); + ArrayList orderDatasDTOS = new ArrayList<>(); + ArrayList> dataList = (ArrayList>) allGroupingRecords.get(key); + for (Map data : dataList) { + OrderDatasDTO orderDatasDTO = new OrderDatasDTO(); + orderDatasDTO.setOrderId((Long) data.get("historyOrderId")); + orderDatasDTO.setOrderNumber((String) data.get("serialNumber")); + orderDatasDTO.setOrderMoney((BigDecimal) data.get("actPrice")); + //因为数据库中存储的时间类型为datetime,所以Mybatis会将其转换为LocalDateTime类型对象,我们不能直接得到Date,所以我们需要对其进行转换。 + LocalDateTime createTime = (LocalDateTime) data.get("createTime"); + ZoneId zoneId = ZoneId.systemDefault(); + ZonedDateTime zdt = createTime.atZone(zoneId); + Date date = Date.from(zdt.toInstant()); + orderDatasDTO.setOrderTime(DateUtils.parseDateToStr(date)); + orderDatasDTOS.add(orderDatasDTO); + } + itemsDTO.setOrderDatas(orderDatasDTOS); + itemsDTOS.add(itemsDTO); + //因为List中的Map是有序的,所以,最后一个Map的key一定是最小月份时间,那么最小月份时间-1秒,则为前端下次需要传递进来的月份参数,这样我可以去查传递进来的月份参数的之前3个月的有记录的月份的记录。 + //注意:传入一个残缺的时间,如2021-10,将其解析成Date,那么会将其解析成表示2021-10-01 00:00:00这个时间的Date,该时间-1秒,就是上个月的最后时间 + Date date = DateUtils.parseDate(key); + Calendar calendarTwo = DateUtil.getCalendar(date); + calendarTwo.add(Calendar.SECOND, -1); + Date nextQueryParamDate = calendarTwo.getTime(); + String nextQueryParamDateStr = DateUtils.parseDateToStr(nextQueryParamDate); + invoicedOrderResponse.setRecordsMonth(nextQueryParamDateStr); + } + invoicedOrderResponse.setItems(itemsDTOS); + return invoicedOrderResponse; + +// //计算分页索引,放置到currentPage属性中 +// int startIndex = (invoicedOrdersRequest.getCurrentPage() - 1) * invoicedOrdersRequest.getItems(); +// invoicedOrdersRequest.setCurrentPage(startIndex); +// //先查询该用户被锁定了的订单,过滤掉它 +// List lockOrderNumberList = xhpcInvoiceMapHistoryOrderMapper.findLockOrdersByUserIdAndUserType(invoicedOrdersRequest); +// //查询该用户3个月内可以开发票的历史订单 +// List xhpcHistoryOrderList = xhpcHistoryOrderMapper.findByCondition(invoicedOrdersRequest, lockOrderNumberList); +// ArrayList itemsDTOList = new ArrayList<>(); +// for (XhpcHistoryOrder xhpcHistoryOrder : xhpcHistoryOrderList) { +// InvoiceOrdersResponse.ItemsDTO itemsDTO = new InvoiceOrdersResponse.ItemsDTO(); +// itemsDTO.setOrderId(xhpcHistoryOrder.getHistoryOrderId()); +// itemsDTO.setOrderNumber(xhpcHistoryOrder.getSerialNumber()); +// itemsDTO.setOrderMoney(xhpcHistoryOrder.getActPrice()); +// itemsDTO.setOrderTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, xhpcHistoryOrder.getCreateTime())); +// itemsDTOList.add(itemsDTO); +// } +// InvoiceOrdersResponse invoiceOrdersResponse = new InvoiceOrdersResponse(); +// invoiceOrdersResponse.setItems(itemsDTOList); +// //查询该用户所有可以开发票的历史订单的数量 +// Long allOrdersCount = xhpcHistoryOrderMapper.findAllOrdersByCondition(invoicedOrdersRequest, lockOrderNumberList); +// invoiceOrdersResponse.setTotalItems(allOrdersCount); +// return invoiceOrdersResponse; + } /** diff --git a/xhpc-modules/xhpc-invoice/src/main/resources/mapper/XhpcHistoryOrderMapper.xml b/xhpc-modules/xhpc-invoice/src/main/resources/mapper/XhpcHistoryOrderMapper.xml index d273a0b1..6468ddea 100644 --- a/xhpc-modules/xhpc-invoice/src/main/resources/mapper/XhpcHistoryOrderMapper.xml +++ b/xhpc-modules/xhpc-invoice/src/main/resources/mapper/XhpcHistoryOrderMapper.xml @@ -116,12 +116,13 @@ tenant_id - SELECT - history_order_id, - serial_number, - act_price, - create_time + history_order_id as historyOrderId, + serial_number as serialNumber, + act_price as actPrice, + create_time as createTime, + DATE_FORMAT(create_time,'%Y-%m') AS belongsTime FROM xhpc_history_order WHERE @@ -136,7 +137,6 @@ ORDER BY create_time DESC - LIMIT #{invoicedOrdersRequest.currentPage},#{invoicedOrdersRequest.items}