fix-月度成本分析,车系占比、消耗top10、采购占比

This commit is contained in:
xl
2024-07-26 11:41:24 +08:00
parent fd01f520d1
commit 33148af266
25 changed files with 394 additions and 27 deletions

View File

@@ -1,10 +1,12 @@
package com.zbkj.admin.controller.merchant;
import cn.hutool.core.util.StrUtil;
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.response.MonthlyAnalysisConsumeResponse;
import com.zbkj.common.response.MonthlyAnalysisResponse;
import com.zbkj.common.response.SeriesResponse;
import com.zbkj.common.result.CommonResult;
import com.zbkj.common.utils.SecurityUtil;
import io.swagger.annotations.Api;
@@ -29,6 +31,31 @@ public class MerchantMonthlyAnalysis {
public CommonResult<MonthlyAnalysisResponse> indexDate(@RequestBody BusinessAnalysisRequest request) {
SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser();
request.setMerId(systemAdmin.getMerId());
if (StrUtil.isNotBlank(request.getDateLimit())) {
request.setDateLimit("preMonth");
}
return CommonResult.success(homeService.getMonthlyAnalysis(request));
}
@ApiOperation(value = "车系占比和消耗占比")
@RequestMapping(value = "/pie/chart", method = RequestMethod.POST)
public CommonResult<MonthlyAnalysisConsumeResponse> pieChart(@RequestBody BusinessAnalysisRequest request) {
SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser();
request.setMerId(systemAdmin.getMerId());
if (StrUtil.isNotBlank(request.getDateLimit())) {
request.setDateLimit("preMonth");
}
return CommonResult.success(homeService.getMonthlyAnalysisPiecCart(request));
}
@ApiOperation(value = "采购占比")
@RequestMapping(value = "/purchase", method = RequestMethod.POST)
public CommonResult<SeriesResponse> purchase(@RequestBody BusinessAnalysisRequest request) {
SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser();
request.setMerId(systemAdmin.getMerId());
if (StrUtil.isNotBlank(request.getDateLimit())) {
request.setDateLimit("preMonth");
}
return CommonResult.success(homeService.getMonthlyAnalysisPurchase(request));
}
}

View File

