Преглед изворни кода

增加
1、长者点餐统计增加类型

liangwenxuan пре 2 месеци
родитељ
комит
21b2992ca7

+ 3 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/restaurant/vo/DishesOrderExportVO.java

@@ -27,6 +27,9 @@ public class DishesOrderExportVO {
     @ExcelProperty("点餐人姓名")
     private String submitterName;
 
+    @ExcelProperty("点餐类型")
+    private String type;
+
     @ExcelIgnore
     private Long elderId;
 

+ 2 - 3
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/restaurant/DishesOrderStatisticsMapper.java

@@ -28,10 +28,9 @@ import java.util.List;
 public interface DishesOrderStatisticsMapper extends BaseMapperX<DishesOrderStatisticsDO> {
     Page<DishesOrderStatisticsDO> getDishesOrderStatisticsPage(@Param("page") Page<DishesOrderStatisticsDO> page, @Param("params") DishesOrderStatisticsPageReqVO pageReqVO);
 
+    Page<DishesOrderExportVO> getDishesOrderExportPage(@Param("page") Page<DishesOrderExportVO> page, @Param("params") DishesOrderStatisticsPageReqVO pageReqVO);
     List<DishesOrderExportVO> getDishesOrderExportList(DishesOrderStatisticsPageReqVO pageReqVO);
-
-    Long countDishesOrderExportList(DishesOrderStatisticsPageReqVO pageReqVO);
-//    default PageResult<DishesOrderStatisticsDO> selectPage(DishesOrderStatisticsPageReqVO reqVO) {
+    //    default PageResult<DishesOrderStatisticsDO> selectPage(DishesOrderStatisticsPageReqVO reqVO) {
 //        return selectPage(reqVO, new LambdaQueryWrapperX<DishesOrderStatisticsDO>()
 //                .eqIfPresent(DishesOrderStatisticsDO::getElderId, reqVO.getElderId())
 //                .eqIfPresent(DishesOrderStatisticsDO::getRestaurantId, reqVO.getRestaurantId())

+ 4 - 4
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/biz/ExpenseOrderServiceImpl.java

@@ -188,7 +188,7 @@ public class ExpenseOrderServiceImpl implements ExpenseOrderService {
             }
 
             for (ExpenseOrderItemDO orderItem : orderItems) {
-                String categoryKey = orderItem.getItemCategoryName().replaceAll("-", "").replace("/", "");
+                String categoryKey = StringUtils.isBlank(orderItem.getItemCategoryName()) ? "" :orderItem.getItemCategoryName().replaceAll("-", "").replace("/", "");
                 if(orderItem.getExpenseSource().equals(BusinessConstants.EXPENSE_ITEM)){
                     if (orderItem.getType() != null && orderItem.getType() == 1) {
                         typeCategoryMap.put(orderItem.getType(), categoryKey);
@@ -213,9 +213,9 @@ public class ExpenseOrderServiceImpl implements ExpenseOrderService {
                     otherRoundAmount = otherRoundAmount.add(orderItem.getTotalAmount().setScale(2, RoundingMode.HALF_UP));
                 }
             }
-            expenseOrderDO.setBedAmount(categoryAmountMap.get(typeCategoryMap.get(1)));
-            expenseOrderDO.setNurseAmount(categoryAmountMap.get(typeCategoryMap.get(2)));
-            expenseOrderDO.setMealAmount(categoryAmountMap.get(typeCategoryMap.get(3)));
+            expenseOrderDO.setBedAmount(categoryAmountMap.getOrDefault(typeCategoryMap.get(1),BigDecimal.ZERO));
+            expenseOrderDO.setNurseAmount(categoryAmountMap.getOrDefault(typeCategoryMap.get(2),BigDecimal.ZERO));
+            expenseOrderDO.setMealAmount(categoryAmountMap.getOrDefault(typeCategoryMap.get(3),BigDecimal.ZERO));
             expenseOrderDO.setOtherAmount(otherAmount);
             expenseOrderDO.setPayableAmount(expenseOrderDO.getBedAmount().add(expenseOrderDO.getNurseAmount()).add(expenseOrderDO.getMealAmount()).add(expenseOrderDO.getOtherAmount()).setScale(2, RoundingMode.HALF_UP));
             expenseOrderDO.setOtherRoundAmount(otherRoundAmount);

+ 32 - 6
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/restaurant/DishesOrderStatisticsServiceImpl.java

@@ -11,9 +11,11 @@ import cn.iocoder.yudao.module.system.controller.admin.restaurant.vo.*;
 import cn.iocoder.yudao.module.system.dal.dataobject.biz.DailyExpensesDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.biz.ElderlyInfoDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.restaurant.*;
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.dal.mysql.biz.DailyExpensesMapper;
 import cn.iocoder.yudao.module.system.dal.mysql.biz.ElderlyInfoMapper;
 import cn.iocoder.yudao.module.system.dal.mysql.restaurant.*;
+import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
 import cn.iocoder.yudao.module.system.enums.common.BooleanEnum;
 import cn.iocoder.yudao.module.system.service.biz.BuildService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -78,6 +80,9 @@ public class DishesOrderStatisticsServiceImpl implements DishesOrderStatisticsSe
     @Resource
     private RedisTemplate<String, Object> redisTemplate;
 
+    @Resource
+    private AdminUserMapper adminUserMapper;
+
 
     @Override
     public void createDishesOrderStatistics(DishesOrderStatisticsSaveReqVO createReqVO) {
@@ -199,12 +204,33 @@ public class DishesOrderStatisticsServiceImpl implements DishesOrderStatisticsSe
 
     @Override
     public PageResult<DishesOrderExportVO> exportDishesOrderStatisticsPage(DishesOrderStatisticsPageReqVO pageReqVO) {
-        // 床位号已在SQL查询中直接获取,无需在循环中调用getFullBedName,避免N+1查询问题
-        // 优化:一次性查询所有数据,避免在循环中多次查询数据库
-        List<DishesOrderExportVO> exportList = dishesOrderStatisticsMapper.getDishesOrderExportList(pageReqVO);
-        // 查询总数
-        Long total = dishesOrderStatisticsMapper.countDishesOrderExportList(pageReqVO);
-        return new PageResult<>(exportList, total != null ? total : 0L);
+        Page<DishesOrderExportVO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
+        Page<DishesOrderExportVO> resultPage = dishesOrderStatisticsMapper.getDishesOrderExportPage(page, pageReqVO);
+        List<DishesOrderExportVO> records = resultPage.getRecords();
+        if (CollectionUtil.isNotEmpty(records)) {
+            Long tenantId = pageReqVO.getTenantId() != null ? pageReqVO.getTenantId() : TenantContextHolder.getTenantId();
+            Map<String, Boolean> employeeSubmitterMap = new HashMap<>();
+            if (tenantId != null) {
+                List<AdminUserDO> adminUsers = adminUserMapper.getUserListByTenantId(tenantId);
+                employeeSubmitterMap = adminUsers.stream()
+                        .map(AdminUserDO::getNickname)
+                        .filter(StringUtils::isNotBlank)
+                        .collect(Collectors.toMap(name -> name, name -> true, (a, b) -> a));
+            }
+            Map<String, Boolean> finalEmployeeSubmitterMap = employeeSubmitterMap;
+            records.forEach(item -> {
+                if (item.getUserType() == UserType.ELDER) {
+                    if (Boolean.TRUE.equals(finalEmployeeSubmitterMap.get(item.getSubmitterName()))) {
+                        item.setType("员工代点");
+                    } else if (StringUtils.equals(item.getSubmitterName(), item.getElderName())) {
+                        item.setType("长者自点");
+                    } else {
+                        item.setType("家属点餐");
+                    }
+                }
+            });
+        }
+        return new PageResult<>(records, resultPage.getTotal());
     }
 
     @Override

+ 32 - 15
yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/DishesOrderStatisticsMapper.xml

@@ -96,11 +96,27 @@
         </where>
         ORDER BY i.order_time DESC
     </select>
-
-    <select id="countDishesOrderExportList"
-            parameterType="cn.iocoder.yudao.module.system.controller.admin.restaurant.vo.DishesOrderStatisticsPageReqVO"
-            resultType="java.lang.Long">
-        SELECT COUNT(DISTINCT i.id)
+    <select id="getDishesOrderExportPage"
+            resultType="cn.iocoder.yudao.module.system.controller.admin.restaurant.vo.DishesOrderExportVO">
+        SELECT
+        o.id,
+        r.restaurant_name as restaurantName,
+        i.order_time as orderTime,
+        e.elder_name as elderName,
+        d.food_name as foodName,
+        d.category_name as foodCategory,
+        i.count,
+        i.amount as totalAmount,
+        o.elder_id as elderId,
+        i.food_id as foodId,
+        o.submitter_name as submitterName,
+        o.user_type userType,
+        CONCAT_WS('-',
+        NULLIF(TRIM(bd.build_name), ''),
+        NULLIF(TRIM(bf.floor_name), ''),
+        NULLIF(TRIM(br.room_name), ''),
+        NULLIF(TRIM(bb.bed_name), '')
+        ) as bedNumber
         FROM restaurant_dishes_order_statistics_v2 o
         LEFT JOIN restaurant_management r ON o.restaurant_id = r.id
         LEFT JOIN restaurant_dishes_order_item_v2 i ON o.id = i.order_statistics_id
@@ -111,22 +127,23 @@
         LEFT JOIN org_build_floor bf ON br.floor_id = bf.id
         LEFT JOIN org_build bd ON bf.build_id = bd.id
         <where>
-            <if test="restaurantName != null and restaurantName != ''">
-                AND r.restaurant_name LIKE CONCAT('%', #{restaurantName}, '%')
+            <if test="params.restaurantName != null and params.restaurantName != ''">
+                AND r.restaurant_name LIKE CONCAT('%', #{params.restaurantName}, '%')
             </if>
-            <if test="month != null and month != ''" >
-                AND o.month = #{month}
+            <if test="params.month != null and params.month != ''" >
+                AND o.month = #{params.month}
             </if>
-            <if test="tenantId != null">
-                AND o.tenant_id = #{tenantId}
+            <if test="params.tenantId != null">
+                AND o.tenant_id = #{params.tenantId}
             </if>
-            <if test="elderName != null and elderName != ''">
-                AND e.elder_name = #{elderName}
+            <if test="params.elderName != null and params.elderName != ''">
+                AND e.elder_name = #{params.elderName}
             </if>
-            <if test="id != null">
-                AND o.id = #{id}
+            <if test="params.id != null">
+                AND o.id = #{params.id}
             </if>
         </where>
+        ORDER BY i.order_time DESC
     </select>
     <!-- 基础的主表ResultMap -->
     <resultMap id="baseMainResultMap" type="cn.iocoder.yudao.module.system.dal.dataobject.restaurant.EmployeeDishesOrderReportVO">