Kaynağa Gözat

feat(second): 新增二手委托人信息管理模块

- 创建委托人信息实体类 SecondEntrustUser 及相关字段注解
- 实现委托人信息的增删改查接口及对应业务逻辑
- 添加委托人信息传输对象 SecondEntrustUserDTO 继承交易记录类
- 配置 MyBatis 映射文件及 Mapper 接口支持数据库操作
- 提供根据交易 ID、用户电话等条件查询委托人信息的功能
- 实现逻辑删除功能,确保数据安全性和一致性
zjy 3 hafta önce
ebeveyn
işleme
d9b1c32270

+ 76 - 0
alien-entity/src/main/java/shop/alien/entity/second/SecondEntrustUser.java

@@ -0,0 +1,76 @@
+package shop.alien.entity.second;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 二手委托人信息表
+ * </p>
+ *
+ * @author ssk
+ * @since 2025-11-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("second_entrust_user")
+@ApiModel(value = "SecondEntrustUser对象", description = "二手委托人信息表")
+public class SecondEntrustUser extends Model<SecondEntrustUser> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "交易ID")
+    @TableField("trade_id")
+    private Integer tradeId;
+
+    @ApiModelProperty(value = "委托人电话")
+    @TableField("user_phone")
+    private String userPhone;
+
+    @ApiModelProperty(value = "委托人姓名")
+    @TableField("user_name")
+    private String userName;
+
+    @ApiModelProperty(value = "委托人身份证")
+    @TableField("id_card")
+    private String idCard;
+
+    @ApiModelProperty(value = "委托人身份证照片")
+    @TableField("id_card_img")
+    private String idCardImg;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField(value = "created_user_id", fill = FieldFill.INSERT)
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField(value = "updated_user_id", fill = FieldFill.INSERT_UPDATE)
+    private Integer updatedUserId;
+
+}
+

+ 37 - 0
alien-entity/src/main/java/shop/alien/entity/second/vo/SecondEntrustUserDTO.java

@@ -0,0 +1,37 @@
+package shop.alien.entity.second.vo;
+
+import com.sun.istack.internal.NotNull;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import shop.alien.entity.second.SecondTradeRecord;
+
+/**
+ * <p>
+ * 二手委托人信息 DTO
+ * </p>
+ *
+ * @author ssk
+ * @since 2025-11-21
+ */
+@Data
+@ApiModel(value = "SecondEntrustUserDTO", description = "二手委托人信息传输对象")
+public class SecondEntrustUserDTO extends SecondTradeRecord {
+
+    @ApiModelProperty(value = "交易ID", required = true)
+    private Integer tradeId;
+
+    @ApiModelProperty(value = "委托人电话", required = true)
+    private String userPhone;
+
+    @ApiModelProperty(value = "委托人姓名", required = true)
+    private String userName;
+
+    @ApiModelProperty(value = "委托人身份证")
+    private String idCard;
+
+    @ApiModelProperty(value = "委托人身份证照片")
+    private String idCardImg;
+
+}
+

+ 19 - 0
alien-entity/src/main/java/shop/alien/mapper/second/SecondEntrustUserMapper.java

@@ -0,0 +1,19 @@
+package shop.alien.mapper.second;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import shop.alien.entity.second.SecondEntrustUser;
+
+/**
+ * <p>
+ * 二手委托人信息表 Mapper 接口
+ * </p>
+ *
+ * @author ssk
+ * @since 2025-11-21
+ */
+@Mapper
+public interface SecondEntrustUserMapper extends BaseMapper<SecondEntrustUser> {
+
+}
+

+ 27 - 0
alien-entity/src/main/resources/mapper/second/SecondEntrustUserMapper.xml

@@ -0,0 +1,27 @@
+<?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="shop.alien.mapper.second.SecondEntrustUserMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="shop.alien.entity.second.SecondEntrustUser">
+        <id column="id" property="id" />
+        <result column="trade_id" property="tradeId" />
+        <result column="user_phone" property="userPhone" />
+        <result column="user_name" property="userName" />
+        <result column="id_card" property="idCard" />
+        <result column="id_card_img" property="idCardImg" />
+        <result column="delete_flag" property="deleteFlag" />
+        <result column="created_time" property="createdTime" />
+        <result column="created_user_id" property="createdUserId" />
+        <result column="updated_time" property="updatedTime" />
+        <result column="updated_user_id" property="updatedUserId" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, trade_id, user_phone, user_name, id_card, id_card_img, 
+        delete_flag, created_time, created_user_id, updated_time, updated_user_id
+    </sql>
+
+</mapper>
+