@@ -1,8 +1,11 @@
package com.zbkj.admin.controller.platform;
import cn.hutool.core.util.StrUtil;
import com.zbkj.admin.service.HomeService;
import com.zbkj.common.request.BusinessAnalysisRequest;
import com.zbkj.common.response.MonthlyAnalysisConsumeResponse;
import com.zbkj.common.response.MonthlyAnalysisResponse;
import com.zbkj.common.response.SeriesResponse;
import com.zbkj.common.result.CommonResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -24,9 +27,36 @@ public class PlatformMonthlyAnalysis {
@ApiOperation(value = "月度成本分析格子图")
@RequestMapping(value = "/lattice", method = RequestMethod.POST)
public CommonResult<MonthlyAnalysisResponse> indexDate(@RequestBody BusinessAnalysisRequest request) {
if (request.getMerId() == null) {
request.setMerId(0);
if (request.getMerId() == null || request.getMerId() == 0) {
return CommonResult.success();
}
if (StrUtil.isNotBlank(request.getDateLimit())) {
request.setDateLimit("preMonth");
}
return CommonResult.success(homeService.getMonthlyAnalysis(request));
}
@ApiOperation(value = "车系占比和消耗占比")
@RequestMapping(value = "/pie/chart", method = RequestMethod.POST)
public CommonResult<MonthlyAnalysisConsumeResponse> pieChart(@RequestBody BusinessAnalysisRequest request) {
if (request.getMerId() == null || request.getMerId() == 0) {
return CommonResult.success();
}
if (StrUtil.isNotBlank(request.getDateLimit())) {
request.setDateLimit("preMonth");
}
return CommonResult.success(homeService.getMonthlyAnalysisPiecCart(request));
}
@ApiOperation(value = "采购占比")
@RequestMapping(value = "/purchase", method = RequestMethod.POST)
public CommonResult<SeriesResponse> purchase(@RequestBody BusinessAnalysisRequest request) {
if (request.getMerId() == null || request.getMerId() == 0) {
return CommonResult.success();
}
if (StrUtil.isNotBlank(request.getDateLimit())) {
request.setDateLimit("preMonth");
}
return CommonResult.success(homeService.getMonthlyAnalysisPurchase(request));
}
}

View File

@@ -3,7 +3,6 @@ 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.LinkedHashMap;
import java.util.List;
@@ -72,4 +71,8 @@ public interface HomeService {
LinkedHashMap<String, BusinessAnalysis> getLineChart(BusinessAnalysisRequest request);
MonthlyAnalysisResponse getMonthlyAnalysis(BusinessAnalysisRequest request);
MonthlyAnalysisConsumeResponse getMonthlyAnalysisPiecCart(BusinessAnalysisRequest request);
SeriesResponse getMonthlyAnalysisPurchase(BusinessAnalysisRequest request);
}

View File

@@ -90,6 +90,8 @@ public class HomeServiceImpl implements HomeService {
private CarReservationInfoService carReservationInfoService;
@Autowired
private BusinessAnalysisService businessAnalysisService;
@Autowired
private AccessoryProcureService accessoryProcureService;
/**
* 首页数据
@@ -260,6 +262,21 @@ public class HomeServiceImpl implements HomeService {
return response;
}
@Override
public MonthlyAnalysisConsumeResponse getMonthlyAnalysisPiecCart(BusinessAnalysisRequest request) {
MonthlyAnalysisConsumeResponse response = new MonthlyAnalysisConsumeResponse();
//车系占比
response.setPie(carReservationInfoService.getMonthlyAnalysisPiecCart(request));
//配件消耗前十
response.setQuantity(carReservationInfoService.fetchTopConsumptionPartsList(request));
return response;
}
@Override
public SeriesResponse getMonthlyAnalysisPurchase(BusinessAnalysisRequest request) {
return accessoryProcureService.purchase(request);
}
public BrokenLineResponse boardInfo(String dateLat, Integer merId) {
//工单数据
Integer totalRepairOrderNum = carReservationOrderService.getTotalRepairOrderNum(dateLat, merId);

View File

@@ -1,9 +1,6 @@
package com.zbkj.common.model.accessory;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -140,4 +137,7 @@ public class AccessorySelf implements Serializable {
@ApiModelProperty(value = "库存")
private Integer sort;
@ApiModelProperty(value = "车系id")
private Integer modelId;
}

View File

@@ -81,4 +81,7 @@ public class AccessorySelfAddRequest implements Serializable {
@ApiModelProperty(value = "排序")
private Integer sort;
@ApiModelProperty(value = "车系id")
private Integer modelId;
}

View File

@@ -0,0 +1,22 @@
package com.zbkj.common.response;
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.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "MonthlyAnalysisConsumeResponse", description = "MonthlyAnalysisConsumeResponse")
public class MonthlyAnalysisConsumeResponse implements Serializable {
@ApiModelProperty(value = "车系占比饼图")
private List<PieChartResponse> pie;
@ApiModelProperty(value = "配件消耗前十")
private List<PieChartResponse> quantity;
}

View File

@@ -0,0 +1,35 @@
package com.zbkj.common.response;
import cn.hutool.core.util.NumberUtil;
import com.zbkj.common.exception.LxkException;
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;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "PieChartResponse", description = "支付配置响应对象")
public class PieChartResponse implements Serializable {
private static final long serialVersionUID = 7282892323898493847L;
@ApiModelProperty(value = "名称")
private String name;
@ApiModelProperty(value = "")
private BigDecimal values;
// 添加数据
public void addData(String name, Object value) {
if (!NumberUtil.isNumber(value.toString())) {
throw new LxkException("数据格式错误,请检查数据格式");
}
this.name = name;
this.values = new BigDecimal(value.toString());
}
}

View File

@@ -0,0 +1,29 @@
package com.zbkj.common.response;
import cn.hutool.core.util.NumberUtil;
import com.zbkj.common.exception.LxkException;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "SeriesResponse", description = "SeriesResponse")
public class SeriesResponse {
private List<String> labels = new ArrayList<>();
private List<BigDecimal> values = new ArrayList<>();
public void addData(String label, Object value) {
if (!NumberUtil.isNumber(value.toString())) {
throw new LxkException("数据格式错误,请检查数据格式");
}
this.labels.add(label);
this.values.add(new BigDecimal(value.toString()));
}
}

View File

@@ -70,4 +70,10 @@ public class AccessorySelfListResponse implements Serializable {
@ApiModelProperty(value = "更新时间")
private Date updateTime;
@ApiModelProperty(value = "车系id")
private Integer modelId;
@ApiModelProperty(value = "车系名称")
private String modelName;
}

View File

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.zbkj.common.model.accessory.AccessoryProcureItem;
import com.zbkj.common.request.accessory.AccessoryProcureSearchRequest;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@@ -25,4 +26,6 @@ public interface AccessoryProcureItemService extends IService<AccessoryProcureIt
Boolean addNumIn(Integer id, Integer num);
List<String> getByAccessoryName(AccessoryProcureSearchRequest request, Integer merId);
Map<Integer, BigDecimal> queryAccessoryPrice(List<String> psnList);
}

View File

@@ -3,13 +3,12 @@ package com.zbkj.service.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;
import com.zbkj.common.model.accessory.AccessoryProcure;
import com.zbkj.common.request.BusinessAnalysisRequest;
import com.zbkj.common.request.PageParamRequest;
import com.zbkj.common.request.accessory.AccessoryProcureNewlyRequest;
import com.zbkj.common.request.accessory.AccessoryProcureRequest;
import com.zbkj.common.request.accessory.AccessoryProcureSearchRequest;
import com.zbkj.common.vo.MyRecord;
import java.util.List;
import com.zbkj.common.response.SeriesResponse;
/**
@@ -41,4 +40,6 @@ public interface AccessoryProcureService extends IService<AccessoryProcure> {
Boolean createNewlyProcure(AccessoryProcureNewlyRequest request);
Boolean shipments(Integer id);
SeriesResponse purchase(BusinessAnalysisRequest request);
}

View File

@@ -10,6 +10,7 @@ import com.zbkj.common.request.accessory.AccessorySearchRequest;
import com.zbkj.common.request.accessory.AccessorySubStockRequest;
import com.zbkj.common.response.accessory.AdminAccessoryListResponse;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -142,4 +143,6 @@ public interface AccessoryService extends IService<Accessory> {
* @return
*/
Map<Integer, Accessory> getListAll(Integer type, Integer merId);
List<Accessory> getListByAccId(Collection<Integer> keySet,Boolean isFilter);
}

View File

@@ -8,6 +8,7 @@ import com.zbkj.common.request.car.CarModelRequest;
import com.zbkj.common.request.car.CarModelSearchRequest;
import com.zbkj.common.response.car.CarModelListResponse;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -70,5 +71,5 @@ public interface CarModelService extends IService<CarModel> {
CarModel getByBrandIdException(Integer modelId, Integer brandId);
Map<Integer, CarModel> getMapByIds(List<Integer> modelIds);
Map<Integer, CarModel> getMapByIds(Collection<Integer> modelIds);
}

View File

@@ -72,4 +72,6 @@ public interface CarReservationInfoProjectAccessoryService extends IService<CarR
* @return
*/
List<CarReservationInfoProjectAccessory> getByOrderIds(Collection<Integer> orderIds, Collection<Integer> accessoryIds);
Map<Integer, Integer> queryAccessoryUsageByOrderIds(List<Integer> orderIds);
}

