修改查询用户开发票历史记录接口返回的数据,使其符合前端需求。

修改查询用户开发票历史记录接口查询逻辑,使其符合业务需求。
This commit is contained in:
wen 2022-01-07 14:56:54 +08:00
parent 6deb8e2951
commit 38b2455c35
7 changed files with 165 additions and 95 deletions

View File

@ -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);
}

View File

@ -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<ItemsDTO> 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;
}
}

View File

@ -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<ItemsDTO> items;
@NoArgsConstructor
@Data
public static class ItemsDTO {
@JsonProperty("orderScopeTime")
private String orderScopeTime;
@JsonProperty("orderDatas")
private List<OrderDatasDTO> 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;
}
}
}

View File

@ -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<XhpcHistoryOrder> findByCondition(@Param("invoicedOrdersRequest") InvoicedOrdersRequest invoicedOrdersRequest, @Param("lockOrderNumberList") List<Integer> lockOrderNumberList);
List<Map<String, Object>> findByCondition(@Param("invoicedOrdersRequest") InvoicedOrdersRequest invoicedOrdersRequest, @Param("lockOrderNumberList") List<Integer> lockOrderNumberList);
/**
* 查询用户指定时间所有可以开发票的历史订单数量

View File

@ -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查询回显发票所需要的数据

View File

@ -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<Integer> lockOrderNumberList = xhpcInvoiceMapHistoryOrderMapper.findLockOrdersByUserIdAndUserType(invoicedOrdersRequest);
//查询该用户3个月内可以开发票的历史订单
List<XhpcHistoryOrder> xhpcHistoryOrderList = xhpcHistoryOrderMapper.findByCondition(invoicedOrdersRequest, lockOrderNumberList);
ArrayList<InvoiceOrdersResponse.ItemsDTO> 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<Map<String, Object>> 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<Map<String, Object>> split = new ArrayList<>();
//该集合存放所有分好组的每个月的记录
Map<String, Object> allGroupingRecords = new HashMap<>();
for (Map<String, Object> 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<String> keys = allGroupingRecords.keySet();
ArrayList<ItemsDTO> itemsDTOS = new ArrayList<>();
//定义一个计数器只要前3个月的记录
int count = 0;
for (String key : keys) {
count++;
if (count == 4) {
break;
}
ItemsDTO itemsDTO = new ItemsDTO();
itemsDTO.setOrderScopeTime(key);
ArrayList<OrderDatasDTO> orderDatasDTOS = new ArrayList<>();
ArrayList<Map<String, Object>> dataList = (ArrayList<Map<String, Object>>) allGroupingRecords.get(key);
for (Map<String, Object> 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<Integer> lockOrderNumberList = xhpcInvoiceMapHistoryOrderMapper.findLockOrdersByUserIdAndUserType(invoicedOrdersRequest);
// //查询该用户3个月内可以开发票的历史订单
// List<XhpcHistoryOrder> xhpcHistoryOrderList = xhpcHistoryOrderMapper.findByCondition(invoicedOrdersRequest, lockOrderNumberList);
// ArrayList<InvoiceOrdersResponse.ItemsDTO> 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;
}
/**

View File

@ -116,12 +116,13 @@
tenant_id
</sql>
<select id="findByCondition" resultMap="XhpcHistoryOrderResult">
<select id="findByCondition" resultType="Map">
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 @@
</if>
ORDER BY
create_time DESC
LIMIT #{invoicedOrdersRequest.currentPage},#{invoicedOrdersRequest.items}
</select>
<select id="findAllOrdersByCondition" resultType="java.lang.Long">
SELECT
@ -146,7 +146,6 @@
WHERE
user_id = #{invoicedOrdersRequest.userId}
AND source = #{invoicedOrdersRequest.userType}
AND create_time &lt;= #{invoicedOrdersRequest.currentTime}
<if test="lockOrderNumberList!=null">
AND history_order_id
<foreach collection="lockOrderNumberList" item="historyOrderId" open="not in (" close=")" separator=",">