Просмотр исходного кода

收银台功能 服务费 功能修改 列表展示修改 编辑修改

liudongzhi 3 недель назад
Родитель
Сommit
60905cddce

+ 1 - 1
alien-store/src/main/java/shop/alien/store/controller/StoreServiceFeeRuleController.java

@@ -50,7 +50,7 @@ public class StoreServiceFeeRuleController {
 
 
     @ApiOperation("新建服务费")
     @ApiOperation("新建服务费")
     @PostMapping("/create")
     @PostMapping("/create")
-    public R<Integer> create(@RequestBody StoreServiceFeeRuleSaveDto dto) {
+    public R<List<Integer>> create(@RequestBody StoreServiceFeeRuleSaveDto dto) {
         return storeServiceFeeRuleService.createRule(dto);
         return storeServiceFeeRuleService.createRule(dto);
     }
     }
 
 

+ 1 - 1
alien-store/src/main/java/shop/alien/store/service/StoreServiceFeeRuleService.java

@@ -15,7 +15,7 @@ public interface StoreServiceFeeRuleService {
 
 
     R<StoreServiceFeeRuleDetailVo> getRuleDetail(Integer id);
     R<StoreServiceFeeRuleDetailVo> getRuleDetail(Integer id);
 
 
-    R<Integer> createRule(StoreServiceFeeRuleSaveDto dto);
+    R<List<Integer>> createRule(StoreServiceFeeRuleSaveDto dto);
 
 
     R<Boolean> updateRule(StoreServiceFeeRuleSaveDto dto);
     R<Boolean> updateRule(StoreServiceFeeRuleSaveDto dto);
 
 

+ 60 - 15
alien-store/src/main/java/shop/alien/store/service/impl/StoreServiceFeeRuleServiceImpl.java

@@ -135,18 +135,24 @@ public class StoreServiceFeeRuleServiceImpl implements StoreServiceFeeRuleServic
     }
     }
 
 
     @Override
     @Override
-    public R<Integer> createRule(StoreServiceFeeRuleSaveDto dto) {
+    public R<List<Integer>> createRule(StoreServiceFeeRuleSaveDto dto) {
         log.info("StoreServiceFeeRuleServiceImpl.createRule?dto={}", dto);
         log.info("StoreServiceFeeRuleServiceImpl.createRule?dto={}", dto);
         String checkMsg = validateAndCheckConflict(dto, null);
         String checkMsg = validateAndCheckConflict(dto, null);
         if (checkMsg != null) {
         if (checkMsg != null) {
             return R.fail(checkMsg);
             return R.fail(checkMsg);
         }
         }
         Integer userId = getCurrentUserId();
         Integer userId = getCurrentUserId();
-        StoreServiceFeeRule rule = new StoreServiceFeeRule();
-        fillRuleFromDto(rule, dto, userId, false);
-        ruleMapper.insert(rule);
-        saveChildren(rule.getId(), dto, userId);
-        return R.data(rule.getId());
+        // 以桌为主体,选择了几个桌就生成几条主表记录
+        List<Integer> createdIds = new ArrayList<>();
+        for (Integer tableId : dto.getTableIds()) {
+            StoreServiceFeeRule rule = new StoreServiceFeeRule();
+            fillRuleFromDto(rule, dto, userId, false);
+            ruleMapper.insert(rule);
+            // 为该条主表记录仅绑定当前桌台,并写入时段
+            saveChildrenForSingleTable(rule.getId(), dto, tableId, userId);
+            createdIds.add(rule.getId());
+        }
+        return R.data(createdIds);
     }
     }
 
 
     @Override
     @Override
@@ -334,21 +340,60 @@ public class StoreServiceFeeRuleServiceImpl implements StoreServiceFeeRuleServic
         }
         }
     }
     }
 
 
