From ae4c93dd2e2aef79332360fb5dec13c5b2c961f3 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期二, 24 九月 2024 18:36:07 +0800
Subject: [PATCH] 修改接口

---
 ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java                          |    9 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockServiceImpl.java      |   31 ++
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TGoodsMapper.java                      |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOrderSaleController.java          |   11 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderSaleMapper.java                  |   25 ++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TGoodsController.java              |   34 ++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderSaleServiceImpl.java       |  125 +++++++---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java   |   97 ++++----
 ruoyi-system/src/main/resources/mapper/system/TOrderStockGoodsMapper.xml                  |    5 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TOrderSaleVO.java                          |    2 
 ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml                        |  103 ++++++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java          |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderMealServiceImpl.java       |   69 ++++-
 ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderSaleService.java                |   16 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataStatisticsController.java     |   75 +++--
 ruoyi-system/src/main/resources/mapper/system/TOrderMealMapper.xml                        |   13 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockGoodsServiceImpl.java |    6 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderStockGoodsMapper.java            |    9 
 ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderStockGoodsService.java          |   11 +
 ruoyi-system/src/main/resources/mapper/system/TOrderSaleGoodsMapper.xml                   |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/RoleInfoVO.java                            |    1 
 ruoyi-system/src/main/resources/mapper/system/TOrderMealGoodsMapper.xml                   |    1 
 22 files changed, 490 insertions(+), 161 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataStatisticsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataStatisticsController.java
index 05184d3..db4c50b 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataStatisticsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TDataStatisticsController.java
@@ -109,6 +109,7 @@
     @PostMapping(value = "/profitDetails")
     public AjaxResult<ProfitDetailsVO> profitDetails(@RequestBody ProfitDetailsQuery query) {
         Long objectId = tokenService.getLoginUser().getObjectId();
+        Integer roleType = tokenService.getLoginUser().getRoleType();
         query.setShopId(objectId);
         if(StringUtils.isEmpty(query.getStartTime()) && StringUtils.isEmpty(query.getEndTime())){
             if(Objects.nonNull(query.getTimeType())){
@@ -140,13 +141,20 @@
                 query.setEndTime(DateUtils.localDateTimeToDate(endTime));
             }
         }
-        return AjaxResult.success(orderMealService.profitDetails(query));
+        ProfitDetailsVO profitDetailsVO;
+        if(roleType.equals(2)){
+            profitDetailsVO = orderMealService.profitDetails(query);
+        }else {
+            profitDetailsVO = orderSaleService.profitDetails(query);
+        }
+        return AjaxResult.success(profitDetailsVO);
     }
 
     @ApiOperation( value = "盈利明细导出")
     @PostMapping(value = "/profitDetailsExport")
     public void profitDetailsExport(@RequestBody ProfitDetailsQuery query) {
         Long objectId = tokenService.getLoginUser().getObjectId();
+        Integer roleType = tokenService.getLoginUser().getRoleType();
         query.setShopId(objectId);
         if(StringUtils.isEmpty(query.getStartTime()) && StringUtils.isEmpty(query.getEndTime())){
 
@@ -179,7 +187,12 @@
                 query.setEndTime(DateUtils.localDateTimeToDate(endTime));
             }
         }
-        List<GoodsProfitVO> list  = orderMealService.profitDetailsExport(query);
+        List<GoodsProfitVO> list;
+        if(roleType.equals(2)){
+            list  = orderMealService.profitDetailsExport(query);
+        }else {
+            list  = orderSaleService.profitDetailsExport(query);
+        }
         Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), GoodsProfitVO.class, list);
         HttpServletResponse response = WebUtils.response();
         response.setContentType("application/vnd.ms-excel");
@@ -256,38 +269,35 @@
         Integer roleType = tokenService.getLoginUser().getRoleType();
         Long objectId = tokenService.getLoginUser().getObjectId();
         query.setShopId(objectId);
-        if(StringUtils.isEmpty(query.getStartTime()) && StringUtils.isEmpty(query.getEndTime())){
-
             if(Objects.isNull(query.getTimeType())){
                 query.setTimeType(3);
             }
-            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));
+        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));
         List<OrderTrendsVO> orderTrendsVOS;
         if(roleType == 2){
             orderTrendsVOS = orderMealService.orderingTrends(query);
@@ -342,9 +352,10 @@
         List<PersonnelStatisticsVO> personnelStatisticsVOS = orderMealService.personnelStatistics(query);
         personnelStatisticsAndSumVO.setPersonnelStatisticsVOS(personnelStatisticsVOS);
         if(!CollectionUtils.isEmpty(personnelStatisticsVOS)){
-            personnelStatisticsAndSumVO.setPersonCountSum(personnelStatisticsVOS.stream().filter(e->e.getPersonCount() != null).mapToInt(PersonnelStatisticsVO::getPersonCount).sum());
+            int sum = personnelStatisticsVOS.stream().filter(e -> e.getPersonCount() != null).mapToInt(PersonnelStatisticsVO::getPersonCount).sum();
+            personnelStatisticsAndSumVO.setPersonCountSum(sum);
             // 计算列表中平均金额乘以人数的总和
-            personnelStatisticsAndSumVO.setTotalMoney(personnelStatisticsVOS.stream().filter(e->e.getPersonCount() != null).mapToDouble(personnelStatisticsVO -> personnelStatisticsVO.getAvgAmount().doubleValue() * personnelStatisticsVO.getPersonCount()).sum());
+            personnelStatisticsAndSumVO.setTotalMoney(personnelStatisticsVOS.stream().filter(e->e.getPersonCount() != null).mapToDouble(personnelStatisticsVO -> (personnelStatisticsVO.getAvgAmount().doubleValue() * personnelStatisticsVO.getPersonCount()) / sum).sum());
         }
         return AjaxResult.success(personnelStatisticsAndSumVO);
     }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TGoodsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TGoodsController.java
index 853c4e5..809a87f 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TGoodsController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TGoodsController.java
@@ -4,13 +4,12 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.common.basic.PageInfo;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.CodeGenerateUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.framework.web.service.TokenService;
-import com.ruoyi.system.domain.TGoods;
-import com.ruoyi.system.domain.TGoodsType;
+import com.ruoyi.system.domain.*;
 import com.ruoyi.system.query.TGoodsQuery;