View File

@@ -3,6 +3,7 @@ package com.zbkj.service.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zbkj.common.model.car.CarReservationInfo;
import com.zbkj.common.request.BusinessAnalysisRequest;
import com.zbkj.common.response.PieChartResponse;
import com.zbkj.common.vo.BusinessAnalysisVo;
import java.util.List;
@@ -31,4 +32,8 @@ public interface CarReservationInfoService extends IService<CarReservationInfo>
BusinessAnalysisVo getProcure(BusinessAnalysisRequest request);
BusinessAnalysisVo getCostRate(BusinessAnalysisRequest request);
List<PieChartResponse> getMonthlyAnalysisPiecCart(BusinessAnalysisRequest request);
List<PieChartResponse> fetchTopConsumptionPartsList(BusinessAnalysisRequest request);
}

View File

@@ -41,4 +41,12 @@ public interface CarReservationProjectPackageItemAccessoryService extends IServi
* @return
*/
List<CarReservationProjectPackageItemAccessory> getByOrderIds(Collection<Integer> orderIds, Collection<Integer> accList);
/**
* 根据订单id查询
*
* @param orderIds 订单id
* @return 返回配件使用数量
*/
Map<Integer, Integer> queryAccessoryUsageByOrderIds(Collection<Integer> orderIds);
}

