Bladeren bron

收银台功能 服务费 功能修改 编辑修改+订单表实体类字段

liudongzhi 2 weken geleden
bovenliggende
commit
a0e903e680

+ 32 - 25
alien-store/src/main/java/shop/alien/store/service/impl/StoreServiceFeeRuleServiceImpl.java

@@ -225,36 +225,43 @@ public class StoreServiceFeeRuleServiceImpl implements StoreServiceFeeRuleServic
         if (existing == null) {
             return R.fail("服务费规则不存在");
         }
-        String checkMsg = validateAndCheckConflict(dto, dto.getId());
+        // 仅编辑当前这一条:限定校验到“当前桌台 + 首个时段”
+        StoreServiceFeeRuleSlotDto slotForEdit;
+        if (dto.getSlots() != null && !dto.getSlots().isEmpty()) {
+            slotForEdit = dto.getSlots().get(0);
+        } else {
+            StoreServiceFeeRuleSlotDto s = new StoreServiceFeeRuleSlotDto();
+            s.setWeekdayMask(existing.getWeekdayMask());
+            s.setStartTime(existing.getStartTime() != null ? existing.getStartTime().format(TIME_FORMATTER) : null);
+            s.setEndTime(existing.getEndTime() != null ? existing.getEndTime().format(TIME_FORMATTER) : null);
+            slotForEdit = s;
+        }
+        StoreServiceFeeRuleSaveDto dtoForCheck = new StoreServiceFeeRuleSaveDto();
+        dtoForCheck.setId(dto.getId());
+        dtoForCheck.setStoreId(dto.getStoreId());
+        dtoForCheck.setFeeName(dto.getFeeName());
+        dtoForCheck.setFeeType(dto.getFeeType());
+        dtoForCheck.setFeeValue(dto.getFeeValue());
+        dtoForCheck.setStatus(dto.getStatus());
+        dtoForCheck.setEffectiveMode(dto.getEffectiveMode());
+        dtoForCheck.setStartDate(dto.getStartDate());
+        dtoForCheck.setEndDate(dto.getEndDate());
+        dtoForCheck.setTableIds(Collections.singletonList(existing.getTableId()));
+        dtoForCheck.setSlots(Collections.singletonList(slotForEdit));
+        String checkMsg = validateAndCheckConflict(dtoForCheck, dto.getId());
         if (checkMsg != null) {
             return R.fail(checkMsg);
         }
 
-        // 删除同组旧记录并重建
-        List<StoreServiceFeeRule> sameGroup = ruleMapper.selectList(new LambdaQueryWrapper<StoreServiceFeeRule>()
-                .eq(StoreServiceFeeRule::getStoreId, existing.getStoreId())
-                .eq(StoreServiceFeeRule::getFeeName, existing.getFeeName())
-                .eq(StoreServiceFeeRule::getFeeType, existing.getFeeType())
-                .eq(StoreServiceFeeRule::getFeeValue, existing.getFeeValue())
-                .eq(StoreServiceFeeRule::getStatus, existing.getStatus())
-                .eq(StoreServiceFeeRule::getEffectiveMode, existing.getEffectiveMode())
-                .eq(StoreServiceFeeRule::getStartDate, existing.getStartDate())
-                .eq(StoreServiceFeeRule::getEndDate, existing.getEndDate()));
-        for (StoreServiceFeeRule r : sameGroup) {
-            ruleMapper.deleteById(r.getId());
-        }
         Integer userId = getCurrentUserId();
-        for (Integer tableId : dto.getTableIds()) {
-            for (StoreServiceFeeRuleSlotDto slotDto : dto.getSlots()) {
-                StoreServiceFeeRule rule = new StoreServiceFeeRule();
-                fillRuleFromDto(rule, dto, userId, true);
-                rule.setTableId(tableId);
-                rule.setWeekdayMask(slotDto.getWeekdayMask());
-                rule.setStartTime(LocalTime.parse(slotDto.getStartTime(), TIME_FORMATTER));
-                rule.setEndTime(LocalTime.parse(slotDto.getEndTime(), TIME_FORMATTER));
-                ruleMapper.insert(rule);
-            }
-        }
+        StoreServiceFeeRule update = new StoreServiceFeeRule();
+        update.setId(existing.getId());
+        fillRuleFromDto(update, dto, userId, true);
+        update.setTableId(existing.getTableId());
+        update.setWeekdayMask(slotForEdit.getWeekdayMask());
+        update.setStartTime(slotForEdit.getStartTime() != null ? LocalTime.parse(slotForEdit.getStartTime(), TIME_FORMATTER) : existing.getStartTime());
+        update.setEndTime(slotForEdit.getEndTime() != null ? LocalTime.parse(slotForEdit.getEndTime(), TIME_FORMATTER) : existing.getEndTime());
+        ruleMapper.updateById(update);
         return R.data(true);
     }