framework/src/main/java/cn/lili/modules/lmk/domain/entity/StoreTag.java
New file @@ -0,0 +1,27 @@ package cn.lili.modules.lmk.domain.entity; import cn.lili.mybatis.BaseEntity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; /** * * * @author zxl * @since 2025-10-09 */ @Data @TableName("lmk_store_tag") public class StoreTag extends BaseEntity { private static final long serialVersionUID = 1L; @TableField("tag_name") /** 标签名称 */ private String tagName; } framework/src/main/java/cn/lili/modules/lmk/domain/entity/StoreTagRef.java
New file @@ -0,0 +1,28 @@ package cn.lili.modules.lmk.domain.entity; import cn.lili.mybatis.BaseEntity; import cn.lili.mybatis.BaseIdEntity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; /** * 视频标签中间表 * * @author xp * @since 2025-05-19 */ @Data @TableName("lmk_store_tag_ref") public class StoreTagRef extends BaseEntity { @TableField("store_id") /** 视频id */ private String storeId; @TableField("store_tag_id") /** 视频标签id */ private String storeTagId; } framework/src/main/java/cn/lili/modules/lmk/domain/form/StoreTagForm.java
New file @@ -0,0 +1,40 @@ package cn.lili.modules.lmk.domain.form; import cn.lili.base.AbsForm; import cn.lili.group.Add; import cn.lili.group.Update; import cn.lili.modules.lmk.domain.entity.StoreTag; import org.springframework.beans.BeanUtils; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import org.springframework.lang.NonNull; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; /** * 表单 * * @author zxl * @since 2025-10-09 */ @Data @ApiModel(value = "StoreTag表单", description = "表单") public class StoreTagForm extends AbsForm { @NotBlank(message = "标签名不能为空", groups = {Add.class, Update.class}) @ApiModelProperty("标签名") private String tagName; public static StoreTag getEntityByForm(@NonNull StoreTagForm form, StoreTag entity) { if(entity == null) { entity = new StoreTag(); } BeanUtils.copyProperties(form, entity); return entity; } } framework/src/main/java/cn/lili/modules/lmk/domain/form/StoreTagRefForm.java
New file @@ -0,0 +1,43 @@ package cn.lili.modules.lmk.domain.form; import cn.lili.base.AbsForm; import cn.lili.group.Add; import cn.lili.group.Update; import cn.lili.modules.lmk.domain.entity.StoreTagRef; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.beans.BeanUtils; import org.springframework.lang.NonNull; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; /** * 客户标签中间表表单 * * @author zxl * @since 2025-05-14 */ @Data @ApiModel(value = "LmkStoreTagRef表单", description = "客户标签中间表表单") public class StoreTagRefForm extends AbsForm { @NotNull(message = "不能为空", groups = {Add.class, Update.class}) @ApiModelProperty("客户id") private String storeId; @NotBlank(message = "不能为空", groups = {Add.class, Update.class}) @ApiModelProperty("标签id") private String storeTagId; public static StoreTagRef getEntityByForm(@NonNull StoreTagRefForm form, StoreTagRef entity) { if(entity == null) { entity = new StoreTagRef(); } BeanUtils.copyProperties(form, entity); return entity; } } framework/src/main/java/cn/lili/modules/lmk/domain/query/StoreTagQuery.java
New file @@ -0,0 +1,18 @@ package cn.lili.modules.lmk.domain.query; import cn.lili.base.AbsQuery; import io.swagger.annotations.ApiModel; import lombok.Data; /** * 查询 * * @author zxl * @since 2025-05-14 */ @Data @ApiModel(value = "StoreTagQuery参数", description = "查询参数") public class StoreTagQuery extends AbsQuery { private String tagName; } framework/src/main/java/cn/lili/modules/lmk/domain/query/StoreTagRefQuery.java
New file @@ -0,0 +1,17 @@ package cn.lili.modules.lmk.domain.query; import cn.lili.base.AbsQuery; import io.swagger.annotations.ApiModel; import lombok.Data; /** * 查询 * * @author zxl * @since 2025-05-14 */ @Data @ApiModel(value = "StoreTagQuery参数", description = "查询参数") public class StoreTagRefQuery extends AbsQuery { } framework/src/main/java/cn/lili/modules/lmk/domain/vo/StoreTagRefVO.java
New file @@ -0,0 +1,31 @@ package cn.lili.modules.lmk.domain.vo; import cn.lili.base.AbsVo; import cn.lili.modules.lmk.domain.entity.StoreTagRef; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.beans.BeanUtils; import org.springframework.lang.NonNull; @Data @ApiModel(value = "客户标签中间表响应数据", description = "客户标签中间表响应数据") public class StoreTagRefVO extends AbsVo { /** */ @ApiModelProperty("") private String storeId; /** */ @ApiModelProperty("") private String storeTagId; private String tagName; public static StoreTagRefVO getVoByEntity(@NonNull StoreTagRef entity, StoreTagRefVO vo) { if(vo == null) { vo = new StoreTagRefVO(); } BeanUtils.copyProperties(entity, vo); return vo; } } framework/src/main/java/cn/lili/modules/lmk/domain/vo/StoreTagVO.java
New file @@ -0,0 +1,39 @@ package cn.lili.modules.lmk.domain.vo; import java.util.List; import cn.lili.base.AbsVo; import cn.lili.modules.lmk.domain.entity.StoreTag; import org.springframework.lang.NonNull; import org.springframework.beans.BeanUtils; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; /** * 展示 * * @author zxl * @since 2025-10-09 */ @Data @ApiModel(value = "响应数据", description = "响应数据") public class StoreTagVO extends AbsVo { /** 标签名 */ @ApiModelProperty("标签名") private String tagName; private Boolean deleteFlag; public static StoreTagVO getVoByEntity(@NonNull StoreTag entity, StoreTagVO vo) { if(vo == null) { vo = new StoreTagVO(); } BeanUtils.copyProperties(entity, vo); return vo; } } framework/src/main/java/cn/lili/modules/lmk/mapper/StoreTagMapper.java
New file @@ -0,0 +1,34 @@ package cn.lili.modules.lmk.mapper; import cn.lili.modules.lmk.domain.entity.StoreTag; import cn.lili.modules.lmk.domain.query.StoreTagQuery; import cn.lili.modules.lmk.domain.vo.StoreTagVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * Mapper 接口 * * @author zxl * @since 2025-10-09 */ @Mapper public interface StoreTagMapper extends BaseMapper<StoreTag> { /** * id查找 * @param id * @return */ StoreTagVO getById(String id); /** * 分页 */ IPage getPage(IPage page, @Param("query") StoreTagQuery query); } framework/src/main/java/cn/lili/modules/lmk/mapper/StoreTagRefMapper.java
New file @@ -0,0 +1,39 @@ package cn.lili.modules.lmk.mapper; import cn.lili.modules.lmk.domain.entity.StoreTag; import cn.lili.modules.lmk.domain.entity.StoreTagRef; import cn.lili.modules.lmk.domain.query.StoreTagRefQuery; import cn.lili.modules.lmk.domain.vo.StoreTagRefVO; import cn.lili.modules.lmk.domain.vo.StoreTagVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; /** * Mapper 接口 * * @author zxl * @since 2025-05-14 */ @Mapper public interface StoreTagRefMapper extends BaseMapper<StoreTagRef> { /** * id查找 * @param id * @return */ StoreTagRefVO getById(Integer id); /** * 分页 */ IPage getPage(IPage page, @Param("query") StoreTagRefQuery query); List<StoreTagVO> getStoreTagVOList(String storeId); } framework/src/main/java/cn/lili/modules/lmk/service/StoreTagRefService.java
New file @@ -0,0 +1,64 @@ package cn.lili.modules.lmk.service; import cn.lili.base.Result; import cn.lili.modules.lmk.domain.entity.StoreTagRef; import cn.lili.modules.lmk.domain.form.StoreTagRefForm; import cn.lili.modules.lmk.domain.query.CustomerTagRefQuery; import cn.lili.modules.lmk.domain.query.StoreTagRefQuery; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; public interface StoreTagRefService extends IService<StoreTagRef> { /** * 添加 * @param form * @return */ Result add(StoreTagRefForm form); /** * 修改 * @param form * @return */ Result update(StoreTagRefForm form); /** * 批量删除 * @param ids * @return */ Result remove(List<String> ids); /** * id删除 * @param id * @return */ Result removeById(String id); /** * 分页查询 * @param query * @return */ Result page(StoreTagRefQuery query); /** * 根据id查找 * @param id * @return */ Result detail(Integer id); /** * 列表 * @return */ Result all(); Result getStoreTagsById(String storeId); } framework/src/main/java/cn/lili/modules/lmk/service/StoreTagService.java
@@ -56,11 +56,11 @@ * @param id * @return */ Result detail(Integer id); Result detail(String id); /** * 列表 * @return */ Result all(); Result all(StoreTagQuery query); } framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreTagRefServiceImpl.java
New file @@ -0,0 +1,129 @@ package cn.lili.modules.lmk.service.impl; import cn.lili.base.Result; import cn.lili.modules.lmk.domain.entity.CustomerTagRef; import cn.lili.modules.lmk.domain.entity.StoreTagRef; import cn.lili.modules.lmk.domain.form.CustomerTagRefForm; import cn.lili.modules.lmk.domain.form.StoreTagRefForm; import cn.lili.modules.lmk.domain.query.CustomerTagRefQuery; import cn.lili.modules.lmk.domain.query.StoreTagRefQuery; import cn.lili.modules.lmk.domain.vo.CustomerTagRefVO; import cn.lili.modules.lmk.domain.vo.StoreTagRefVO; import cn.lili.modules.lmk.mapper.CustomerTagRefMapper; import cn.lili.modules.lmk.mapper.StoreTagRefMapper; import cn.lili.modules.lmk.service.StoreTagRefService; import cn.lili.utils.PageUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.util.Assert; import java.util.List; import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class StoreTagRefServiceImpl extends ServiceImpl<StoreTagRefMapper, StoreTagRef> implements StoreTagRefService { private final StoreTagRefMapper storeTagRefMapper; /** * 添加 * @param form * @return */ @Override public Result add(StoreTagRefForm form) { System.out.println(form); StoreTagRef entity = StoreTagRefForm.getEntityByForm(form, null); System.out.println(entity); baseMapper.insert(entity); return Result.ok("添加成功"); } /** * 修改 * @param form * @return */ @Override public Result update(StoreTagRefForm form) { StoreTagRef entity = baseMapper.selectById(form.getId()); // 为空抛IllegalArgumentException,做全局异常处理 Assert.notNull(entity, "记录不存在"); BeanUtils.copyProperties(form, entity); baseMapper.updateById(entity); return Result.ok("修改成功"); } /** * 批量删除 * @param ids * @return */ @Override public Result remove(List<String> ids) { baseMapper.deleteBatchIds(ids); return Result.ok("删除成功"); } /** * id删除 * @param id * @return */ @Override public Result removeById(String id) { baseMapper.deleteById(id); return Result.ok("删除成功"); } /** * 分页查询 * @param query * @return */ @Override public Result page(StoreTagRefQuery query) { IPage<StoreTagRefVO> page = PageUtil.getPage(query, StoreTagRefVO.class); baseMapper.getPage(page, query); return Result.ok().data(page.getRecords()).total(page.getTotal()); } /** * 根据id查找 * @param id * @return */ @Override public Result detail(Integer id) { StoreTagRefVO vo = baseMapper.getById(id); Assert.notNull(vo, "记录不存在"); return Result.ok().data(vo); } /** * 列表 * @return */ @Override public Result all() { List<StoreTagRef> entities = baseMapper.selectList(null); List<StoreTagRefVO> vos = entities.stream() .map(entity -> StoreTagRefVO.getVoByEntity(entity, null)) .collect(Collectors.toList()); return Result.ok().data(vos); } @Override public Result getStoreTagsById(String storeId) { return Result.ok().data(baseMapper.getStoreTagVOList(storeId)); } } framework/src/main/java/cn/lili/modules/lmk/service/impl/StoreTagServiceImpl.java
New file @@ -0,0 +1,129 @@ package cn.lili.modules.lmk.service.impl; import cn.lili.base.Result; import cn.lili.modules.lmk.domain.entity.StoreTag; import cn.lili.modules.lmk.domain.form.StoreTagForm; import cn.lili.modules.lmk.domain.query.StoreTagQuery; import cn.lili.modules.lmk.domain.vo.StoreTagVO; import cn.lili.modules.lmk.mapper.StoreTagMapper; import cn.lili.modules.lmk.service.StoreTagService; import cn.lili.utils.PageUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.collections.list.LazyList; import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.util.Assert; import java.util.List; import java.util.stream.Collectors; /** * 服务实现类 * * @author zxl * @since 2025-10-09 */ @Service @RequiredArgsConstructor public class StoreTagServiceImpl extends ServiceImpl<StoreTagMapper, StoreTag> implements StoreTagService { private final StoreTagMapper storeTagMapper; /** * 添加 * @param form * @return */ @Override public Result add(StoreTagForm form) { StoreTag entity = StoreTagForm.getEntityByForm(form, null); baseMapper.insert(entity); return Result.ok("添加成功"); } /** * 修改 * @param form * @return */ @Override public Result update(StoreTagForm form) { StoreTag entity = baseMapper.selectById(form.getId()); // 为空抛IllegalArgumentException,做全局异常处理 Assert.notNull(entity, "记录不存在"); BeanUtils.copyProperties(form, entity); baseMapper.updateById(entity); return Result.ok("修改成功"); } /** * 批量删除 * @param ids * @return */ @Override public Result remove(List<String> ids) { baseMapper.deleteBatchIds(ids); return Result.ok("删除成功"); } /** * id删除 * @param id * @return */ @Override public Result removeById(String id) { baseMapper.deleteById(id); //判断标签是否被使用 return Result.ok("删除成功"); } /** * 分页查询 * @param query * @return */ @Override public Result page(StoreTagQuery query) { IPage<StoreTagVO> page = PageUtil.getPage(query, StoreTagVO.class); baseMapper.getPage(page, query); return Result.ok().data(page.getRecords()).total(page.getTotal()); } /** * 根据id查找 * @param id * @return */ @Override public Result detail(String id) { StoreTagVO vo = baseMapper.getById(id); Assert.notNull(vo, "记录不存在"); return Result.ok().data(vo); } /** * 列表 * @return */ @Override public Result all(StoreTagQuery query) { List<StoreTag> entities = new LambdaQueryChainWrapper<>(baseMapper) .like(StoreTag::getTagName,query.getTagName()) .list(); List<StoreTagVO> vos = entities.stream() .map(entity -> StoreTagVO.getVoByEntity(entity, null)) .collect(Collectors.toList()); return Result.ok().data(vos); } } framework/src/main/resources/mapper/lmk/StoreTagMapper.xml
New file @@ -0,0 +1,55 @@ <?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.lili.modules.lmk.mapper.StoreTagMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.StoreTagVO"> <result column="tag_name" property="tagName" /> <result column="delete_flag" property="deleteFlag" /> <result column="update_time" property="updateTime" /> <result column="update_by" property="updateBy" /> <result column="create_time" property="createTime" /> <result column="create_by" property="createBy" /> </resultMap> <select id="getById" resultMap="BaseResultMap"> SELECT LST.tag_name, LST.delete_flag, LST.update_time, LST.update_by, LST.create_time, LST.create_by, LST.id FROM lmk_store_tag LST WHERE LST.id = #{id} AND LST.delete_flag = 0 </select> <select id="getPage" resultMap="BaseResultMap"> SELECT LST.tag_name, LST.delete_flag, LST.update_time, LST.update_by, LST.create_time, LST.create_by, LST.id FROM lmk_store_tag LST WHERE LST.delete_flag = 0 <if test="query.tagName != null and query.tagName !=''"> AND LST.tag_name LIKE CONCAT('%',#{query.tagName},'%') </if> </select> </mapper> framework/src/main/resources/mapper/lmk/StoreTagRefMapper.xml
New file @@ -0,0 +1,19 @@ <?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.lili.modules.lmk.mapper.StoreTagRefMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.StoreTagRefVO"> <id column="id" property="id"/> <result column="tag_name" property="tagName" /> </resultMap> <select id="getStoreTagVOList" resultMap="BaseResultMap"> select DISTINCT LSTR.id,LST.tag_name from lmk_store_tag_ref LSTR INNER JOIN lmk_store_tag LST on LST.id = LSTR.store_tag_id WHERE LSTR.store_id = #{storeId} AND LSTR.delete_flag = 0 AND LST.delete_flag = 0 </select> </mapper> manager-api/src/main/java/cn/lili/controller/lmk/StoreTagController.java
New file @@ -0,0 +1,95 @@ package cn.lili.controller.lmk; import cn.lili.base.Result; import cn.lili.group.Add; import cn.lili.group.Update; import cn.lili.modules.lmk.domain.form.StoreTagForm; import cn.lili.modules.lmk.domain.form.StoreTagRefForm; import cn.lili.modules.lmk.domain.query.StoreTagQuery; import cn.lili.modules.lmk.service.StoreTagRefService; import cn.lili.modules.lmk.service.StoreTagService; import org.springframework.validation.annotation.Validated; import org.springframework.security.access.prepost.PreAuthorize; import lombok.RequiredArgsConstructor; import java.util.List; import org.springframework.validation.annotation.Validated; import javax.validation.constraints.NotEmpty; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; /** * 前端控制器 * * @author zxl * @since 2025-10-09 */ @Validated @RequiredArgsConstructor @Api(value = "", tags = "管理") @RestController @RequestMapping("/manager/lmk/store-tag") public class StoreTagController { private final StoreTagService storeTagService; private final StoreTagRefService storeTagRefService; @PostMapping @ApiOperation(value = "添加", notes = "添加") public Result add(@RequestBody @Validated(Add.class) StoreTagForm form) { return storeTagService.add(form); } @PutMapping @ApiOperation(value = "修改", notes = "修改") public Result update(@RequestBody @Validated(Update.class) StoreTagForm form) { return storeTagService.update(form); } @DeleteMapping("/{id}") @ApiOperation(value = "ID删除", notes = "ID删除") public Result removeById(@PathVariable("id") String id) { return storeTagService.removeById(id); } @DeleteMapping("/batch") @ApiOperation(value = "批量删除", notes = "批量删除") public Result remove(@RequestBody @NotEmpty(message = "请选择数据") List<String> ids) { return storeTagService.remove(ids); } @GetMapping("/page") @ApiOperation(value = "分页", notes = "分页") public Result page(StoreTagQuery query) { return storeTagService.page(query); } @GetMapping("/{id}") @ApiOperation(value = "详情", notes = "详情") public Result detail(@PathVariable("id") String id) { return storeTagService.detail(id); } @GetMapping("/list") @ApiOperation(value = "列表", notes = "列表") public Result list(StoreTagQuery query) { return storeTagService.all(query); } @PostMapping("/bind") public Result bindTagByStore(@RequestBody StoreTagRefForm form) { return storeTagRefService.add(form); } @GetMapping("/storeTags/{storeId}") public Result getStoreTagsById(@PathVariable String storeId){ return storeTagRefService.getStoreTagsById(storeId); } @DeleteMapping("/delTagByStoreTagRefId/{id}") public Result delTagByStoreTagRefId(@PathVariable String id) { return storeTagRefService.removeById(id); } }