-import com.ruoyi.system.service.TGoodsService;
-import com.ruoyi.system.service.TGoodsTypeService;
+import com.ruoyi.system.service.*;
 import com.ruoyi.system.vo.TGoodsVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -36,12 +35,18 @@
     private final TGoodsService goodsService;
     private final TGoodsTypeService goodsTypeService;
     private final TokenService tokenService;
+    private final TOrderStockGoodsService orderStockGoodsService;
+    private final TOrderSaleGoodsService orderSaleGoodsService;
+    private final TOrderMealGoodsService orderMealGoodsService;
 
     @Autowired
-    public TGoodsController(TGoodsService goodsService, TGoodsTypeService goodsTypeService, TokenService tokenService) {
+    public TGoodsController(TGoodsService goodsService, TGoodsTypeService goodsTypeService, TokenService tokenService, TOrderStockGoodsService orderStockGoodsService, TOrderSaleGoodsService orderSaleGoodsService, TOrderMealGoodsService orderMealGoodsService) {
         this.goodsService = goodsService;
         this.goodsTypeService = goodsTypeService;
         this.tokenService = tokenService;
+        this.orderStockGoodsService = orderStockGoodsService;
+        this.orderSaleGoodsService = orderSaleGoodsService;
+        this.orderMealGoodsService = orderMealGoodsService;
     }
 
     /**
@@ -64,6 +69,7 @@
     @PostMapping(value = "/add")
     public AjaxResult<Boolean> add(@RequestBody TGoods dto) {
         dto.setShopId(tokenService.getLoginUser().getObjectId());
+        dto.setGoodsNum(CodeGenerateUtils.generateVolumeSn());
         return AjaxResult.success(goodsService.save(dto));
     }
 
@@ -73,6 +79,24 @@
     @ApiOperation( value = "修改商品管理")
     @PostMapping(value = "/update")
     public AjaxResult<Boolean> update(@RequestBody TGoods dto) {
+        // 判断是否修改了名称
+        TGoods goods = goodsService.getById(dto.getId());
+        if(!goods.getGoodsName().equals(dto.getGoodsName())){
+            List<TOrderStockGoods> orderStockGoods = orderStockGoodsService.list(Wrappers.lambdaQuery(TOrderStockGoods.class)
+                    .eq(TOrderStockGoods::getGoodsNum, goods.getGoodsNum()));
+            orderStockGoods.stream().forEach(tOrderStockGoods -> tOrderStockGoods.setGoodsNum(dto.getGoodsNum()));
+            orderStockGoodsService.updateBatchById(orderStockGoods);
+
+            List<TOrderMealGoods> orderMealGoods = orderMealGoodsService.list(Wrappers.lambdaQuery(TOrderMealGoods.class)
+                    .eq(TOrderMealGoods::getGoodsNum, goods.getGoodsNum()));
+            orderMealGoods.stream().forEach(tOrderMealGoods -> tOrderMealGoods.setGoodsNum(dto.getGoodsNum()));
+            orderMealGoodsService.updateBatchById(orderMealGoods);
+
+            List<TOrderSaleGoods> list = orderSaleGoodsService.list(Wrappers.lambdaQuery(TOrderSaleGoods.class)
+                    .eq(TOrderSaleGoods::getGoodsNum, goods.getGoodsNum()));
+            list.stream().forEach(tOrderSaleGoods -> tOrderSaleGoods.setGoodsNum(dto.getGoodsNum()));
+            orderSaleGoodsService.updateBatchById(list);
+        }
         return AjaxResult.success(goodsService.updateById(dto));
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOrderSaleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOrderSaleController.java
index 3509703..bdbf384 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOrderSaleController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TOrderSaleController.java
@@ -77,8 +77,9 @@
      */
     @ApiOperation( value = "查询销售金额统计")
     @PostMapping(value = "/amountSum")
-    public AjaxResult<AmountSumVO> amountSum(@RequestBody TOrderMealQuery query) {
+    public AjaxResult<AmountSumVO> amountSum(@RequestBody TOrderSaleQuery query) {
         query.setShopId(tokenService.getLoginUser().getObjectId());
+        orderSaleService.amountSum(query);
         return AjaxResult.success(orderSaleService.amountSum(query));
     }
 
@@ -94,6 +95,14 @@
         List<TOrderSaleGoods> list = orderSaleGoodsService.list(Wrappers.lambdaQuery(TOrderSaleGoods.class)
                 .eq(TOrderSaleGoods::getOrderId, orderSale.getId()));
         orderSaleVO.setOrderSaleGoods(list);
+        BigDecimal sum = BigDecimal.ZERO;
+        Integer count = 0;
+        for (TOrderSaleGoods tOrderSaleGoods : list) {
+            sum = sum.add(tOrderSaleGoods.getThisSalePrice().multiply(new BigDecimal(tOrderSaleGoods.getGoodsCount())));
+            count = count + tOrderSaleGoods.getGoodsCount();
+        }
+        orderSaleVO.setGoodsAmount(sum);
+        orderSaleVO.setGoodsCount(count);
         return AjaxResult.success(orderSaleVO);
     }
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
index 9598468..931eb31 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
@@ -123,6 +123,7 @@
         RoleInfoVO roleInfoVo = new RoleInfoVO();
         roleInfoVo.setRoleId(role.getRoleId());
         roleInfoVo.setRoleName(role.getRoleName());
+        roleInfoVo.setRemark(role.getRemark());
 
         // 获取当前角色的菜单列表
         List<SysMenu> menus = menuService.selectListByRoleId(roleId);
@@ -132,7 +133,7 @@
         List<Long> menusId = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList());
 
         // 获取当前的权限菜单(有层级)
-        List<SysMenu> levelMenus = roleService.getMenuLevelList(menusId);
+//        List<SysMenu> levelMenus = roleService.getMenuLevelList(menusId);
 
         roleInfoVo.setMenus(menusId);
         return AjaxResult.success(roleInfoVo);
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
index ed4057a..0bc9a85 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java
@@ -373,6 +373,15 @@
     public static LocalDate stringToLocalDate(String time) {
         return LocalDate.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
     }
+    /**
+     * 字符串转为localdate
+     *
+     * @param time localdate
+     * @return 字符串
+     */
+    public static LocalDateTime stringToLocalDateTime(String time) {
+        return LocalDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+    }
 
     /**
      * LocalDateTime转Date
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TGoodsMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TGoodsMapper.java
index 89f3185..f7bf9c3 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TGoodsMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TGoodsMapper.java
@@ -5,6 +5,7 @@
 import com.ruoyi.system.domain.TGoods;
 import com.ruoyi.system.query.TGoodsQuery;
 import com.ruoyi.system.vo.TGoodsVO;
+import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -17,6 +18,7 @@
  * @author xiaochen
  * @since 2024-08-14
  */
