feat: 添加逻辑删除字段,提升上传限制至120MB
This commit is contained in:
parent
9008b5bece
commit
870190c709
@ -6,7 +6,6 @@ import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@ -119,4 +118,13 @@ public class AppointmentController {
|
||||
}
|
||||
return Map.of("code", 404, "message", "预约不存在");
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
public Map<String, Object> delete(@RequestParam Long id) {
|
||||
boolean ok = appointmentService.softDelete(id);
|
||||
if (!ok) {
|
||||
return Map.of("code", 404, "message", "预约不存在");
|
||||
}
|
||||
return Map.of("code", 200, "message", "删除成功");
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,9 +71,11 @@ public class FileController {
|
||||
}
|
||||
|
||||
String contentType = file.getContentType();
|
||||
if (contentType == null || !contentType.startsWith("image/")) {
|
||||
boolean isImage = contentType != null && contentType.startsWith("image/");
|
||||
boolean isVideo = contentType != null && contentType.startsWith("video/");
|
||||
if (!isImage && !isVideo) {
|
||||
result.put("code", 400);
|
||||
result.put("message", "只能上传图片");
|
||||
result.put("message", "只能上传图片或视频");
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@ -198,4 +198,13 @@ public class ReportController {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
public Map<String, Object> delete(@RequestParam Long id) {
|
||||
boolean ok = reportService.softDelete(id);
|
||||
if (!ok) {
|
||||
return Map.of("code", 404, "message", "报告不存在");
|
||||
}
|
||||
return Map.of("code", 200, "message", "删除成功");
|
||||
}
|
||||
}
|
||||
|
||||
@ -64,6 +64,9 @@ public class StoreController {
|
||||
@PutMapping("/update")
|
||||
public Map<String, Object> update(@RequestBody Store store) {
|
||||
Store updated = storeService.update(store);
|
||||
if (updated == null) {
|
||||
return Map.of("code", 404, "message", "店铺不存在");
|
||||
}
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("code", 200);
|
||||
result.put("message", "更新成功");
|
||||
@ -71,6 +74,15 @@ public class StoreController {
|
||||
return result;
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
public Map<String, Object> delete(@RequestParam Long id) {
|
||||
boolean ok = storeService.softDelete(id);
|
||||
if (!ok) {
|
||||
return Map.of("code", 404, "message", "店铺不存在");
|
||||
}
|
||||
return Map.of("code", 200, "message", "删除成功");
|
||||
}
|
||||
|
||||
@GetMapping("/invite-code")
|
||||
public Map<String, Object> getByInviteCode(@RequestParam String code) {
|
||||
Store store = storeService.findByInviteCode(code);
|
||||
|
||||
@ -99,7 +99,10 @@ public class UserController {
|
||||
/** 老板:删除员工 */
|
||||
@DeleteMapping("/staff")
|
||||
public Map<String, Object> deleteStaff(@RequestParam Long staffId) {
|
||||
userService.deleteStaff(staffId);
|
||||
boolean ok = userService.deleteStaff(staffId);
|
||||
if (!ok) {
|
||||
return Map.of("code", 404, "message", "员工不存在");
|
||||
}
|
||||
return Map.of("code", 200, "message", "删除成功");
|
||||
}
|
||||
|
||||
|
||||
@ -47,4 +47,7 @@ public class Appointment {
|
||||
|
||||
@Column(name = "update_time")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
@Column(nullable = false, columnDefinition = "TINYINT(1) DEFAULT 0")
|
||||
private Boolean deleted = false;
|
||||
}
|
||||
|
||||
@ -40,4 +40,7 @@ public class Pet {
|
||||
|
||||
@Column(name = "update_time")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
@Column(nullable = false, columnDefinition = "TINYINT(1) DEFAULT 0")
|
||||
private Boolean deleted = false;
|
||||
}
|
||||
|
||||
@ -2,7 +2,6 @@ package com.petstore.entity;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import lombok.Data;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
@ -30,7 +29,6 @@ public class Report {
|
||||
private String remark;
|
||||
|
||||
@Transient
|
||||
@JsonIgnore
|
||||
private List<ReportImage> images = new ArrayList<>();
|
||||
|
||||
@Column(name = "user_id")
|
||||
@ -52,4 +50,7 @@ public class Report {
|
||||
|
||||
@Column(name = "update_time")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
@Column(nullable = false, columnDefinition = "TINYINT(1) DEFAULT 0")
|
||||
private Boolean deleted = false;
|
||||
}
|
||||
|
||||
@ -39,4 +39,7 @@ public class Store {
|
||||
|
||||
@Column(name = "update_time")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
@Column(nullable = false, columnDefinition = "TINYINT(1) DEFAULT 0")
|
||||
private Boolean deleted = false;
|
||||
}
|
||||
|
||||
@ -35,4 +35,7 @@ public class User {
|
||||
|
||||
@Column(name = "update_time")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
@Column(nullable = false, columnDefinition = "TINYINT(1) DEFAULT 0")
|
||||
private Boolean deleted = false;
|
||||
}
|
||||
|
||||
@ -6,15 +6,17 @@ import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface AppointmentMapper extends JpaRepository<Appointment, Long> {
|
||||
List<Appointment> findByUserId(Long userId);
|
||||
List<Appointment> findByUserIdAndStatus(Long userId, String status);
|
||||
List<Appointment> findByStoreId(Long storeId);
|
||||
List<Appointment> findByStoreIdAndStatus(Long storeId, String status);
|
||||
List<Appointment> findByUserIdAndDeletedFalse(Long userId);
|
||||
List<Appointment> findByUserIdAndStatusAndDeletedFalse(Long userId, String status);
|
||||
List<Appointment> findByStoreIdAndDeletedFalse(Long storeId);
|
||||
List<Appointment> findByStoreIdAndStatusAndDeletedFalse(Long storeId, String status);
|
||||
|
||||
Page<Appointment> findByUserId(Long userId, Pageable pageable);
|
||||
Page<Appointment> findByUserIdAndStatus(Long userId, String status, Pageable pageable);
|
||||
Page<Appointment> findByStoreId(Long storeId, Pageable pageable);
|
||||
Page<Appointment> findByStoreIdAndStatus(Long storeId, String status, Pageable pageable);
|
||||
Page<Appointment> findByUserIdAndDeletedFalse(Long userId, Pageable pageable);
|
||||
Page<Appointment> findByUserIdAndStatusAndDeletedFalse(Long userId, String status, Pageable pageable);
|
||||
Page<Appointment> findByStoreIdAndDeletedFalse(Long storeId, Pageable pageable);
|
||||
Page<Appointment> findByStoreIdAndStatusAndDeletedFalse(Long storeId, String status, Pageable pageable);
|
||||
Optional<Appointment> findByIdAndDeletedFalse(Long id);
|
||||
}
|
||||
|
||||
@ -6,12 +6,14 @@ import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface PetMapper extends JpaRepository<Pet, Long> {
|
||||
|
||||
List<Pet> findByOwnerUserIdOrderByUpdateTimeDesc(Long ownerUserId);
|
||||
List<Pet> findByOwnerUserIdAndDeletedFalseOrderByUpdateTimeDesc(Long ownerUserId);
|
||||
|
||||
/** 本店预约中关联过的宠物(预约.pet_id 指向该宠物) */
|
||||
@Query("SELECT DISTINCT p FROM Pet p, Appointment a WHERE a.petId = p.id AND a.storeId = :storeId ORDER BY p.updateTime DESC")
|
||||
@Query("SELECT DISTINCT p FROM Pet p, Appointment a WHERE a.petId = p.id AND a.storeId = :storeId AND p.deleted = false AND a.deleted = false ORDER BY p.updateTime DESC")
|
||||
List<Pet> findDistinctPetsServedAtStore(@Param("storeId") Long storeId);
|
||||
Optional<Pet> findByIdAndDeletedFalse(Long id);
|
||||
}
|
||||
|
||||
@ -9,22 +9,24 @@ import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface ReportMapper extends JpaRepository<Report, Long> {
|
||||
Optional<Report> findFirstByAppointmentIdOrderByCreateTimeDesc(Long appointmentId);
|
||||
Optional<Report> findFirstByAppointmentIdAndDeletedFalseOrderByCreateTimeDesc(Long appointmentId);
|
||||
|
||||
Optional<Report> findFirstByReportToken(String reportToken);
|
||||
Optional<Report> findFirstByReportTokenAndDeletedFalse(String reportToken);
|
||||
|
||||
List<Report> findByStoreIdOrderByCreateTimeDesc(Long storeId);
|
||||
List<Report> findByStoreIdAndDeletedFalseOrderByCreateTimeDesc(Long storeId);
|
||||
|
||||
List<Report> findByUserIdOrderByCreateTimeDesc(Long userId);
|
||||
List<Report> findByUserIdAndDeletedFalseOrderByCreateTimeDesc(Long userId);
|
||||
|
||||
List<Report> findByStoreIdAndUserIdOrderByCreateTimeDesc(Long storeId, Long userId);
|
||||
List<Report> findByStoreIdAndUserIdAndDeletedFalseOrderByCreateTimeDesc(Long storeId, Long userId);
|
||||
|
||||
List<Report> findAllByOrderByCreateTimeDesc();
|
||||
List<Report> findAllByDeletedFalseOrderByCreateTimeDesc();
|
||||
|
||||
Page<Report> findByStoreId(Long storeId, Pageable pageable);
|
||||
Page<Report> findByStoreIdAndDeletedFalse(Long storeId, Pageable pageable);
|
||||
|
||||
Page<Report> findByUserId(Long userId, Pageable pageable);
|
||||
Page<Report> findByUserIdAndDeletedFalse(Long userId, Pageable pageable);
|
||||
|
||||
Page<Report> findByStoreIdAndUserId(Long storeId, Long userId, Pageable pageable);
|
||||
Page<Report> findByStoreIdAndUserIdAndDeletedFalse(Long storeId, Long userId, Pageable pageable);
|
||||
Page<Report> findByDeletedFalse(Pageable pageable);
|
||||
Optional<Report> findByIdAndDeletedFalse(Long id);
|
||||
|
||||
}
|
||||
|
||||
@ -3,6 +3,11 @@ package com.petstore.mapper;
|
||||
import com.petstore.entity.Store;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface StoreMapper extends JpaRepository<Store, Long> {
|
||||
Store findByInviteCode(String inviteCode);
|
||||
Store findByInviteCodeAndDeletedFalse(String inviteCode);
|
||||
Optional<Store> findByIdAndDeletedFalse(Long id);
|
||||
List<Store> findAllByDeletedFalse();
|
||||
}
|
||||
|
||||
@ -4,9 +4,11 @@ import com.petstore.entity.User;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface UserMapper extends JpaRepository<User, Long> {
|
||||
User findByUsername(String username);
|
||||
User findByPhone(String phone);
|
||||
List<User> findByStoreId(Long storeId);
|
||||
User findByUsernameAndDeletedFalse(String username);
|
||||
User findByPhoneAndDeletedFalse(String phone);
|
||||
List<User> findByStoreIdAndDeletedFalse(Long storeId);
|
||||
Optional<User> findByIdAndDeletedFalse(Long id);
|
||||
}
|
||||
|
||||
@ -19,22 +19,22 @@ public class AppointmentService {
|
||||
|
||||
// 员工查看自己的预约
|
||||
public List<Appointment> getByUserId(Long userId) {
|
||||
return appointmentMapper.findByUserId(userId);
|
||||
return appointmentMapper.findByUserIdAndDeletedFalse(userId);
|
||||
}
|
||||
|
||||
// 老板查看本店所有预约
|
||||
public List<Appointment> getByStoreId(Long storeId) {
|
||||
return appointmentMapper.findByStoreId(storeId);
|
||||
return appointmentMapper.findByStoreIdAndDeletedFalse(storeId);
|
||||
}
|
||||
|
||||
// 员工按状态查
|
||||
public List<Appointment> getByUserIdAndStatus(Long userId, String status) {
|
||||
return appointmentMapper.findByUserIdAndStatus(userId, status);
|
||||
return appointmentMapper.findByUserIdAndStatusAndDeletedFalse(userId, status);
|
||||
}
|
||||
|
||||
// 老板按状态查
|
||||
public List<Appointment> getByStoreIdAndStatus(Long storeId, String status) {
|
||||
return appointmentMapper.findByStoreIdAndStatus(storeId, status);
|
||||
return appointmentMapper.findByStoreIdAndStatusAndDeletedFalse(storeId, status);
|
||||
}
|
||||
|
||||
public Page<Appointment> pageByScope(Long userId, Long storeId, String status, int pageNo, int pageSize) {
|
||||
@ -46,29 +46,30 @@ public class AppointmentService {
|
||||
boolean hasStatus = status != null && !status.isBlank();
|
||||
if (storeId != null) {
|
||||
return hasStatus
|
||||
? appointmentMapper.findByStoreIdAndStatus(storeId, status, pageable)
|
||||
: appointmentMapper.findByStoreId(storeId, pageable);
|
||||
? appointmentMapper.findByStoreIdAndStatusAndDeletedFalse(storeId, status, pageable)
|
||||
: appointmentMapper.findByStoreIdAndDeletedFalse(storeId, pageable);
|
||||
}
|
||||
if (userId != null) {
|
||||
return hasStatus
|
||||
? appointmentMapper.findByUserIdAndStatus(userId, status, pageable)
|
||||
: appointmentMapper.findByUserId(userId, pageable);
|
||||
? appointmentMapper.findByUserIdAndStatusAndDeletedFalse(userId, status, pageable)
|
||||
: appointmentMapper.findByUserIdAndDeletedFalse(userId, pageable);
|
||||
}
|
||||
return Page.empty(pageable);
|
||||
}
|
||||
|
||||
public Appointment getById(Long id) {
|
||||
return appointmentMapper.findById(id).orElse(null);
|
||||
return appointmentMapper.findByIdAndDeletedFalse(id).orElse(null);
|
||||
}
|
||||
|
||||
public Appointment create(Appointment appointment) {
|
||||
appointment.setCreateTime(LocalDateTime.now());
|
||||
appointment.setUpdateTime(LocalDateTime.now());
|
||||
appointment.setDeleted(false);
|
||||
return appointmentMapper.save(appointment);
|
||||
}
|
||||
|
||||
public Appointment updateStatus(Long id, String status) {
|
||||
Appointment appointment = appointmentMapper.findById(id).orElse(null);
|
||||
Appointment appointment = appointmentMapper.findByIdAndDeletedFalse(id).orElse(null);
|
||||
if (appointment != null) {
|
||||
appointment.setStatus(status);
|
||||
appointment.setUpdateTime(LocalDateTime.now());
|
||||
@ -79,7 +80,7 @@ public class AppointmentService {
|
||||
|
||||
/** 开始服务:状态变为进行中,同时指定技师为当前用户 */
|
||||
public Appointment startService(Long appointmentId, Long staffUserId) {
|
||||
Appointment appointment = appointmentMapper.findById(appointmentId).orElse(null);
|
||||
Appointment appointment = appointmentMapper.findByIdAndDeletedFalse(appointmentId).orElse(null);
|
||||
if (appointment != null) {
|
||||
appointment.setStatus("doing");
|
||||
appointment.setAssignedUserId(staffUserId);
|
||||
@ -88,4 +89,15 @@ public class AppointmentService {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean softDelete(Long id) {
|
||||
Appointment appointment = appointmentMapper.findByIdAndDeletedFalse(id).orElse(null);
|
||||
if (appointment == null) {
|
||||
return false;
|
||||
}
|
||||
appointment.setDeleted(true);
|
||||
appointment.setUpdateTime(LocalDateTime.now());
|
||||
appointmentMapper.save(appointment);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -20,7 +20,7 @@ public class PetService {
|
||||
if (ownerUserId == null) {
|
||||
return List.of();
|
||||
}
|
||||
return petMapper.findByOwnerUserIdOrderByUpdateTimeDesc(ownerUserId);
|
||||
return petMapper.findByOwnerUserIdAndDeletedFalseOrderByUpdateTimeDesc(ownerUserId);
|
||||
}
|
||||
|
||||
/** 商家/员工:本店预约中关联过的宠物(预约带 pet_id) */
|
||||
@ -43,6 +43,7 @@ public class PetService {
|
||||
}
|
||||
pet.setCreateTime(LocalDateTime.now());
|
||||
pet.setUpdateTime(LocalDateTime.now());
|
||||
pet.setDeleted(false);
|
||||
Pet saved = petMapper.save(pet);
|
||||
return Map.of("code", 200, "message", "保存成功", "data", saved);
|
||||
}
|
||||
@ -51,7 +52,7 @@ public class PetService {
|
||||
if (input.getId() == null) {
|
||||
return Map.of("code", 400, "message", "缺少宠物ID");
|
||||
}
|
||||
Optional<Pet> opt = petMapper.findById(input.getId());
|
||||
Optional<Pet> opt = petMapper.findByIdAndDeletedFalse(input.getId());
|
||||
if (opt.isEmpty()) {
|
||||
return Map.of("code", 404, "message", "宠物不存在");
|
||||
}
|
||||
@ -84,7 +85,7 @@ public class PetService {
|
||||
}
|
||||
|
||||
public Map<String, Object> delete(Long petId, Long operatorUserId, String role) {
|
||||
Optional<Pet> opt = petMapper.findById(petId);
|
||||
Optional<Pet> opt = petMapper.findByIdAndDeletedFalse(petId);
|
||||
if (opt.isEmpty()) {
|
||||
return Map.of("code", 404, "message", "宠物不存在");
|
||||
}
|
||||
@ -92,7 +93,9 @@ public class PetService {
|
||||
if (!"customer".equals(role) || !pet.getOwnerUserId().equals(operatorUserId)) {
|
||||
return Map.of("code", 403, "message", "无权删除");
|
||||
}
|
||||
petMapper.deleteById(petId);
|
||||
pet.setDeleted(true);
|
||||
pet.setUpdateTime(LocalDateTime.now());
|
||||
petMapper.save(pet);
|
||||
return Map.of("code", 200, "message", "已删除");
|
||||
}
|
||||
}
|
||||
|
||||
@ -27,7 +27,7 @@ public class ReportService {
|
||||
|
||||
// 填充冗余字段,并自动完成预约
|
||||
if (report.getAppointmentId() != null) {
|
||||
Appointment appt = appointmentMapper.findById(report.getAppointmentId()).orElse(null);
|
||||
Appointment appt = appointmentMapper.findByIdAndDeletedFalse(report.getAppointmentId()).orElse(null);
|
||||
if (appt != null) {
|
||||
report.setPetName(appt.getPetName());
|
||||
report.setServiceType(appt.getServiceType());
|
||||
@ -35,7 +35,7 @@ public class ReportService {
|
||||
report.setStoreId(appt.getStoreId());
|
||||
// 技师取预约分配的技师(开始服务时指定的)
|
||||
if (appt.getAssignedUserId() != null) {
|
||||
User staff = userMapper.findById(appt.getAssignedUserId()).orElse(null);
|
||||
User staff = userMapper.findByIdAndDeletedFalse(appt.getAssignedUserId()).orElse(null);
|
||||
if (staff != null) {
|
||||
report.setUserId(staff.getId());
|
||||
report.setStaffName(staff.getName());
|
||||
@ -49,7 +49,7 @@ public class ReportService {
|
||||
}
|
||||
// 如果预约没分配技师,则用当前操作人
|
||||
if (report.getUserId() != null && report.getStaffName() == null) {
|
||||
User staff = userMapper.findById(report.getUserId()).orElse(null);
|
||||
User staff = userMapper.findByIdAndDeletedFalse(report.getUserId()).orElse(null);
|
||||
if (staff != null) {
|
||||
report.setStaffName(staff.getName());
|
||||
if (report.getStoreId() == null) {
|
||||
@ -60,6 +60,7 @@ public class ReportService {
|
||||
|
||||
report.setCreateTime(LocalDateTime.now());
|
||||
report.setUpdateTime(LocalDateTime.now());
|
||||
report.setDeleted(false);
|
||||
|
||||
// 先保存 Report 以获取生成的 ID
|
||||
Report saved = reportMapper.save(report);
|
||||
@ -100,26 +101,26 @@ public class ReportService {
|
||||
if (appointmentId == null) {
|
||||
return null;
|
||||
}
|
||||
return enrichImages(reportMapper.findFirstByAppointmentIdOrderByCreateTimeDesc(appointmentId).orElse(null));
|
||||
return enrichImages(reportMapper.findFirstByAppointmentIdAndDeletedFalseOrderByCreateTimeDesc(appointmentId).orElse(null));
|
||||
}
|
||||
|
||||
public Report getByToken(String token) {
|
||||
if (token == null || token.isBlank()) {
|
||||
return null;
|
||||
}
|
||||
return enrichImages(reportMapper.findFirstByReportToken(token).orElse(null));
|
||||
return enrichImages(reportMapper.findFirstByReportTokenAndDeletedFalse(token).orElse(null));
|
||||
}
|
||||
|
||||
public List<Report> list(Long storeId, Long userId) {
|
||||
List<Report> reports;
|
||||
if (storeId != null && userId != null) {
|
||||
reports = reportMapper.findByStoreIdAndUserIdOrderByCreateTimeDesc(storeId, userId);
|
||||
reports = reportMapper.findByStoreIdAndUserIdAndDeletedFalseOrderByCreateTimeDesc(storeId, userId);
|
||||
} else if (storeId != null) {
|
||||
reports = reportMapper.findByStoreIdOrderByCreateTimeDesc(storeId);
|
||||
reports = reportMapper.findByStoreIdAndDeletedFalseOrderByCreateTimeDesc(storeId);
|
||||
} else if (userId != null) {
|
||||
reports = reportMapper.findByUserIdOrderByCreateTimeDesc(userId);
|
||||
reports = reportMapper.findByUserIdAndDeletedFalseOrderByCreateTimeDesc(userId);
|
||||
} else {
|
||||
reports = reportMapper.findAllByOrderByCreateTimeDesc();
|
||||
reports = reportMapper.findAllByDeletedFalseOrderByCreateTimeDesc();
|
||||
}
|
||||
return enrichImages(reports);
|
||||
}
|
||||
@ -132,16 +133,27 @@ public class ReportService {
|
||||
);
|
||||
Page<Report> paged;
|
||||
if (storeId != null && userId != null) {
|
||||
paged = reportMapper.findByStoreIdAndUserId(storeId, userId, pageable);
|
||||
paged = reportMapper.findByStoreIdAndUserIdAndDeletedFalse(storeId, userId, pageable);
|
||||
} else if (storeId != null) {
|
||||
paged = reportMapper.findByStoreId(storeId, pageable);
|
||||
paged = reportMapper.findByStoreIdAndDeletedFalse(storeId, pageable);
|
||||
} else if (userId != null) {
|
||||
paged = reportMapper.findByUserId(userId, pageable);
|
||||
paged = reportMapper.findByUserIdAndDeletedFalse(userId, pageable);
|
||||
} else {
|
||||
paged = reportMapper.findAll(pageable);
|
||||
paged = reportMapper.findByDeletedFalse(pageable);
|
||||
}
|
||||
// 填充图片
|
||||
enrichImages(paged.getContent());
|
||||
return paged;
|
||||
}
|
||||
|
||||
public boolean softDelete(Long id) {
|
||||
Report report = reportMapper.findByIdAndDeletedFalse(id).orElse(null);
|
||||
if (report == null) {
|
||||
return false;
|
||||
}
|
||||
report.setDeleted(true);
|
||||
report.setUpdateTime(LocalDateTime.now());
|
||||
reportMapper.save(report);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,27 +18,42 @@ public class StoreService {
|
||||
store.setInviteCode(generateInviteCode());
|
||||
store.setCreateTime(LocalDateTime.now());
|
||||
store.setUpdateTime(LocalDateTime.now());
|
||||
store.setDeleted(false);
|
||||
return storeMapper.save(store);
|
||||
}
|
||||
|
||||
public Store findById(Long id) {
|
||||
return storeMapper.findById(id).orElse(null);
|
||||
return storeMapper.findByIdAndDeletedFalse(id).orElse(null);
|
||||
}
|
||||
|
||||
public Store findByInviteCode(String code) {
|
||||
return storeMapper.findByInviteCode(code);
|
||||
return storeMapper.findByInviteCodeAndDeletedFalse(code);
|
||||
}
|
||||
|
||||
/** C 端预约:列出全部门店供选择 */
|
||||
public List<Store> listAll() {
|
||||
return storeMapper.findAll();
|
||||
return storeMapper.findAllByDeletedFalse();
|
||||
}
|
||||
|
||||
public Store update(Store store) {
|
||||
store.setUpdateTime(LocalDateTime.now());
|
||||
if (store.getDeleted() == null) {
|
||||
store.setDeleted(false);
|
||||
}
|
||||
return storeMapper.save(store);
|
||||
}
|
||||
|
||||
public boolean softDelete(Long id) {
|
||||
Store store = storeMapper.findByIdAndDeletedFalse(id).orElse(null);
|
||||
if (store == null) {
|
||||
return false;
|
||||
}
|
||||
store.setDeleted(true);
|
||||
store.setUpdateTime(LocalDateTime.now());
|
||||
storeMapper.save(store);
|
||||
return true;
|
||||
}
|
||||
|
||||
private String generateInviteCode() {
|
||||
return UUID.randomUUID().toString().replace("-", "").substring(0, 8).toUpperCase();
|
||||
}
|
||||
|
||||
@ -17,7 +17,7 @@ public class UserService {
|
||||
private final StoreMapper storeMapper;
|
||||
|
||||
public Map<String, Object> registerBoss(String storeName, String bossName, String phone, String password) {
|
||||
if (userMapper.findByPhone(phone) != null) {
|
||||
if (userMapper.findByPhoneAndDeletedFalse(phone) != null) {
|
||||
return Map.of("code", 400, "message", "手机号已注册");
|
||||
}
|
||||
|
||||
@ -28,6 +28,7 @@ public class UserService {
|
||||
store.setInviteCode(UUID.randomUUID().toString().replace("-", "").substring(0, 8).toUpperCase());
|
||||
store.setCreateTime(LocalDateTime.now());
|
||||
store.setUpdateTime(LocalDateTime.now());
|
||||
store.setDeleted(false);
|
||||
store = storeMapper.save(store);
|
||||
|
||||
User boss = new User();
|
||||
@ -39,6 +40,7 @@ public class UserService {
|
||||
boss.setRole("boss");
|
||||
boss.setCreateTime(LocalDateTime.now());
|
||||
boss.setUpdateTime(LocalDateTime.now());
|
||||
boss.setDeleted(false);
|
||||
boss = userMapper.save(boss);
|
||||
|
||||
store.setOwnerId(boss.getId());
|
||||
@ -65,7 +67,7 @@ public class UserService {
|
||||
if (phone == null || !phone.matches("^1\\d{10}$")) {
|
||||
return Map.of("code", 400, "message", "手机号格式不正确");
|
||||
}
|
||||
User user = userMapper.findByPhone(phone);
|
||||
User user = userMapper.findByPhoneAndDeletedFalse(phone);
|
||||
if (user == null) {
|
||||
user = new User();
|
||||
user.setUsername(phone);
|
||||
@ -75,11 +77,12 @@ public class UserService {
|
||||
user.setRole("customer");
|
||||
user.setCreateTime(LocalDateTime.now());
|
||||
user.setUpdateTime(LocalDateTime.now());
|
||||
user.setDeleted(false);
|
||||
user = userMapper.save(user);
|
||||
}
|
||||
Store store = null;
|
||||
if (user.getStoreId() != null) {
|
||||
store = storeMapper.findById(user.getStoreId()).orElse(null);
|
||||
store = storeMapper.findByIdAndDeletedFalse(user.getStoreId()).orElse(null);
|
||||
}
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
data.put("user", user);
|
||||
@ -88,10 +91,10 @@ public class UserService {
|
||||
}
|
||||
|
||||
public Map<String, Object> registerStaff(String phone, String password, String name, String inviteCode) {
|
||||
if (userMapper.findByPhone(phone) != null) {
|
||||
if (userMapper.findByPhoneAndDeletedFalse(phone) != null) {
|
||||
return Map.of("code", 400, "message", "手机号已注册");
|
||||
}
|
||||
Store store = storeMapper.findByInviteCode(inviteCode);
|
||||
Store store = storeMapper.findByInviteCodeAndDeletedFalse(inviteCode);
|
||||
if (store == null) {
|
||||
return Map.of("code", 400, "message", "邀请码无效");
|
||||
}
|
||||
@ -104,6 +107,7 @@ public class UserService {
|
||||
staff.setRole("staff");
|
||||
staff.setCreateTime(LocalDateTime.now());
|
||||
staff.setUpdateTime(LocalDateTime.now());
|
||||
staff.setDeleted(false);
|
||||
staff = userMapper.save(staff);
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
data.put("user", staff);
|
||||
@ -115,7 +119,7 @@ public class UserService {
|
||||
if (storeId == null) {
|
||||
return Map.of("code", 400, "message", "店铺ID不能为空");
|
||||
}
|
||||
if (userMapper.findByPhone(phone) != null) {
|
||||
if (userMapper.findByPhoneAndDeletedFalse(phone) != null) {
|
||||
return Map.of("code", 400, "message", "手机号已存在");
|
||||
}
|
||||
String pwd = String.format("%06d", (int)(Math.random() * 999999));
|
||||
@ -128,25 +132,33 @@ public class UserService {
|
||||
staff.setRole("staff");
|
||||
staff.setCreateTime(LocalDateTime.now());
|
||||
staff.setUpdateTime(LocalDateTime.now());
|
||||
staff.setDeleted(false);
|
||||
staff = userMapper.save(staff);
|
||||
return Map.of("code", 200, "message", "创建成功,初始密码:" + pwd, "data", staff);
|
||||
}
|
||||
|
||||
public List<User> getStaffList(Long storeId) {
|
||||
return userMapper.findByStoreId(storeId);
|
||||
return userMapper.findByStoreIdAndDeletedFalse(storeId);
|
||||
}
|
||||
|
||||
public void deleteStaff(Long staffId) {
|
||||
userMapper.deleteById(staffId);
|
||||
public boolean deleteStaff(Long staffId) {
|
||||
User user = userMapper.findByIdAndDeletedFalse(staffId).orElse(null);
|
||||
if (user == null) {
|
||||
return false;
|
||||
}
|
||||
user.setDeleted(true);
|
||||
user.setUpdateTime(LocalDateTime.now());
|
||||
userMapper.save(user);
|
||||
return true;
|
||||
}
|
||||
|
||||
public User findById(Long id) {
|
||||
return userMapper.findById(id).orElse(null);
|
||||
return userMapper.findByIdAndDeletedFalse(id).orElse(null);
|
||||
}
|
||||
|
||||
public Map<String, Object> updateUser(Map<String, Object> params) {
|
||||
Long userId = Long.valueOf(params.get("id").toString());
|
||||
User user = userMapper.findById(userId).orElse(null);
|
||||
User user = userMapper.findByIdAndDeletedFalse(userId).orElse(null);
|
||||
if (user == null) {
|
||||
return Map.of("code", 404, "message", "用户不存在");
|
||||
}
|
||||
@ -161,7 +173,7 @@ public class UserService {
|
||||
return Map.of("code", 400, "message", "验证码错误");
|
||||
}
|
||||
// 检查手机号是否被占用
|
||||
User existing = userMapper.findByPhone(newPhone);
|
||||
User existing = userMapper.findByPhoneAndDeletedFalse(newPhone);
|
||||
if (existing != null && !existing.getId().equals(userId)) {
|
||||
return Map.of("code", 400, "message", "手机号已被占用");
|
||||
}
|
||||
|
||||
@ -21,7 +21,8 @@ spring:
|
||||
format_sql: true
|
||||
servlet:
|
||||
multipart:
|
||||
max-file-size: 10MB
|
||||
max-file-size: 120MB
|
||||
max-request-size: 120MB
|
||||
|
||||
server:
|
||||
port: 8080
|
||||
|
||||
Loading…
Reference in New Issue
Block a user