+ 145 - 0
alien-second/src/main/java/shop/alien/second/controller/SecondEntrustUserController.java

@@ -0,0 +1,145 @@
+package shop.alien.second.controller;
+
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import shop.alien.entity.result.R;
+import shop.alien.entity.second.SecondEntrustUser;
+import shop.alien.entity.second.vo.SecondEntrustUserDTO;
+import shop.alien.second.service.SecondEntrustUserService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 二手委托人信息表 前端控制器
+ * </p>
+ *
+ * @author ssk
+ * @since 2025-11-21
+ */
+@Slf4j
+@Api(tags = {"二手平台-委托人信息管理"})
+@ApiSort(10)
+@CrossOrigin
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/secondEntrustUser")
+public class SecondEntrustUserController {
+
+    private final SecondEntrustUserService secondEntrustUserService;
+
+    @ApiOperation("创建委托人信息")
+    @ApiOperationSupport(order = 1)
+    @PostMapping("/create")
+    public R<Boolean> createEntrustUser(@Validated @RequestBody SecondEntrustUserDTO dto) {
+        log.info("SecondEntrustUserController.createEntrustUser dto={}", dto);
+        try {
+            boolean result = secondEntrustUserService.createEntrustUser(dto);
+            if (result) {
+                return R.success("创建成功");
+            }
+            return R.fail("创建失败");
+        } catch (Exception e) {
+            log.error("SecondEntrustUserController.createEntrustUser error: {}", e.getMessage(), e);
+            return R.fail(e.getMessage());
+        }
+    }
+
+    @ApiOperation("根据交易ID获取委托人信息")
+    @ApiOperationSupport(order = 2)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "tradeId", value = "交易ID", dataType = "Integer", paramType = "query", required = true)
+    })
+    @GetMapping("/getByTradeId")
+    public R<SecondEntrustUser> getByTradeId(@RequestParam Integer tradeId) {
+        log.info("SecondEntrustUserController.getByTradeId tradeId={}", tradeId);
+        try {
+            SecondEntrustUser entrustUser = secondEntrustUserService.getByTradeId(tradeId);
+            return R.data(entrustUser);
+        } catch (Exception e) {
+            log.error("SecondEntrustUserController.getByTradeId error: {}", e.getMessage(), e);
+            return R.fail(e.getMessage());
+        }
+    }
+
+    @ApiOperation("根据ID获取委托人信息")
+    @ApiOperationSupport(order = 3)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "委托人ID", dataType = "Integer", paramType = "query", required = true)
+    })
+    @GetMapping("/getById")
+    public R<SecondEntrustUser> getById(@RequestParam Integer id) {
+        log.info("SecondEntrustUserController.getById id={}", id);
+        try {
+            SecondEntrustUser entrustUser = secondEntrustUserService.getById(id);
+            if (entrustUser == null) {
+                return R.fail("委托人信息不存在");
+            }
+            return R.data(entrustUser);
+        } catch (Exception e) {
+            log.error("SecondEntrustUserController.getById error: {}", e.getMessage(), e);
+            return R.fail(e.getMessage());
+        }
+    }
+
+    @ApiOperation("更新委托人信息")
+    @ApiOperationSupport(order = 4)
+    @PutMapping("/update/{id}")
+    public R<Boolean> updateEntrustUser(
+            @ApiParam(value = "委托人ID", required = true) @PathVariable Integer id,
+            @Validated @RequestBody SecondEntrustUserDTO dto) {
+        log.info("SecondEntrustUserController.updateEntrustUser id={}, dto={}", id, dto);
+        try {
+            boolean result = secondEntrustUserService.updateEntrustUser(id, dto);
+            if (result) {
+                return R.success("更新成功");
+            }
+            return R.fail("更新失败");
+        } catch (Exception e) {
+            log.error("SecondEntrustUserController.updateEntrustUser error: {}", e.getMessage(), e);
+            return R.fail(e.getMessage());
+        }
+    }
+
+    @ApiOperation("删除委托人信息")
+    @ApiOperationSupport(order = 5)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "委托人ID", dataType = "Integer", paramType = "query", required = true)
+    })
+    @DeleteMapping("/delete")
+    public R<Boolean> deleteEntrustUser(@RequestParam Integer id) {
+        log.info("SecondEntrustUserController.deleteEntrustUser id={}", id);
+        try {
+            boolean result = secondEntrustUserService.deleteEntrustUser(id);
+            if (result) {
+                return R.success("删除成功");
+            }
+            return R.fail("删除失败");
+        } catch (Exception e) {
+            log.error("SecondEntrustUserController.deleteEntrustUser error: {}", e.getMessage(), e);
+            return R.fail(e.getMessage());
+        }
+    }
+
+    @ApiOperation("根据用户电话查询委托人信息列表")
+    @ApiOperationSupport(order = 6)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "userPhone", value = "用户电话", dataType = "String", paramType = "query", required = true)
+    })
+    @GetMapping("/getByUserPhone")
+    public R<List<SecondEntrustUser>> getByUserPhone(@RequestParam String userPhone) {
+        log.info("SecondEntrustUserController.getByUserPhone userPhone={}", userPhone);
+        try {
+            List<SecondEntrustUser> list = secondEntrustUserService.getByUserPhone(userPhone);
+            return R.data(list);
+        } catch (Exception e) {
+            log.error("SecondEntrustUserController.getByUserPhone error: {}", e.getMessage(), e);
+            return R.fail(e.getMessage());
+        }
+    }
+
+}
+

