fix-月度成本分析,车系占比、消耗top10、采购占比
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -81,4 +81,7 @@ public class AccessorySelfAddRequest implements Serializable {
|
||||
|
||||
@ApiModelProperty(value = "排序")
|
||||
private Integer sort;
|
||||
|
||||
@ApiModelProperty(value = "车系id")
|
||||
private Integer modelId;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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()));
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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不能为空");
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user