+@Mapper
 public interface TGoodsMapper extends BaseMapper<TGoods> {
 
     /**
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderSaleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderSaleMapper.java
index 09630e0..f29eade 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderSaleMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderSaleMapper.java
@@ -36,7 +36,7 @@
      * @param query
      * @return
      */
-    AmountSumVO amountSum(@Param("query") TOrderMealQuery query);
+    AmountSumVO amountSum(@Param("query") TOrderSaleQuery query);
 
     /**
      * 查询销售销售量统计
@@ -79,4 +79,27 @@
      * @return
      */
     List<TDataGeneratorVO> saleGeneratorListExport(@Param("query")TDataGeneratorQuery query);
+
+    /**
+     * 销售利润详情列表
+     * @param query
+     * @param pageInfo
+     * @return
+     */
+    List<GoodsProfitVO> profitDetails(@Param("query")ProfitDetailsQuery query, @Param("pageInfo")PageInfo<GoodsProfitVO> pageInfo);
+
+    /**
+     * 查询利润详情统计
+     * @param query
+     * @return
+     */
+    Map<String, Double> profitDetailsStatistics(@Param("query")ProfitDetailsQuery query);
+
+    /**
+     * 导出
+     * @param query
+     * @return
+     */
+    List<GoodsProfitVO> profitDetailsExport(@Param("query")ProfitDetailsQuery query);
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderStockGoodsMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderStockGoodsMapper.java
index 8613f69..a973873 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderStockGoodsMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TOrderStockGoodsMapper.java
@@ -1,10 +1,12 @@
 package com.ruoyi.system.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.system.domain.TOrderSaleGoods;
 import com.ruoyi.system.domain.TOrderStockGoods;
 import com.ruoyi.system.query.TDataGeneratorStockQuery;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -17,4 +19,11 @@
  */
 public interface TOrderStockGoodsMapper extends BaseMapper<TOrderStockGoods> {
 
+    /**
+     * 根据时间获取商品列表
+     * @param orderTime
+     * @param shopId
+     * @return
+     */
+    List<TOrderStockGoods> getListByTimeAndShopId(@Param("orderTime") String orderTime, @Param("shopId")Long shopId);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderSaleService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderSaleService.java
index 3571cd2..d42314a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderSaleService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderSaleService.java
@@ -40,7 +40,7 @@
      * @param query
      * @return
      */
-    AmountSumVO amountSum(TOrderMealQuery query);
+    AmountSumVO amountSum(TOrderSaleQuery query);
 
     /**
      * 查询销售销售量统计
@@ -102,4 +102,18 @@
      * @return
      */
     List<TDataGeneratorVO> saleGeneratorListExport(TDataGeneratorQuery query);
+
+    /**
+     * 盈利明细详情
+     * @param query
+     * @return
+     */
+    ProfitDetailsVO profitDetails(ProfitDetailsQuery query);
+
+    /**
+     * 明细导出
+     * @param query
+     * @return
+     */
+    List<GoodsProfitVO> profitDetailsExport(ProfitDetailsQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderStockGoodsService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderStockGoodsService.java
index d94f075..a35d2c0 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderStockGoodsService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TOrderStockGoodsService.java
@@ -1,9 +1,12 @@
 package com.ruoyi.system.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.domain.TOrderSaleGoods;
 import com.ruoyi.system.domain.TOrderStockGoods;
 import com.ruoyi.system.query.TDataGeneratorStockQuery;
 
+import java.time.LocalDate;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -16,4 +19,12 @@
  */
 public interface TOrderStockGoodsService extends IService<TOrderStockGoods> {
 
+    /**
+     * 查询下单时间和店铺的id
+     * @param orderTime
+     * @param shopId
+     * @return
+     */
+    List<TOrderStockGoods> getListByTimeAndShopId(String orderTime, Long shopId);
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java
index 1255135..8113736 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TDataGeneratorServiceImpl.java
@@ -298,9 +298,13 @@
             e.setGeneratorId(dataGenerator.getId());
             e.setOrderNum(OrderNumConstants.SALE + CodeGenerateUtils.generateVolumeSn());
             e.setIsCover(0);
+            e.setStatus(2);
         });
         List<TOrderSaleGoods> orderSaleGoods = orderSales.stream().map(TOrderSale::getOrderSaleGoods).flatMap(Collection::stream).collect(Collectors.toList());
-
+        TOrderStock orderStockLast = orderStockService.getOne(Wrappers.lambdaQuery(TOrderStock.class)
+                .eq(TOrderStock::getShopId, dto.getShopId())
+                .orderByDesc(TOrderStock::getStockTime)
+                .last("LIMIT 1"));
         // 生成进货数据
         List<TOrderStock> stockList = new ArrayList<>();
         stockDataSets.stream().sorted(Comparator.comparing(TStockDataSet::getStockDate));
@@ -342,45 +346,52 @@
                 stockList.add(orderStock);
 
             }else if(i==0 && Objects.nonNull(stockDataSet)){
-                // 第一次 第一次的进货时间为上一次的结束时间  开始时间为上一次的开始时间
-                LocalDate startTime1 = stockDataSet.getStockDate();
-                List<TOrderSale> collect = orderSales.stream().filter(e -> e.getOrderTime().compareTo(startTime) < 0).collect(Collectors.toList());
-                List<TOrderSaleGoods> orderSaleGoodsList = new ArrayList<>();
-                collect.forEach(e->orderSaleGoodsList.addAll(e.getOrderSaleGoods()));
-                // 查询上一次开始之后的订单数据
-                List<TOrderSale> orderSales1 = orderSaleService.list(new LambdaQueryWrapper<TOrderSale>().gt(TOrderSale::getOrderTime, startTime1));
-                List<Long> saleIds1 = orderSales1.stream().map(TOrderSale::getId).collect(Collectors.toList());
-                // 查询上一次的商品
-                List<TOrderSaleGoods> list = orderSaleGoodsService.list(new LambdaQueryWrapper<TOrderSaleGoods>().in(TOrderSaleGoods::getOrderId, saleIds1));
-                // 结合上次最后一次的数据
-                list.addAll(orderSaleGoodsList);
-                // 删除上一次的数据生成   新生成一条数据
-                TOrderStock orderStock = new TOrderStock();
-                orderStock.setStockNum(OrderNumConstants.STOCK + CodeGenerateUtils.generateVolumeSn());
-                orderStock.setStockTime(startTime);
-                orderStock.setIsCover(0);
-                orderStock.setGeneratorId(dataGenerator.getId());
-                orderStock.setShopId(dto.getShopId());
+                if(Objects.nonNull(orderStockLast)){
+                    // 查询商品进价
+                    List<TOrderStockGoods> orderStockGoodsList = orderStockGoodsService.list(Wrappers.lambdaQuery(TOrderStockGoods.class).eq(TOrderStockGoods::getOrderId, orderStockLast.getId()));
+                    // 第一次 第一次的进货时间为上一次的结束时间  开始时间为上一次的开始时间
+                    LocalDate startTime1 = stockDataSet.getStockDate();
+                    List<TOrderSale> collect = orderSales.stream().filter(e -> e.getOrderTime().compareTo(startTime) < 0).collect(Collectors.toList());
+                    List<TOrderSaleGoods> orderSaleGoodsList = new ArrayList<>();
+                    collect.forEach(e->orderSaleGoodsList.addAll(e.getOrderSaleGoods()));
+                    // 查询上一次开始之后的订单数据
+                    List<TOrderSale> orderSales1 = orderSaleService.list(new LambdaQueryWrapper<TOrderSale>().gt(TOrderSale::getOrderTime, startTime1));
+                    List<Long> saleIds1 = orderSales1.stream().map(TOrderSale::getId).collect(Collectors.toList());
+                    // 查询上一次的商品
+                    List<TOrderSaleGoods> list = orderSaleGoodsService.list(new LambdaQueryWrapper<TOrderSaleGoods>().in(TOrderSaleGoods::getOrderId, saleIds1));
+                    // 结合上次最后一次的数据
+                    list.addAll(orderSaleGoodsList);
+                    // 删除上一次的数据生成   新生成一条数据
+                    TOrderStock orderStock = new TOrderStock();
+                    orderStock.setStockNum(OrderNumConstants.STOCK + CodeGenerateUtils.generateVolumeSn());
+                    orderStock.setStockTime(orderStockLast.getStockTime());
+                    orderStock.setIsCover(0);
+                    orderStock.setGeneratorId(orderStockLast.getGeneratorId());
+                    orderStock.setShopId(dto.getShopId());
 
-                Map<String, List<TOrderSaleGoods>> goodsList = list.stream().collect(Collectors.groupingBy(TOrderSaleGoods::getGoodsName));
-                List<TOrderStockGoods> orderStockGoods = new ArrayList<>();
-                goodsList.forEach((k,v)->{
-                    TOrderStockGoods tOrderStockGoods = new TOrderStockGoods();
-                    tOrderStockGoods.setGoodsName(k);
-                    tOrderStockGoods.setGoodsNum(v.get(0).getGoodsNum());
-                    tOrderStockGoods.setCostPrice(v.get(0).getGoodsCostPrice());
-                    tOrderStockGoods.setSalePrice(v.get(0).getGoodsSalePrice());
-//                    tOrderStockGoods.setThisCostPrice(v.get(0).getThisSalePrice());
-                    tOrderStockGoods.setGoodsPicture(v.get(0).getGoodsPicture());
-                    tOrderStockGoods.setGoodsId(v.get(0).getGoodsId());
-                    int sum = v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum();
-                    BigDecimal rate = new BigDecimal(100).subtract(start.getLossRate()).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP);
-                    BigDecimal bigDecimal = new BigDecimal(sum).divide(rate,2,BigDecimal.ROUND_HALF_UP).setScale(0, BigDecimal.ROUND_HALF_UP);
-                    tOrderStockGoods.setStockCount(Integer.parseInt(bigDecimal.toString().split("\\.")[0]));
-                    orderStockGoods.add(tOrderStockGoods);
-                });
-                orderStock.setOrderStockGoods(orderStockGoods);
-                stockList.add(orderStock);
+                    Map<String, List<TOrderSaleGoods>> goodsList = list.stream().collect(Collectors.groupingBy(TOrderSaleGoods::getGoodsName));
+                    List<TOrderStockGoods> orderStockGoods = new ArrayList<>();
+                    goodsList.forEach((k,v)->{
+                        TOrderStockGoods tOrderStockGoods = new TOrderStockGoods();
+                        tOrderStockGoods.setGoodsName(k);
+                        tOrderStockGoods.setGoodsNum(v.get(0).getGoodsNum());
+                        tOrderStockGoods.setCostPrice(v.get(0).getGoodsCostPrice());
+                        tOrderStockGoods.setSalePrice(v.get(0).getGoodsSalePrice());
+                        TOrderStockGoods orderStockGoods1 = orderStockGoodsList.stream().filter(e -> e.getGoodsName().equals(k)).findFirst().orElse(null);
+                        if(Objects.nonNull(orderStockGoods1)){
+                            tOrderStockGoods.setThisCostPrice(orderStockGoods1.getThisCostPrice());
+                        }
+                        tOrderStockGoods.setGoodsPicture(v.get(0).getGoodsPicture());
+                        tOrderStockGoods.setGoodsId(v.get(0).getGoodsId());
+                        int sum = v.stream().mapToInt(TOrderSaleGoods::getGoodsCount).sum();
+                        BigDecimal rate = new BigDecimal(100).subtract(start.getLossRate()).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        BigDecimal bigDecimal = new BigDecimal(sum).divide(rate,2,BigDecimal.ROUND_HALF_UP).setScale(0, BigDecimal.ROUND_HALF_UP);
+                        tOrderStockGoods.setStockCount(Integer.parseInt(bigDecimal.toString().split("\\.")[0]));
+                        orderStockGoods.add(tOrderStockGoods);
+                    });
+                    orderStock.setOrderStockGoods(orderStockGoods);
+                    stockList.add(orderStock);
+                }
 
                 // 处理第一次到下一次的数据
                 TStockDataSet end = stockDataSets.get(i + 1);
@@ -457,12 +468,8 @@
             return;
         }
         // 删除上一次的数据生成
