21 changed files with 664 additions and 2 deletions
@ -0,0 +1,47 @@ |
|||||
|
package com.youlai.boot.admin.controller; |
||||
|
|
||||
|
import com.youlai.boot.common.annotation.Log; |
||||
|
import com.youlai.boot.common.enums.ActionTypeEnum; |
||||
|
import com.youlai.boot.common.enums.LogModuleEnum; |
||||
|
import com.youlai.boot.common.result.PageResult; |
||||
|
import com.youlai.boot.common.result.Result; |
||||
|
import com.youlai.boot.mini.model.form.AdoptionApplicationAuditForm; |
||||
|
import com.youlai.boot.mini.model.query.AdoptionApplicationQuery; |
||||
|
import com.youlai.boot.mini.model.vo.AdoptionApplicationVO; |
||||
|
import com.youlai.boot.mini.service.AdoptionApplicationService; |
||||
|
import io.swagger.v3.oas.annotations.Operation; |
||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||
|
import jakarta.validation.Valid; |
||||
|
import lombok.RequiredArgsConstructor; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
@Tag(name = "管理端领养申请相关接口") |
||||
|
@RestController |
||||
|
@RequestMapping("/api/v1/admin/adoptionApplication") |
||||
|
@RequiredArgsConstructor |
||||
|
public class AdoptionApplicationManageController { |
||||
|
|
||||
|
private final AdoptionApplicationService adoptionApplicationService; |
||||
|
|
||||
|
@Operation(summary = "分页查询领养申请列表") |
||||
|
@GetMapping("/list") |
||||
|
@Log(module = LogModuleEnum.ADOPTION_APPLICATION, value = ActionTypeEnum.LIST) |
||||
|
public PageResult<AdoptionApplicationVO> list(AdoptionApplicationQuery query) { |
||||
|
return PageResult.success(adoptionApplicationService.getAllApplications(query)); |
||||
|
} |
||||
|
|
||||
|
@Operation(summary = "获取领养申请详情") |
||||
|
@GetMapping("/detail/{applicationUuid}") |
||||
|
@Log(module = LogModuleEnum.ADOPTION_APPLICATION, value = ActionTypeEnum.LIST) |
||||
|
public Result<AdoptionApplicationVO> getApplicationDetail(@PathVariable String applicationUuid) { |
||||
|
return Result.success(adoptionApplicationService.getApplicationDetail(applicationUuid)); |
||||
|
} |
||||
|
|
||||
|
@Operation(summary = "审核领养申请") |
||||
|
@PostMapping("/audit") |
||||
|
@Log(module = LogModuleEnum.ADOPTION_APPLICATION, value = ActionTypeEnum.UPDATE) |
||||
|
public Result<?> auditApplication(@Valid @RequestBody AdoptionApplicationAuditForm form) { |
||||
|
adoptionApplicationService.auditApplication(form); |
||||
|
return Result.success(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,51 @@ |
|||||
|
package com.youlai.boot.mini.controller; |
||||
|
|
||||
|
import com.youlai.boot.common.annotation.Log; |
||||
|
import com.youlai.boot.common.annotation.RepeatSubmit; |
||||
|
import com.youlai.boot.common.enums.ActionTypeEnum; |
||||
|
import com.youlai.boot.common.enums.LogModuleEnum; |
||||
|
import com.youlai.boot.common.result.PageResult; |
||||
|
import com.youlai.boot.common.result.Result; |
||||
|
import com.youlai.boot.mini.model.query.AdoptionApplicationQuery; |
||||
|
import com.youlai.boot.mini.model.vo.AdoptionApplicationVO; |
||||
|
import com.youlai.boot.mini.service.AdoptionApplicationService; |
||||
|
import io.swagger.v3.oas.annotations.Operation; |
||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||
|
import lombok.RequiredArgsConstructor; |
||||
|
import org.springframework.http.MediaType; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
@Tag(name = "领养申请相关接口") |
||||
|
@RestController |
||||
|
@RequestMapping("/api/v1/mini/adoptionApplication") |
||||
|
@RequiredArgsConstructor |
||||
|
public class AdoptionApplicationController { |
||||
|
|
||||
|
private final AdoptionApplicationService adoptionApplicationService; |
||||
|
|
||||
|
@Operation(summary = "提交领养申请") |
||||
|
@PostMapping(value = "/submit", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) |
||||
|
@RepeatSubmit |
||||
|
@Log(module = LogModuleEnum.ADOPTION_APPLICATION, value = ActionTypeEnum.INSERT) |
||||
|
public Result<?> submitApplication( |
||||
|
@RequestParam("strayAnimalUuId") String strayAnimalUuId, |
||||
|
@RequestParam(value = "reason", required = false) String reason, |
||||
|
@RequestPart("photo") MultipartFile photo |
||||
|
) { |
||||
|
String applicationUuid = adoptionApplicationService.submitApplication(strayAnimalUuId, reason, photo); |
||||
|
return Result.success(applicationUuid); |
||||
|
} |
||||
|
|
||||
|
@Operation(summary = "获取我的领养申请列表") |
||||
|
@GetMapping("/myApplications") |
||||
|
public PageResult<AdoptionApplicationVO> getMyApplications(AdoptionApplicationQuery query) { |
||||
|
return PageResult.success(adoptionApplicationService.getMyApplications(query)); |
||||
|
} |
||||
|
|
||||
|
@Operation(summary = "获取领养申请详情") |
||||
|
@GetMapping("/detail/{applicationUuid}") |
||||
|
public Result<AdoptionApplicationVO> getApplicationDetail(@PathVariable String applicationUuid) { |
||||
|
return Result.success(adoptionApplicationService.getApplicationDetail(applicationUuid)); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,16 @@ |
|||||
|
package com.youlai.boot.mini.mapper; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
|
import com.youlai.boot.mini.model.entity.MiniAdoptionApplication; |
||||
|
import com.youlai.boot.mini.model.query.AdoptionApplicationQuery; |
||||
|
import com.youlai.boot.mini.model.vo.AdoptionApplicationVO; |
||||
|
import org.apache.ibatis.annotations.Param; |
||||
|
|
||||
|
public interface MiniAdoptionApplicationMapper extends BaseMapper<MiniAdoptionApplication> { |
||||
|
|
||||
|
IPage<AdoptionApplicationVO> getApplicationPage(Page<AdoptionApplicationVO> page, @Param("query") AdoptionApplicationQuery query); |
||||
|
|
||||
|
AdoptionApplicationVO getApplicationDetail(@Param("applicationUuid") String applicationUuid); |
||||
|
} |
||||
@ -0,0 +1,95 @@ |
|||||
|
package com.youlai.boot.mini.model.entity; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.*; |
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
import lombok.Getter; |
||||
|
import lombok.Setter; |
||||
|
import lombok.ToString; |
||||
|
import lombok.experimental.Accessors; |
||||
|
|
||||
|
import java.io.Serializable; |
||||
|
import java.util.Date; |
||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
|
|
||||
|
@Getter |
||||
|
@Setter |
||||
|
@ToString |
||||
|
@Accessors(chain = true) |
||||
|
@TableName("mini_adoption_application") |
||||
|
@Schema(description = "领养申请表") |
||||
|
public class MiniAdoptionApplication implements Serializable { |
||||
|
|
||||
|
@TableId(value = "id", type = IdType.AUTO) |
||||
|
@Schema(description = "主键ID") |
||||
|
private Long id; |
||||
|
|
||||
|
|
||||
|
@TableField("uuid") |
||||
|
@Schema(description = "UUID唯一标识,前后端数据交互使用") |
||||
|
private String uuid; |
||||
|
|
||||
|
@TableField("stray_animal_id") |
||||
|
@Schema(description = "关联的流浪动物ID") |
||||
|
private Long strayAnimalId; |
||||
|
|
||||
|
@TableField("mini_user_id") |
||||
|
@Schema(description = "申请人用户ID") |
||||
|
private Long miniUserId; |
||||
|
|
||||
|
@TableField("photo_url") |
||||
|
@Schema(description = "申请时拍摄的照片URL") |
||||
|
private String photoUrl; |
||||
|
|
||||
|
@TableField("reason") |
||||
|
@Schema(description = "申请理由/领养说明") |
||||
|
private String reason; |
||||
|
|
||||
|
@TableField("status") |
||||
|
@Schema(description = "审核状态:pending-待审核,approved-已通过,rejected-已拒绝") |
||||
|
private String status; |
||||
|
|
||||
|
@TableField("audit_user_id") |
||||
|
@Schema(description = "审核人ID(管理员)") |
||||
|
private Long auditUserId; |
||||
|
|
||||
|
@TableField("audit_remark") |
||||
|
@Schema(description = "审核备注") |
||||
|
private String auditRemark; |
||||
|
|
||||
|
@TableField("audit_time") |
||||
|
@Schema(description = "审核时间") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
||||
|
private Date auditTime; |
||||
|
|
||||
|
@TableField("create_time") |
||||
|
@Schema(description = "创建时间") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
||||
|
private Date createTime; |
||||
|
|
||||
|
@TableField("create_timestamp") |
||||
|
@Schema(description = "创建时间毫秒级时间戳") |
||||
|
private Long createTimestamp; |
||||
|
|
||||
|
@TableField("create_by") |
||||
|
@Schema(description = "创建人ID") |
||||
|
private Long createBy; |
||||
|
|
||||
|
@TableField("update_time") |
||||
|
@Schema(description = "更新时间") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
||||
|
private Date updateTime; |
||||
|
|
||||
|
@TableField("update_timestamp") |
||||
|
@Schema(description = "更新时间毫秒级时间戳") |
||||
|
private Long updateTimestamp; |
||||
|
|
||||
|
@TableField("update_by") |
||||
|
@Schema(description = "修改人ID") |
||||
|
private Long updateBy; |
||||
|
|
||||
|
@TableField("is_deleted") |
||||
|
@Schema(description = "逻辑删除标识(0-未删除 1-已删除)") |
||||
|
private Boolean deleted; |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,22 @@ |
|||||
|
package com.youlai.boot.mini.model.form; |
||||
|
|
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
import jakarta.validation.constraints.NotBlank; |
||||
|
import jakarta.validation.constraints.NotNull; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
@Data |
||||
|
@Schema(description = "领养申请审核表单") |
||||
|
public class AdoptionApplicationAuditForm { |
||||
|
|
||||
|
@NotNull(message = "申请UUID不能为空") |
||||
|
@Schema(description = "申请UUID", requiredMode = Schema.RequiredMode.REQUIRED) |
||||
|
private String applicationUuid; |
||||
|
|
||||
|
@NotBlank(message = "审核状态不能为空") |
||||
|
@Schema(description = "审核状态:approved-通过,rejected-拒绝", requiredMode = Schema.RequiredMode.REQUIRED) |
||||
|
private String status; |
||||
|
|
||||
|
@Schema(description = "审核备注") |
||||
|
private String remark; |
||||
|
} |
||||
@ -0,0 +1,17 @@ |
|||||
|
package com.youlai.boot.mini.model.form; |
||||
|
|
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
import jakarta.validation.constraints.NotNull; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
@Data |
||||
|
@Schema(description = "领养申请表单") |
||||
|
public class AdoptionApplicationForm { |
||||
|
|
||||
|
@NotNull(message = "关联的动物ID不能为空") |
||||
|
@Schema(description = "流浪动物UUID", requiredMode = Schema.RequiredMode.REQUIRED) |
||||
|
private String strayAnimalUuId; |
||||
|
|
||||
|
@Schema(description = "申请理由") |
||||
|
private String reason; |
||||
|
} |
||||
@ -0,0 +1,20 @@ |
|||||
|
package com.youlai.boot.mini.model.query; |
||||
|
|
||||
|
import com.youlai.boot.common.base.BaseQuery; |
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
@EqualsAndHashCode(callSuper = true) |
||||
|
@Data |
||||
|
public class AdoptionApplicationQuery extends BaseQuery { |
||||
|
|
||||
|
@Schema(description = "审核状态:pending-待审核,approved-已通过,rejected-已拒绝") |
||||
|
private String status; |
||||
|
|
||||
|
@Schema(description = "动物类型") |
||||
|
private String animalType; |
||||
|
|
||||
|
@Schema(description = "申请人用户ID", hidden = true) |
||||
|
private Long miniUserId; |
||||
|
} |
||||
@ -0,0 +1,24 @@ |
|||||
|
package com.youlai.boot.mini.model.vo; |
||||
|
|
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
@Data |
||||
|
@Schema(description = "已领养动物列表VO") |
||||
|
public class AdoptedAnimalVO { |
||||
|
|
||||
|
@Schema(description = "动物UUID") |
||||
|
private String animalUuid; |
||||
|
|
||||
|
@Schema(description = "动物类型:cat-猫,dog-狗,other-其他") |
||||
|
private String animalType; |
||||
|
|
||||
|
@Schema(description = "封面图片URL") |
||||
|
private String firstImageUrl; |
||||
|
|
||||
|
@Schema(description = "领养时间(毫秒级时间戳)") |
||||
|
private Long adoptedAt; |
||||
|
|
||||
|
@Schema(description = "状态") |
||||
|
private String status; |
||||
|
} |
||||
@ -0,0 +1,50 @@ |
|||||
|
package com.youlai.boot.mini.model.vo; |
||||
|
|
||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
@Data |
||||
|
@Schema(description = "领养申请VO") |
||||
|
public class AdoptionApplicationVO { |
||||
|
|
||||
|
@Schema(description = "申请UUID") |
||||
|
private String applicationUuid; |
||||
|
|
||||
|
@Schema(description = "动物UUID") |
||||
|
private String animalUuid; |
||||
|
|
||||
|
@Schema(description = "动物类型") |
||||
|
private String animalType; |
||||
|
|
||||
|
@Schema(description = "申请照片URL") |
||||
|
private String photoUrl; |
||||
|
|
||||
|
@Schema(description = "申请理由") |
||||
|
private String reason; |
||||
|
|
||||
|
@Schema(description = "审核状态") |
||||
|
private String status; |
||||
|
|
||||
|
@Schema(description = "审核备注") |
||||
|
private String auditRemark; |
||||
|
|
||||
|
@Schema(description = "审核时间") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
||||
|
private Date auditTime; |
||||
|
|
||||
|
@Schema(description = "申请人UUID") |
||||
|
private String applicantUuid; |
||||
|
|
||||
|
@Schema(description = "申请人昵称") |
||||
|
private String applicantName; |
||||
|
|
||||
|
@Schema(description = "申请人头像") |
||||
|
private String applicantAvatar; |
||||
|
|
||||
|
@Schema(description = "创建时间") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
||||
|
private Date createTime; |
||||
|
} |
||||
@ -0,0 +1,22 @@ |
|||||
|
package com.youlai.boot.mini.service; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
import com.youlai.boot.mini.model.entity.MiniAdoptionApplication; |
||||
|
import com.youlai.boot.mini.model.form.AdoptionApplicationAuditForm; |
||||
|
import com.youlai.boot.mini.model.query.AdoptionApplicationQuery; |
||||
|
import com.youlai.boot.mini.model.vo.AdoptionApplicationVO; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
public interface AdoptionApplicationService extends IService<MiniAdoptionApplication> { |
||||
|
|
||||
|
String submitApplication(String strayAnimalUuId, String reason, MultipartFile photo); |
||||
|
|
||||
|
IPage<AdoptionApplicationVO> getMyApplications(AdoptionApplicationQuery query); |
||||
|
|
||||
|
IPage<AdoptionApplicationVO> getAllApplications(AdoptionApplicationQuery query); |
||||
|
|
||||
|
AdoptionApplicationVO getApplicationDetail(String applicationUuid); |
||||
|
|
||||
|
void auditApplication(AdoptionApplicationAuditForm form); |
||||
|
} |
||||
@ -0,0 +1,160 @@ |
|||||
|
package com.youlai.boot.mini.service.impl; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
|
import com.youlai.boot.common.exception.MsgException; |
||||
|
import com.youlai.boot.common.util.RandomNumberUtils; |
||||
|
import com.youlai.boot.file.service.impl.AliyunFileService; |
||||
|
import com.youlai.boot.framework.security.util.SecurityUtils; |
||||
|
import com.youlai.boot.mini.mapper.MiniAdoptionApplicationMapper; |
||||
|
import com.youlai.boot.mini.mapper.MiniStrayAnimalMapper; |
||||
|
import com.youlai.boot.mini.model.entity.MiniAdoptionApplication; |
||||
|
import com.youlai.boot.mini.model.entity.MiniStrayAnimal; |
||||
|
import com.youlai.boot.mini.model.form.AdoptionApplicationAuditForm; |
||||
|
import com.youlai.boot.mini.model.query.AdoptionApplicationQuery; |
||||
|
import com.youlai.boot.mini.model.vo.AdoptionApplicationVO; |
||||
|
import com.youlai.boot.mini.service.AdoptionApplicationService; |
||||
|
import lombok.RequiredArgsConstructor; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.apache.commons.io.FilenameUtils; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
import java.util.UUID; |
||||
|
|
||||
|
@Slf4j |
||||
|
@Service |
||||
|
@RequiredArgsConstructor |
||||
|
public class AdoptionApplicationServiceImpl extends ServiceImpl<MiniAdoptionApplicationMapper, MiniAdoptionApplication> implements AdoptionApplicationService { |
||||
|
|
||||
|
private static final String OSS_APPLICATION_DIR = "adoption_application/"; |
||||
|
|
||||
|
private final AliyunFileService aliyunFileService; |
||||
|
private final MiniStrayAnimalMapper miniStrayAnimalMapper; |
||||
|
|
||||
|
@Override |
||||
|
@Transactional(rollbackFor = Exception.class) |
||||
|
public String submitApplication(String strayAnimalUuId, String reason, MultipartFile photo) { |
||||
|
Long userId = SecurityUtils.getUserId(); |
||||
|
|
||||
|
Long animalId = miniStrayAnimalMapper.selectIdByUuid(strayAnimalUuId); |
||||
|
if (animalId == null) { |
||||
|
throw new MsgException("动物不存在"); |
||||
|
} |
||||
|
|
||||
|
MiniStrayAnimal animal = miniStrayAnimalMapper.selectById(animalId); |
||||
|
if (!"found".equals(animal.getStatus()) && !"reviewing".equals(animal.getStatus())) { |
||||
|
throw new MsgException("该动物当前不可领养"); |
||||
|
} |
||||
|
|
||||
|
// 防重复申请
|
||||
|
Long pendingCount = lambdaQuery() |
||||
|
.eq(MiniAdoptionApplication::getStrayAnimalId, animalId) |
||||
|
.eq(MiniAdoptionApplication::getMiniUserId, userId) |
||||
|
.eq(MiniAdoptionApplication::getStatus, "pending") |
||||
|
.eq(MiniAdoptionApplication::getDeleted, false) |
||||
|
.count(); |
||||
|
if (pendingCount > 0) { |
||||
|
throw new MsgException("您已提交过该动物的领养申请,请耐心等待审核"); |
||||
|
} |
||||
|
|
||||
|
long currentTimestamp = System.currentTimeMillis(); |
||||
|
|
||||
|
// 上传申请照片
|
||||
|
String photoUrl = null; |
||||
|
if (photo != null && !photo.isEmpty()) { |
||||
|
try { |
||||
|
String objectName = OSS_APPLICATION_DIR |
||||
|
+ currentTimestamp + RandomNumberUtils.createRandomLowerLetterAndNumber(8) |
||||
|
+ "." + FilenameUtils.getExtension(photo.getOriginalFilename()); |
||||
|
photoUrl = aliyunFileService.uploadFile(objectName, photo.getInputStream()); |
||||
|
} catch (Exception e) { |
||||
|
log.error("领养申请照片上传失败", e); |
||||
|
throw new MsgException("照片上传失败,请重试"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
MiniAdoptionApplication application = new MiniAdoptionApplication(); |
||||
|
application.setUuid(UUID.randomUUID().toString()); |
||||
|
application.setStrayAnimalId(animalId); |
||||
|
application.setMiniUserId(userId); |
||||
|
application.setPhotoUrl(photoUrl); |
||||
|
application.setReason(reason); |
||||
|
application.setStatus("pending"); |
||||
|
application.setCreateTime(new Date(currentTimestamp)); |
||||
|
application.setCreateTimestamp(currentTimestamp); |
||||
|
application.setCreateBy(userId); |
||||
|
application.setDeleted(false); |
||||
|
save(application); |
||||
|
|
||||
|
return application.getUuid(); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public IPage<AdoptionApplicationVO> getMyApplications(AdoptionApplicationQuery query) { |
||||
|
Long userId = SecurityUtils.getUserId(); |
||||
|
query.setMiniUserId(userId); |
||||
|
Page<AdoptionApplicationVO> page = new Page<>(query.getPageNum(), query.getPageSize()); |
||||
|
return baseMapper.getApplicationPage(page, query); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public IPage<AdoptionApplicationVO> getAllApplications(AdoptionApplicationQuery query) { |
||||
|
Page<AdoptionApplicationVO> page = new Page<>(query.getPageNum(), query.getPageSize()); |
||||
|
return baseMapper.getApplicationPage(page, query); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public AdoptionApplicationVO getApplicationDetail(String applicationUuid) { |
||||
|
AdoptionApplicationVO vo = baseMapper.getApplicationDetail(applicationUuid); |
||||
|
if (vo == null) { |
||||
|
throw new MsgException("申请不存在"); |
||||
|
} |
||||
|
return vo; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
@Transactional(rollbackFor = Exception.class) |
||||
|
public void auditApplication(AdoptionApplicationAuditForm form) { |
||||
|
MiniAdoptionApplication application = lambdaQuery() |
||||
|
.eq(MiniAdoptionApplication::getUuid, form.getApplicationUuid()) |
||||
|
.eq(MiniAdoptionApplication::getDeleted, false) |
||||
|
.one(); |
||||
|
if (application == null) { |
||||
|
throw new MsgException("申请不存在"); |
||||
|
} |
||||
|
if (!"pending".equals(application.getStatus())) { |
||||
|
throw new MsgException("该申请已审核,无法重复操作"); |
||||
|
} |
||||
|
|
||||
|
Long auditUserId = SecurityUtils.getUserId(); |
||||
|
Date now = new Date(); |
||||
|
|
||||
|
application.setStatus(form.getStatus()); |
||||
|
application.setAuditRemark(form.getRemark()); |
||||
|
application.setAuditUserId(auditUserId); |
||||
|
application.setAuditTime(now); |
||||
|
application.setUpdateBy(auditUserId); |
||||
|
application.setUpdateTime(now); |
||||
|
application.setUpdateTimestamp(System.currentTimeMillis()); |
||||
|
updateById(application); |
||||
|
|
||||
|
// 审核通过:更新动物领养状态
|
||||
|
if ("approved".equals(form.getStatus())) { |
||||
|
MiniStrayAnimal animal = miniStrayAnimalMapper.selectById(application.getStrayAnimalId()); |
||||
|
if (animal != null) { |
||||
|
animal.setAdoptedBy(application.getMiniUserId()); |
||||
|
animal.setStatus("adopted"); |
||||
|
animal.setAdoptedAt(System.currentTimeMillis()); |
||||
|
animal.setUpdateBy(auditUserId); |
||||
|
animal.setUpdateTime(now); |
||||
|
animal.setUpdateTimestamp(System.currentTimeMillis()); |
||||
|
miniStrayAnimalMapper.updateById(animal); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,59 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<!DOCTYPE mapper |
||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" |
||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
||||
|
|
||||
|
<mapper namespace="com.youlai.boot.mini.mapper.MiniAdoptionApplicationMapper"> |
||||
|
|
||||
|
<select id="getApplicationPage" resultType="com.youlai.boot.mini.model.vo.AdoptionApplicationVO" databaseId="mysql"> |
||||
|
SELECT |
||||
|
app.uuid AS applicationUuid, |
||||
|
sa.uuid AS animalUuid, |
||||
|
sa.animal_type AS animalType, |
||||
|
app.photo_url AS photoUrl, |
||||
|
app.reason, |
||||
|
app.status, |
||||
|
app.audit_remark AS auditRemark, |
||||
|
app.audit_time AS auditTime, |
||||
|
app.create_time AS createTime, |
||||
|
u.uuid AS applicantUuid, |
||||
|
u.nickname AS applicantName, |
||||
|
u.avatar AS applicantAvatar |
||||
|
FROM mini_adoption_application app |
||||
|
INNER JOIN sys_user u ON app.mini_user_id = u.id AND u.is_deleted = 0 |
||||
|
LEFT JOIN mini_stray_animal sa ON app.stray_animal_id = sa.id |
||||
|
WHERE app.is_deleted = 0 |
||||
|
<if test="query.status != null and query.status != ''"> |
||||
|
AND app.status = #{query.status} |
||||
|
</if> |
||||
|
<if test="query.animalType != null and query.animalType != ''"> |
||||
|
AND sa.animal_type = #{query.animalType} |
||||
|
</if> |
||||
|
<if test="query.miniUserId != null"> |
||||
|
AND app.mini_user_id = #{query.miniUserId} |
||||
|
</if> |
||||
|
ORDER BY app.create_time DESC |
||||
|
</select> |
||||
|
|
||||
|
<select id="getApplicationDetail" resultType="com.youlai.boot.mini.model.vo.AdoptionApplicationVO"> |
||||
|
SELECT |
||||
|
app.uuid AS applicationUuid, |
||||
|
sa.uuid AS animalUuid, |
||||
|
sa.animal_type AS animalType, |
||||
|
app.photo_url AS photoUrl, |
||||
|
app.reason, |
||||
|
app.status, |
||||
|
app.audit_remark AS auditRemark, |
||||
|
app.audit_time AS auditTime, |
||||
|
app.create_time AS createTime, |
||||
|
u.uuid AS applicantUuid, |
||||
|
u.nickname AS applicantName, |
||||
|
u.avatar AS applicantAvatar |
||||
|
FROM mini_adoption_application app |
||||
|
INNER JOIN sys_user u ON app.mini_user_id = u.id AND u.is_deleted = 0 |
||||
|
LEFT JOIN mini_stray_animal sa ON app.stray_animal_id = sa.id |
||||
|
WHERE app.uuid = #{applicationUuid} |
||||
|
AND app.is_deleted = 0 |
||||
|
</select> |
||||
|
|
||||
|
</mapper> |
||||
Loading…
Reference in new issue