xuhy
2024-09-26 76699e910ca78a400c0bcdbaa7c175248f9589d0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderSaleServiceImpl.java
@@ -6,16 +6,14 @@
import com.ruoyi.common.constant.OrderNumConstants;
import com.ruoyi.common.utils.CodeGenerateUtils;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.*;
import com.ruoyi.system.dto.CheckoutDTO;
import com.ruoyi.system.dto.TOrderSaleDTO;
import com.ruoyi.system.mapper.TOrderSaleGoodsMapper;
import com.ruoyi.system.mapper.TOrderSaleMapper;
import com.ruoyi.system.query.*;
import com.ruoyi.system.service.TGoodsService;
import com.ruoyi.system.service.TGoodsTypeService;
import com.ruoyi.system.service.TOrderSaleGoodsService;
import com.ruoyi.system.service.TOrderSaleService;
import com.ruoyi.system.service.*;
import com.ruoyi.system.vo.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -44,32 +42,43 @@
    @Autowired
    private TOrderSaleGoodsService orderSaleGoodsService;
    @Autowired
    private TOrderStockGoodsService orderStockGoodsService;
    @Autowired
    private TOrderSaleGoodsMapper orderSaleGoodsMapper;
    @Autowired
    private TGoodsTypeService goodsTypeService;
    @Autowired
    private TGoodsService goodsService;
    @Override
    public void add(TOrderSaleDTO dto) {
        // 查询菜品分类
        List<TGoodsType> list1 = goodsTypeService.list();
//        List<TGoodsType> list1 = goodsTypeService.list();
        // 销售单号
        dto.setOrderNum(OrderNumConstants.SALE + CodeGenerateUtils.generateVolumeSn());
        List<TOrderSaleGoods> orderSaleGoods = dto.getOrderSaleGoods();
        BigDecimal sum = orderSaleGoods.stream().map(TOrderSaleGoods::getGoodsSalePrice).reduce(BigDecimal::add).get();
        BigDecimal sum = BigDecimal.ZERO;
        for (TOrderSaleGoods orderSaleGood : orderSaleGoods) {
            sum = sum.add(orderSaleGood.getThisSalePrice().multiply(new BigDecimal(orderSaleGood.getGoodsCount())));
        }
        dto.setOrderMoney(sum);
        this.save(dto);
        // 查询进货数据
        List<TOrderStockGoods> orderStockGoodsList = orderStockGoodsService.getListByTimeAndShopId(DateUtils.localDateToString(dto.getOrderTime()), dto.getShopId());
        // 添加商品
        orderSaleGoods.forEach(orderSaleGoods1 -> {
            orderSaleGoods1.setOrderId(dto.getId());
            orderSaleGoods1.setId(null);
            TOrderStockGoods orderStockGoods = orderStockGoodsList.stream().filter(m -> m.getGoodsNum().equals(orderSaleGoods1.getGoodsNum())).findFirst().orElse(null);
            if(Objects.nonNull(orderStockGoods)){
                orderSaleGoods1.setGoodsCostPrice(orderStockGoods.getThisCostPrice());
            }else {
                orderSaleGoods1.setGoodsCostPrice(BigDecimal.ZERO);
            }
        });
        orderSaleGoodsService.saveBatch(orderSaleGoods);
    }
    @Override
    public PageInfo<TOrderSaleVO> pageList(TOrderSaleQuery query) {
        if(Objects.nonNull(query.getStartTime()) && Objects.nonNull(query.getEndTime())){
        if(StringUtils.isEmpty(query.getStartTime()) && StringUtils.isEmpty(query.getEndTime())){
            if(Objects.nonNull(query.getTimeType())){
                LocalDateTime startTime = null;
                LocalDateTime endTime = null;
@@ -109,10 +118,13 @@
                List<TOrderSaleGoods> collect = list1.stream().filter(m -> m.getOrderId().equals(e.getId())).collect(Collectors.toList());
                if(!CollectionUtils.isEmpty(collect)){
                    BigDecimal goodsAmount = BigDecimal.ZERO;
                    Integer count = 0;
                    for (TOrderSaleGoods tOrderSaleGoods : collect) {
                        goodsAmount = goodsAmount.add(tOrderSaleGoods.getThisSalePrice().multiply(new BigDecimal(tOrderSaleGoods.getGoodsCount())));
                        count = count+tOrderSaleGoods.getGoodsCount();
                    }
                    e.setGoodsAmount(goodsAmount);
                    e.setGoodsCount(count);
                    e.setOrderSaleGoods(collect);
                }
            });
@@ -122,8 +134,42 @@
    }
    @Override
    public AmountSumVO amountSum(TOrderMealQuery query) {
        return this.baseMapper.amountSum(query);
    public AmountSumVO amountSum(TOrderSaleQuery query) {
        if(StringUtils.isEmpty(query.getStartTime()) && StringUtils.isEmpty(query.getEndTime())){
            if(Objects.nonNull(query.getTimeType())){
                LocalDateTime startTime = null;
                LocalDateTime endTime = null;
                switch (query.getTimeType()){
                    case 1:
                        // 今日
                        startTime = DateUtils.getDayStart(LocalDateTime.now());
                        endTime = DateUtils.getDayEnd(LocalDateTime.now());
                        break;
                    case 2:
                        // 昨日
                        startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(1));
                        endTime = DateUtils.getDayEnd(LocalDateTime.now().minusDays(1));
                        break;
                    case 3:
                        // 近7天
                        startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(7));
                        endTime = DateUtils.getDayEnd(LocalDateTime.now());
                        break;
                    case 4:
                        // 近30天
                        startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(30));
                        endTime = DateUtils.getDayEnd(LocalDateTime.now());
                        break;
                }
                query.setStartTime(DateUtils.localDateTimeToDate(startTime));
                query.setEndTime(DateUtils.localDateTimeToDate(endTime));
            }
        }
        AmountSumVO amountSumVO = this.baseMapper.amountSum(query);
        if(amountSumVO.getObligation().compareTo(BigDecimal.ZERO) < 0){
            amountSumVO.setObligation(BigDecimal.ZERO);
        }
        return amountSumVO;
    }
    @Override