-        TOrderStock orderStock = orderStockService.getOne(Wrappers.lambdaQuery(TOrderStock.class)
-                .eq(TOrderStock::getShopId, dto.getShopId())
-                .orderByDesc(TOrderStock::getStockTime)
-                .last("LIMIT 1"));
-        if(Objects.nonNull(orderStock)){
-            orderStockService.removeById(orderStock);
+        if(Objects.nonNull(orderStockLast)){
+            orderStockService.removeById(orderStockLast);
         }
         orderSaleService.saveBatch(orderSales);
         for (TOrderSale orderSale : orderSales) {
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderMealServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderMealServiceImpl.java
index 347ed32..25f1a01 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderMealServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderMealServiceImpl.java
@@ -21,6 +21,7 @@
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -58,7 +59,6 @@
         orderMeal.setMealType(dto.getMealType());
         orderMeal.setMealPerson(dto.getMealPerson());
         orderMeal.setMealTime(dto.getMealTime());
-        orderMeal.setOrderMoney(dto.getOrderMoney());
 
         // 查询菜品分类
         List<TGoodsType> list1 = goodsTypeService.list();
@@ -75,20 +75,30 @@
             List<Long> goodsIds = dto.getMealOrderGoodsDTOS().stream().map(MealOrderGoodsDTO::getGoodsId).collect(Collectors.toList());
             List<TGoods> list = goodsService.list(Wrappers.lambdaQuery(TGoods.class)
                     .in(TGoods::getId, goodsIds));
+            // 查询已存在的菜品
+            List<TOrderMealGoods> list2 = orderMealGoodsService.list(Wrappers.lambdaQuery(TOrderMealGoods.class)
+                    .in(TOrderMealGoods::getOrderId, dto.getId()));
             dto.getMealOrderGoodsDTOS().forEach(item -> {
-                list.stream().filter(item1 -> item1.getId().equals(item.getGoodsId())).findFirst().ifPresent(item1 -> {
-                    TOrderMealGoods orderMealGood = new TOrderMealGoods();
-                    orderMealGood.setGoodsName(item1.getGoodsName());
-                    orderMealGood.setGoodsNum(item1.getGoodsNum());
-                    orderMealGood.setGoodsPicture(item1.getGoodsPicture());
-                    orderMealGood.setGoodsCount(item.getGoodsCount());
-                    orderMealGood.setGoodsSalePrice(item1.getSalePrice());
-                    orderMealGood.setCostPrice(item1.getCostPrice());
-                    orderMealGood.setTypeId(item1.getTypeId());
-                    orderMealGood.setGoodsId(item1.getId());
-                    orderMealGood.setTypeName(list1.stream().filter(item2 -> item2.getId().equals(item1.getTypeId())).findFirst().get().getTypeName());
-                    orderMealGoods.add(orderMealGood);
-                });
+                if(CollectionUtils.isEmpty(list2)){
+                    list.stream().filter(item1 -> item1.getId().equals(item.getGoodsId())).findFirst().ifPresent(item1 -> {
+                        TOrderMealGoods orderMealGood = new TOrderMealGoods();
+                        orderMealGood.setGoodsName(item1.getGoodsName());
+                        orderMealGood.setGoodsNum(item1.getGoodsNum());
+                        orderMealGood.setGoodsPicture(item1.getGoodsPicture());
+                        orderMealGood.setGoodsCount(item.getGoodsCount());
+                        orderMealGood.setGoodsSalePrice(item1.getSalePrice());
+                        orderMealGood.setCostPrice(item1.getCostPrice());
+                        orderMealGood.setTypeId(item1.getTypeId());
+                        orderMealGood.setGoodsId(item1.getId());
+                        orderMealGood.setTypeName(list1.stream().filter(item2 -> item2.getId().equals(item1.getTypeId())).findFirst().get().getTypeName());
+                        orderMealGoods.add(orderMealGood);
+                    });
+                }else {
+                    list2.stream().filter(item1 -> item1.getGoodsId().equals(item.getGoodsId())).findFirst().ifPresent(item1 -> {
+                        item1.setGoodsCount(item1.getGoodsCount()+item.getGoodsCount());
+                        orderMealGoods.add(item1);
+                    });
+                }
             });
             BigDecimal orderMoney = BigDecimal.ZERO;
             // 添加菜品
@@ -96,7 +106,7 @@
                 orderMealGood.setOrderId(dto.getId());
                 orderMoney = orderMoney.add(orderMealGood.getGoodsSalePrice().multiply(new BigDecimal(orderMealGood.getGoodsCount())));
             }
-            orderMealGoodsService.saveBatch(orderMealGoods);
+            orderMealGoodsService.saveOrUpdateBatch(orderMealGoods);
             orderMeal.setOrderMoney(orderMoney);
             this.updateById(orderMeal);
             // 添加备注
@@ -221,7 +231,8 @@
         List<TOrderMeal> list = this.list(Wrappers.lambdaQuery(TOrderMeal.class)
                 .eq(TOrderMeal::getShopId, query.getShopId())
                 .ge(TOrderMeal::getMealTime, query.getStartTime())
-                .le(TOrderMeal::getMealTime, query.getEndTime()));
+                .le(TOrderMeal::getMealTime, query.getEndTime())
+                .eq(TOrderMeal::getStatus,2));
         List<Long> ids = list.stream().map(TOrderMeal::getId).collect(Collectors.toList());
         if(!CollectionUtils.isEmpty(ids)){
             BigDecimal costTotal = orderMealGoodsService.costTotal(ids);
@@ -298,7 +309,31 @@
 
     @Override
     public List<OrderTrendsVO> orderingTrends(TDataStatisticsQuery query) {
-        return this.baseMapper.orderingTrends(query);
+        List<OrderTrendsVO> orderTrendsVOS = this.baseMapper.orderingTrends(query);
+        LocalDate localDate = LocalDate.now();
+        for (int i = 0; i < 7; i++) {
+            if(i == 0){
+                LocalDate finalLocalDate = localDate;
+                OrderTrendsVO orderTrendsVO = orderTrendsVOS.stream().filter(e -> DateUtils.stringToLocalDate(e.getDayTime()).compareTo(finalLocalDate) == 0).findFirst().orElse(null);
+                if(Objects.isNull(orderTrendsVO)){
+                    orderTrendsVO = new OrderTrendsVO();
+                    orderTrendsVO.setDayTime(DateUtils.localDateToString(localDate));
+                    orderTrendsVO.setOrderCount(0);
+                    orderTrendsVOS.add(orderTrendsVO);
+                }
+            }else {
+                localDate = localDate.minusDays(1);
+                LocalDate finalLocalDate1 = localDate;
+                OrderTrendsVO orderTrendsVO = orderTrendsVOS.stream().filter(e -> DateUtils.stringToLocalDate(e.getDayTime()).compareTo(finalLocalDate1) == 0).findFirst().orElse(null);
+                if(Objects.isNull(orderTrendsVO)){
+                    orderTrendsVO = new OrderTrendsVO();
+                    orderTrendsVO.setDayTime(DateUtils.localDateToString(finalLocalDate1));
+                    orderTrendsVO.setOrderCount(0);
+                    orderTrendsVOS.add(orderTrendsVO);
+                }
+            }
+        }
+        return orderTrendsVOS.stream().sorted(Comparator.comparing(OrderTrendsVO::getDayTime)).collect(Collectors.toList());
     }
 
     @Override
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderSaleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderSaleServiceImpl.java
index 2aadbc9..d1a483d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderSaleServiceImpl.java
+++ b/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(Objects.isNull(query.getStartTime()) && Objects.isNull(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,12 @@
     }
 
     @Override
-    public AmountSumVO amountSum(TOrderMealQuery query) {
-        return this.baseMapper.amountSum(query);
+    public AmountSumVO amountSum(TOrderSaleQuery query) {
+        AmountSumVO amountSumVO = this.baseMapper.amountSum(query);
+        if(amountSumVO.getObligation().compareTo(BigDecimal.ZERO) < 0){
+            amountSumVO.setObligation(BigDecimal.ZERO);
+        }
+        return amountSumVO;
     }
 
     @Override
@@ -133,7 +149,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 +179,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 +228,7 @@
 
     @Override
     public Map<String, Double> getDataGeneratorSaleDetail(TDataGeneratorSaleQuery query) {
-        if(Objects.nonNull(query.getStartTime()) && Objects.nonNull(query.getEndTime())){
+        if(Objects.isNull(query.getStartTime()) && Objects.isNull(query.getEndTime())){
             if(Objects.nonNull(query.getTimeType())){
                 LocalDateTime startTime = null;
                 LocalDateTime endTime = null;
@@ -326,4 +347,26 @@
         }
         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);
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockGoodsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockGoodsServiceImpl.java
index d17253a..9cdf7ba 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockGoodsServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockGoodsServiceImpl.java
@@ -1,12 +1,14 @@
 package com.ruoyi.system.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.domain.TOrderSaleGoods;
 import com.ruoyi.system.domain.TOrderStockGoods;
 import com.ruoyi.system.mapper.TOrderStockGoodsMapper;
 import com.ruoyi.system.query.TDataGeneratorStockQuery;
 import com.ruoyi.system.service.TOrderStockGoodsService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -20,4 +22,8 @@
 @Service
 public class TOrderStockGoodsServiceImpl extends ServiceImpl<TOrderStockGoodsMapper, TOrderStockGoods> implements TOrderStockGoodsService {
 
+    @Override
+    public List<TOrderStockGoods> getListByTimeAndShopId(String orderTime, Long shopId) {
+        return this.baseMapper.getListByTimeAndShopId(orderTime,shopId);
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockServiceImpl.java
index 48efe17..a5cca79 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TOrderStockServiceImpl.java
@@ -9,10 +9,7 @@
 import com.ruoyi.system.domain.*;
 import com.ruoyi.system.dto.TOrderSaleDTO;
 import com.ruoyi.system.dto.TOrderStockDTO;
-import com.ruoyi.system.mapper.TDataGeneratorMapper;
-import com.ruoyi.system.mapper.TOrderSaleGoodsMapper;
-import com.ruoyi.system.mapper.TOrderSaleMapper;
-import com.ruoyi.system.mapper.TOrderStockMapper;
+import com.ruoyi.system.mapper.*;
 import com.ruoyi.system.query.TDataGeneratorQuery;
 import com.ruoyi.system.query.TDataGeneratorStockQuery;
 import com.ruoyi.system.query.TOrderStockQuery;
@@ -50,6 +47,8 @@
     private TStockDataSetService stockDataSetService;
     @Autowired
     private TDataGeneratorMapper dataGeneratorMapper;
+    @Autowired
+    private TGoodsService goodsService;
     @Override
     public void add(TOrderStockDTO dto) {
         // 进货单号
@@ -61,11 +60,22 @@
             dto.setIsCover(0);
         }
         this.save(dto);
-        // 添加商品
+        List<TGoods> goods = goodsService.list(Wrappers.lambdaQuery(TGoods.class));
+        List<TGoods> goodsUpdateList = new ArrayList<>();
+                // 添加商品
         orderStockGoods.forEach(orderSaleGoods1 -> {
             orderSaleGoods1.setId(null);
             orderSaleGoods1.setOrderId(dto.getId());
+            for (TGoods good : goods) {
+                if(good.getGoodsNum().equals(orderSaleGoods1.getGoodsNum())){
+                    good.setInventory(orderSaleGoods1.getStockCount()+good.getInventory());
+                    goodsUpdateList.add(good);
+                }else {
+                    break;
+                }
+            }
         });
+        goodsService.updateBatchById(goodsUpdateList);
         tOrderStockGoodsService.saveBatch(orderStockGoods);
     }
 
@@ -88,7 +98,7 @@
 
     @Override
     public PageInfo<TOrderStockVO> pageList(TOrderStockQuery query) {
-        if(Objects.nonNull(query.getStartTime()) && Objects.nonNull(query.getEndTime())){
+        if(Objects.isNull(query.getStartTime()) && Objects.isNull(query.getEndTime())){
             // 判断时间
             if(Objects.nonNull(query.getTimeType())){
                 LocalDateTime startTime = null;
@@ -130,8 +140,13 @@
                 List<TOrderStockGoods> collect = orderStockGoods.stream().filter(orderSaleGoods -> orderSaleGoods.getOrderId().equals(orderStockVO.getId())).collect(Collectors.toList());
                 if(!CollectionUtils.isEmpty(collect)){
                     orderStockVO.setOrderStockGoods(collect);
-                    orderStockVO.setOrderStockCount(collect.size());
-                    orderStockVO.setTotalPrice(collect.stream().map(TOrderStockGoods::getCostPrice).reduce(BigDecimal::add).get());
+                    int sum = collect.stream().mapToInt(TOrderStockGoods::getStockCount).sum();
+                    orderStockVO.setOrderStockCount(sum);
+                    BigDecimal money = BigDecimal.ZERO;
+                    for (TOrderStockGoods tOrderStockGoods : collect) {
+                        money = money.add(tOrderStockGoods.getThisCostPrice().multiply(new BigDecimal(tOrderStockGoods.getStockCount())));
+                    }
+                    orderStockVO.setTotalPrice(money);
                 }
             });
         }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/RoleInfoVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/RoleInfoVO.java
index 091bba6..4555a45 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/RoleInfoVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/RoleInfoVO.java
@@ -10,6 +10,7 @@
     private Long roleId;
 
     private String roleName;
+    private String remark;
 
     @ApiModelProperty("菜单id")
     private List<Long> menus;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TOrderSaleVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TOrderSaleVO.java
index 676bbb7..88dd685 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TOrderSaleVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TOrderSaleVO.java
@@ -15,6 +15,8 @@
 
     @ApiModelProperty(value = "货品总价")
     private BigDecimal goodsAmount;
+    @ApiModelProperty(value = "货品数量")
+    private Integer goodsCount;
     @ApiModelProperty(value = "菜品集合")
     private List<TOrderSaleGoods> orderSaleGoods;
 
diff --git a/ruoyi-system/src/main/resources/mapper/system/TOrderMealGoodsMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TOrderMealGoodsMapper.xml
index 326320d..fc74bf8 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TOrderMealGoodsMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TOrderMealGoodsMapper.xml
@@ -44,6 +44,7 @@
                 </foreach>
             </if>
             AND tom.isCover = 1
+            AND tom.status = 2
         </where>
         GROUP BY tomg.typeName
     </select>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TOrderMealMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TOrderMealMapper.xml
index b8e8f3d..34f4b04 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TOrderMealMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TOrderMealMapper.xml
@@ -108,6 +108,7 @@
             </if>
             AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
             AND isCover = 1
+            AND status = 2
         </where>
     </select>
     <select id="exportOrderMeal" resultType="com.ruoyi.system.vo.TOrderMealVO">
@@ -153,6 +154,7 @@
             </if>
             AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
             AND isCover = 1
+            AND status = 2
         </where>
     </select>
     <select id="personnelStatistics" resultType="com.ruoyi.system.vo.PersonnelStatisticsVO">
@@ -169,6 +171,7 @@
             </if>
             AND tom.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
             AND tom.isCover = 1
+            AND tom.status = 2
         </where>
     </select>
     <select id="pageListGenerator" resultType="com.ruoyi.system.vo.TOrderMealVO">
@@ -190,7 +193,7 @@
             </if>
             AND tom.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
         </where>
-        ORDER BY tom.createTime DESC
+        ORDER BY tom.mealTime DESC
     </select>
     <select id="getDataGeneratorMealDetail" resultType="java.util.Map">
         SELECT
@@ -280,7 +283,7 @@
         LEFT JOIN t_order_meal tom ON tom.id = tomg.orderId
         <where>
             <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
-                AND (tom.createTime BETWEEN #{query.startTime} AND #{query.endTime})
+                AND (tom.mealTime BETWEEN #{query.startTime} AND #{query.endTime})
             </if>
             <if test="query.goodsName != null and query.goodsName != ''">
                 AND tomg.goodsName like concat('%', #{query.goodsName}, '%')
@@ -293,6 +296,7 @@
             </if>
             AND tom.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
             AND tom.isCover = 1
+            AND tom.status = 2
         </where>
         GROUP BY tomg.goodsName
     </select>
@@ -326,6 +330,7 @@
             </if>
             AND tom.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
             AND tom.isCover = 1
+            AND tom.status = 2
         </where>
         GROUP BY tomg.goodsName) a
     </select>
@@ -341,7 +346,7 @@
         LEFT JOIN t_order_meal tom ON tom.id = tomg.orderId
         <where>
             <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
-                AND (tom.createTime BETWEEN #{query.startTime} AND #{query.endTime})
+                AND (tom.mealTime BETWEEN #{query.startTime} AND #{query.endTime})
             </if>
             <if test="query.goodsName != null and query.goodsName != ''">
                 AND tomg.goodsName like concat('%', #{query.goodsName}, '%')
@@ -353,6 +358,8 @@
                 AND tom.shopId = #{query.shopId}
             </if>
             AND tom.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
+            AND tom.isCover = 1
+            AND tom.status = 2
         </where>
         GROUP BY tomg.goodsName
     </select>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TOrderSaleGoodsMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TOrderSaleGoodsMapper.xml
index 9dcd395..563c462 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TOrderSaleGoodsMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TOrderSaleGoodsMapper.xml
@@ -33,7 +33,7 @@
         </where>
     </select>
     <select id="salesRanking" resultType="com.ruoyi.system.vo.SalesRankingVO">
-        SELECT tgt.typeName,SUM(tosg.goodsSalePrice*tosg.goodsCount) AS salesVolume
+        SELECT tgt.typeName,SUM(tosg.thisSalePrice*tosg.goodsCount) AS salesVolume
         FROM t_order_sale_goods tosg
         LEFT JOIN t_order_sale tos on tosg.orderId=tos.id
         LEFT JOIN t_goods_type tgt ON tosg.typeId = tgt.id
@@ -45,6 +45,7 @@
                 </foreach>
             </if>
             AND tos.isCover = 1
+            AND tos.status = 2
         </where>
         GROUP BY tgt.typeName
     </select>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml
index 2135fc9..406fa39 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TOrderSaleMapper.xml
@@ -58,9 +58,9 @@
     <select id="amountSum" resultType="com.ruoyi.system.vo.AmountSumVO">
         select
             COUNT(id) AS orderCount,
-            SUM(orderMoney) AS saleAmount,
-            SUM(payMoney) AS payAmount,
-            SUM(orderMoney - payMoney) AS obligation
+        IFNULL(SUM(orderMoney),0) AS saleAmount,
+        IFNULL(SUM(payMoney),0) AS payAmount,
+        IFNULL(SUM(orderMoney - IFNULL(payMoney,0)),0) AS obligation
         from t_order_sale
         <where>
             <if test="query.orderNum != null and query.orderNum != ''">
@@ -99,10 +99,11 @@
             </if>
             AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
             AND isCover = 1
+            AND status = 2
         </where>
     </select>
     <select id="exportOrderSale" resultType="com.ruoyi.system.vo.TOrderSaleVO">
-        select id, orderTime, remark, createTime, updateTime, disabled, createBy, updateBy, orderNum, status,orderMoney,payMoney,shopId
+        select id, orderTime, remark, createTime, updateTime, disabled, createBy, updateBy, orderNum, status,orderMoney,payMoney,shopId,payType
         from t_order_sale
         <where>
             <if test="query.orderNum != null and query.orderNum != ''">
@@ -135,10 +136,11 @@
                 AND shopId = #{query.shopId}
             </if>
             <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
-                AND (createTime BETWEEN #{query.startTime} AND #{query.endTime})
+                AND (orderTime BETWEEN #{query.startTime} AND #{query.endTime})
             </if>
             AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
             AND isCover = 1
+            AND status = 2
         </where>
     </select>
     <select id="getDataGeneratorSaleDetail" resultType="java.util.Map">
@@ -217,5 +219,96 @@
             and tdg.orderType = 2
         </where>
     </select>
+    <select id="profitDetails" resultType="com.ruoyi.system.vo.GoodsProfitVO">
+        SELECT
+        tomg.goodsName,
+        (select typeName from t_goods_type where id = tomg.typeId) AS typeName,
+        IFNULL(SUM( tomg.goodsCount ),0) AS totalSalesCount,
+        IFNULL(SUM( tomg.goodsCount * tomg.thisSalePrice ),0) AS goodsSaleAmount,
+        IFNULL(SUM( tomg.goodsCount * tomg.goodsCostPrice ),0) AS goodsCostAmount,
+        IFNULL(SUM(tomg.goodsCount *(tomg.thisSalePrice - tomg.goodsCostPrice)),0) AS goodsProfitAmount
+        FROM t_order_sale_goods tomg
+        LEFT JOIN t_order_sale tom ON tom.id = tomg.orderId
+        <where>
+            <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
+                AND (tom.orderTime BETWEEN #{query.startTime} AND #{query.endTime})
+            </if>
+            <if test="query.goodsName != null and query.goodsName != ''">
+                AND tomg.goodsName like concat('%', #{query.goodsName}, '%')
+            </if>
+            <if test="query.typeId != null and query.typeId != ''">
+                AND tomg.typeId = #{query.typeId}
+            </if>
+            <if test="query.shopId != null">
+                AND tom.shopId = #{query.shopId}
+            </if>
+            AND tom.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
+            AND tom.isCover = 1
+            AND tom.status = 2
+        </where>
+        GROUP BY tomg.goodsName
+    </select>
+    <select id="profitDetailsStatistics" resultType="java.util.Map">
+        SELECT
+        IFNULL(SUM(a.goodsSaleAmount),0) AS totalSales,
+        IFNULL(SUM(a.goodsCostAmount),0) AS totalCosts,
+        IFNULL(SUM(a.goodsProfitAmount),0) AS totalProfits
+        FROM (
+        SELECT
+        tomg.goodsName,
+        IFNULL(SUM( tomg.goodsCount ),0) AS totalSalesCount,
+        IFNULL(SUM( tomg.goodsCount * tomg.thisSalePrice ),0) AS goodsSaleAmount,
+        IFNULL(SUM( tomg.goodsCount * tomg.goodsCostPrice ),0) AS goodsCostAmount,
+        IFNULL(SUM(tomg.goodsCount * (tomg.thisSalePrice - tomg.goodsCostPrice)),0) AS goodsProfitAmount
+        FROM t_order_sale_goods tomg
+        LEFT JOIN t_order_sale tom ON tom.id = tomg.orderId
+        <where>
+            <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
+                AND (tom.orderTime BETWEEN #{query.startTime} AND #{query.endTime})
+            </if>
+            <if test="query.goodsName != null and query.goodsName != ''">
+                AND tomg.goodsName like concat('%', #{query.goodsName}, '%')
+            </if>
+            <if test="query.typeId != null and query.typeId != ''">
+                AND tomg.typeId = #{query.typeId}
+            </if>
+            <if test="query.shopId != null">
+                AND tom.shopId = #{query.shopId}
+            </if>
+            AND tom.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
+            AND tom.isCover = 1
+            AND tom.status = 2
+        </where>
+        GROUP BY tomg.goodsName) a
+    </select>
+    <select id="profitDetailsExport" resultType="com.ruoyi.system.vo.GoodsProfitVO">
+        SELECT
+        tomg.goodsName,
+        (select typeName from t_goods_type where id = tomg.typeId) AS typeName,
+        IFNULL(SUM( tomg.goodsCount ),0) AS totalSalesCount,
+        IFNULL(SUM( tomg.goodsCount * tomg.thisSalePrice ),0) AS goodsSaleAmount,
+        IFNULL(SUM( tomg.goodsCount * tomg.goodsCostPrice ),0) AS goodsCostAmount,
+        IFNULL(SUM(tomg.goodsCount *(tomg.thisSalePrice - tomg.goodsCostPrice)),0) AS goodsProfitAmount
+        FROM t_order_sale_goods tomg
+        LEFT JOIN t_order_sale tom ON tom.id = tomg.orderId
+        <where>
+            <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''">
+                AND (tom.orderTime BETWEEN #{query.startTime} AND #{query.endTime})
+            </if>
+            <if test="query.goodsName != null and query.goodsName != ''">
+                AND tomg.goodsName like concat('%', #{query.goodsName}, '%')
+            </if>
+            <if test="query.typeId != null and query.typeId != ''">
+                AND tomg.typeId = #{query.typeId}
+            </if>
+            <if test="query.shopId != null">
+                AND tom.shopId = #{query.shopId}
+            </if>
+            AND tom.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()}
+            AND tom.isCover = 1
+            AND tom.status = 2
+        </where>
+        GROUP BY tomg.goodsName
+    </select>
 
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TOrderStockGoodsMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TOrderStockGoodsMapper.xml
index 90157d5..f2713f8 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TOrderStockGoodsMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TOrderStockGoodsMapper.xml
@@ -20,5 +20,10 @@
     <sql id="Base_Column_List">
         id, orderId, goodsNum, goodsName, costPrice, salePrice, goodsPicture, stockCount,thisCostPrice,goodsId
     </sql>
+    <select id="getListByTimeAndShopId" resultType="com.ruoyi.system.domain.TOrderStockGoods">
+        select t.id, t.orderId, t.goodsNum, t.goodsName, t.costPrice, t.salePrice, t.goodsPicture, t.stockCount,t.thisCostPrice,t.goodsId
+        from t_order_stock_goods t
+        where t.orderId in (select id from t_order_stock where DATE_FORMAT(orderTime, '%Y-%m-%d')) = #{orderTime} and shopId = #{shopId})
+    </select>
 
 </mapper>

--
Gitblit v1.7.1