+ 61 - 0
alien-second/src/main/java/shop/alien/second/service/SecondEntrustUserService.java

@@ -0,0 +1,61 @@
+package shop.alien.second.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import shop.alien.entity.second.SecondEntrustUser;
+import shop.alien.entity.second.vo.SecondEntrustUserDTO;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 二手委托人信息表 服务类
+ * </p>
+ *
+ * @author ssk
+ * @since 2025-11-21
+ */
+public interface SecondEntrustUserService extends IService<SecondEntrustUser> {
+
+    /**
+     * 创建委托人信息
+     *
+     * @param dto 委托人信息DTO
+     * @return 是否创建成功
+     */
+    boolean createEntrustUser(SecondEntrustUserDTO dto);
+
+    /**
+     * 根据交易ID获取委托人信息
+     *
+     * @param tradeId 交易ID
+     * @return 委托人信息
+     */
+    SecondEntrustUser getByTradeId(Integer tradeId);
+
+    /**
+     * 更新委托人信息
+     *
+     * @param id 委托人ID
+     * @param dto 委托人信息DTO
+     * @return 是否更新成功
+     */
+    boolean updateEntrustUser(Integer id, SecondEntrustUserDTO dto);
+
+    /**
+     * 删除委托人信息
+     *
+     * @param id 委托人ID
+     * @return 是否删除成功
+     */
+    boolean deleteEntrustUser(Integer id);
+
+    /**
+     * 根据用户电话查询委托人信息列表
+     *
+     * @param userPhone 用户电话
+     * @return 委托人信息列表
+     */
+    List<SecondEntrustUser> getByUserPhone(String userPhone);
+
+}
+

+ 144 - 0
alien-second/src/main/java/shop/alien/second/service/impl/SecondEntrustUserServiceImpl.java