@@ -133,7 +179,10 @@
                .add(salesVolumeVO.getMoneyPay()).add(salesVolumeVO.getAliPay()));
        // 查询成本
        List<TOrderSale> list = this.list(Wrappers.lambdaQuery(TOrderSale.class)
                .eq(TOrderSale::getShopId, query.getShopId()));
                .eq(TOrderSale::getShopId, query.getShopId())
                .ge(TOrderSale::getOrderTime, query.getStartTime())
                .le(TOrderSale::getOrderTime, query.getEndTime())
                .eq(TOrderSale::getStatus,2));
        List<Long> ids = list.stream().map(TOrderSale::getId).collect(Collectors.toList());
        if(!CollectionUtils.isEmpty(ids)){
            BigDecimal costTotal = orderSaleGoodsService.costTotal(ids);
@@ -160,33 +209,35 @@
    @Override
    public List<TOrderSaleVO> exportOrderSale(TOrderMealQuery query) {
        if(Objects.nonNull(query.getTimeType())){
            LocalDateTime startTime = null;
            LocalDateTime endTime = null;
            switch (query.getTimeType()){
                case 1:
                    // 今日
                    startTime = DateUtils.getDayStart(LocalDateTime.now());
                    endTime = DateUtils.getDayEnd(LocalDateTime.now());
                    break;
                case 2:
                    // 昨日
                    startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(1));
                    endTime = DateUtils.getDayEnd(LocalDateTime.now().minusDays(1));
                    break;
                case 3:
                    // 近7天
                    startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(7));
                    endTime = DateUtils.getDayEnd(LocalDateTime.now());
                    break;
                case 4:
                    // 近30天
                    startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(30));
                    endTime = DateUtils.getDayEnd(LocalDateTime.now());
                    break;
        if(StringUtils.isEmpty(query.getStartTime()) && StringUtils.isEmpty(query.getEndTime())){
            if(Objects.nonNull(query.getTimeType())){
                LocalDateTime startTime = null;
                LocalDateTime endTime = null;
                switch (query.getTimeType()){
                    case 1:
                        // 今日
                        startTime = DateUtils.getDayStart(LocalDateTime.now());
                        endTime = DateUtils.getDayEnd(LocalDateTime.now());
                        break;
                    case 2:
                        // 昨日
                        startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(1));
                        endTime = DateUtils.getDayEnd(LocalDateTime.now().minusDays(1));
                        break;
                    case 3:
                        // 近7天
                        startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(7));
                        endTime = DateUtils.getDayEnd(LocalDateTime.now());
                        break;
                    case 4:
                        // 近30天
                        startTime = DateUtils.getDayStart(LocalDateTime.now().minusDays(30));
                        endTime = DateUtils.getDayEnd(LocalDateTime.now());
                        break;
                }
                query.setStartTime(DateUtils.localDateTimeToDate(startTime));
                query.setEndTime(DateUtils.localDateTimeToDate(endTime));
            }
            query.setStartTime(DateUtils.localDateTimeToDate(startTime));
            query.setEndTime(DateUtils.localDateTimeToDate(endTime));
        }
        List<TOrderSaleVO> list = this.baseMapper.exportOrderSale(query);
        List<Long> ids = list.stream().map(TOrderSaleVO::getId).collect(Collectors.toList());
