Merge remote-tracking branch 'origin/test' into test

This commit is contained in:
2024-09-26 15:29:37 +08:00
17 changed files with 351 additions and 612 deletions

View File

@@ -20,13 +20,10 @@ import java.util.Map;
public interface SummaryService {
Map<String,Object> trade(BaseQueryDto param);
// SummaryVO selectSummary(Integer shop);
Map<String,Object> selectSummaryDate(Integer shopId, Integer day);
Map<String,Object> productSaleDate(Integer shopId, Integer day,Integer page,Integer size);
Map<String,Object> selectSummaryToday(Integer shopId);
Map<String,Object> selectSummaryAmount(Integer shopId, Integer day);
Map<String,Object> selectSummaryProduct(Integer shopId, Integer day,Integer page,Integer size);
Map<String,Object> selectSummaryPayType(Integer shopId, Integer day);

View File

@@ -29,7 +29,6 @@ import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.persistence.Tuple;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
@@ -71,6 +70,7 @@ public class SummaryServiceImpl implements SummaryService {
if (ObjectUtil.isNull(param.getShopId())) {
throw new BadRequestException("参数不合法");
}
Map<String, Object> result = new HashMap<>();
Map<String, Object> sale = new HashMap<>();
Map<String, Object> vip = new HashMap<>();
@@ -83,7 +83,8 @@ public class SummaryServiceImpl implements SummaryService {
//会员 充值金额 inAmount /退款金额 outAmount /会员消费金额 useAmount /会员消费笔数 useNum
Map<String, Object> flowMap = tbShopUserFlowMapper.tradeIndexFlow(param.getShopId(), DateUtil.getStrTime(param.getStartTime()), DateUtil.getStrTime(param.getEndTime()));
// 新增会员数
Integer newFlow = tbShopUserFlowMapper.tradeIndexNewFlow(param.getShopId(), DateUtil.getStrTime(param.getStartTime()), DateUtil.getStrTime(param.getEndTime()));
Integer newFlow = tbShopUserRepository.newFlow(param.getShopId().toString(), DateUtil.getStrTime(param.getStartTime()), DateUtil.getStrTime(param.getEndTime()));
// Integer newFlow = tbShopUserFlowMapper.tradeIndexNewFlow(param.getShopId(), DateUtil.getStrTime(param.getStartTime()), DateUtil.getStrTime(param.getEndTime()));
//台桌数
int tables = tbShopTableRepository.countAllByShopId(param.getShopId());
//收款金额
@@ -96,14 +97,55 @@ public class SummaryServiceImpl implements SummaryService {
sale.put("inAmount", flowMap.get("inAmount")); //会员 充值金额
sale.put("outAmount", flowMap.get("outAmount"));//会员 退款金额
sale.put("incomeAmountAll",incomeAmount.add(new BigDecimal(flowMap.get("inAmount").toString())));//总实收 销售实收+会员实收
sale.put("incomeAmountAll",incomeAmount);//总实收 销售实收
List<TbOrderPayCountVo> payCountVos = initPaysCount();
List<TbOrderPayCountVo> payCounts = tbOrderInfoRepository.queryTbOrderPayCount(
param.getShopId().toString(), null, param.getStartTime().getTime(), param.getEndTime().getTime());
Map<String, BigDecimal> payCountMap = payCounts.stream()
.collect(Collectors.toMap(
TbOrderPayCountVo::getPayType,
vo -> {
BigDecimal payAmount = new BigDecimal(vo.getPayAmount().toString());
BigDecimal saveAmount = new BigDecimal(vo.getSaveAmount().toString());
return payAmount.subtract(saveAmount);
},
BigDecimal::add
));
BigDecimal vipSaveAmount = tbShopUserFlowService.sumUserFlowAmountByConditions(
param.getShopId().longValue(), DateUtil.getStrTime(param.getStartTime()), DateUtil.getStrTime(param.getEndTime()));
for (TbOrderPayCountVo payCountVo : payCountVos) {
BigDecimal payAmount = new BigDecimal(payCountVo.getPayAmount().toString());
switch (payCountVo.getPayType()){
case "微信小程序":
payCountVo.setPayAmount(payAmount.add(payCountMap.get("wx_lite")));
break;
case "支付宝小程序":
payCountVo.setPayAmount(payAmount.add(payCountMap.get("ali_lite")));
break;
case "主扫收款":
payCountVo.setPayAmount(payAmount.add(payCountMap.get("scanCode")));
break;
case "收款码收款":
payCountVo.setPayAmount(payAmount.add(payCountMap.get("ALIPAY")).add(payCountMap.get("WECHAT")));
break;
case "现金":
payCountVo.setPayAmount(payAmount.add(payCountMap.get("cash")));
break;
case "会员":
payCountVo.setPayAmount(payAmount.add(payCountMap.get("deposit")));
break;
case "充值":
payCountVo.setPayAmount(payAmount.add(vipSaveAmount));
break;
}
}
sale.put("payCount",payCountVos);
result.put("sale",sale);
vip.put("useAmount", flowMap.get("useAmount"));//会员消费金额
vip.put("newFlow",newFlow);//新增会员数
vip.put("useNum",flowMap.get("useNum"));//会员消费笔数
result.put("vip",vip);
BigDecimal saleAmount = new BigDecimal(orderMap.get("saleAmount").toString()).add(refundAmount);
BigDecimal saleAmount = new BigDecimal(orderMap.get("saleAmount").toString()).subtract(new BigDecimal(orderMap.get("saveAmount").toString()));
//客单价
if(saleAmount.compareTo(BigDecimal.ZERO) == 0){
count.put("unitPrice",BigDecimal.ZERO);
@@ -122,103 +164,23 @@ public class SummaryServiceImpl implements SummaryService {
return result;
}
public List<TbOrderPayCountVo> initPaysCount(){
List<TbOrderPayCountVo> payCountVos = new ArrayList<>();
payCountVos.add(new TbOrderPayCountVo("https://cashier-oss.oss-cn-beijing.aliyuncs.com/static/wx.png","微信小程序","1",BigDecimal.ZERO));
payCountVos.add(new TbOrderPayCountVo("https://cashier-oss.oss-cn-beijing.aliyuncs.com/static/ali.png","支付宝小程序","1",BigDecimal.ZERO));
payCountVos.add(new TbOrderPayCountVo("https://cashier-oss.oss-cn-beijing.aliyuncs.com/static/scan.png","主扫收款","1",BigDecimal.ZERO));
payCountVos.add(new TbOrderPayCountVo("https://cashier-oss.oss-cn-beijing.aliyuncs.com/static/bscan.png","收款码收款","1",BigDecimal.ZERO));
payCountVos.add(new TbOrderPayCountVo("https://cashier-oss.oss-cn-beijing.aliyuncs.com/static/cash.png","现金","1",BigDecimal.ZERO));
payCountVos.add(new TbOrderPayCountVo("https://cashier-oss.oss-cn-beijing.aliyuncs.com/static/vipIn.png","充值","1",BigDecimal.ZERO));
// payCountVos.add(new TbOrderPayCountVo("","会员支付","1",BigDecimal.ZERO));
return payCountVos;
};
// @Override
// public SummaryVO selectSummary(Integer shopId) {
// SummaryVO summaryVO = new SummaryVO();
// //支付笔数,
// Tuple result = tbOrderInfoRepository.countByShopId(shopId.toString());
// summaryVO.setPaymentsNumber(result.get(0, Long.class) == null ? 0L : result.get(0, Long.class));
// summaryVO.setTotalSales(result.get(1, BigDecimal.class) == null ? new BigDecimal("0") : result.get(1, BigDecimal.class));
// if (summaryVO.getPaymentsNumber() == 0) {
// summaryVO.setAverageSales(new BigDecimal("0"));
// } else {
// summaryVO.setAverageSales(summaryVO.getTotalSales().divide(new BigDecimal(summaryVO.getPaymentsNumber()), 2, RoundingMode.DOWN));
// }
// //用户数
// Tuple count = tbShopUserRepository.searchByCount(shopId.toString());
// summaryVO.setTotalUser(count == null ? 0L : count.get(0, Long.class));
// //支付笔数柱形图
// List<Object[]> objects = tbOrderInfoRepository.sumByDateOrderNum(shopId.toString(), DateUtil.getDate30DaysAgo(), DateUtil.getDayEnd());
// List<CountDateVO> countDateList = new ArrayList<>();
// for (Object[] o : objects) {
// CountDateVO countDateVO = new CountDateVO();
// BigInteger integers = (BigInteger) o[0];
// countDateVO.setCount(new BigDecimal(integers.toString()));
// countDateVO.setTradeDay((String) o[1]);
// countDateList.add(countDateVO);
// }
// //填充日期
// Map<String, CountDateVO> dataMap = new HashMap<>();
// for (CountDateVO entry : countDateList) {
// String tradeDay = entry.getTradeDay();
// BigDecimal countOrder = entry.getCount();
// dataMap.put(tradeDay, new CountDateVO(tradeDay, countOrder));
// }
// // 获取今天的日期
// LocalDate today = LocalDate.now();
// // 定义日期格式
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// // 转换为字符串
// List<CountDateVO> countDateLists = new ArrayList<>();
// for (int i = 0; i < 30; i++) {
// LocalDate tradeDayLocalDate = today.minusDays(i);
// String tradeDayString = tradeDayLocalDate.format(formatter);
// CountDateVO countDateVO;
// // 检查数据Map中是否存在该日期的数据
// if (dataMap.containsKey(tradeDayString)) {
// countDateVO = dataMap.get(tradeDayString);
// } else {
// // 如果不存在则创建新的SumDateVO对象amount设为0
// countDateVO = new CountDateVO(tradeDayString, BigDecimal.ZERO);
// }
// // 将SumDateVO对象添加到列表中
// countDateLists.add(countDateVO);
// }
// countDateLists.sort((a, b) -> a.getTradeDay().compareTo(b.getTradeDay()));
// summaryVO.setCountDateList(countDateLists);
// //访问量
// Tuple tuple = tbTokenRepository.countByAccountId(shopId);
// summaryVO.setTotalVisits(tuple == null ? 0L : tuple.get(0, Long.class));
// //访问量柱状图
// List<Object[]> objectsVisits = tbTokenRepository.countByMonth(shopId, DateUtil.getDate30DaysAgo(), DateUtil.getDayEnd());
// List<CountVisitsVO> visitsList = new ArrayList<>();
// for (Object[] o : objectsVisits) {
// CountVisitsVO countDateVO = new CountVisitsVO();
// countDateVO.setCount((BigInteger) o[0]);
// countDateVO.setTradeDay((String) o[1]);
// visitsList.add(countDateVO);
// }
// //填充日期
// Map<String, CountVisitsVO> dataVisitsMap = new HashMap<>();
// for (CountVisitsVO entry : visitsList) {
// String tradeDay = entry.getTradeDay();
// BigInteger countOrder = entry.getCount();
// dataVisitsMap.put(tradeDay, new CountVisitsVO(tradeDay, countOrder));
// }
// // 转换为字符串
// List<CountVisitsVO> countVisitsLists = new ArrayList<>();
// for (int i = 0; i < 30; i++) {
// LocalDate tradeDayLocalDate = today.minusDays(i);
// String tradeDayString = tradeDayLocalDate.format(formatter);
// CountVisitsVO countDateVO;
// // 检查数据Map中是否存在该日期的数据
// if (dataVisitsMap.containsKey(tradeDayString)) {
// countDateVO = dataVisitsMap.get(tradeDayString);
// } else {
// // 如果不存在则创建新的SumDateVO对象amount设为0
// countDateVO = new CountVisitsVO(tradeDayString, BigInteger.ZERO);
// }
// // 将SumDateVO对象添加到列表中
// countVisitsLists.add(countDateVO);
// }
// countVisitsLists.sort((a, b) -> a.getTradeDay().compareTo(b.getTradeDay()));
// summaryVO.setVisitsCountList(countVisitsLists);
// return summaryVO;
// }
@Override
public Map<String, Object> selectSummaryDate(Integer shopId, Integer day) {
public Map<String, Object> productSaleDate(Integer shopId, Integer day,Integer page,Integer size) {
Pageable pageable = PageRequest.of(page, size);
Date startTime = new Date();
Date endTime = new Date();
if (day == 7) {
@@ -235,86 +197,18 @@ public class SummaryServiceImpl implements SummaryService {
endTime = DateUtil.getDayEnd();
}
HashMap<String, Object> map = new HashMap<>();
Tuple tuple = detailRepository.sumByShopId(shopId, startTime, endTime);
List<Object[]> objects = detailRepository.sumByShopIdGroup(shopId, startTime, endTime);
//List<Object[]> objects = shopUserDutyDetailRepository.searchByDutyGroup(shopId, DateUtil.getDate30DaysAgo(), DateUtil.getDayEnd());
List<CountDateVO> numList = new ArrayList<>();
for (Object[] o : objects) {
CountDateVO countDateVO = new CountDateVO();
BigDecimal integers = (BigDecimal) o[0];
countDateVO.setCount(new BigDecimal(integers.toString()));
Date date = (Date) o[2];
countDateVO.setTradeDay(date.toString());
numList.add(countDateVO);
}
List<Object[]> objects2 = tbOrderInfoRepository.queryTbOrderPaySumByDay(shopId.toString(), startTime, endTime);
List<CountDateVO> amountList = new ArrayList<>();
for (Object[] o : objects2) {
CountDateVO countDateVO = new CountDateVO();
countDateVO.setCount((BigDecimal) o[0]);
countDateVO.setTradeDay((String) o[1]);
amountList.add(countDateVO);
}
map.put("productCount", tuple == null ? 0 : tuple.get(0, BigDecimal.class));
map.put("productSum", tuple == null ? 0 : tuple.get(1, BigInteger.class));
map.put("numList", numList);
map.put("amountList", amountList);
Page<TbOrderSalesCountByDayVo> tbOrderSalesCountByDayVos = detailRepository.queryTbOrderSalesCountByDay(shopId, null, null, startTime, endTime,pageable);
TbOrderSalesCountByDayVo tbOrderSalesCountByDayVo = detailRepository.queryTbOrderSalesCountByDaysummaryCount(shopId, null, null, startTime, endTime);
TbOrderPayCountVo zong =new TbOrderPayCountVo("el-icon-coin","总金额","1",tbOrderSalesCountByDayVo.getSalesAmount());
TbOrderPayCountVo xiaoliang =new TbOrderPayCountVo("el-icon-goods","销售量","0",tbOrderSalesCountByDayVo.getSalesNum());
List<CountStockByDayVo> countStockByDayVos = tbOrderDetailRepository.countStockByDay(shopId, startTime, endTime);
map.put("productCount", xiaoliang);
map.put("productSum", zong);
map.put("countList", countStockByDayVos) ;
map.put("productList", tbOrderSalesCountByDayVos);
return map;
}
@Override
public Map<String, Object> selectSummaryProduct(Integer shopId, Integer day, Integer currentPage, Integer currentSize) {
//根据时间商品排行
currentPage = (currentPage - 1) * currentSize;
HashMap<String, Object> map = new HashMap<>();
Date startTime;
Date endTime;
if (day == 7) {
startTime = DateUtil.getDate7DaysAgo();
endTime = DateUtil.getDayEnd();
} else if (day == 30) {
startTime = DateUtil.getDate30DaysAgo();
endTime = DateUtil.getDayEnd();
} else if (day == 360) {
startTime = DateUtil.getBeginDayOfYear();
endTime = DateUtil.getEndDayOfYear();
} else if (day == 1) {
startTime = DateUtil.getDayBegin();
log.info("1天时间" + startTime.toString());
endTime = DateUtil.getDayEnd();
log.info("1天时间末" + endTime.toString());
} else {
throw new BadRequestException("日期有误");
}
Pageable pageable = PageRequest.of(0, 5);
List<Object[]> objects = tbOrderInfoRepository.queryTbOrderPayCountByDayExt(shopId, startTime, endTime, currentPage, currentSize);
List<ProductExtVO> list = new ArrayList<>();
for (Object[] o : objects) {
ProductExtVO productVO = new ProductExtVO();
productVO.setProductId((BigInteger) o[0]);
productVO.setProductName((String) o[1]);
productVO.setProductNum((BigDecimal) o[2]);
productVO.setAmount((BigDecimal) o[3]);
list.add(productVO);
}
//分页数据
Tuple tuple1 = detailRepository.searchCount(shopId, startTime, endTime);
//销售数量
Tuple payCount = detailRepository.sumByShopId(shopId, startTime, endTime);
//销售金额
Long startTimeLong = DateUtil.convertDateToTimestamp(startTime);
Long endTimeLong = DateUtil.convertDateToTimestamp(endTime);
Tuple paySum = tbOrderInfoRepository.queryPaySumByDayAll(shopId.toString(), startTimeLong, endTimeLong);
map.put("productCount", payCount == null ? 0 : payCount.get(0, BigDecimal.class));
map.put("productSum", paySum == null ? 0 : paySum.get(0, BigDecimal.class));
map.put("totalProduct", list);
map.put("total", tuple1 == null ? 0 : tuple1.get(0, BigInteger.class));
return map;
}
@Override
public Map<String, Object> selectSummaryAmount(Integer shopId, Integer day) {
@@ -373,18 +267,6 @@ public class SummaryServiceImpl implements SummaryService {
return map;
}
@Override
public Map<String, Object> selectSummaryToday(Integer shopId) {
HashMap<String, Object> map = new HashMap<>();
Tuple tuple = tbOrderInfoRepository.sumByShopIdToday(shopId.toString(), DateUtil.getDayBegin(), DateUtil.getDayEnd());
map.put("paymentsNumberToday", tuple == null ? 0L : tuple.get(0, BigInteger.class));
map.put("totalSalesToday", tuple == null ? new BigDecimal("0") : tuple.get(1, BigDecimal.class));
Tuple tuple1 = tbShopUserRepository.searchByCountToday(shopId.toString(), DateUtil.getTodayStartTimestamp(), DateUtil.getTodayEndTimestamp());
map.put("userToday", tuple1.get(0, Long.class));
Tuple tupleToday = tbTokenRepository.countByAccountId(shopId, DateUtil.getDayBegin(), DateUtil.getDayEnd());
map.put("totalVisitsToday", tupleToday == null ? 0 : tupleToday.get(0, Long.class));
return map;
}
@Override
public Map<String, Object> selectSummaryPayType(Integer shopId, Integer day) {
@@ -416,142 +298,94 @@ public class SummaryServiceImpl implements SummaryService {
}
@Override
public List<TbOrderPayCountVo> summaryCount(ShopSummaryDto summaryDto) {
List<TbOrderPayCountVo> list = new ArrayList<>();
summaryDto.setStartTime(DateUtil.toDate(DateUtil.fromTimeStamp(1704038400L)));
summaryDto.setEndTime(new Date());
TbOrderSalesCountByDayVo tbOrderSalesCountByDayVo = detailRepository.queryTbOrderSalesCountByDaysummaryCount(Integer.valueOf(summaryDto.getShopId()), summaryDto.getCateId(), summaryDto.getProName(), summaryDto.getStartTime(), summaryDto.getEndTime());
TbOrderPayCountVo zongShuLiang = new TbOrderPayCountVo("el-icon-goods", "总数量", "0", tbOrderSalesCountByDayVo.getSalesNum() + tbOrderSalesCountByDayVo.getRefNum());
TbOrderPayCountVo zong = new TbOrderPayCountVo("el-icon-coin", "总金额", "1", tbOrderSalesCountByDayVo.getSalesAmount());
TbOrderPayCountVo tuidan = new TbOrderPayCountVo("el-icon-goods", "退单量", "0", tbOrderSalesCountByDayVo.getRefNum());
TbOrderPayCountVo tuikuan = new TbOrderPayCountVo("el-icon-money", "退款金额", "1", tbOrderSalesCountByDayVo.getRefAmount());
// TbOrderPayCountVo xiaoliang =new TbOrderPayCountVo("el-icon-goods","销售量","0",tbOrderSalesCountByDayVo.getSalesNum());
list.add(zong);
list.add(tuikuan);
// list.add(xiaoliang);
list.add(zongShuLiang);
list.add(tuidan);
return list;
}
@Override
public <T> Page<T> selectSummaryByDay(ShopSummaryDto summaryDto, Integer page, Integer size) {
Pageable pageable = PageRequest.of(page, size);
if (StringUtils.isBlank(summaryDto.getCateId())) {
summaryDto.setCateId(null);
}
if (summaryDto.getType() != null && summaryDto.getType() == 1) {//金额
Long start = 1704038400000L;
Long end = Instant.now().toEpochMilli();
if (summaryDto.getStartTime() != null && summaryDto.getEndTime() != null) {
start = summaryDto.getStartTime().getTime();
end = summaryDto.getEndTime().getTime();
}
Page<T> tPage = (Page<T>) tbOrderInfoRepository.queryTbOrderPayCountByDay(summaryDto.getShopId(), start, end, pageable);
tPage.getContent().forEach(t -> {
TbOrderPayCountByDayVo tbOrderPayCountByDayVo = (TbOrderPayCountByDayVo) t;
BigDecimal recharge = tbShopUserFlowService.sumUserFlowAmountByConditions(Long.valueOf(summaryDto.getShopId()),
tbOrderPayCountByDayVo.getTradeDay() + " 00:00:00",
tbOrderPayCountByDayVo.getTradeDay() + " 23:59:59");
tbOrderPayCountByDayVo.setRecharge(recharge);
BigDecimal decimal = tbOrderInfoRepository.queryRefundOrderAmountByTradeDay(summaryDto.getShopId(), tbOrderPayCountByDayVo.getTradeDay());
tbOrderPayCountByDayVo.setRefund(decimal == null ? new BigDecimal("0.00") : decimal);
BigDecimal total = (BigDecimal) tbOrderPayCountByDayVo.getTotal();
BigDecimal refund = (BigDecimal) tbOrderPayCountByDayVo.getRefund();
tbOrderPayCountByDayVo.setTotal(total.subtract(refund));
});
return tPage;
} else {//销量
if (summaryDto.getStartTime() == null || summaryDto.getEndTime() == null) {
summaryDto.setStartTime(DateUtil.toDate(DateUtil.fromTimeStamp(1704038400L)));
summaryDto.setEndTime(new Date());
}
return (Page<T>) detailRepository.queryTbOrderSalesCountByDay(Integer.valueOf(summaryDto.getShopId()), summaryDto.getCateId(), summaryDto.getProName(), summaryDto.getStartTime(), summaryDto.getEndTime(), pageable);
if (summaryDto.getStartTime() == null || summaryDto.getEndTime() == null) {
summaryDto.setStartTime(DateUtil.toDate(DateUtil.fromTimeStamp(1704038400L)));
summaryDto.setEndTime(new Date());
}
Page<TbOrderSalesCountByDayV2Vo> products = detailRepository.queryTbOrderSalesCountByProduct(Integer.valueOf(summaryDto.getShopId()), summaryDto.getCateId(), summaryDto.getProName(), summaryDto.getStartTime(), summaryDto.getEndTime(), pageable);
for (TbOrderSalesCountByDayV2Vo product : products) {
List<TbOrderSalesCountByDayV2Vo> skus = detailRepository.queryTbOrderSalesCountBySku(Integer.valueOf(summaryDto.getShopId()), product.getProductId(), summaryDto.getStartTime(), summaryDto.getEndTime());
product.setSkus(skus);
}
return (Page<T>)products;
}
@Override
public void download(ShopSummaryDto summaryDto, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
if (StringUtils.isBlank(summaryDto.getCateId())) {
summaryDto.setCateId(null);
}
if (summaryDto.getStartTime() == null || summaryDto.getEndTime() == null) {
summaryDto.setStartTime(DateUtil.toDate(DateUtil.fromTimeStamp(1704038400L)));
summaryDto.setEndTime(new Date());
}
if (summaryDto.getType() != null && summaryDto.getType() == 1) {//金额
Long start = 1704038400000L;
Long end = Instant.now().toEpochMilli();
if (summaryDto.getStartTime() != null && summaryDto.getEndTime() != null) {
start = summaryDto.getStartTime().getTime();
end = summaryDto.getEndTime().getTime();
List<TbOrderSalesCountByDayV2Vo> products = detailRepository.queryTbOrderSalesCountByProduct(Integer.valueOf(summaryDto.getShopId()), summaryDto.getCateId(), summaryDto.getProName(), summaryDto.getStartTime(), summaryDto.getEndTime());
for (TbOrderSalesCountByDayV2Vo product : products) {
if(product.getTypeEnum().equals("sku")){
List<TbOrderSalesCountByDayV2Vo> skus = detailRepository.queryTbOrderSalesCountBySku(Integer.valueOf(summaryDto.getShopId()), product.getProductId(), summaryDto.getStartTime(), summaryDto.getEndTime());
product.setSkus(skus);
}
List<TbOrderPayCountByDayVo> tbOrderPayCountByDayVos = tbOrderInfoRepository.queryTbOrderPayCountByDay(summaryDto.getShopId(), start, end);
for (TbOrderPayCountByDayVo all : tbOrderPayCountByDayVos) {
}
for (TbOrderSalesCountByDayV2Vo product : products) {
if(product.getTypeEnum().equals("sku")){
for (TbOrderSalesCountByDayV2Vo skus : product.getSkus()) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("商品分类", product.getCateName());
map.put("商品名称", product.getName());
map.put("商品规格", StringUtils.isBlank(skus.getName()) ? "" : skus.getName());
map.put("销 售 额", skus.getSalesAmount());
map.put("退 单 额", skus.getRefAmount().compareTo(BigDecimal.ZERO) == 0 ? skus.getRefAmount() : "-" + skus.getRefAmount());
map.put("实际销量", skus.getSalesNum());
map.put("退 单 量", skus.getRefNum());
list.add(map);
}
}else {
Map<String, Object> map = new LinkedHashMap<>();
map.put("总金额", all.getTotal());
map.put("现金", all.getCash());
map.put("储值卡支付", all.getDeposit());
map.put("扫码支付", all.getScanCode());
map.put("微信小程序支付", all.getWxLite());
map.put("日期", all.getTradeDay());
map.put("商品分类", product.getCateName());
map.put("商品名称", product.getName());
map.put("商品规格", "");
map.put("销 售 额", product.getSalesAmount());
map.put("退 单 额", product.getRefAmount().compareTo(BigDecimal.ZERO) == 0 ? product.getRefAmount() : "-" + product.getRefAmount());
map.put("实际销量", product.getSalesNum());
map.put("退 单 量", product.getRefNum());
list.add(map);
}
} else {//销量
if (summaryDto.getStartTime() == null || summaryDto.getEndTime() == null) {
summaryDto.setStartTime(DateUtil.toDate(DateUtil.fromTimeStamp(1704038400L)));
summaryDto.setEndTime(new Date());
}
List<TbOrderSalesCountByDayVo> tbOrderSalesCountByDayVos = detailRepository
.queryTbOrderSalesCountByDay(Integer.valueOf(summaryDto.getShopId()), summaryDto.getCateId(), summaryDto.getProName(), summaryDto.getStartTime(), summaryDto.getEndTime());
tbOrderSalesCountByDayVos.forEach(all -> {
Map<String, Object> map = new LinkedHashMap<>();
map.put("商品分类", all.getCateName());
map.put("商品名称", all.getProductName());
map.put("单 位", all.getUnitName());
map.put("商品规格", StringUtils.isBlank(all.getProductSkuName()) ? "" : all.getProductSkuName());
map.put("单 价", all.getPrice());
map.put("销 售 额", all.getSalesAmount());
map.put("退 单 额", all.getRefAmount().compareTo(BigDecimal.ZERO) == 0 ? all.getRefAmount() : "-" + all.getRefAmount());
map.put("总 销 量", all.getNum() - all.getRefNum());
map.put("实际销量", all.getSalesNum());
map.put("退 单 量", all.getRefNum());
list.add(map);
});
}
FileUtil.downloadExcel(list, response);
}
@Override
public List<TbOrderPayCountVo> summaryCount(ShopSummaryDto summaryDto) {
List<TbOrderPayCountVo> list = new ArrayList<>();
Long start = 1704038400000L;
Long end = Instant.now().toEpochMilli();
if (summaryDto.getStartTime() != null || summaryDto.getEndTime() != null) {
start = summaryDto.getStartTime().getTime();
end = summaryDto.getEndTime().getTime();
} else {
summaryDto.setStartTime(DateUtil.toDate(DateUtil.fromTimeStamp(1704038400L)));
summaryDto.setEndTime(new Date());
}
if (summaryDto.getType() != null && summaryDto.getType() == 1) {
TbOrderPayCountVo payCount = tbOrderInfoRepository.queryOrderPayCount(summaryDto.getShopId(), start, end);
TbOrderPayCountVo refCount = tbOrderInfoRepository.queryTbOrderRefund(summaryDto.getShopId(), null,start, end);
payCount.setPayAmount(new BigDecimal(payCount.getPayAmount().toString()).subtract(new BigDecimal(refCount.getPayAmount().toString())));
payCount.setIcon("el-icon-coin");
list.add(payCount);
TbOrderPayCountVo cashCount = tbOrderInfoRepository.queryOrderPayCash(summaryDto.getShopId(), start, end);
cashCount.setIcon("el-icon-circle-check");
list.add(cashCount);
refCount.setPayType("退款金额");
refCount.setIcon("el-icon-money");
list.add(refCount);
TbOrderSalesCountByDayVo numCount = detailRepository.queryTbOrderSalesCount(Integer.valueOf(summaryDto.getShopId()), summaryDto.getStartTime(), summaryDto.getEndTime());
TbOrderPayCountVo salesNum =new TbOrderPayCountVo("el-icon-goods","销售量","0",numCount.getSalesNum()-numCount.getRefNum());
TbOrderPayCountVo refNum =new TbOrderPayCountVo("el-icon-goods","退单量","0",numCount.getRefNum());
list.add(salesNum);
list.add(refNum);
}else {
TbOrderSalesCountByDayVo tbOrderSalesCountByDayVo = detailRepository.queryTbOrderSalesCountByDaysummaryCount(Integer.valueOf(summaryDto.getShopId()), summaryDto.getCateId(), summaryDto.getProName(), summaryDto.getStartTime(), summaryDto.getEndTime());
TbOrderPayCountVo zong =new TbOrderPayCountVo("el-icon-coin","总金额","1",tbOrderSalesCountByDayVo.getSalesAmount());
TbOrderPayCountVo tuikuan =new TbOrderPayCountVo("el-icon-money","退款金额","1",tbOrderSalesCountByDayVo.getRefAmount());
TbOrderPayCountVo xiaoliang =new TbOrderPayCountVo("el-icon-goods","销售量","0",tbOrderSalesCountByDayVo.getSalesNum());
TbOrderPayCountVo tuidan =new TbOrderPayCountVo("el-icon-goods","退单量","0",tbOrderSalesCountByDayVo.getRefNum());
list.add(zong);
list.add(tuikuan);
list.add(xiaoliang);
list.add(tuidan);
}
return list;
}
@Override
public List<ShopTableSaleInfoVo> selectSummaryTable(Integer shopId, Date startTime, Date endTime) {

View File

@@ -355,12 +355,12 @@ public class StockServiceImpl implements StockService {
TbProduct product = new TbProduct();
for (StockUpdateValueVO updateValueVO : updateValueVOs) {
if (!updateValueVO.isSku()) {
if (product.getId()!=null) {
if (product.getId() == null) {
product = tbProductRepository.getById(Integer.valueOf(updateValueVO.getId()));
}
productUp(updateValueVO, product);
} else {
if (product.getId()!=null) {
if (product.getId() == null) {
product = tbProductRepository.selectBySkuId(Integer.valueOf(updateValueVO.getId()));
}
productSkuUp(updateValueVO, product);