Преглед на файлове

Merge branch 'feature/20260228-export' of AHX-Bid/auction into dev

jintao.geng преди 1 седмица
родител
ревизия
c3fd03ed9a

+ 121 - 0
auc/src/main/java/cn/hobbystocks/auc/web/DiamondPositionController.java

@@ -0,0 +1,121 @@
+package cn.hobbystocks.auc.web;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+import cn.hobbystocks.auc.common.constant.Constants;
+import cn.hobbystocks.auc.common.core.domain.AjaxResult;
+import cn.hobbystocks.auc.common.user.UserInfo;
+import cn.hobbystocks.auc.common.user.UserUtils;
+import cn.hobbystocks.auc.common.utils.DateUtils;
+import cn.hobbystocks.auc.convert.DiamondPositionConvert;
+import cn.hobbystocks.auc.domain.DiamondPosition;
+import cn.hobbystocks.auc.request.DiamondPositionPageRequest;
+import cn.hobbystocks.auc.request.DiamondPositionQueryRequest;
+import cn.hobbystocks.auc.request.DiamondPositionRequest;
+import cn.hobbystocks.auc.request.DiamondPositionSaveRequest;
+import cn.hobbystocks.auc.response.DiamondPositionResponse;
+import cn.hobbystocks.auc.service.IDiamondPositionService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * 金刚位管理Controller
+ */
+@RestController
+@RequestMapping("/auction/admin/diamond")
+@Slf4j
+@Api(tags = "金刚位管理")
+public class DiamondPositionController extends AdminBaseController {
+
+    @Resource
+    IDiamondPositionService diamondPositionService;
+
+    /**
+     * 分页查询金刚位列表
+     */
+    @ApiOperation(value = "分页查询金刚位列表", notes = "分页查询金刚位列表", response = DiamondPositionResponse.class, responseContainer = "List<DiamondPositionResponse>")
+    @PostMapping("/page")
+    public AjaxResult page(@RequestBody DiamondPositionPageRequest request) {
+//        UserInfo userInfo = UserUtils.getSimpleUserInfo();
+//        if (Objects.isNull(userInfo)) {
+//            return AjaxResult.error("请先登录");
+//        }
+
+        DiamondPosition diamondPosition = new DiamondPosition();
+        BeanUtils.copyProperties(request, diamondPosition);
+
+        List<DiamondPositionResponse> list = diamondPositionService.selectDiamondPositionPageList(request);
+        return AjaxResult.successPage(list);
+    }
+
+    /**
+     * 获取金刚位详细信息
+     */
+    @ApiOperation(value = "获取金刚位详细信息", notes = "根据ID获取金刚位详细信息", response = DiamondPositionResponse.class)
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+//        UserInfo userInfo = UserUtils.getSimpleUserInfo();
+//        if (Objects.isNull(userInfo)) {
+//            return AjaxResult.error("请先登录");
+//        }
+
+        DiamondPosition diamondPosition = diamondPositionService.selectDiamondPositionById(id);
+        if (diamondPosition == null) {
+            return AjaxResult.error("金刚位不存在");
+        }
+        DiamondPositionResponse diamondPositionResponse = DiamondPositionConvert.INSTANCE.toDiamondPositionResponse(diamondPosition);
+        return AjaxResult.success(diamondPositionResponse);
+    }
+
+    /**
+     * 新增金刚位\修改金刚位
+     */
+    @ApiOperation(value = "新增金刚位/修改金刚位", notes = "新增金刚位", response = AjaxResult.class)
+    @PostMapping("/saveOrUpdate")
+    public AjaxResult saveOrUpdate(@RequestBody DiamondPositionSaveRequest request) {
+//        UserInfo userInfo = UserUtils.getSimpleUserInfo();
+//        if (Objects.isNull(userInfo)) {
+//            return AjaxResult.error("请先登录");
+//        }
+
+        int result = diamondPositionService.saveOrUpdate(request);
+        return result > 0 ? AjaxResult.success("操作成功") : AjaxResult.error("操作失败");
+    }
+
+
+    /**
+     * 删除金刚位(逻辑删除)
+     */
+    @ApiOperation(value = "删除金刚位", notes = "逻辑删除金刚位", response = AjaxResult.class)
+    @GetMapping("/delete/{id}")
+    public AjaxResult remove(@PathVariable("id") Long id) {
+//        UserInfo userInfo = UserUtils.getSimpleUserInfo();
+//        if (Objects.isNull(userInfo)) {
+//            return AjaxResult.error("请先登录");
+//        }
+
+        int result = diamondPositionService.deleteDiamondPositionById(id, getUsername());
+        return result > 0 ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
+
+    /**
+     * 查询有效的金刚位列表
+     */
+    @ApiOperation(value = "查询有效的金刚位列表", notes = "查询当前有效的金刚位列表", response = DiamondPositionResponse.class, responseContainer = "List<DiamondPositionResponse>")
+    @GetMapping("/active")
+    public AjaxResult active(@RequestBody DiamondPositionQueryRequest request) {
+//        List<DiamondPosition> list = diamondPositionService.selectActiveDiamondPositions(businessModule, version);
+        DiamondPositionResponse response = new DiamondPositionResponse();
+        return AjaxResult.success(response);
+    }
+}