View File

@@ -14,6 +14,7 @@ import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zbkj.common.exception.LxkException;
import com.zbkj.common.model.accessory.AccessorySelf;
import com.zbkj.common.model.car.CarModel;
import com.zbkj.common.page.CommonPage;
import com.zbkj.common.request.PageParamRequest;
import com.zbkj.common.request.accessory.AccessoryAddStockRequest;
@@ -23,6 +24,7 @@ import com.zbkj.common.response.accessory.AccessorySelfListResponse;
import com.zbkj.common.utils.pingyin.PinYin4JUtils;
import com.zbkj.service.dao.accessory.AccessorySelfDao;
import com.zbkj.service.service.AccessorySelfService;
import com.zbkj.service.service.CarModelService;
import com.zbkj.service.service.SystemAttachmentService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -31,6 +33,8 @@ import org.springframework.transaction.support.TransactionTemplate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author xl
@@ -46,6 +50,8 @@ public class AccessorySelfServiceImpl extends ServiceImpl<AccessorySelfDao, Acce
private TransactionTemplate transactionTemplate;
@Autowired
private SystemAttachmentService systemAttachmentService;
@Autowired
private CarModelService carModelService;
@Override
public PageInfo<AccessorySelfListResponse> getPlatformAdminList(AccessorySelfSearchRequest request, PageParamRequest pageParamRequest) {
@@ -72,10 +78,16 @@ public class AccessorySelfServiceImpl extends ServiceImpl<AccessorySelfDao, Acce
if (CollUtil.isEmpty(accessories)) {
return CommonPage.copyPageInfo(accessoryPage, CollUtil.newArrayList());
}
List<Integer> midList = accessories.stream().map(AccessorySelf::getModelId).collect(Collectors.toList());
Map<Integer, CarModel> mapModel = carModelService.getMapByIds(midList);
List<AccessorySelfListResponse> responses = new ArrayList<>();
for (AccessorySelf accessory : accessories) {
AccessorySelfListResponse response = new AccessorySelfListResponse();
BeanUtils.copyProperties(accessory, response);
if (CollUtil.isNotEmpty(mapModel) && mapModel.get(accessory.getModelId()) != null) {
CarModel carModel = mapModel.get(accessory.getModelId());
response.setModelName(carModel.getName());
}
responses.add(response);
}
// 多条sql查询处理分页正确
@@ -116,6 +128,12 @@ public class AccessorySelfServiceImpl extends ServiceImpl<AccessorySelfDao, Acce
@Override
public boolean savePlatfrom(AccessorySelfAddRequest request) {
if (request.getModelId() != null) {
CarModel carModel = carModelService.getById(request.getModelId());
if (ObjectUtil.isNull(carModel)) {
throw new LxkException("车系信息不存在");
}
}
AccessorySelf accessory = new AccessorySelf();
BeanUtils.copyProperties(request, accessory);
accessory.setId(null);
@@ -156,6 +174,12 @@ public class AccessorySelfServiceImpl extends ServiceImpl<AccessorySelfDao, Acce
@Override
public boolean updatePlatform(AccessorySelfAddRequest requst) {
if (requst.getModelId() != null) {
CarModel carModel = carModelService.getById(requst.getModelId());
if (ObjectUtil.isNull(carModel)) {
throw new LxkException("车系信息不存在");
}
}
if (ObjectUtil.isNull(requst.getId())) {
throw new LxkException("配件ID不能为空");
}

View File

@@ -39,10 +39,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionTemplate;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -659,5 +656,17 @@ public class AccessoryServiceImpl extends ServiceImpl<AccessoryDao, Accessory> i
Map<Integer, Accessory> map = list.stream().collect(Collectors.toMap(Accessory::getId, a -> a, (o, n) -> o));
return map;
}
@Override
public List<Accessory> getListByAccId(Collection<Integer> keySet, Boolean isFilter) {
List<Accessory> accessoryList = listByIds(keySet);
if (CollUtil.isEmpty(accessoryList)) {
return CollUtil.newArrayList();
}
if (!isFilter) {
return accessoryList;
}
return accessoryList.stream().filter(a -> a.getMerId() != null && a.getMerId() > 0).collect(Collectors.toList());
}
}

View File

@@ -15,11 +15,13 @@ import com.zbkj.common.model.accessory.AccessoryProcureItem;
import com.zbkj.common.model.accessory.AccessorySelf;
import com.zbkj.common.model.merchant.Merchant;
import com.zbkj.common.page.CommonPage;
import com.zbkj.common.request.BusinessAnalysisRequest;
import com.zbkj.common.request.PageParamRequest;
import com.zbkj.common.request.accessory.AccessoryProcureItemRequest;
import com.zbkj.common.request.accessory.AccessoryProcureNewlyRequest;
import com.zbkj.common.request.accessory.AccessoryProcureRequest;
import com.zbkj.common.request.accessory.AccessoryProcureSearchRequest;
import com.zbkj.common.response.SeriesResponse;
import com.zbkj.common.utils.LxkDateUtil;
import com.zbkj.common.utils.LxkUtil;
import com.zbkj.common.utils.JsonUtils;
@@ -269,5 +271,28 @@ public class AccessoryServiceProcureImpl extends ServiceImpl<AccessoryProcureDao
up.setIsReceipt(Boolean.TRUE);
return updateById(up);
}
@Override
public SeriesResponse purchase(BusinessAnalysisRequest request) {
SeriesResponse resp = new SeriesResponse();
LambdaQueryWrapper<AccessoryProcure> lqw = new LambdaQueryWrapper<>();
lqw.eq(AccessoryProcure::getMerId, request.getMerId());
if (StrUtil.isNotBlank(request.getDateLimit())) {
DateLimitUtilVo dateLimitUtilVo = LxkDateUtil.getDateLimit(request.getDateLimit());
lqw.between(AccessoryProcure::getCreateTime, dateLimitUtilVo.getStartTime(), dateLimitUtilVo.getEndTime());
}
lqw.eq(AccessoryProcure::getPaid, Boolean.TRUE);
List<AccessoryProcure> list = list(lqw);
if (CollUtil.isEmpty(list)) {
return resp;
}
List<String> psnList = list.stream().map(AccessoryProcure::getProcureSn).collect(Collectors.toList());
Map<Integer, BigDecimal> accessoryPrice = accessoryProcureItemService.queryAccessoryPrice(psnList);
List<AccessorySelf> selfList = accessorySelfService.listByIds(accessoryPrice.keySet());
for (AccessorySelf self : selfList) {
resp.addData(self.getName(), accessoryPrice.get(self.getId()));
}
return resp;
}
}

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
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.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zbkj.common.exception.LxkException;
@@ -16,11 +17,11 @@ import com.zbkj.service.dao.accessory.AccessoryProcureItemDao;
import com.zbkj.service.service.AccessoryProcureItemService;
import com.zbkj.service.service.AccessorySelfService;
import com.zbkj.service.service.AccessoryService;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -132,5 +133,19 @@ public class AccessoryServiceProcureItemImpl extends ServiceImpl<AccessoryProcur
}
return items.stream().map(AccessoryProcureItem::getProcureSn).collect(Collectors.toList());
}
@Override
public Map<Integer, BigDecimal> queryAccessoryPrice(List<String> psnList) {
QueryWrapper<AccessoryProcureItem> lqw = new QueryWrapper<>();
lqw.select("accsssory_self_id,SUM(procure_price*num) as procure_price");
lqw.in("procure_sn", psnList);
lqw.groupBy("accsssory_self_id");
lqw.last("limit 10");
List<AccessoryProcureItem> list = list(lqw);
if (CollUtil.isEmpty(list)) {
return CollUtil.newHashMap();
}
return list.stream().collect(Collectors.toMap(AccessoryProcureItem::getAccsssorySelfId, AccessoryProcureItem::getProcurePrice));
}
}

