优化统计接口速度

This commit is contained in:
donqi 2023-08-30 23:20:19 +08:00
parent a5ad79dc0e
commit 28c6ccd65b
4 changed files with 101 additions and 17 deletions

View File

@ -44,6 +44,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.util.StopWatch;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@ -763,9 +764,7 @@ public class OrderController extends BaseController {
orderListRequest.setTimeout(1);
orderListRequest.setWorkerId(request.getWorkerId());
orderListRequest.setIsMonitoredOrder(true);
AjaxResult overTimeRes = this.appMixOrderList(orderListRequest);
List<OrderListResponse> overTimeList = (List) overTimeRes.get("data");
response.setOverTimeOrderNum(overTimeList.size());
response.setOverTimeOrderNum(this.appMixOrderCount(orderListRequest));
// 统计今日单量
LocalDateTime today = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
orderDetail.setOrderStatus(OrderStatus.GOING.code());
@ -789,6 +788,80 @@ public class OrderController extends BaseController {
return AjaxResult.success(response);
}
public long appMixOrderCount(OrderListRequest orderListRequest){
long count = 0;
// 校验参数
Assert.notNull(orderListRequest.getWorkerId(), "师傅id不能为空");
// 查询子单
OrderDetail orderDetailReq = new OrderDetail();
BeanUtils.copyProperties(orderListRequest, orderDetailReq);
List<OrderDetail> list = orderDetailService.selectOrderDetailList(orderDetailReq);
count+=list.size();
List<OrderMaster> allList = new ArrayList<>();
List<Long> masterIdSet = new ArrayList<Long>();
if(orderListRequest.getTimeout() != null && orderListRequest.getTimeout() == 1){
// 增加主单下子单有超时的
OrderMaster param = new OrderMaster();
param.setWorkerId(orderListRequest.getWorkerId());
List<OrderMaster> allOrderMaster = orderMasterService.selectOrderMasterList(param);
StringBuilder ids = new StringBuilder();
for (OrderMaster model : allOrderMaster) {
List<OrderDetail> orderDetails = orderDetailService.selectByOrderMasterId(model.getId());
List<OrderDetail> result = orderDetails.stream().filter(s -> s.getTimeout().equals(1)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(result)) {
masterIdSet.add(model.getId());
ids.append(model.getId()).append(",");
}
}
if(ids.length() > 0){
OrderMaster timeOutMaster = new OrderMaster();
timeOutMaster.setOrderMasterIds(ids.substring(0, ids.length() - 1));
allList.addAll(orderMasterService.selectOrderMasterList(timeOutMaster));
}
}
// 查询主单
OrderMaster orderMasterReq = new OrderMaster();
BeanUtils.copyProperties(orderListRequest, orderMasterReq);
orderMasterReq.setExceptOrderMasterIds(masterIdSet);
List<OrderMaster> masterList = orderMasterService.selectOrderMasterList(orderMasterReq);
allList.addAll(masterList);
// 超时查询需要排除同个师傅的主单子单同时出现
if (orderListRequest.getTimeout() != null && orderListRequest.getTimeout() == 1) {
// 需要排除同个师傅的主单子单同时出现
List<OrderMaster> filteredMasterList = new ArrayList<OrderMaster>();
for (OrderMaster master : allList) {
boolean isKeep = false;
// 查询该主单下所有售后中的子单
OrderDetail detailAfterListOfMasterQry = new OrderDetail();
detailAfterListOfMasterQry.setOrderMasterCode(master.getCode());
List<OrderDetail> tmpDetailListOfMasters = orderDetailService.selectOrderDetailList(detailAfterListOfMasterQry);
List<OrderListResponse> detailListOfMasters = new ArrayList<>();
tmpDetailListOfMasters.forEach(model->{
OrderListResponse response = new OrderListResponse();
BeanUtils.copyProperties(model, response);
detailListOfMasters.add(response);
});
for (OrderListResponse detailListOfMaster : detailListOfMasters) {
if (!detailListOfMaster.getWorkerId().equals(orderListRequest.getWorkerId())) {
isKeep = true;
break;
}
}
if (isKeep) {
filteredMasterList.add(master);
}
}
count+=filteredMasterList.size();
} else {
count+=masterList.size();
}
return count;
}
/**
* 查询主单子单的混合列表
*/

View File

@ -1115,7 +1115,7 @@ public class OrderDetailController extends BaseController {
@GetMapping("/count")
@ResponseBody
public AjaxResult OrderDetailCount(OrderDetail orderDetail) {
public AjaxResult orderDetailCount(OrderDetail orderDetail) {
if(StringUtils.isNotEmpty(orderDetail.getWorkerName()) || StringUtils.isNotEmpty(orderDetail.getWorkerPhone())){
Worker param = new Worker();
param.setName(orderDetail.getWorkerName());
@ -1145,18 +1145,7 @@ public class OrderDetailController extends BaseController {
@GetMapping("/after/count")
@ResponseBody
public AjaxResult AfterDetailOrderCount(OrderDetail orderDetail) {
AfterServiceRecord afterServiceRecord = new AfterServiceRecord();
afterServiceRecord.setExcludeAfterServiceFinished(Boolean.TRUE);
List<AfterServiceRecord> afterServiceRecordList = afterServiceRecordService.selectAfterServiceRecordList(afterServiceRecord);
// 踢重后的子单ids
List<Long> detailIds = afterServiceRecordList.stream().map(AfterServiceRecord::getOrderDetailId).distinct().collect(Collectors.toList());
String ids = StringUtils.join(detailIds, ",");
if (StringUtils.isNotEmpty(ids)) {
orderDetail.setOrderDetailIds(ids);
} else {
orderDetail.setOrderDetailIds("0");
}
return AjaxResult.success(orderDetailService.countOrderDetailList(orderDetail));
public AjaxResult afterDetailOrderCount(OrderDetail orderDetail) {
return AjaxResult.success(orderDetailService.afterDetailOrderCount(orderDetail));
}
}

View File

@ -186,4 +186,6 @@ public interface OrderDetailService {
int insertOrderAddSubtract(OrderAddSubtract body);
OrderDetailCount differentStatusOrderCount(OrderDetail orderDetail);
Long afterDetailOrderCount(OrderDetail orderDetail);
}

View File

@ -26,6 +26,7 @@ import com.ghy.order.domain.*;
import com.ghy.order.mapper.OrderAddSubtractMapper;
import com.ghy.order.mapper.OrderDetailMapper;
import com.ghy.order.mapper.OrderMasterMapper;
import com.ghy.order.service.IAfterServiceRecordService;
import com.ghy.order.service.OrderDetailService;
import com.ghy.order.service.OrderGoodsService;
import com.ghy.order.service.OrderMasterService;
@ -108,6 +109,9 @@ public class OrderDetailServiceImpl implements OrderDetailService {
@Resource
private CustomerService customerService;
@Resource
private IAfterServiceRecordService afterServiceRecordService;
// Adapay 手续费率 默认0.008
@Value("${adapay.fee_rate:0.008}")
private String feeRate;
@ -1017,4 +1021,20 @@ public class OrderDetailServiceImpl implements OrderDetailService {
public OrderDetailCount differentStatusOrderCount(OrderDetail orderDetail) {
return orderDetailMapper.differentStatusOrderCount(orderDetail);
}
@Override
public Long afterDetailOrderCount(OrderDetail orderDetail) {
AfterServiceRecord afterServiceRecord = new AfterServiceRecord();
afterServiceRecord.setExcludeAfterServiceFinished(Boolean.TRUE);
List<AfterServiceRecord> afterServiceRecordList = afterServiceRecordService.selectAfterServiceRecordList(afterServiceRecord);
// 踢重后的子单ids
List<Long> detailIds = afterServiceRecordList.stream().map(AfterServiceRecord::getOrderDetailId).distinct().collect(Collectors.toList());
String ids = StringUtils.join(detailIds, ",");
if (StringUtils.isNotEmpty(ids)) {
orderDetail.setOrderDetailIds(ids);
} else {
orderDetail.setOrderDetailIds("0");
}
return this.countOrderDetailList(orderDetail);
}
}