+ 15 - 0
lot/pom.xml

@@ -209,5 +209,20 @@
 			<version>3.3.2</version>
 		</dependency>
 
+		<!-- MapStruct核心依赖 -->
+		<dependency>
+			<groupId>org.mapstruct</groupId>
+			<artifactId>mapstruct</artifactId>
+			<version>1.5.5.Final</version>
+		</dependency>
+		<!-- MapStruct注解处理器 必须加,核心!编译期生成代码 -->
+		<dependency>
+			<groupId>org.mapstruct</groupId>
+			<artifactId>mapstruct-processor</artifactId>
+			<version>1.5.5.Final</version>
+			<scope>provided</scope>
+		</dependency>
+
+
 	</dependencies>
 </project>

+ 8 - 0
lot/src/main/java/cn/hobbystocks/auc/common/utils/DateUtils.java

@@ -216,4 +216,12 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     public static String parseDateToStr(Date date) {
         return parseDateToStr(YYYY_MM_DD_HH_MM_SS, date);
     }
+
+    /**
+     * string类型时间转localdatetime
+     * @return
+     */
+    public static LocalDateTime parseStringToLocalDateTime(String time) {
+        return LocalDateTime.parse(time, DateTimeFormatter.ofPattern(YYYY_MM_DD_HH_MM_SS));
+    }
 }

+ 27 - 0
lot/src/main/java/cn/hobbystocks/auc/convert/DiamondPositionConvert.java

@@ -0,0 +1,27 @@
+package cn.hobbystocks.auc.convert;
+
+
+import cn.hobbystocks.auc.domain.DiamondPosition;
+import cn.hobbystocks.auc.response.DiamondPositionResponse;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+
+/**
+ * 金刚位转换器
+ *
+ * @author: gengjintao
+ * @date: 2026/01/20
+ */
+@Mapper
+public interface DiamondPositionConvert {
+
+    DiamondPositionConvert INSTANCE = Mappers.getMapper(DiamondPositionConvert.class);
+
+
+
+    DiamondPositionResponse toDiamondPositionResponse(DiamondPosition po);
+
+
+
+}

+ 124 - 0
lot/src/main/java/cn/hobbystocks/auc/domain/DiamondPosition.java

