buyer-api/src/main/java/cn/lili/controller/lmk/NewsController.java
New file @@ -0,0 +1,77 @@ 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.ActivityForm; import cn.lili.modules.lmk.domain.form.NewsForm; import cn.lili.modules.lmk.domain.query.ActivityQuery; import cn.lili.modules.lmk.domain.query.NewsQuery; import cn.lili.modules.lmk.service.NewsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.constraints.NotEmpty; import java.util.List; /** * lmk-shop-java * 用户端新闻 * * @author : zxl * @date : 2025-06-23 18:39 **/ @Validated @RequiredArgsConstructor @Api(value = "新闻", tags = "新闻") @RestController @RequestMapping("/buyer/lmk/news") public class NewsController { private final NewsService newsService; @PostMapping @ApiOperation(value = "添加", notes = "添加") public Result add(@RequestBody @Validated(Add.class) NewsForm form) { return newsService.add(form); } @PutMapping @ApiOperation(value = "修改", notes = "修改") public Result update(@RequestBody @Validated(Update.class) NewsForm form) { return newsService.update(form); } @DeleteMapping("/{id}") @ApiOperation(value = "ID删除", notes = "ID删除") public Result removeById(@PathVariable("id") String id) { return newsService.removeById(id); } @DeleteMapping("/batch") @ApiOperation(value = "批量删除", notes = "批量删除") public Result remove(@RequestBody @NotEmpty(message = "请选择数据") List<String> ids) { return newsService.remove(ids); } @GetMapping("/page") @ApiOperation(value = "分页", notes = "分页") public Result page(NewsQuery query) { return newsService.page(query); } @GetMapping("/{id}") @ApiOperation(value = "详情", notes = "详情") public Result detail(@PathVariable("id") String id) { return newsService.detail(id); } @PutMapping("/publish/{id}") public Result publish(@PathVariable("id") String id){ return newsService.publish(id); } } framework/src/main/java/cn/lili/modules/lmk/domain/entity/News.java
New file @@ -0,0 +1,44 @@ 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; import java.util.Date; /** * 新闻 * */ @Data @TableName("lmk_news") public class News extends BaseEntity { private static final long serialVersionUID = 1L; /** * 标题 */ @TableField("title") private String title; /** * 是否发布 */ @TableField("publish") private Boolean publish; /** * 内容 */ @TableField("content") private String content; /** * 发布日期 */ @TableField("publish_date") private Date publishDate; } framework/src/main/java/cn/lili/modules/lmk/domain/form/NewsForm.java
New file @@ -0,0 +1,55 @@ 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.News; import cn.lili.modules.lmk.domain.entity.ShareClickRecord; import com.baomidou.mybatisplus.annotation.TableField; 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-06-20 */ @Data @ApiModel(value = "NewsForm表单", description = "新闻表单") public class NewsForm extends AbsForm { /** * 标题 */ @NotBlank(message = "标题不能为空", groups = {Add.class, Update.class}) @ApiModelProperty("标题") private String title; /** * 是否发布 */ @NotNull(message = "发布状态不能为空", groups = {Add.class, Update.class}) @ApiModelProperty("是否发布") private Boolean publish; /** * 内容 */ @NotBlank(message = "内容不能为空", groups = {Add.class, Update.class}) @ApiModelProperty("内容") private String content; public static News getEntityByForm(@NonNull NewsForm form, News entity) { if(entity == null) { entity = new News(); } BeanUtils.copyProperties(form, entity); return entity; } } framework/src/main/java/cn/lili/modules/lmk/domain/query/NewsQuery.java
New file @@ -0,0 +1,23 @@ package cn.lili.modules.lmk.domain.query; import cn.lili.base.AbsQuery; import io.swagger.annotations.ApiModel; import lombok.Data; /** * 新闻查询参数 * * @author zxl * @since 2025-06-20 */ @Data @ApiModel(value = "新闻查询参数", description = "新闻查询参数") public class NewsQuery extends AbsQuery { /** * 标题 */ private String title; private String publish; } framework/src/main/java/cn/lili/modules/lmk/domain/vo/NewsVO.java
New file @@ -0,0 +1,49 @@ package cn.lili.modules.lmk.domain.vo; import cn.lili.base.AbsVo; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; /** * lmk-shop-java * 新闻vo * * @author : zxl * @date : 2025-06-20 14:43 **/ @Data @ApiModel(value = "NewsVO响应数据", description = "响应数据") public class NewsVO extends AbsVo { /** * 标题 */ @ApiModelProperty(value = "标题") private String title; /** * 是否发布 */ @ApiModelProperty(value = "是否发布") private Boolean publish; /** * 内容 */ @ApiModelProperty(value = "内容") private String content; /** * 发布日期 */ @ApiModelProperty(value = "发布日期") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date publishDate; } framework/src/main/java/cn/lili/modules/lmk/mapper/NewsMapper.java
New file @@ -0,0 +1,29 @@ package cn.lili.modules.lmk.mapper; import cn.lili.modules.lmk.domain.entity.News; import cn.lili.modules.lmk.domain.query.ActivityQuery; import cn.lili.modules.lmk.domain.query.NewsQuery; import cn.lili.modules.lmk.domain.vo.ActivityVO; import cn.lili.modules.lmk.domain.vo.NewsVO; 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; /** * 新闻接口 */ @Mapper public interface NewsMapper extends BaseMapper<News> { /** * id查找新闻详情 * @param id * @return */ NewsVO getById(String id); /** * 分页 */ IPage getPage(IPage page, @Param("query") NewsQuery query); } framework/src/main/java/cn/lili/modules/lmk/service/NewsService.java
New file @@ -0,0 +1,61 @@ package cn.lili.modules.lmk.service; import cn.lili.base.Result; import cn.lili.modules.lmk.domain.entity.MySubscribe; import cn.lili.modules.lmk.domain.entity.News; import cn.lili.modules.lmk.domain.form.NewsForm; import cn.lili.modules.lmk.domain.query.NewsQuery; import com.baomidou.mybatisplus.extension.service.IService; import org.springframework.stereotype.Service; import java.util.List; /** * 新闻 服务类 */ public interface NewsService extends IService<News> { /** * 添加 * @param form * @return */ Result add(NewsForm form); /** * 修改 * @param form * @return */ Result update(NewsForm form); /** * 批量删除 * @param ids * @return */ Result remove(List<String> ids); /** * id删除 * @param id * @return */ Result removeById(String id); /** * 分页查询 * @param query * @return */ Result page(NewsQuery query); /** * 根据id查找 * @param id * @return */ Result detail(String id); Result publish(String id); } framework/src/main/java/cn/lili/modules/lmk/service/impl/NewsServiceImpl.java
New file @@ -0,0 +1,108 @@ package cn.lili.modules.lmk.service.impl; import cn.lili.base.Result; import cn.lili.common.enums.ActivityCoverTypeEnum; import cn.lili.modules.lmk.domain.entity.Activity; import cn.lili.modules.lmk.domain.entity.MySubscribe; import cn.lili.modules.lmk.domain.entity.News; import cn.lili.modules.lmk.domain.form.ActivityForm; import cn.lili.modules.lmk.domain.form.NewsForm; import cn.lili.modules.lmk.domain.query.NewsQuery; import cn.lili.modules.lmk.domain.vo.ActivityVO; import cn.lili.modules.lmk.domain.vo.NewsVO; import cn.lili.modules.lmk.mapper.NewsMapper; import cn.lili.modules.lmk.service.NewsService; import cn.lili.utils.PageUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; 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.*; import java.util.function.Function; /** * lmk-shop-java * 新闻服务实现类 * * @author : zxl * @date : 2025-06-20 14:55 **/ @Service @RequiredArgsConstructor public class NewsServiceImpl extends ServiceImpl<NewsMapper, News> implements NewsService { private final NewsMapper newsMapper; @Override public Result add(NewsForm form) { News entity = NewsForm.getEntityByForm(form, null); baseMapper.insert(entity); return Result.ok("添加成功"); } @Override public Result update(NewsForm form) { News entity = baseMapper.selectById(form.getId()); Assert.notNull(entity, "记录不存在"); BeanUtils.copyProperties(form, entity); baseMapper.updateById(entity); return Result.ok("修改成功"); } @Override public Result remove(List<String> ids) { baseMapper.deleteBatchIds(ids); return Result.ok("删除成功"); } @Override public Result removeById(String id) { //判断是否发布发布则提示先下架,再删除 News entity = baseMapper.selectById(id); if(entity.getPublish()){ throw new RuntimeException("该新闻已发布"); } baseMapper.deleteById(id); return Result.ok("删除成功"); } @Override public Result page(NewsQuery query) { IPage<NewsVO> page = PageUtil.getPage(query, NewsVO.class); baseMapper.getPage(page, query); return Result.ok().data(page.getRecords()).total(page.getTotal()); } @Override public Result detail(String id) { NewsVO vo = baseMapper.getById(id); Assert.notNull(vo, "记录不存在"); return Result.ok().data(vo); } @Override public Result publish(String id) { News entity = baseMapper.selectById(id); if (!entity.getPublish()) { entity.setPublishDate(new Date()); }else { entity.setPublishDate(null); } entity.setPublish(!entity.getPublish()); baseMapper.updateById(entity); return Result.ok("成功"); } } framework/src/main/resources/mapper/lmk/NewsMapper.xml
New file @@ -0,0 +1,44 @@ <?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.NewsMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.NewsVO"> <result column="title" property="title" /> <result column="content" property="content"/> <result column="publish" property="publish" /> <result column="publishDate" property="publish_date" /> </resultMap> <select id="getById" resultMap="BaseResultMap"> SELECT LN.id, LN.publish, LN.publish_date, LN.content, LN.title FROM lmk_news LN WHERE LN.id = #{id} AND LN.delete_flag = 0 </select> <select id="getPage" resultMap="BaseResultMap"> SELECT LN.id, LN.publish, LN.publish_date, LN.content, LN.title FROM lmk_news LN WHERE LN.delete_flag = 0 <if test="query.title != null and query.title != ''">AND LN.title LIKE CONCAT('%', #{query.title}, '%')</if> <if test="query.publish != null and query.publish != ''">AND LN.publish = #{query.publish}</if> </select> </mapper> manager-api/src/main/java/cn/lili/controller/lmk/NewsController.java
New file @@ -0,0 +1,77 @@ 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.ActivityForm; import cn.lili.modules.lmk.domain.form.NewsForm; import cn.lili.modules.lmk.domain.query.ActivityQuery; import cn.lili.modules.lmk.domain.query.NewsQuery; import cn.lili.modules.lmk.service.NewsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.constraints.NotEmpty; import java.util.List; /** * lmk-shop-java * 新闻 * * @author : zxl * @date : 2025-06-20 15:41 **/ @Validated @RequiredArgsConstructor @Api(value = "新闻", tags = "新闻") @RestController @RequestMapping("/manager/news") public class NewsController { private final NewsService newsService; @PostMapping @ApiOperation(value = "添加", notes = "添加") public Result add(@RequestBody @Validated(Add.class) NewsForm form) { return newsService.add(form); } @PutMapping @ApiOperation(value = "修改", notes = "修改") public Result update(@RequestBody @Validated(Update.class) NewsForm form) { return newsService.update(form); } @DeleteMapping("/{id}") @ApiOperation(value = "ID删除", notes = "ID删除") public Result removeById(@PathVariable("id") String id) { return newsService.removeById(id); } @DeleteMapping("/batch") @ApiOperation(value = "批量删除", notes = "批量删除") public Result remove(@RequestBody @NotEmpty(message = "请选择数据") List<String> ids) { return newsService.remove(ids); } @GetMapping("/page") @ApiOperation(value = "分页", notes = "分页") public Result page(NewsQuery query) { return newsService.page(query); } @GetMapping("/{id}") @ApiOperation(value = "详情", notes = "详情") public Result detail(@PathVariable("id") String id) { return newsService.detail(id); } @PutMapping("/publish/{id}") public Result publish(@PathVariable("id") String id){ return newsService.publish(id); } }