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