@@ -207,7 +258,7 @@
    @Override
    public Map<String, Double> getDataGeneratorSaleDetail(TDataGeneratorSaleQuery query) {
        if(Objects.nonNull(query.getStartTime()) && Objects.nonNull(query.getEndTime())){
        if(StringUtils.isEmpty(query.getStartTime()) && StringUtils.isEmpty(query.getEndTime())){
            if(Objects.nonNull(query.getTimeType())){
                LocalDateTime startTime = null;
                LocalDateTime endTime = null;
@@ -288,6 +339,9 @@
        orderSale.setPayType(dto.getPayType());
        orderSale.setPayMoney(dto.getPayMoney());
        orderSale.setStatus(2);
        this.updateById(orderSale);
    }
@@ -319,11 +373,35 @@
        List<TOrderSale> orderSales = this.list(Wrappers.lambdaQuery(TOrderSale.class)
                .in(TOrderSale::getGeneratorId, ids));
        for (TDataGeneratorVO tDataGeneratorVO : list) {
            if(!CollectionUtils.isEmpty(orderSales)){
                BigDecimal money = orderSales.stream().map(TOrderSale::getPayMoney).reduce(BigDecimal::add).get();
                tDataGeneratorVO.setTotalRevenue(money);
            List<TOrderSale> collect = orderSales.stream().filter(e -> e.getGeneratorId().equals(tDataGeneratorVO.getId())).collect(Collectors.toList());
            BigDecimal money = BigDecimal.ZERO;
            if(!CollectionUtils.isEmpty(collect)){
                money = collect.stream().map(TOrderSale::getPayMoney).reduce(BigDecimal::add).get();
            }
            tDataGeneratorVO.setTotalRevenue(money);
        }
        return list;
    }
    @Override
    public ProfitDetailsVO profitDetails(ProfitDetailsQuery query) {
        ProfitDetailsVO profitDetailsVO = new ProfitDetailsVO();
        // 查询商品盈利明细
        PageInfo<GoodsProfitVO> pageInfo = new PageInfo<>(query.getPageNum(),query.getPageSize());
        List<GoodsProfitVO> list = this.baseMapper.profitDetails(query,pageInfo);
        pageInfo.setRecords(list);
        profitDetailsVO.setGoodsProfitVOS(pageInfo);
        // 统计商品金额
        Map<String,Double> map = this.baseMapper.profitDetailsStatistics(query);
        profitDetailsVO.setTotalProfits(new BigDecimal(map.get("totalProfits").toString()));
        profitDetailsVO.setTotalCosts(new BigDecimal(map.get("totalCosts").toString()));
        profitDetailsVO.setTotalSales(new BigDecimal(map.get("totalSales").toString()));
        return profitDetailsVO;
    }
    @Override
    public List<GoodsProfitVO> profitDetailsExport(ProfitDetailsQuery query) {
        return this.baseMapper.profitDetailsExport(query);
    }
}