View File

@@ -27,6 +27,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionTemplate;
import javax.annotation.Resource;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -222,7 +223,7 @@ public class CarModelServiceImpl extends ServiceImpl<CarModelDao, CarModel> impl
}
@Override
public Map<Integer, CarModel> getMapByIds(List<Integer> modelIds) {
public Map<Integer, CarModel> getMapByIds(Collection<Integer> modelIds) {
if (ObjectUtil.isEmpty(modelIds)) {
return null;
}

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
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.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -283,5 +284,23 @@ public class CarReservationInfoProjectAccessoryServiceImpl extends ServiceImpl<C
lqw.and(w -> w.in(CarReservationInfoProjectAccessory::getAccessoryId, accessoryIds).or().in(CarReservationInfoProjectAccessory::getAccessoryPickId, accessoryIds));
return list(lqw);
}
@Override
public Map<Integer, Integer> queryAccessoryUsageByOrderIds(List<Integer> orderIds) {
if (CollUtil.isEmpty(orderIds)) {
return CollUtil.newHashMap();
}
QueryWrapper<CarReservationInfoProjectAccessory> lqw = new QueryWrapper<>();
lqw.select(" CASE WHEN accessory_pick_id IS NOT NULL AND accessory_pick_id <> 0 THEN accessory_pick_id ELSE accessory_id END AS accessory_id, " +
"SUM(CASE WHEN picking_num IS NOT NULL AND picking_num <> 0 THEN picking_num ELSE num END) - SUM(COALESCE(retreat_num, 0)) AS num ");
lqw.in("car_reservation_order_id", orderIds);
lqw.groupBy("accessory_id");
List<CarReservationInfoProjectAccessory> list = list(lqw);
if (CollUtil.isEmpty(list)) {
return CollUtil.newHashMap();
}
return list.stream().collect(Collectors.toMap(CarReservationInfoProjectAccessory::getAccessoryId, CarReservationInfoProjectAccessory::getNum));
}
}

