fix-经营分析
This commit is contained in:
@@ -330,12 +330,38 @@ public class CarReservationInfoServiceImpl extends ServiceImpl<CarReservationInf
|
|||||||
item.in(ReservationOrderCashDeskItem::getCashDeskSn, deskSn);
|
item.in(ReservationOrderCashDeskItem::getCashDeskSn, deskSn);
|
||||||
List<ReservationOrderCashDeskItem> items = reservationOrderCashDeskItemService.list(item);
|
List<ReservationOrderCashDeskItem> items = reservationOrderCashDeskItemService.list(item);
|
||||||
List<Integer> orderIds = items.stream().map(ReservationOrderCashDeskItem::getOrderId).distinct().collect(Collectors.toList());
|
List<Integer> orderIds = items.stream().map(ReservationOrderCashDeskItem::getOrderId).distinct().collect(Collectors.toList());
|
||||||
QueryWrapper<CarReservationInfo> qw = new QueryWrapper<>();
|
//全部配件
|
||||||
qw.select("IFNULL(SUM( CASE WHEN new_accessory_price IS NOT NULL AND new_accessory_price <> 0 THEN new_accessory_price ELSE accessory_price END " +
|
Map<Integer, Accessory> accList = accessoryService.getListAll(null, merId);
|
||||||
"),0) as new_accessory_price");
|
if (CollUtil.isEmpty(accList)) {
|
||||||
qw.in("car_reservation_order_id", orderIds);
|
return BigDecimal.ZERO;
|
||||||
CarReservationInfo info = getOne(qw);
|
}
|
||||||
return info.getNewAccessoryPrice();
|
BigDecimal price = BigDecimal.ZERO;
|
||||||
|
//套餐材料
|
||||||
|
List<CarReservationProjectPackageItemAccessory> packageList = carReservationProjectPackageItemAccessoryService.getByOrderIds(orderIds, accList.keySet());
|
||||||
|
for (CarReservationProjectPackageItemAccessory itemAcc : packageList) {
|
||||||
|
Accessory accessory = accList.get(itemAcc.getAccessoryId());
|
||||||
|
if (ObjectUtil.isNull(accessory)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//套餐材料无法更换,且一次性领完
|
||||||
|
price = price.add(accessory.getProcurePrice().multiply(new BigDecimal(itemAcc.getNum())));
|
||||||
|
}
|
||||||
|
//非套餐材料
|
||||||
|
List<CarReservationInfoProjectAccessory> projectList = carReservationInfoProjectAccessoryService.getByOrderIds(orderIds, accList.keySet());
|
||||||
|
for (CarReservationInfoProjectAccessory itemAcc : projectList) {
|
||||||
|
Integer accId = itemAcc.getAccessoryId();
|
||||||
|
Integer num = itemAcc.getNum();
|
||||||
|
if (itemAcc.getAccessoryPickId() != 0 && !itemAcc.getAccessoryPickId().equals(itemAcc.getAccessoryId())) {
|
||||||
|
accId = itemAcc.getAccessoryPickId();
|
||||||
|
num = itemAcc.getPickingNum();
|
||||||
|
}
|
||||||
|
Accessory accessory = accList.get(accId);
|
||||||
|
if (ObjectUtil.isNull(accessory)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
price = price.add(accessory.getProcurePrice().multiply(new BigDecimal(num)));
|
||||||
|
}
|
||||||
|
return price;
|
||||||
}
|
}
|
||||||
|
|
||||||
private BigDecimal getTotalCost(String dateLimit, Integer merId, String type) {
|
private BigDecimal getTotalCost(String dateLimit, Integer merId, String type) {
|
||||||
|
|||||||
@@ -3599,7 +3599,7 @@ public class CarReservationOrderServiceImpl extends ServiceImpl<CarReservationOr
|
|||||||
//同比
|
//同比
|
||||||
vo.setYearOnYear(LxkUtil.getRateBig(current.get(), year.get()));
|
vo.setYearOnYear(LxkUtil.getRateBig(current.get(), year.get()));
|
||||||
//环比
|
//环比
|
||||||
vo.setLinkRelativeRatio(LxkUtil.getRateBig(current.get(), year.get()));
|
vo.setLinkRelativeRatio(LxkUtil.getRateBig(current.get(), lastMonth.get()));
|
||||||
vo.setCurrentData(current.get());
|
vo.setCurrentData(current.get());
|
||||||
} catch (InterruptedException | ExecutionException e) {
|
} catch (InterruptedException | ExecutionException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
@@ -15,11 +15,9 @@ import com.zbkj.common.constants.CarRepairOrderConstants;
|
|||||||
import com.zbkj.common.constants.DateConstants;
|
import com.zbkj.common.constants.DateConstants;
|
||||||
import com.zbkj.common.constants.OrderConstants;
|
import com.zbkj.common.constants.OrderConstants;
|
||||||
import com.zbkj.common.exception.LxkException;
|
import com.zbkj.common.exception.LxkException;
|
||||||
|
import com.zbkj.common.model.accessory.Accessory;
|
||||||
import com.zbkj.common.model.admin.SystemAdmin;
|
import com.zbkj.common.model.admin.SystemAdmin;
|
||||||
import com.zbkj.common.model.car.CarReservationInfo;
|
import com.zbkj.common.model.car.*;
|
||||||
import com.zbkj.common.model.car.CarReservationOrder;
|
|
||||||
import com.zbkj.common.model.car.ReservationOrderCashDesk;
|
|
||||||
import com.zbkj.common.model.car.ReservationOrderCashDeskItem;
|
|
||||||
import com.zbkj.common.model.dealer.CarDealerRatio;
|
import com.zbkj.common.model.dealer.CarDealerRatio;
|
||||||
import com.zbkj.common.model.user.UserBrokerageRecord;
|
import com.zbkj.common.model.user.UserBrokerageRecord;
|
||||||
import com.zbkj.common.request.BusinessAnalysisRequest;
|
import com.zbkj.common.request.BusinessAnalysisRequest;
|
||||||
@@ -82,6 +80,12 @@ public class ReservationOrderCashDeskServiceImpl extends ServiceImpl<Reservation
|
|||||||
private CarDealerRatioService carDealerRatioService;
|
private CarDealerRatioService carDealerRatioService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ExecutorService service;
|
private ExecutorService service;
|
||||||
|
@Autowired
|
||||||
|
private AccessoryService accessoryService;
|
||||||
|
@Autowired
|
||||||
|
private CarReservationProjectPackageItemAccessoryService carReservationProjectPackageItemAccessoryService;
|
||||||
|
@Autowired
|
||||||
|
private CarReservationInfoProjectAccessoryService carReservationInfoProjectAccessoryService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean add(ReservationOrderCashDeskRequest request) {
|
public Boolean add(ReservationOrderCashDeskRequest request) {
|
||||||
@@ -316,7 +320,7 @@ public class ReservationOrderCashDeskServiceImpl extends ServiceImpl<Reservation
|
|||||||
//同比
|
//同比
|
||||||
vo.setYearOnYear(LxkUtil.getRateBig(current.get(), year.get()));
|
vo.setYearOnYear(LxkUtil.getRateBig(current.get(), year.get()));
|
||||||
//环比
|
//环比
|
||||||
vo.setLinkRelativeRatio(LxkUtil.getRateBig(current.get(), year.get()));
|
vo.setLinkRelativeRatio(LxkUtil.getRateBig(current.get(), lastMonth.get()));
|
||||||
vo.setCurrentData(current.get());
|
vo.setCurrentData(current.get());
|
||||||
} catch (InterruptedException | ExecutionException e) {
|
} catch (InterruptedException | ExecutionException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -334,18 +338,18 @@ public class ReservationOrderCashDeskServiceImpl extends ServiceImpl<Reservation
|
|||||||
BusinessAnalysisVo vo = new BusinessAnalysisVo();
|
BusinessAnalysisVo vo = new BusinessAnalysisVo();
|
||||||
|
|
||||||
//统计当前数据
|
//统计当前数据
|
||||||
CompletableFuture<BigDecimal> current = calculatePrice(request, null);
|
CompletableFuture<BigDecimal> current = profitTask(request, null);
|
||||||
//统计上年数据
|
//统计上年数据
|
||||||
CompletableFuture<BigDecimal> year = calculatePrice(request, DateConstants.SEARCH_DATE_PRE_YEAR);
|
CompletableFuture<BigDecimal> year = profitTask(request, DateConstants.SEARCH_DATE_PRE_YEAR);
|
||||||
//统计上个月的数据
|
//统计上个月的数据
|
||||||
CompletableFuture<BigDecimal> lastMonth = calculatePrice(request, DateConstants.SEARCH_DATE_PRE_MONTH);
|
CompletableFuture<BigDecimal> lastMonth = profitTask(request, DateConstants.SEARCH_DATE_PRE_MONTH);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
CompletableFuture.allOf(current, year, lastMonth).join();
|
CompletableFuture.allOf(current, year, lastMonth).join();
|
||||||
//同比
|
//同比
|
||||||
vo.setYearOnYear(LxkUtil.getRateBig(current.get(), year.get()));
|
vo.setYearOnYear(LxkUtil.getRateBig(current.get(), year.get()));
|
||||||
//环比
|
//环比
|
||||||
vo.setLinkRelativeRatio(LxkUtil.getRateBig(current.get(), year.get()));
|
vo.setLinkRelativeRatio(LxkUtil.getRateBig(current.get(), lastMonth.get()));
|
||||||
vo.setCurrentData(current.get());
|
vo.setCurrentData(current.get());
|
||||||
} catch (InterruptedException | ExecutionException e) {
|
} catch (InterruptedException | ExecutionException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -354,6 +358,10 @@ public class ReservationOrderCashDeskServiceImpl extends ServiceImpl<Reservation
|
|||||||
return vo;
|
return vo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CompletableFuture<BigDecimal> profitTask(BusinessAnalysisRequest request, String dateOffset) {
|
||||||
|
return CompletableFuture.supplyAsync(() -> getTurnover(request.getDateLimit(), request.getMerId(), dateOffset), service);
|
||||||
|
}
|
||||||
|
|
||||||
private BigDecimal getTurnover(String dateLimit, Integer merId, String type) {
|
private BigDecimal getTurnover(String dateLimit, Integer merId, String type) {
|
||||||
//总营业额
|
//总营业额
|
||||||
LambdaQueryWrapper<ReservationOrderCashDesk> lqw = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ReservationOrderCashDesk> lqw = new LambdaQueryWrapper<>();
|
||||||
@@ -383,13 +391,39 @@ public class ReservationOrderCashDeskServiceImpl extends ServiceImpl<Reservation
|
|||||||
item.in(ReservationOrderCashDeskItem::getCashDeskSn, deskSn);
|
item.in(ReservationOrderCashDeskItem::getCashDeskSn, deskSn);
|
||||||
List<ReservationOrderCashDeskItem> items = reservationOrderCashDeskItemService.list(item);
|
List<ReservationOrderCashDeskItem> items = reservationOrderCashDeskItemService.list(item);
|
||||||
List<Integer> orderIds = items.stream().map(ReservationOrderCashDeskItem::getOrderId).distinct().collect(Collectors.toList());
|
List<Integer> orderIds = items.stream().map(ReservationOrderCashDeskItem::getOrderId).distinct().collect(Collectors.toList());
|
||||||
QueryWrapper<CarReservationInfo> qw = new QueryWrapper<>();
|
|
||||||
qw.select("IFNULL(SUM( CASE WHEN new_accessory_price IS NOT NULL AND new_accessory_price <> 0 THEN new_accessory_price ELSE accessory_price END " +
|
|
||||||
"),0) as new_accessory_price");
|
|
||||||
qw.in("car_reservation_order_id", orderIds);
|
|
||||||
CarReservationInfo info = carReservationInfoService.getOne(qw);
|
|
||||||
BigDecimal total = list.stream().map(ReservationOrderCashDesk::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
BigDecimal total = list.stream().map(ReservationOrderCashDesk::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
return total.subtract(info.getNewAccessoryPrice());
|
//全部配件
|
||||||
|
Map<Integer, Accessory> accList = accessoryService.getListAll(null, merId);
|
||||||
|
if (CollUtil.isEmpty(accList)) {
|
||||||
|
return BigDecimal.ZERO;
|
||||||
|
}
|
||||||
|
BigDecimal price = BigDecimal.ZERO;
|
||||||
|
//套餐材料
|
||||||
|
List<CarReservationProjectPackageItemAccessory> packageList = carReservationProjectPackageItemAccessoryService.getByOrderIds(orderIds, accList.keySet());
|
||||||
|
for (CarReservationProjectPackageItemAccessory itemAcc : packageList) {
|
||||||
|
Accessory accessory = accList.get(itemAcc.getAccessoryId());
|
||||||
|
if (ObjectUtil.isNull(accessory)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//套餐材料无法更换,且一次性领完
|
||||||
|
price = price.add(accessory.getProcurePrice().multiply(new BigDecimal(itemAcc.getNum())));
|
||||||
|
}
|
||||||
|
//非套餐材料
|
||||||
|
List<CarReservationInfoProjectAccessory> projectList = carReservationInfoProjectAccessoryService.getByOrderIds(orderIds, accList.keySet());
|
||||||
|
for (CarReservationInfoProjectAccessory itemAcc : projectList) {
|
||||||
|
Integer accId = itemAcc.getAccessoryId();
|
||||||
|
Integer num = itemAcc.getNum();
|
||||||
|
if (itemAcc.getAccessoryPickId() != 0 && !itemAcc.getAccessoryPickId().equals(itemAcc.getAccessoryId())) {
|
||||||
|
accId = itemAcc.getAccessoryPickId();
|
||||||
|
num = itemAcc.getPickingNum();
|
||||||
|
}
|
||||||
|
Accessory accessory = accList.get(accId);
|
||||||
|
if (ObjectUtil.isNull(accessory)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
price = price.add(accessory.getProcurePrice().multiply(new BigDecimal(num)));
|
||||||
|
}
|
||||||
|
return total.subtract(price);
|
||||||
}
|
}
|
||||||
|
|
||||||
private BigDecimal getPrice(String dateLimit, Integer merId, String type) {
|
private BigDecimal getPrice(String dateLimit, Integer merId, String type) {
|
||||||
|
|||||||
Reference in New Issue
Block a user