@@ -0,0 +1,124 @@
+package cn.hobbystocks.auc.domain;
+
+
+import cn.hobbystocks.auc.annotation.Sensitive;
+import cn.hobbystocks.auc.annotation.View;
+import cn.hobbystocks.auc.common.core.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * 金刚位管理表
+ *
+ * @author ruoyi
+ */
+
+@Data
+@ApiModel("金刚位管理表")
+public class DiamondPosition {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 金刚位名称
+     */
+    private String name;
+
+    /**
+     * 图标URL
+     */
+    private String iconUrl;
+
+    /**
+     * 类型:home_ad-首页横屏异形banner图、home_alien_banner-首页新版异形轮播图
+     */
+    private String type;
+
+    /**
+     * 跳转地址/路径
+     */
+    private String jumpUrl;
+
+    /**
+     * 跳转参数(JSON格式)
+     */
+    private String jumpParams;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+    /**
+     * 业务模块(如HOME-首页,ORDER-订单,USER-用户中心)
+     */
+    private String businessModule;
+
+    /**
+     * 版本
+     */
+    private String version;
+
+    /**
+     * 状态:0-禁用,1-启用
+     */
+    private Integer status;
+
+
+    /**
+     * 备注说明
+     */
+    private String remark;
+
+
+    /**
+     * 删除标识:0-未删,1-已删
+     */
+    private Integer delFlag;
+
+    /**
+     * 生效开始时间
+     */
+    private LocalDateTime effectiveStartTime;
+
+    /**
+     * 生效结束时间
+     */
+    private LocalDateTime effectiveEndTime;
+
+    /**
+     * 创建id
+     */
+    private String createUser;
+
+    /**
+     * 更新id
+     */
+    private String updateUser;
+
+    /** 创建时间 */
+    private LocalDateTime createTime;
+
+
+    /** 更新时间 */
+    private LocalDateTime updateTime;
+
+    /**
+     * 排序(数字越小越靠前)
+     */
+    private Integer sort;
+}

+ 25 - 0
lot/src/main/java/cn/hobbystocks/auc/mapper/DiamondPositionMapper.java

@@ -0,0 +1,25 @@
+package cn.hobbystocks.auc.mapper;
+
+import cn.hobbystocks.auc.domain.DiamondPosition;
+import cn.hobbystocks.auc.request.DiamondPositionPageRequest;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface DiamondPositionMapper extends BaseMapper<DiamondPosition> {
+
+    DiamondPosition selectDiamondPositionById(Long id);
+
+    List<DiamondPosition> selectDiamondPositionList(IPage<DiamondPosition> page, @Param("request") DiamondPositionPageRequest request);
+
+    List<DiamondPosition> selectActiveDiamondPositions(@Param("businessModule") String businessModule,
+                                                        @Param("version") String version);
+
+    int insertDiamondPosition(DiamondPosition diamondPosition);
+
+    int updateDiamondPosition(DiamondPosition diamondPosition);
+
+    int deleteDiamondPositionById(@Param("id") Long id, @Param("updateUser") String updateUser);
+}

+ 26 - 0
lot/src/main/java/cn/hobbystocks/auc/request/DiamondPositionPageRequest.java

@@ -0,0 +1,26 @@
+package cn.hobbystocks.auc.request;
+
+import cn.hobbystocks.auc.common.core.domain.BaseEntity;
+import cn.hobbystocks.auc.domain.Lot;
+import cn.hobbystocks.auc.vo.InData;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel("金刚位分页对象")
+public class DiamondPositionPageRequest extends BaseEntity{
+
+    @ApiModelProperty("金刚位名称")
+    private String name;
+
+    @ApiModelProperty("类型:home_ad-首页横屏异形banner图、home_alien_banner-首页新版异形轮播图")
+    private String type;
+
+    @ApiModelProperty("状态:0-禁用,1-启用")
+    private Integer status;
+
+}

+ 19 - 0
lot/src/main/java/cn/hobbystocks/auc/request/DiamondPositionQueryRequest.java

@@ -0,0 +1,19 @@
+package cn.hobbystocks.auc.request;
+
+import cn.hobbystocks.auc.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("金刚位查询条件对象")
+public class DiamondPositionQueryRequest extends BaseEntity{
+
+
+    @ApiModelProperty("类型:home_ad-首页横屏异形banner图、home_alien_banner-首页新版异形轮播图")
+    private String type;
+
+    @ApiModelProperty("业务模块(如HOME-首页,ORDER-订单,USER-用户中心)")
+    private String businessModule;
+
+}

+ 57 - 0
lot/src/main/java/cn/hobbystocks/auc/request/DiamondPositionRequest.java

