fix-成本分析,按月统计
This commit is contained in:
@@ -32,4 +32,14 @@ public class MerchantBusinessAnalysisController {
|
||||
request.setMerId(systemAdmin.getMerId());
|
||||
return CommonResult.success(homeService.getBusiness(request));
|
||||
}
|
||||
|
||||
@PreAuthorize("hasAuthority('merchant:business:analysis:line:chart')")
|
||||
@ApiOperation(value = "按月统计")
|
||||
@RequestMapping(value = "/line/chart", method = RequestMethod.POST)
|
||||
public CommonResult<BusinessAnalysisResponse> lineChart(@RequestBody() BusinessAnalysisRequest request) {
|
||||
SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser();
|
||||
request.setMerId(systemAdmin.getMerId());
|
||||
BusinessAnalysisResponse lineChart = homeService.getLineChart(request);
|
||||
return CommonResult.success(lineChart);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package com.zbkj.admin.controller.platform;
|
||||
|
||||
import com.zbkj.admin.service.HomeService;
|
||||
import com.zbkj.common.model.admin.SystemAdmin;
|
||||
import com.zbkj.common.request.BusinessAnalysisRequest;
|
||||
import com.zbkj.common.response.BusinessAnalysisResponse;
|
||||
import com.zbkj.common.result.CommonResult;
|
||||
import com.zbkj.common.utils.SecurityUtil;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -26,6 +28,20 @@ public class PlatformBusinessAnalysisController {
|
||||
@ApiOperation(value = "经营分析各个成本数据")
|
||||
@RequestMapping(value = "/lattice", method = RequestMethod.POST)
|
||||
public CommonResult<BusinessAnalysisResponse> indexDate(@RequestBody BusinessAnalysisRequest request) {
|
||||
if (request.getMerId() == null) {
|
||||
request.setMerId(0);
|
||||
}
|
||||
return CommonResult.success(homeService.getBusiness(request));
|
||||
}
|
||||
|
||||
@PreAuthorize("hasAuthority('platform:business:analysis:line:chart')")
|
||||
@ApiOperation(value = "按月统计")
|
||||
@RequestMapping(value = "/line/chart", method = RequestMethod.POST)
|
||||
public CommonResult<BusinessAnalysisResponse> lineChart(@RequestBody() BusinessAnalysisRequest request) {
|
||||
if (request.getMerId() == null) {
|
||||
request.setMerId(0);
|
||||
}
|
||||
BusinessAnalysisResponse lineChart = homeService.getLineChart(request);
|
||||
return CommonResult.success(lineChart);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package com.zbkj.admin.service;
|
||||
|
||||
import com.zbkj.common.model.business.BusinessAnalysis;
|
||||
import com.zbkj.common.request.BusinessAnalysisRequest;
|
||||
import com.zbkj.common.response.*;
|
||||
import com.zbkj.common.vo.MyRecord;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -65,4 +67,6 @@ public interface HomeService {
|
||||
HomePendingDataResponse getOperatingData(Integer merId);
|
||||
|
||||
BusinessAnalysisResponse getBusiness(BusinessAnalysisRequest request);
|
||||
|
||||
BusinessAnalysisResponse getLineChart(BusinessAnalysisRequest request);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package com.zbkj.admin.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.zbkj.admin.service.HomeService;
|
||||
import com.zbkj.admin.service.UserStatisticsService;
|
||||
@@ -10,6 +12,7 @@ import com.zbkj.common.constants.AccessoryConstants;
|
||||
import com.zbkj.common.constants.DateConstants;
|
||||
import com.zbkj.common.constants.SysConfigConstants;
|
||||
import com.zbkj.common.model.admin.SystemAdmin;
|
||||
import com.zbkj.common.model.business.BusinessAnalysis;
|
||||
import com.zbkj.common.model.merchant.Merchant;
|
||||
import com.zbkj.common.model.product.Product;
|
||||
import com.zbkj.common.model.record.ProductDayRecord;
|
||||
@@ -17,6 +20,7 @@ import com.zbkj.common.model.user.User;
|
||||
import com.zbkj.common.request.BusinessAnalysisRequest;
|
||||
import com.zbkj.common.request.ProductRankingRequest;
|
||||
import com.zbkj.common.response.*;
|
||||
import com.zbkj.common.utils.LxkDateUtil;
|
||||
import com.zbkj.common.utils.SecurityUtil;
|
||||
import com.zbkj.common.vo.BusinessAnalysisVo;
|
||||
import com.zbkj.service.service.*;
|
||||
@@ -25,7 +29,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.TreeMap;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -83,6 +90,8 @@ public class HomeServiceImpl implements HomeService {
|
||||
private ReservationOrderCashDeskService reservationOrderCashDeskService;
|
||||
@Autowired
|
||||
private CarReservationInfoService carReservationInfoService;
|
||||
@Autowired
|
||||
private BusinessAnalysisService businessAnalysisService;
|
||||
|
||||
/**
|
||||
* 首页数据
|
||||
@@ -183,7 +192,7 @@ public class HomeServiceImpl implements HomeService {
|
||||
BusinessAnalysisResponse response = new BusinessAnalysisResponse();
|
||||
//收银
|
||||
BusinessAnalysisVo cashierVo = reservationOrderCashDeskService.getStatistic(request);
|
||||
//配件使用成本
|
||||
//利润
|
||||
BusinessAnalysisVo costVo = reservationOrderCashDeskService.getCost(request);
|
||||
//配件使用成本
|
||||
BusinessAnalysisVo accessoryCostVo = carReservationInfoService.getStatistic(request);
|
||||
@@ -191,12 +200,51 @@ public class HomeServiceImpl implements HomeService {
|
||||
BusinessAnalysisVo countNum = carReservationOrderService.getCountNum(request);
|
||||
|
||||
response.setCashierVo(cashierVo);
|
||||
response.setAccessoryCostVo(costVo);
|
||||
response.setTurnoverVo(accessoryCostVo);
|
||||
response.setAccessoryCostVo(accessoryCostVo);
|
||||
response.setTurnoverVo(costVo);
|
||||
response.setSingleQuantityVo(countNum);
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BusinessAnalysisResponse getLineChart(BusinessAnalysisRequest request) {
|
||||
QueryWrapper<BusinessAnalysis> qw = new QueryWrapper<>();
|
||||
qw.select("DATE_FORMAT(date_sn, '%m') AS date_key,IFNULL(SUM(total_turnover),0) as total_turnover,IFNULL(SUM(costs),0) as costs,IFNULL(SUM(profit),0) as profit");
|
||||
qw.between("date_sn", DateUtil.beginOfYear(new Date()), DateUtil.endOfYear(new Date()));
|
||||
if (request.getMerId() != null) {
|
||||
qw.eq("mer_id", request.getMerId());
|
||||
}
|
||||
qw.groupBy("date_key");
|
||||
qw.orderByDesc("date_key");
|
||||
List<BusinessAnalysis> list = businessAnalysisService.list(qw);
|
||||
//本月数据
|
||||
BusinessAnalysis monthAna = businessAnalysisService.getMonth(request.getMerId());
|
||||
LinkedHashMap<String, BusinessAnalysis> tempMap = new LinkedHashMap();
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
list.forEach(e -> {
|
||||
tempMap.put(Convert.toInt(e.getDateKey()).toString(), e);
|
||||
});
|
||||
}
|
||||
if (monthAna != null) {
|
||||
tempMap.put(monthAna.getDateKey(), monthAna);
|
||||
}
|
||||
LinkedHashMap<String, BusinessAnalysis> map = new LinkedHashMap();
|
||||
for (int i = 1; i <= 12; i++) {
|
||||
if (tempMap.get(i + "") != null) {
|
||||
map.put(i + "", tempMap.get(i + ""));
|
||||
} else {
|
||||
BusinessAnalysis analysis = new BusinessAnalysis();
|
||||
analysis.setProfit(BigDecimal.ZERO);
|
||||
analysis.setCosts(BigDecimal.ZERO);
|
||||
analysis.setTotalTurnover(BigDecimal.ZERO);
|
||||
map.put(i + "", analysis);
|
||||
}
|
||||
}
|
||||
BusinessAnalysisResponse response = new BusinessAnalysisResponse();
|
||||
response.setAnalysisMap(map);
|
||||
return response;
|
||||
}
|
||||
|
||||
public BrokenLineResponse boardInfo(String dateLat, Integer merId) {
|
||||
//工单数据
|
||||
Integer totalRepairOrderNum = carReservationOrderService.getTotalRepairOrderNum(dateLat, merId);
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.zbkj.admin.task.business;
|
||||
|
||||
import com.zbkj.admin.task.order.OrderReceiptTask;
|
||||
import com.zbkj.common.utils.LxkDateUtil;
|
||||
import com.zbkj.service.service.BusinessAnalysisService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component("BusinessAnalysisTask")
|
||||
public class BusinessAnalysisTask {
|
||||
//日志
|
||||
private static final Logger logger = LoggerFactory.getLogger(OrderReceiptTask.class);
|
||||
|
||||
@Autowired
|
||||
private BusinessAnalysisService businessAnalysisService;
|
||||
|
||||
/**
|
||||
* 每月统计经营分析
|
||||
*/
|
||||
public void saveBusinessAnalysis() {
|
||||
logger.info("---BusinessAnalysisTask task------produce Data with fixed rate task: Execution Time - {}", LxkDateUtil.nowDateTime());
|
||||
try {
|
||||
businessAnalysisService.saveBusinessAnalysis();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
logger.error("BusinessAnalysisTask.task" + " | msg : " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.zbkj.common.model.business;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @TableName eb_business_analysis
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@TableName(value = "eb_business_analysis")
|
||||
@ApiModel(value = "BusinessAnalysis", description = "BusinessAnalysis")
|
||||
public class BusinessAnalysis implements Serializable {
|
||||
|
||||
@ApiModelProperty(value = "ID")
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty(value = "日期")
|
||||
private Date dateSn;
|
||||
|
||||
@ApiModelProperty(value = "营业额")
|
||||
private BigDecimal totalTurnover;
|
||||
|
||||
@ApiModelProperty(value = "成本")
|
||||
private BigDecimal costs;
|
||||
|
||||
@ApiModelProperty(value = "利润")
|
||||
private BigDecimal profit;
|
||||
|
||||
@ApiModelProperty(value = "门店日期")
|
||||
private Integer merId;
|
||||
|
||||
@TableLogic
|
||||
@ApiModelProperty(value = "是否删除")
|
||||
private Boolean isDel;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String dateKey;
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.zbkj.common.response;
|
||||
|
||||
import com.zbkj.common.model.business.BusinessAnalysis;
|
||||
import com.zbkj.common.vo.BusinessAnalysisVo;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
@@ -8,6 +9,7 @@ import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@@ -27,4 +29,7 @@ public class BusinessAnalysisResponse implements Serializable {
|
||||
|
||||
@ApiModelProperty(value = "工单数量")
|
||||
private BusinessAnalysisVo singleQuantityVo;
|
||||
|
||||
@ApiModelProperty(value = "成本分析折线图")
|
||||
private LinkedHashMap<String, BusinessAnalysis> analysisMap;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.zbkj.service.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.zbkj.common.model.business.BusinessAnalysis;
|
||||
|
||||
/**
|
||||
* @author xl
|
||||
* @description 针对表【eb_business_analysis(经营分析折线图)】的数据库操作Mapper
|
||||
* @createDate 2024-07-23 16:08:24
|
||||
*/
|
||||
public interface BusinessAnalysisDao extends BaseMapper<BusinessAnalysis> {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.zbkj.service.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.zbkj.common.model.business.BusinessAnalysis;
|
||||
|
||||
/**
|
||||
* @author xl
|
||||
* @description 针对表【eb_business_analysis(经营分析折线图)】的数据库操作Service
|
||||
* @createDate 2024-07-23 16:08:24
|
||||
*/
|
||||
public interface BusinessAnalysisService extends IService<BusinessAnalysis> {
|
||||
|
||||
void saveBusinessAnalysis();
|
||||
|
||||
BusinessAnalysis getMonth(Integer merId);
|
||||
}
|
||||
@@ -3,6 +3,9 @@ package com.zbkj.service.service;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.zbkj.common.model.car.ReservationOrderCashDeskItem;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author xl
|
||||
* @description 针对表【eb_reservation_order_cash_desk_item(维修收银明细表)】的数据库操作Service
|
||||
@@ -10,4 +13,5 @@ import com.zbkj.common.model.car.ReservationOrderCashDeskItem;
|
||||
*/
|
||||
public interface ReservationOrderCashDeskItemService extends IService<ReservationOrderCashDeskItem> {
|
||||
|
||||
Map<Integer, List<ReservationOrderCashDeskItem>> getMapByDeskSns(List<String> deskSns);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,162 @@
|
||||
package com.zbkj.service.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateField;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.zbkj.common.constants.DateConstants;
|
||||
import com.zbkj.common.exception.LxkException;
|
||||
import com.zbkj.common.model.business.BusinessAnalysis;
|
||||
import com.zbkj.common.model.car.CarReservationInfo;
|
||||
import com.zbkj.common.model.car.ReservationOrderCashDesk;
|
||||
import com.zbkj.common.model.car.ReservationOrderCashDeskItem;
|
||||
import com.zbkj.common.utils.LxkDateUtil;
|
||||
import com.zbkj.common.vo.DateLimitUtilVo;
|
||||
import com.zbkj.service.dao.BusinessAnalysisDao;
|
||||
import com.zbkj.service.service.BusinessAnalysisService;
|
||||
import com.zbkj.service.service.CarReservationInfoService;
|
||||
import com.zbkj.service.service.ReservationOrderCashDeskItemService;
|
||||
import com.zbkj.service.service.ReservationOrderCashDeskService;
|
||||
import org.aspectj.weaver.ast.Var;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.support.TransactionTemplate;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static java.util.stream.Collectors.groupingBy;
|
||||
|
||||
/**
|
||||
* @author xl
|
||||
* @description 针对表【eb_business_analysis(经营分析折线图)】的数据库操作Service实现
|
||||
* @createDate 2024-07-23 16:08:24
|
||||
*/
|
||||
@Service
|
||||
public class BusinessAnalysisServiceImpl extends ServiceImpl<BusinessAnalysisDao, BusinessAnalysis>
|
||||
implements BusinessAnalysisService {
|
||||
private static final Logger logger = LoggerFactory.getLogger(UserBrokerageRecordServiceImpl.class);
|
||||
@Resource
|
||||
private TransactionTemplate transactionTemplate;
|
||||
@Autowired
|
||||
private ReservationOrderCashDeskService reservationOrderCashDeskService;
|
||||
@Autowired
|
||||
private ReservationOrderCashDeskItemService reservationOrderCashDeskItemService;
|
||||
@Autowired
|
||||
private CarReservationInfoService carReservationInfoService;
|
||||
|
||||
@Override
|
||||
public void saveBusinessAnalysis() {
|
||||
LambdaQueryWrapper<ReservationOrderCashDesk> lqw = new LambdaQueryWrapper<>();
|
||||
lqw.between(ReservationOrderCashDesk::getCreateTime, LxkDateUtil.getLastMonthStartDay(), LxkDateUtil.getLastMonthEndDay());
|
||||
lqw.orderByDesc(ReservationOrderCashDesk::getMerId);
|
||||
List<ReservationOrderCashDesk> list = reservationOrderCashDeskService.list(lqw);
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return;
|
||||
}
|
||||
Map<Integer, List<ReservationOrderCashDesk>> deskMap = list.stream().collect(groupingBy(ReservationOrderCashDesk::getMerId));
|
||||
|
||||
List<String> deskSns = list.stream().map(ReservationOrderCashDesk::getCashDeskSn).collect(Collectors.toList());
|
||||
Map<Integer, List<ReservationOrderCashDeskItem>> deskItems = reservationOrderCashDeskItemService.getMapByDeskSns(deskSns);
|
||||
|
||||
Set<Integer> merIdSet = deskMap.keySet();
|
||||
|
||||
List businessList = new ArrayList<BusinessAnalysis>();
|
||||
for (Integer merId : merIdSet) {
|
||||
List<ReservationOrderCashDesk> deskList = deskMap.get(merId);
|
||||
if (CollUtil.isEmpty(deskList)) {
|
||||
continue;
|
||||
}
|
||||
List orderList = new ArrayList();
|
||||
for (ReservationOrderCashDesk dask : deskList) {
|
||||
List<ReservationOrderCashDeskItem> itemList = deskItems.get(dask.getId());
|
||||
if (CollUtil.isEmpty(itemList)) {
|
||||
continue;
|
||||
}
|
||||
List<Integer> orderId = itemList.stream().map(ReservationOrderCashDeskItem::getOrderId).collect(Collectors.toList());
|
||||
orderList.addAll(orderId);
|
||||
}
|
||||
//配件价格
|
||||
BigDecimal cost = getCost(orderList);
|
||||
if (cost == null) {
|
||||
continue;
|
||||
}
|
||||
//总营业额
|
||||
BigDecimal total = deskList.stream().map(ReservationOrderCashDesk::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
BusinessAnalysis analysis = new BusinessAnalysis();
|
||||
analysis.setMerId(merId);
|
||||
analysis.setCosts(cost);
|
||||
analysis.setTotalTurnover(total);
|
||||
analysis.setProfit(total.subtract(cost));
|
||||
analysis.setDateSn(DateUtil.date());
|
||||
businessList.add(analysis);
|
||||
}
|
||||
Boolean execute = transactionTemplate.execute(e -> {
|
||||
saveBatch(businessList);
|
||||
return Boolean.TRUE;
|
||||
});
|
||||
if (!execute) {
|
||||
logger.error("经营数据失败");
|
||||
}
|
||||
}
|
||||
|
||||
private BigDecimal getCost(List<Integer> orerdId) {
|
||||
if (CollUtil.isEmpty(orerdId)) {
|
||||
return null;
|
||||
}
|
||||
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", orerdId);
|
||||
CarReservationInfo info = carReservationInfoService.getOne(qw);
|
||||
return info.getNewAccessoryPrice();
|
||||
}
|
||||
|
||||
public BusinessAnalysis getMonth(Integer merId) {
|
||||
if (merId == null) {
|
||||
return null;
|
||||
}
|
||||
LambdaQueryWrapper<ReservationOrderCashDesk> lqw = new LambdaQueryWrapper<>();
|
||||
lqw.between(ReservationOrderCashDesk::getCreateTime, DateUtil.beginOfMonth(new Date()), DateUtil.endOfMonth(new Date()));
|
||||
lqw.eq(ReservationOrderCashDesk::getMerId, merId);
|
||||
List<ReservationOrderCashDesk> list = reservationOrderCashDeskService.list(lqw);
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return null;
|
||||
}
|
||||
List<String> sn = list.stream().map(ReservationOrderCashDesk::getCashDeskSn).collect(Collectors.toList());
|
||||
|
||||
LambdaQueryWrapper<ReservationOrderCashDeskItem> itemQw = new LambdaQueryWrapper<>();
|
||||
itemQw.in(ReservationOrderCashDeskItem::getCashDeskSn, sn);
|
||||
List<ReservationOrderCashDeskItem> itemList = reservationOrderCashDeskItemService.list(itemQw);
|
||||
if (CollUtil.isEmpty(itemList)) {
|
||||
return null;
|
||||
}
|
||||
List<Integer> orderId = itemList.stream().map(ReservationOrderCashDeskItem::getOrderId).collect(Collectors.toList());
|
||||
BigDecimal cost = getCost(orderId);
|
||||
//总营业额
|
||||
BigDecimal total = list.stream().map(ReservationOrderCashDesk::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
BusinessAnalysis analysis = new BusinessAnalysis();
|
||||
analysis.setMerId(merId);
|
||||
analysis.setCosts(cost);
|
||||
analysis.setTotalTurnover(total);
|
||||
analysis.setProfit(total.subtract(cost));
|
||||
analysis.setDateSn(DateUtil.date());
|
||||
analysis.setDateKey(DateUtil.month(new Date()) + "");
|
||||
return analysis;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.zbkj.common.constants.DateConstants;
|
||||
import com.zbkj.common.model.car.CarReservationInfo;
|
||||
import com.zbkj.common.model.car.ReservationOrderCashDesk;
|
||||
import com.zbkj.common.model.car.ReservationOrderCashDeskItem;
|
||||
import com.zbkj.common.request.BusinessAnalysisRequest;
|
||||
import com.zbkj.common.utils.LxkDateUtil;
|
||||
import com.zbkj.common.utils.LxkUtil;
|
||||
@@ -17,6 +19,8 @@ import com.zbkj.common.vo.BusinessAnalysisVo;
|
||||
import com.zbkj.common.vo.DateLimitUtilVo;
|
||||
import com.zbkj.service.dao.car.CarReservationInfoDao;
|
||||
import com.zbkj.service.service.CarReservationInfoService;
|
||||
import com.zbkj.service.service.ReservationOrderCashDeskItemService;
|
||||
import com.zbkj.service.service.ReservationOrderCashDeskService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -42,6 +46,10 @@ public class CarReservationInfoServiceImpl extends ServiceImpl<CarReservationInf
|
||||
private CarReservationInfoDao dao;
|
||||
@Autowired
|
||||
private ExecutorService service;
|
||||
@Autowired
|
||||
private ReservationOrderCashDeskService reservationOrderCashDeskService;
|
||||
@Autowired
|
||||
private ReservationOrderCashDeskItemService reservationOrderCashDeskItemService;
|
||||
|
||||
@Override
|
||||
public CarReservationInfo getByReservationOrderId(Integer id) {
|
||||
@@ -93,11 +101,9 @@ public class CarReservationInfoServiceImpl extends ServiceImpl<CarReservationInf
|
||||
}
|
||||
|
||||
private BigDecimal getSumPrice(String dateLimit, Integer merId, String type) {
|
||||
QueryWrapper<CarReservationInfo> lqw = new QueryWrapper<>();
|
||||
lqw.select("IFNULL(SUM( CASE WHEN new_accessory_over_price IS NOT NULL AND new_accessory_over_price <> 0 THEN new_accessory_over_price ELSE accessory_over_price END " +
|
||||
"),0) as new_accessory_over_price");
|
||||
LambdaQueryWrapper<ReservationOrderCashDesk> lqw = new LambdaQueryWrapper<>();
|
||||
if (merId != null) {
|
||||
lqw.eq("mer_id", merId);
|
||||
lqw.eq(ReservationOrderCashDesk::getMerId, merId);
|
||||
}
|
||||
if (StrUtil.isNotBlank(dateLimit)) {
|
||||
DateLimitUtilVo dateLimitUtilVo = LxkDateUtil.getDateLimit(dateLimit);
|
||||
@@ -105,15 +111,29 @@ public class CarReservationInfoServiceImpl extends ServiceImpl<CarReservationInf
|
||||
DateTime end = DateUtil.parseDateTime(dateLimitUtilVo.getEndTime());
|
||||
if (StrUtil.isNotBlank(type) && type.equals(DateConstants.SEARCH_DATE_PRE_MONTH)) {
|
||||
//前一个月
|
||||
lqw.between("create_time", DateUtil.offsetMonth(start, -1), DateUtil.offsetMonth(end, -1));
|
||||
lqw.between(ReservationOrderCashDesk::getCreateTime, DateUtil.offsetMonth(start, -1), DateUtil.offsetMonth(end, -1));
|
||||
} else if (StrUtil.isNotBlank(type) && type.equals(DateConstants.SEARCH_DATE_PRE_YEAR)) {
|
||||
//前一年
|
||||
lqw.between("create_time", DateUtil.offset(start, DateField.YEAR, -1), DateUtil.offset(end, DateField.YEAR, -1));
|
||||
lqw.between(ReservationOrderCashDesk::getCreateTime, DateUtil.offset(start, DateField.YEAR, -1), DateUtil.offset(end, DateField.YEAR, -1));
|
||||
} else {
|
||||
lqw.between("create_time", dateLimitUtilVo.getStartTime(), dateLimitUtilVo.getEndTime());
|
||||
lqw.between(ReservationOrderCashDesk::getCreateTime, dateLimitUtilVo.getStartTime(), dateLimitUtilVo.getEndTime());
|
||||
}
|
||||
}
|
||||
return getOne(lqw).getNewAccessoryOverPrice();
|
||||
List<ReservationOrderCashDesk> list = reservationOrderCashDeskService.list(lqw);
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
List<String> deskSn = list.stream().map(ReservationOrderCashDesk::getCashDeskSn).collect(Collectors.toList());
|
||||
LambdaQueryWrapper<ReservationOrderCashDeskItem> item = new LambdaQueryWrapper<>();
|
||||
item.in(ReservationOrderCashDeskItem::getCashDeskSn, deskSn);
|
||||
List<ReservationOrderCashDeskItem> items = reservationOrderCashDeskItemService.list(item);
|
||||
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 = getOne(qw);
|
||||
return info.getNewAccessoryPrice();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,18 @@
|
||||
package com.zbkj.service.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.amazonaws.annotation.GuardedBy;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.zbkj.common.model.car.ReservationOrderCashDeskItem;
|
||||
import com.zbkj.service.dao.car.ReservationOrderCashDeskItemDao;
|
||||
import com.zbkj.service.service.ReservationOrderCashDeskItemService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author xl
|
||||
* @description 针对表【eb_reservation_order_cash_desk_item(维修收银明细表)】的数据库操作Service实现
|
||||
@@ -15,6 +22,20 @@ import org.springframework.stereotype.Service;
|
||||
public class ReservationOrderCashDeskItemServiceImpl extends ServiceImpl<ReservationOrderCashDeskItemDao, ReservationOrderCashDeskItem>
|
||||
implements ReservationOrderCashDeskItemService {
|
||||
|
||||
@Override
|
||||
public Map<Integer, List<ReservationOrderCashDeskItem>> getMapByDeskSns(List<String> deskSns) {
|
||||
if (CollUtil.isEmpty(deskSns)) {
|
||||
return CollUtil.newHashMap();
|
||||
}
|
||||
LambdaQueryWrapper<ReservationOrderCashDeskItem> lqw = new LambdaQueryWrapper<>();
|
||||
lqw.in(ReservationOrderCashDeskItem::getCashDeskSn, deskSns);
|
||||
List<ReservationOrderCashDeskItem> list = list(lqw);
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return CollUtil.newHashMap();
|
||||
}
|
||||
Map<Integer, List<ReservationOrderCashDeskItem>> map = list.stream().collect(Collectors.groupingBy(ReservationOrderCashDeskItem::getCashDeskId));
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -384,12 +384,12 @@ public class ReservationOrderCashDeskServiceImpl extends ServiceImpl<Reservation
|
||||
List<ReservationOrderCashDeskItem> items = reservationOrderCashDeskItemService.list(item);
|
||||
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_over_price IS NOT NULL AND new_accessory_over_price <> 0 THEN new_accessory_over_price ELSE accessory_over_price END " +
|
||||
"),0) as new_accessory_over_price");
|
||||
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);
|
||||
return total.subtract(info.getNewAccessoryOverPrice());
|
||||
return total.subtract(info.getNewAccessoryPrice());
|
||||
}
|
||||
|
||||
private BigDecimal getPrice(String dateLimit, Integer merId, String type) {
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.zbkj.service.dao.BusinessAnalysisDao">
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user