修改查询用户开发票历史记录接口返回的数据,使其符合前端需求。
修改查询用户开发票历史记录接口查询逻辑,使其符合业务需求。
This commit is contained in:
parent
6deb8e2951
commit
38b2455c35
@ -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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -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);
|
||||
|
||||
/**
|
||||
* 查询用户指定时间,所有可以开发票的历史订单数量
|
||||
|
||||
@ -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,查询回显发票所需要的数据
|
||||
|
||||
@ -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;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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 <= #{invoicedOrdersRequest.currentTime}
|
||||
<if test="lockOrderNumberList!=null">
|
||||
AND history_order_id
|
||||
<foreach collection="lockOrderNumberList" item="historyOrderId" open="not in (" close=")" separator=",">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user