@@ -0,0 +1,57 @@
+package cn.hobbystocks.auc.request;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel("金刚位创建/更新请求对象")
+public class DiamondPositionRequest {
+
+    @ApiModelProperty("主键ID(更新时必填)")
+    private Long id;
+
+    @ApiModelProperty("金刚位名称")
+    private String name;
+
+    @ApiModelProperty("图标URL")
+    private String iconUrl;
+
+    @ApiModelProperty("类型:home_ad-首页横屏异形banner图、home_alien_banner-首页新版异形轮播图")
+    private String type;
+
+    @ApiModelProperty("跳转地址/路径")
+    private String jumpUrl;
+
+    @ApiModelProperty("跳转参数(JSON格式)")
+    private String jumpParams;
+
+    @ApiModelProperty("描述")
+    private String description;
+
+    @ApiModelProperty("业务模块(如HOME-首页,ORDER-订单,USER-用户中心)")
+    private String businessModule;
+
+    @ApiModelProperty("展示版本(适配不同版本页面)")
+    private String version;
+
+    @ApiModelProperty("状态:0-禁用,1-启用")
+    private Integer status;
+
+    @ApiModelProperty("备注说明")
+    private String remark;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty("生效开始时间")
+    private Date effectiveStartTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty("生效结束时间")
+    private Date effectiveEndTime;
+
+    @ApiModelProperty("排序(数字越小越靠前)")
+    private Integer sort;
+}

+ 52 - 0
lot/src/main/java/cn/hobbystocks/auc/request/DiamondPositionSaveRequest.java

@@ -0,0 +1,52 @@
+package cn.hobbystocks.auc.request;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+@Data
+@ApiModel("金刚位创建/更新请求对象")
+public class DiamondPositionSaveRequest {
+
+    @ApiModelProperty("主键ID(更新时必填)")
+    private Long id;
+
+    @ApiModelProperty("金刚位名称")
+    private String name;
+
+    @ApiModelProperty("图标URL")
+    private String iconUrl;
+
+    @ApiModelProperty("类型:home_ad-首页横屏异形banner图、home_alien_banner-首页新版异形轮播图")
+    private String type;
+
+    @ApiModelProperty("跳转地址/路径")
+    private String jumpUrl;
+
+    @ApiModelProperty("描述")
+    private String description;
+
+    @ApiModelProperty("业务模块(如HOME-首页,ORDER-订单,USER-用户中心)")
+    private String businessModule;
+
+    @ApiModelProperty("状态:0-禁用,1-启用")
+    private Integer status;
+
+    @ApiModelProperty("备注说明")
+    private String remark;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty("生效开始时间")
+    private String effectiveStartTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty("生效结束时间")
+    private String effectiveEndTime;
+
+    @ApiModelProperty("排序(数字越小越靠前)")
+    private Integer sort;
+}

+ 66 - 0
lot/src/main/java/cn/hobbystocks/auc/response/DiamondPositionResponse.java

@@ -0,0 +1,66 @@
+package cn.hobbystocks.auc.response;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+@Data
+@ApiModel("金刚位响应对象")
+public class DiamondPositionResponse {
+
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("金刚位名称")
+    private String name;
+
+    @ApiModelProperty("图标URL")
+    private String iconUrl;
+
+    @ApiModelProperty("类型:home_ad-首页横屏异形banner图、home_alien_banner-首页新版异形轮播图")
+    private String type;
+
+    @ApiModelProperty("跳转地址/路径")
+    private String jumpUrl;
+
+    @ApiModelProperty("描述")
+    private String description;
+
+    @ApiModelProperty("业务模块(如HOME-首页,ORDER-订单,USER-用户中心)")
+    private String businessModule;
+
+    @ApiModelProperty("状态:0-禁用,1-启用")
+    private Integer status;
+
+    @ApiModelProperty("备注说明")
+    private String remark;
+
+    @ApiModelProperty("创建id")
+    private String createUser;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("更新id")
+    private String updateUser;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty("更新时间")
+    private LocalDateTime updateTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty("生效开始时间")
+    private LocalDateTime effectiveStartTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @ApiModelProperty("生效结束时间")
+    private LocalDateTime effectiveEndTime;
+
+    @ApiModelProperty("排序(数字越小越靠前)")
+    private Integer sort;
+}

+ 53 - 0
lot/src/main/java/cn/hobbystocks/auc/service/IDiamondPositionService.java