View File

@@ -14,6 +14,7 @@ import com.zbkj.common.constants.DateConstants;
import com.zbkj.common.model.accessory.Accessory;
import com.zbkj.common.model.car.*;
import com.zbkj.common.request.BusinessAnalysisRequest;
import com.zbkj.common.response.PieChartResponse;
import com.zbkj.common.utils.LxkDateUtil;
import com.zbkj.common.utils.LxkUtil;
import com.zbkj.common.vo.BusinessAnalysisVo;
@@ -25,8 +26,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -57,6 +57,8 @@ public class CarReservationInfoServiceImpl extends ServiceImpl<CarReservationInf
private CarReservationProjectPackageItemAccessoryService carReservationProjectPackageItemAccessoryService;
@Autowired
private CarReservationInfoProjectAccessoryService carReservationInfoProjectAccessoryService;
@Autowired
private CarModelService carModelService;
@Override
public CarReservationInfo getByReservationOrderId(Integer id) {
@@ -149,13 +151,6 @@ public class CarReservationInfoServiceImpl extends ServiceImpl<CarReservationInf
return vo;
}
public static void main(String[] args) {
BigDecimal detailTotalNumber = new BigDecimal(10);
BigDecimal totalNumber = new BigDecimal(10);
int x = LxkUtil.percentInstanceIntVal(detailTotalNumber, totalNumber);
System.out.println(x);
System.out.println(totalNumber.setScale(2, BigDecimal.ROUND_UP));
}
@Override
public BusinessAnalysisVo getProcure(BusinessAnalysisRequest request) {
@@ -203,6 +198,71 @@ public class CarReservationInfoServiceImpl extends ServiceImpl<CarReservationInf
return vo;
}
@Override
public List<PieChartResponse> getMonthlyAnalysisPiecCart(BusinessAnalysisRequest request) {
Map<Integer, Integer> accNumList = accessoriesConsumed(request);
if (CollUtil.isEmpty(accNumList)) {
return CollUtil.newArrayList();
}
//查询配件过滤车系为0
List<Accessory> listByAccId = accessoryService.getListByAccId(accNumList.keySet(), Boolean.TRUE);
Map<Integer, Integer> mergeMap = new HashMap<>();
//按车系组装数据
for (Accessory acc : listByAccId) {
Integer accValue = accNumList.get(acc.getId());
if (accValue != null) {
mergeMap.merge(acc.getMerId(), accValue, Integer::sum);
} else {
mergeMap.put(acc.getMerId(), 0);
}
}
Set<Integer> set = mergeMap.keySet();
Map<Integer, CarModel> carModelMap = carModelService.getMapByIds(set);
List<PieChartResponse> resp = new ArrayList<>(set.size());
for (Integer i : set) {
PieChartResponse pie = new PieChartResponse();
CarModel carModel = carModelMap.get(i);
if (carModel != null) {
pie.addData(carModel.getName(), mergeMap.get(i));
resp.add(pie);
}
}
resp.sort(Comparator.comparing(PieChartResponse::getValues).reversed());
return resp;
}
@Override
public List<PieChartResponse> fetchTopConsumptionPartsList(BusinessAnalysisRequest request) {
Map<Integer, Integer> accNumMap = accessoriesConsumed(request);
if (CollUtil.isEmpty(accNumMap)) {
return CollUtil.newArrayList();
}
List<Accessory> listByAccId = accessoryService.getListByAccId(accNumMap.keySet(), Boolean.FALSE);
List<PieChartResponse> resp = new ArrayList<>();
for (Accessory accessory : listByAccId) {
PieChartResponse pie = new PieChartResponse();
Integer num = accNumMap.get(accessory.getId());
if (num != null) {
pie.addData(accessory.getName(), num);
resp.add(pie);
}
}
return resp;
}
private Map<Integer, Integer> accessoriesConsumed(BusinessAnalysisRequest request) {
List<CarReservationOrder> list = carReservationOrderService.getSomeTimeOrder(request.getDateLimit(), request.getMerId(), null);
if (CollUtil.isEmpty(list)) {
return CollUtil.newHashMap();
}
List<Integer> orderIds = list.stream().map(CarReservationOrder::getId).collect(Collectors.toList());
Map<Integer, Integer> accList = carReservationProjectPackageItemAccessoryService.queryAccessoryUsageByOrderIds(orderIds);
Map<Integer, Integer> projectList = carReservationInfoProjectAccessoryService.queryAccessoryUsageByOrderIds(orderIds);
//合并统计的值
projectList.forEach((key, value) -> accList.merge(key, value, (v1, v2) -> (v1 + v2)));
return accList;
}
private CompletableFuture<BigDecimal> costRateTask(BusinessAnalysisRequest request, String type) {
return CompletableFuture.supplyAsync(() -> costRate(request.getDateLimit(), request.getMerId(), type), service);
}