@@ -0,0 +1,144 @@
+package shop.alien.second.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import shop.alien.entity.second.SecondEntrustUser;
+import shop.alien.entity.second.vo.SecondEntrustUserDTO;
+import shop.alien.mapper.second.SecondEntrustUserMapper;
+import shop.alien.second.service.SecondEntrustUserService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 二手委托人信息表 服务实现类
+ * </p>
+ *
+ * @author ssk
+ * @since 2025-11-21
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class SecondEntrustUserServiceImpl extends ServiceImpl<SecondEntrustUserMapper, SecondEntrustUser> implements SecondEntrustUserService {
+
+    private final SecondEntrustUserMapper secondEntrustUserMapper;
+
+    /**
+     * 创建委托人信息
+     *
+     * @param dto 委托人信息DTO
+     * @return 是否创建成功
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean createEntrustUser(SecondEntrustUserDTO dto) {
+        log.info("SecondEntrustUserServiceImpl.createEntrustUser dto={}", dto);
+        try {
+            // 检查该交易是否已存在委托人信息
+            SecondEntrustUser existUser = getByTradeId(dto.getTradeId());
+            if (existUser != null) {
+                log.warn("交易ID:{}已存在委托人信息", dto.getTradeId());
+                throw new RuntimeException("该交易已存在委托人信息");
+            }
+
+            // 创建委托人信息
+            SecondEntrustUser entrustUser = new SecondEntrustUser();
+            BeanUtils.copyProperties(dto, entrustUser);
+            
+            return this.save(entrustUser);
+        } catch (Exception e) {
+            log.error("SecondEntrustUserServiceImpl.createEntrustUser error: {}", e.getMessage(), e);
+            throw new RuntimeException("创建委托人信息失败: " + e.getMessage());
+        }
+    }
+
+    /**
+     * 根据交易ID获取委托人信息
+     *
+     * @param tradeId 交易ID
+     * @return 委托人信息
+     */
+    @Override
+    public SecondEntrustUser getByTradeId(Integer tradeId) {
+        log.info("SecondEntrustUserServiceImpl.getByTradeId tradeId={}", tradeId);
+        LambdaQueryWrapper<SecondEntrustUser> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SecondEntrustUser::getTradeId, tradeId);
+        return this.getOne(wrapper);
+    }
+
+    /**
+     * 更新委托人信息
+     *
+     * @param id 委托人ID
+     * @param dto 委托人信息DTO
+     * @return 是否更新成功
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateEntrustUser(Integer id, SecondEntrustUserDTO dto) {
+        log.info("SecondEntrustUserServiceImpl.updateEntrustUser id={}, dto={}", id, dto);
+        try {
+            // 检查委托人信息是否存在
+            SecondEntrustUser entrustUser = this.getById(id);
+            if (entrustUser == null) {
+                log.warn("委托人信息不存在, id={}", id);
+                throw new RuntimeException("委托人信息不存在");
+            }
+
+            // 更新委托人信息
+            BeanUtils.copyProperties(dto, entrustUser);
+            entrustUser.setId(id);
+            
+            return this.updateById(entrustUser);
+        } catch (Exception e) {
+            log.error("SecondEntrustUserServiceImpl.updateEntrustUser error: {}", e.getMessage(), e);
+            throw new RuntimeException("更新委托人信息失败: " + e.getMessage());
+        }
+    }
+
+    /**
+     * 删除委托人信息(逻辑删除)
+     *
+     * @param id 委托人ID
+     * @return 是否删除成功
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean deleteEntrustUser(Integer id) {
+        log.info("SecondEntrustUserServiceImpl.deleteEntrustUser id={}", id);
+        try {
+            SecondEntrustUser entrustUser = this.getById(id);
+            if (entrustUser == null) {
+                log.warn("委托人信息不存在, id={}", id);
+                throw new RuntimeException("委托人信息不存在");
+            }
+            return this.removeById(id);
+        } catch (Exception e) {
+            log.error("SecondEntrustUserServiceImpl.deleteEntrustUser error: {}", e.getMessage(), e);
+            throw new RuntimeException("删除委托人信息失败: " + e.getMessage());
+        }
+    }
+
+    /**
+     * 根据用户电话查询委托人信息列表
+     *
+     * @param userPhone 用户电话
+     * @return 委托人信息列表
+     */
+    @Override
+    public List<SecondEntrustUser> getByUserPhone(String userPhone) {
+        log.info("SecondEntrustUserServiceImpl.getByUserPhone userPhone={}", userPhone);
+        LambdaQueryWrapper<SecondEntrustUser> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SecondEntrustUser::getUserPhone, userPhone);
+        wrapper.orderByDesc(SecondEntrustUser::getCreatedTime);
+        return this.list(wrapper);
+    }
+
+}
+