Merge remote-tracking branch 'origin/master'

This commit is contained in:
huahua
2024-07-24 13:47:18 +08:00
15 changed files with 427 additions and 14 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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> {
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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) {

View File

@@ -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>