@@ -0,0 +1,53 @@
+package cn.hobbystocks.auc.service;
+
+import cn.hobbystocks.auc.domain.DiamondPosition;
+import cn.hobbystocks.auc.request.DiamondPositionPageRequest;
+import cn.hobbystocks.auc.request.DiamondPositionSaveRequest;
+import cn.hobbystocks.auc.response.DiamondPositionResponse;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+public interface IDiamondPositionService extends IService<DiamondPosition> {
+
+    /**
+     * 根据ID查询金刚位
+     * @param id 主键ID
+     * @return 金刚位信息
+     */
+    DiamondPosition selectDiamondPositionById(Long id);
+
+    /**
+     * 分页查询金刚位列表
+     * @param request 查询条件
+     * @return 金刚位列表
+     */
+    List<DiamondPositionResponse> selectDiamondPositionPageList(DiamondPositionPageRequest request);
+
+
+    /**
+     * 查询有效的金刚位列表
+     * @param businessModule 业务模块
+     * @param version 版本
+     * @return 有效的金刚位列表
+     */
+    List<DiamondPosition> selectActiveDiamondPositions(String businessModule, String version);
+
+
+    /**
+     * 删除金刚位(逻辑删除)
+     * @param id 主键ID
+     * @param updateUser 更新用户
+     * @return 结果
+     */
+    int deleteDiamondPositionById(Long id, String updateUser);
+
+
+    /**
+     * 新增金刚位\更新金刚位
+     * @param request 金刚位信息
+     * @return 结果
+     */
+    int saveOrUpdate(DiamondPositionSaveRequest request);
+}

+ 95 - 0
lot/src/main/java/cn/hobbystocks/auc/service/impl/DiamondPositionServiceImpl.java

@@ -0,0 +1,95 @@
+package cn.hobbystocks.auc.service.impl;
+
+import cn.hobbystocks.auc.common.constant.Constants;
+import cn.hobbystocks.auc.common.core.domain.AjaxResult;
+import cn.hobbystocks.auc.common.utils.DateUtils;
+import cn.hobbystocks.auc.convert.DiamondPositionConvert;
+import cn.hobbystocks.auc.domain.DiamondPosition;
+import cn.hobbystocks.auc.domain.Lot;
+import cn.hobbystocks.auc.mapper.DiamondPositionMapper;
+import cn.hobbystocks.auc.request.DiamondPositionPageRequest;
+import cn.hobbystocks.auc.request.DiamondPositionSaveRequest;
+import cn.hobbystocks.auc.response.DiamondPositionResponse;
+import cn.hobbystocks.auc.service.IDiamondPositionService;
+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.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+@Service
+@Slf4j
+public class DiamondPositionServiceImpl extends ServiceImpl<DiamondPositionMapper, DiamondPosition> implements IDiamondPositionService {
+
+    @Autowired
+    private DiamondPositionMapper diamondPositionMapper;
+
+    @Override
+    public DiamondPosition selectDiamondPositionById(Long id) {
+        return diamondPositionMapper.selectDiamondPositionById(id);
+    }
+
+    @Override
+    public List<DiamondPositionResponse> selectDiamondPositionPageList(DiamondPositionPageRequest request) {
+
+        IPage<DiamondPosition> diamondPositionIPage =new Page<>(request.getPageNum(),request.getPageSize());
+        List<DiamondPosition> diamondPositions = diamondPositionMapper.selectDiamondPositionList(diamondPositionIPage, request);
+        List<DiamondPositionResponse> collect = diamondPositions.stream().map(DiamondPositionConvert.INSTANCE::toDiamondPositionResponse).collect(Collectors.toList());
+        return collect;
+    }
+
+    @Override
+    public List<DiamondPosition> selectActiveDiamondPositions(String businessModule, String version) {
+        return diamondPositionMapper.selectActiveDiamondPositions(businessModule, version);
+    }
+
+    @Override
+    public int deleteDiamondPositionById(Long id, String updateUser) {
+        DiamondPosition existing = diamondPositionMapper.selectDiamondPositionById(id);
+        if (Objects.isNull( existing)) {
+            return 0;
+        }
+        return diamondPositionMapper.deleteDiamondPositionById(id, updateUser);
+    }
+
+    @Override
+    public int saveOrUpdate(DiamondPositionSaveRequest request) {
+        if (Objects.isNull(request)) {
+            return 0;
+        }
+
+        DiamondPosition diamondPosition = new DiamondPosition();
+        diamondPosition.setName(request.getName());
+        diamondPosition.setIconUrl(request.getIconUrl());
+        diamondPosition.setType(request.getType());
+        diamondPosition.setJumpUrl(request.getJumpUrl());
+//        diamondPosition.setJumpParams(request.getJumpParams());
+        diamondPosition.setDescription(request.getDescription());
+        diamondPosition.setBusinessModule(request.getBusinessModule());
+        diamondPosition.setStatus(request.getStatus());
+        diamondPosition.setRemark(request.getRemark());
+
+        diamondPosition.setEffectiveStartTime(DateUtils.parseStringToLocalDateTime(request.getEffectiveStartTime()));
+        diamondPosition.setEffectiveEndTime(DateUtils.parseStringToLocalDateTime(request.getEffectiveEndTime()));
+        diamondPosition.setSort(request.getSort());
+        diamondPosition.setCreateUser("admin");
+        diamondPosition.setCreateTime(LocalDateTime.now());
+        diamondPosition.setUpdateUser("admin");
+        diamondPosition.setUpdateTime(LocalDateTime.now());
+        if (Objects.nonNull(request.getId())) {
+            diamondPosition.setId(request.getId());
+            return diamondPositionMapper.updateDiamondPosition(diamondPosition);
+        } else {
+            return diamondPositionMapper.insertDiamondPosition(diamondPosition);
+        }
+    }
+}