View File

@@ -3,11 +3,13 @@ package com.zbkj.service.service.impl;
import cn.hutool.core.collection.CollUtil;
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.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zbkj.common.model.car.CarReservationProjectPackageItemAccessory;
import com.zbkj.common.request.accessory.AccessorySubStockRequest;
import com.zbkj.common.response.PieChartResponse;
import com.zbkj.service.dao.car.CarReservationProjectPackageItemAccessoryDao;
import com.zbkj.service.service.CarReservationProjectPackageItemAccessoryService;
import org.springframework.stereotype.Service;
@@ -71,5 +73,22 @@ public class CarReservationProjectPackageItemAccessoryServiceImpl extends Servic
lqw.in(CarReservationProjectPackageItemAccessory::getAccessoryId, accList);
return list(lqw);
}
@Override
public Map<Integer, Integer> queryAccessoryUsageByOrderIds(Collection<Integer> orderIds) {
if (CollUtil.isEmpty(orderIds)) {
return CollUtil.newHashMap();
}
QueryWrapper<CarReservationProjectPackageItemAccessory> lqw = new QueryWrapper<>();
lqw.select(" accessory_id, sum(num) as num");
lqw.in("car_reservation_order_id", orderIds);
lqw.groupBy("accessory_id");
List<CarReservationProjectPackageItemAccessory> list = list(lqw);
if (CollUtil.isEmpty(list)) {
return CollUtil.newHashMap();
}
Map<Integer, Integer> map = list.stream().collect(Collectors.toMap(CarReservationProjectPackageItemAccessory::getAccessoryId, CarReservationProjectPackageItemAccessory::getNum));
return map;
}
}