+    private void saveChildrenForSingleTable(Integer ruleId, StoreServiceFeeRuleSaveDto dto, Integer tableId, Integer userId) {
+        StoreServiceFeeRuleTable row = new StoreServiceFeeRuleTable();
+        row.setRuleId(ruleId);
+        row.setStoreId(dto.getStoreId());
+        row.setTableId(tableId);
+        row.setCreatedUserId(userId);
+        row.setUpdatedUserId(userId);
+        ruleTableMapper.insert(row);
+
+        for (StoreServiceFeeRuleSlotDto slotDto : dto.getSlots()) {
+            StoreServiceFeeRuleSlot slot = new StoreServiceFeeRuleSlot();
+            slot.setRuleId(ruleId);
+            slot.setWeekdayMask(slotDto.getWeekdayMask());
+            slot.setStartTime(LocalTime.parse(slotDto.getStartTime(), TIME_FORMATTER));
+            slot.setEndTime(LocalTime.parse(slotDto.getEndTime(), TIME_FORMATTER));
+            slot.setCreatedUserId(userId);
+            slot.setUpdatedUserId(userId);
+            ruleSlotMapper.insert(slot);
+        }
+    }
+
     private String validateAndCheckConflict(StoreServiceFeeRuleSaveDto dto, Integer excludeRuleId) {
     private String validateAndCheckConflict(StoreServiceFeeRuleSaveDto dto, Integer excludeRuleId) {
         String basicMsg = validateBasic(dto);
         String basicMsg = validateBasic(dto);
         if (basicMsg != null) {
         if (basicMsg != null) {
             return basicMsg;
             return basicMsg;
         }
         }
 
 
-        // 名称校验(同店不可重复)
-        LambdaQueryWrapper<StoreServiceFeeRule> nameWrapper = new LambdaQueryWrapper<>();
-        nameWrapper.eq(StoreServiceFeeRule::getStoreId, dto.getStoreId())
-                .eq(StoreServiceFeeRule::getFeeName, dto.getFeeName().trim());
-        if (excludeRuleId != null) {
-            nameWrapper.ne(StoreServiceFeeRule::getId, excludeRuleId);
-        }
-        if (ruleMapper.selectCount(nameWrapper) > 0) {
-            return "服务费名称已存在";
+        // 名称校验(同桌台下不可重复;编辑时忽略本条)
+        List<Integer> tableIdsForNameCheck = dto.getTableIds() == null ? Collections.emptyList()
+                : dto.getTableIds().stream().distinct().collect(Collectors.toList());
+        if (!tableIdsForNameCheck.isEmpty()) {
+            List<StoreServiceFeeRuleTable> sameTableRelations = ruleTableMapper.selectList(
+                    new LambdaQueryWrapper<StoreServiceFeeRuleTable>()
+                            .eq(StoreServiceFeeRuleTable::getStoreId, dto.getStoreId())
+                            .in(StoreServiceFeeRuleTable::getTableId, tableIdsForNameCheck));
+            if (!sameTableRelations.isEmpty()) {
+                List<Integer> sameTableRuleIds = sameTableRelations.stream()
+                        .map(StoreServiceFeeRuleTable::getRuleId)
+                        .distinct()
+                        .collect(Collectors.toList());
+                if (excludeRuleId != null) {
+                    sameTableRuleIds = sameTableRuleIds.stream()
+                            .filter(id -> !id.equals(excludeRuleId))
+                            .collect(Collectors.toList());
+                }
+                if (!sameTableRuleIds.isEmpty()) {
+                    LambdaQueryWrapper<StoreServiceFeeRule> sameTableNameWrapper = new LambdaQueryWrapper<>();
+                    sameTableNameWrapper.in(StoreServiceFeeRule::getId, sameTableRuleIds)
+                            .eq(StoreServiceFeeRule::getFeeName, dto.getFeeName().trim());
+                    if (ruleMapper.selectCount(sameTableNameWrapper) > 0) {
+                        return "同桌台下服务费名称已存在";
+                    }
+                }
+            }
         }
         }
 
 
         // 状态为关闭时,仅做名称校验即可(不参与冲突检查)
         // 状态为关闭时,仅做名称校验即可(不参与冲突检查)