From eb74f2945c8e9d46f4616dbfee6b863750e468a6 Mon Sep 17 00:00:00 2001 From: xl <2132997227@qq.com> Date: Wed, 24 Jul 2024 13:45:14 +0800 Subject: [PATCH] =?UTF-8?q?fix-=E6=88=90=E6=9C=AC=E5=88=86=E6=9E=90?= =?UTF-8?q?=EF=BC=8C=E6=8C=89=E6=9C=88=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MerchantBusinessAnalysisController.java | 10 ++ .../PlatformBusinessAnalysisController.java | 16 ++ .../com/zbkj/admin/service/HomeService.java | 4 + .../admin/service/impl/HomeServiceImpl.java | 54 +++++- .../task/business/BusinessAnalysisTask.java | 31 ++++ .../model/business/BusinessAnalysis.java | 52 ++++++ .../response/BusinessAnalysisResponse.java | 5 + .../zbkj/service/dao/BusinessAnalysisDao.java | 17 ++ .../service/BusinessAnalysisService.java | 16 ++ .../ReservationOrderCashDeskItemService.java | 4 + .../impl/BusinessAnalysisServiceImpl.java | 162 ++++++++++++++++++ .../impl/CarReservationInfoServiceImpl.java | 36 +++- ...servationOrderCashDeskItemServiceImpl.java | 21 +++ .../ReservationOrderCashDeskServiceImpl.java | 6 +- .../business/BusinessAnalysisMapper.xml | 7 + 15 files changed, 427 insertions(+), 14 deletions(-) create mode 100644 lxk-admin/src/main/java/com/zbkj/admin/task/business/BusinessAnalysisTask.java create mode 100644 lxk-common/src/main/java/com/zbkj/common/model/business/BusinessAnalysis.java create mode 100644 lxk-service/src/main/java/com/zbkj/service/dao/BusinessAnalysisDao.java create mode 100644 lxk-service/src/main/java/com/zbkj/service/service/BusinessAnalysisService.java create mode 100644 lxk-service/src/main/java/com/zbkj/service/service/impl/BusinessAnalysisServiceImpl.java create mode 100644 lxk-service/src/main/resources/mapper/business/BusinessAnalysisMapper.xml diff --git a/lxk-admin/src/main/java/com/zbkj/admin/controller/merchant/MerchantBusinessAnalysisController.java b/lxk-admin/src/main/java/com/zbkj/admin/controller/merchant/MerchantBusinessAnalysisController.java index ce607a3d..e10e9e15 100644 --- a/lxk-admin/src/main/java/com/zbkj/admin/controller/merchant/MerchantBusinessAnalysisController.java +++ b/lxk-admin/src/main/java/com/zbkj/admin/controller/merchant/MerchantBusinessAnalysisController.java @@ -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 lineChart(@RequestBody() BusinessAnalysisRequest request) { + SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser(); + request.setMerId(systemAdmin.getMerId()); + BusinessAnalysisResponse lineChart = homeService.getLineChart(request); + return CommonResult.success(lineChart); + } } diff --git a/lxk-admin/src/main/java/com/zbkj/admin/controller/platform/PlatformBusinessAnalysisController.java b/lxk-admin/src/main/java/com/zbkj/admin/controller/platform/PlatformBusinessAnalysisController.java index 2c5b1257..15fba822 100644 --- a/lxk-admin/src/main/java/com/zbkj/admin/controller/platform/PlatformBusinessAnalysisController.java +++ b/lxk-admin/src/main/java/com/zbkj/admin/controller/platform/PlatformBusinessAnalysisController.java @@ -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 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 lineChart(@RequestBody() BusinessAnalysisRequest request) { + if (request.getMerId() == null) { + request.setMerId(0); + } + BusinessAnalysisResponse lineChart = homeService.getLineChart(request); + return CommonResult.success(lineChart); + } } diff --git a/lxk-admin/src/main/java/com/zbkj/admin/service/HomeService.java b/lxk-admin/src/main/java/com/zbkj/admin/service/HomeService.java index afdde6e8..8d3a5c8e 100644 --- a/lxk-admin/src/main/java/com/zbkj/admin/service/HomeService.java +++ b/lxk-admin/src/main/java/com/zbkj/admin/service/HomeService.java @@ -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); } diff --git a/lxk-admin/src/main/java/com/zbkj/admin/service/impl/HomeServiceImpl.java b/lxk-admin/src/main/java/com/zbkj/admin/service/impl/HomeServiceImpl.java index 0ff15b86..18d642dd 100644 --- a/lxk-admin/src/main/java/com/zbkj/admin/service/impl/HomeServiceImpl.java +++ b/lxk-admin/src/main/java/com/zbkj/admin/service/impl/HomeServiceImpl.java @@ -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 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 list = businessAnalysisService.list(qw); + //本月数据 + BusinessAnalysis monthAna = businessAnalysisService.getMonth(request.getMerId()); + LinkedHashMap 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 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); diff --git a/lxk-admin/src/main/java/com/zbkj/admin/task/business/BusinessAnalysisTask.java b/lxk-admin/src/main/java/com/zbkj/admin/task/business/BusinessAnalysisTask.java new file mode 100644 index 00000000..bda8acbc --- /dev/null +++ b/lxk-admin/src/main/java/com/zbkj/admin/task/business/BusinessAnalysisTask.java @@ -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()); + } + } +} diff --git a/lxk-common/src/main/java/com/zbkj/common/model/business/BusinessAnalysis.java b/lxk-common/src/main/java/com/zbkj/common/model/business/BusinessAnalysis.java new file mode 100644 index 00000000..7d3b21c1 --- /dev/null +++ b/lxk-common/src/main/java/com/zbkj/common/model/business/BusinessAnalysis.java @@ -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; +} diff --git a/lxk-common/src/main/java/com/zbkj/common/response/BusinessAnalysisResponse.java b/lxk-common/src/main/java/com/zbkj/common/response/BusinessAnalysisResponse.java index d1b519a6..fa6fd814 100644 --- a/lxk-common/src/main/java/com/zbkj/common/response/BusinessAnalysisResponse.java +++ b/lxk-common/src/main/java/com/zbkj/common/response/BusinessAnalysisResponse.java @@ -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 analysisMap; } diff --git a/lxk-service/src/main/java/com/zbkj/service/dao/BusinessAnalysisDao.java b/lxk-service/src/main/java/com/zbkj/service/dao/BusinessAnalysisDao.java new file mode 100644 index 00000000..d985e97a --- /dev/null +++ b/lxk-service/src/main/java/com/zbkj/service/dao/BusinessAnalysisDao.java @@ -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 { + +} + + + + diff --git a/lxk-service/src/main/java/com/zbkj/service/service/BusinessAnalysisService.java b/lxk-service/src/main/java/com/zbkj/service/service/BusinessAnalysisService.java new file mode 100644 index 00000000..d8048890 --- /dev/null +++ b/lxk-service/src/main/java/com/zbkj/service/service/BusinessAnalysisService.java @@ -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 { + + void saveBusinessAnalysis(); + + BusinessAnalysis getMonth(Integer merId); +} diff --git a/lxk-service/src/main/java/com/zbkj/service/service/ReservationOrderCashDeskItemService.java b/lxk-service/src/main/java/com/zbkj/service/service/ReservationOrderCashDeskItemService.java index 694c8d03..a4e9ab95 100644 --- a/lxk-service/src/main/java/com/zbkj/service/service/ReservationOrderCashDeskItemService.java +++ b/lxk-service/src/main/java/com/zbkj/service/service/ReservationOrderCashDeskItemService.java @@ -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 { + Map> getMapByDeskSns(List deskSns); } diff --git a/lxk-service/src/main/java/com/zbkj/service/service/impl/BusinessAnalysisServiceImpl.java b/lxk-service/src/main/java/com/zbkj/service/service/impl/BusinessAnalysisServiceImpl.java new file mode 100644 index 00000000..7bb6f4c0 --- /dev/null +++ b/lxk-service/src/main/java/com/zbkj/service/service/impl/BusinessAnalysisServiceImpl.java @@ -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 + 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 lqw = new LambdaQueryWrapper<>(); + lqw.between(ReservationOrderCashDesk::getCreateTime, LxkDateUtil.getLastMonthStartDay(), LxkDateUtil.getLastMonthEndDay()); + lqw.orderByDesc(ReservationOrderCashDesk::getMerId); + List list = reservationOrderCashDeskService.list(lqw); + if (CollUtil.isEmpty(list)) { + return; + } + Map> deskMap = list.stream().collect(groupingBy(ReservationOrderCashDesk::getMerId)); + + List deskSns = list.stream().map(ReservationOrderCashDesk::getCashDeskSn).collect(Collectors.toList()); + Map> deskItems = reservationOrderCashDeskItemService.getMapByDeskSns(deskSns); + + Set merIdSet = deskMap.keySet(); + + List businessList = new ArrayList(); + for (Integer merId : merIdSet) { + List deskList = deskMap.get(merId); + if (CollUtil.isEmpty(deskList)) { + continue; + } + List orderList = new ArrayList(); + for (ReservationOrderCashDesk dask : deskList) { + List itemList = deskItems.get(dask.getId()); + if (CollUtil.isEmpty(itemList)) { + continue; + } + List 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 orerdId) { + if (CollUtil.isEmpty(orerdId)) { + return null; + } + QueryWrapper 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 lqw = new LambdaQueryWrapper<>(); + lqw.between(ReservationOrderCashDesk::getCreateTime, DateUtil.beginOfMonth(new Date()), DateUtil.endOfMonth(new Date())); + lqw.eq(ReservationOrderCashDesk::getMerId, merId); + List list = reservationOrderCashDeskService.list(lqw); + if (CollUtil.isEmpty(list)) { + return null; + } + List sn = list.stream().map(ReservationOrderCashDesk::getCashDeskSn).collect(Collectors.toList()); + + LambdaQueryWrapper itemQw = new LambdaQueryWrapper<>(); + itemQw.in(ReservationOrderCashDeskItem::getCashDeskSn, sn); + List itemList = reservationOrderCashDeskItemService.list(itemQw); + if (CollUtil.isEmpty(itemList)) { + return null; + } + List 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; + } + + +} + + + + diff --git a/lxk-service/src/main/java/com/zbkj/service/service/impl/CarReservationInfoServiceImpl.java b/lxk-service/src/main/java/com/zbkj/service/service/impl/CarReservationInfoServiceImpl.java index e190d4fb..a77396ca 100644 --- a/lxk-service/src/main/java/com/zbkj/service/service/impl/CarReservationInfoServiceImpl.java +++ b/lxk-service/src/main/java/com/zbkj/service/service/impl/CarReservationInfoServiceImpl.java @@ -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 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 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 list = reservationOrderCashDeskService.list(lqw); + if (CollUtil.isEmpty(list)) { + return BigDecimal.ZERO; + } + List deskSn = list.stream().map(ReservationOrderCashDesk::getCashDeskSn).collect(Collectors.toList()); + LambdaQueryWrapper item = new LambdaQueryWrapper<>(); + item.in(ReservationOrderCashDeskItem::getCashDeskSn, deskSn); + List items = reservationOrderCashDeskItemService.list(item); + List orderIds = items.stream().map(ReservationOrderCashDeskItem::getOrderId).distinct().collect(Collectors.toList()); + QueryWrapper 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(); } } diff --git a/lxk-service/src/main/java/com/zbkj/service/service/impl/ReservationOrderCashDeskItemServiceImpl.java b/lxk-service/src/main/java/com/zbkj/service/service/impl/ReservationOrderCashDeskItemServiceImpl.java index 67a1ae6d..0c417336 100644 --- a/lxk-service/src/main/java/com/zbkj/service/service/impl/ReservationOrderCashDeskItemServiceImpl.java +++ b/lxk-service/src/main/java/com/zbkj/service/service/impl/ReservationOrderCashDeskItemServiceImpl.java @@ -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 implements ReservationOrderCashDeskItemService { + @Override + public Map> getMapByDeskSns(List deskSns) { + if (CollUtil.isEmpty(deskSns)) { + return CollUtil.newHashMap(); + } + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.in(ReservationOrderCashDeskItem::getCashDeskSn, deskSns); + List list = list(lqw); + if (CollUtil.isEmpty(list)) { + return CollUtil.newHashMap(); + } + Map> map = list.stream().collect(Collectors.groupingBy(ReservationOrderCashDeskItem::getCashDeskId)); + return map; + } } diff --git a/lxk-service/src/main/java/com/zbkj/service/service/impl/ReservationOrderCashDeskServiceImpl.java b/lxk-service/src/main/java/com/zbkj/service/service/impl/ReservationOrderCashDeskServiceImpl.java index 45b3acd4..0c946e99 100644 --- a/lxk-service/src/main/java/com/zbkj/service/service/impl/ReservationOrderCashDeskServiceImpl.java +++ b/lxk-service/src/main/java/com/zbkj/service/service/impl/ReservationOrderCashDeskServiceImpl.java @@ -384,12 +384,12 @@ public class ReservationOrderCashDeskServiceImpl extends ServiceImpl items = reservationOrderCashDeskItemService.list(item); List orderIds = items.stream().map(ReservationOrderCashDeskItem::getOrderId).distinct().collect(Collectors.toList()); QueryWrapper 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) { diff --git a/lxk-service/src/main/resources/mapper/business/BusinessAnalysisMapper.xml b/lxk-service/src/main/resources/mapper/business/BusinessAnalysisMapper.xml new file mode 100644 index 00000000..03e43ab0 --- /dev/null +++ b/lxk-service/src/main/resources/mapper/business/BusinessAnalysisMapper.xml @@ -0,0 +1,7 @@ + + + + +