+ 144 - 0
lot/src/main/resources/mapper/DiamondPositionMapper.xml

@@ -0,0 +1,144 @@
+<?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="cn.hobbystocks.auc.mapper.DiamondPositionMapper">
+
+    <resultMap type="cn.hobbystocks.auc.domain.DiamondPosition" id="BaseResultMap">
+        <id     property="id"                   column="id"                   />
+        <result property="name"                 column="name"                 />
+        <result property="iconUrl"              column="icon_url"             />
+        <result property="type"                 column="type"                 />
+        <result property="jumpUrl"              column="jump_url"             />
+        <result property="jumpParams"           column="jump_params"          />
+        <result property="description"          column="description"          />
+        <result property="businessModule"       column="business_module"      />
+        <result property="version"              column="version"              />
+        <result property="status"               column="status"               />
+        <result property="remark"               column="remark"               />
+        <result property="createUser"           column="create_user"          />
+        <result property="createTime"           column="create_time"          />
+        <result property="updateUser"           column="update_user"          />
+        <result property="updateTime"           column="update_time"          />
+        <result property="delFlag"              column="del_flag"             />
+        <result property="effectiveStartTime"   column="effective_start_time"  />
+        <result property="effectiveEndTime"     column="effective_end_time"    />
+        <result property="sort"                 column="sort"                 />
+    </resultMap>
+
+    <sql id="baseColumnList">
+        select id, name, icon_url, type, jump_url, jump_params, description,
+               business_module, version, status, remark, create_user, create_time,
+               update_user, update_time, del_flag, effective_start_time, effective_end_time, sort
+        from t_diamond_position
+    </sql>
+
+    <select id="selectDiamondPositionById" parameterType="Long" resultMap="BaseResultMap">
+        <include refid="baseColumnList"/>
+        where id = #{id} and del_flag = 0
+    </select>
+
+    <select id="selectDiamondPositionList" parameterType="cn.hobbystocks.auc.domain.DiamondPosition" resultMap="BaseResultMap">
+        <include refid="baseColumnList"/>
+        <where>
+            del_flag = 0
+            <if test="request.name != null and diamondPosition.request != ''">
+                AND name like concat('%', #{request.name}, '%')
+            </if>
+            <if test="request.type != null and request.type != ''">
+                AND type = #{request.type}
+            </if>
+            <if test="request.status != null">
+                AND status = #{request.status}
+            </if>
+        </where>
+        order by sort asc, create_time desc
+    </select>
+
+    <select id="selectActiveDiamondPositions" resultMap="BaseResultMap">
+        <include refid="baseColumnList"/>
+        <where>
+            del_flag = 0
+            AND status = 1
+            <if test="businessModule != null and businessModule != ''">
+                AND business_module = #{businessModule}
+            </if>
+            <if test="version != null and version != ''">
+                AND version = #{version}
+            </if>
+            AND (effective_start_time is null OR effective_start_time &lt;= CURRENT_TIMESTAMP)
+            AND (effective_end_time is null OR effective_end_time &gt;= CURRENT_TIMESTAMP)
+        </where>
+        order by sort asc
+    </select>
+
+    <insert id="insertDiamondPosition" parameterType="cn.hobbystocks.auc.domain.DiamondPosition" useGeneratedKeys="true" keyProperty="id">
+        insert into t_diamond_position
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="name != null and name != ''">name,</if>
+            <if test="iconUrl != null and iconUrl != ''">icon_url,</if>
+            <if test="type != null and type != ''">type,</if>
+            <if test="jumpUrl != null and jumpUrl != ''">jump_url,</if>
+            <if test="jumpParams != null and jumpParams != ''">jump_params,</if>
+            <if test="description != null and description != ''">description,</if>
+            <if test="businessModule != null and businessModule != ''">business_module,</if>
+            <if test="version != null and version != ''">version,</if>
+            <if test="status != null">status,</if>
+            <if test="remark != null and remark != ''">remark,</if>
+            <if test="createUser != null and createUser != ''">create_user,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateUser != null and updateUser != ''">update_user,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="effectiveStartTime != null">effective_start_time,</if>
+            <if test="effectiveEndTime != null">effective_end_time,</if>
+            <if test="sort != null">sort,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="name != null and name != ''">#{name},</if>
+            <if test="iconUrl != null and iconUrl != ''">#{iconUrl},</if>
+            <if test="type != null and type != ''">#{type},</if>
+            <if test="jumpUrl != null and jumpUrl != ''">#{jumpUrl},</if>
+            <if test="jumpParams != null and jumpParams != ''">#{jumpParams},</if>
+            <if test="description != null and description != ''">#{description},</if>
+            <if test="businessModule != null and businessModule != ''">#{businessModule},</if>
+            <if test="version != null and version != ''">#{version},</if>
+            <if test="status != null">#{status},</if>
+            <if test="remark != null and remark != ''">#{remark},</if>
+            <if test="createUser != null and createUser != ''">#{createUser},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateUser != null and updateUser != ''">#{updateUser},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="effectiveStartTime != null">#{effectiveStartTime},</if>
+            <if test="effectiveEndTime != null">#{effectiveEndTime},</if>
+            <if test="sort != null">#{sort},</if>
+        </trim>
+    </insert>
+
+    <update id="updateDiamondPosition" parameterType="cn.hobbystocks.auc.domain.DiamondPosition">
+        update t_diamond_position
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="name != null and name != ''">name = #{name},</if>
+            <if test="iconUrl != null">icon_url = #{iconUrl},</if>
+            <if test="type != null and type != ''">type = #{type},</if>
+            <if test="jumpUrl != null">jump_url = #{jumpUrl},</if>
+            <if test="jumpParams != null">jump_params = #{jumpParams},</if>
+            <if test="description != null">description = #{description},</if>
+            <if test="businessModule != null and businessModule != ''">business_module = #{businessModule},</if>
+            <if test="version != null and version != ''">version = #{version},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="updateUser != null and updateUser != ''">update_user = #{updateUser},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="effectiveStartTime != null">effective_start_time = #{effectiveStartTime},</if>
+            <if test="effectiveEndTime != null">effective_end_time = #{effectiveEndTime},</if>
+            <if test="sort != null">sort = #{sort},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="deleteDiamondPositionById">
+        update t_diamond_position set del_flag = 1, update_user = #{updateUser}, update_time = CURRENT_TIMESTAMP
+        where id = #{id}
+    </update>
+
+</mapper>