Browse Source

通知公告管理

master
dimengzhe 1 year ago
parent
commit
a47e5b8a2f
  1. 30
      anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNotice.java
  2. 35
      anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticeDetailsVo.java
  3. 38
      anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticeDto.java
  4. 53
      anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticeFeign.java
  5. 12
      anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticeFeignFallback.java
  6. 16
      anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticeListVo.java
  7. 25
      anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticeQuery.java
  8. 24
      anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticeVo.java
  9. 21
      anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticesQuery.java
  10. 21
      anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticessQuery.java
  11. 16
      anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/UrlQuery.java
  12. 25
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysnotice/SysNoticeMapper.java
  13. 26
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysnotice/SysNoticeMapper.xml
  14. 63
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysnotice/SysNoticeRest.java
  15. 175
      anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysnotice/SysNoticeService.java
  16. 28
      doc/databases/portal_tables.sql

30
anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNotice.java

@ -0,0 +1,30 @@
package com.yxt.anrui.portal.api.sysnotice;
import com.yxt.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @description:
* @author: dimengzhe
* @date: 2024/1/30
**/
@Data
public class SysNotice extends BaseEntity {
private static final long serialVersionUID = 8324297245354558865L;
@ApiModelProperty("标题")
private String title;
@ApiModelProperty("有效期至")
private String validityDate;
@ApiModelProperty("类别")
private String type;
@ApiModelProperty("类别key")
private String typeKey;
@ApiModelProperty("是否置顶")
private String topping;
@ApiModelProperty("内容")
private String content;
@ApiModelProperty("附件")
private String files;
}

35
anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticeDetailsVo.java

@ -0,0 +1,35 @@
package com.yxt.anrui.portal.api.sysnotice;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @description:
* @author: dimengzhe
* @date: 2024/1/31
**/
@Data
public class SysNoticeDetailsVo {
private String sid;
@ApiModelProperty("标题")
private String title;
@ApiModelProperty("有效期至")
private String validityDate;
@ApiModelProperty("类别")
private String type;
@ApiModelProperty("类别key")
private String typeKey;
@ApiModelProperty("是否置顶")
private String topping;
@ApiModelProperty("内容")
private String content;
@ApiModelProperty("附件")
private List<UrlQuery> filesList = new ArrayList<>();
private String createTime;
}

38
anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticeDto.java

@ -0,0 +1,38 @@
package com.yxt.anrui.portal.api.sysnotice;
import com.yxt.common.core.dto.Dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @description:
* @author: dimengzhe
* @date: 2024/1/31
**/
@Data
public class SysNoticeDto implements Dto {
private static final long serialVersionUID = 8074080443156103663L;
private String sid;
@ApiModelProperty("标题")
private String title;
@ApiModelProperty("有效期至")
private String validityDate;
@ApiModelProperty("类别")
private String type;
@ApiModelProperty("类别key")
private String typeKey;
@ApiModelProperty("是否置顶")
private String topping;
@ApiModelProperty("内容")
private String content;
@ApiModelProperty("附件")
private List<UrlQuery> filesList = new ArrayList<>();
private String createTime;
}

53
anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticeFeign.java

@ -0,0 +1,53 @@
package com.yxt.anrui.portal.api.sysnotice;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @description:
* @author: dimengzhe
* @date: 2024/1/30
**/
@Api(tags = "通知公告")
@FeignClient(
contextId = "anrui-portal-SysNotice",
name = "anrui-portal",
path = "v1/SysNotice",
fallback = SysNoticeFeignFallback.class)
public interface SysNoticeFeign {
@ApiOperation("分页列表")
@PostMapping("/listPage")
ResultBean<PagerVo<SysNoticeVo>> listPage(@RequestBody PagerQuery<SysNoticeQuery> pagerQuery);
@ApiOperation("新增修改保存")
@PostMapping("/saveOrUpdate")
ResultBean saveOrUpdate(@RequestBody SysNoticeDto dto);
@ApiOperation("初始化")
@GetMapping("/getDetails")
ResultBean<SysNoticeDetailsVo> getDetails(@RequestParam("sid") String sid);
@ApiOperation("开启关闭:1是开启,2是关闭")
@PostMapping("/setState")
ResultBean setState(@RequestBody SysNoticesQuery query);
@ApiOperation("置顶是,取消置顶否")
@PostMapping("/setTopping")
ResultBean setTopping(@RequestBody SysNoticessQuery query);
@ApiOperation("首页通知公告")
@GetMapping("/getLists")
ResultBean<List<SysNoticeListVo>> getLists();
@ApiOperation("删除/批量删除")
@DeleteMapping("/delBySids")
ResultBean delBySids(@RequestBody String[] sids);
}

12
anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticeFeignFallback.java

@ -0,0 +1,12 @@
package com.yxt.anrui.portal.api.sysnotice;
import org.springframework.stereotype.Component;
/**
* @description:
* @author: dimengzhe
* @date: 2024/1/30
**/
@Component
public class SysNoticeFeignFallback {
}

16
anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticeListVo.java

@ -0,0 +1,16 @@
package com.yxt.anrui.portal.api.sysnotice;
import lombok.Data;
/**
* @description:
* @author: dimengzhe
* @date: 2024/1/31
**/
@Data
public class SysNoticeListVo {
private String sid;
private String title;
private String createTime;
}

25
anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticeQuery.java

@ -0,0 +1,25 @@
package com.yxt.anrui.portal.api.sysnotice;
import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @description:
* @author: dimengzhe
* @date: 2024/1/30
**/
@Data
public class SysNoticeQuery implements Query {
private static final long serialVersionUID = -2087301472856056824L;
@ApiModelProperty("标题")
private String title;
@ApiModelProperty("发布时间开始")
private String createDateStart;
@ApiModelProperty("发布时间结束")
private String createDateEnd;
@ApiModelProperty("是否置顶")
private String topping;
@ApiModelProperty("开启1,关闭2")
private String state;
}

24
anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticeVo.java

@ -0,0 +1,24 @@
package com.yxt.anrui.portal.api.sysnotice;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @description:
* @author: dimengzhe
* @date: 2024/1/30
**/
@Data
public class SysNoticeVo {
private String sid;
@ApiModelProperty("标题")
private String title;
@ApiModelProperty("发布时间")
private String createDate;
@ApiModelProperty("有效期至")
private String validityDate;
@ApiModelProperty("状态")
private String stateValue;
@ApiModelProperty("是否置顶")
private String topping;
}

21
anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticesQuery.java

@ -0,0 +1,21 @@
package com.yxt.anrui.portal.api.sysnotice;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @description:
* @author: dimengzhe
* @date: 2024/1/31
**/
@Data
public class SysNoticesQuery {
@ApiModelProperty("sids")
private List<String> sidsList = new ArrayList<>();
@ApiModelProperty("1开启、2关闭")
private String state;
}

21
anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/SysNoticessQuery.java

@ -0,0 +1,21 @@
package com.yxt.anrui.portal.api.sysnotice;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @description:
* @author: dimengzhe
* @date: 2024/1/31
**/
@Data
public class SysNoticessQuery {
@ApiModelProperty("sids")
private List<String> sidsList = new ArrayList<>();
@ApiModelProperty("置顶是、取消置顶否")
private String topping;
}

16
anrui-portal/anrui-portal-api/src/main/java/com/yxt/anrui/portal/api/sysnotice/UrlQuery.java

@ -0,0 +1,16 @@
package com.yxt.anrui.portal.api.sysnotice;
import lombok.Data;
/**
* @description:
* @author: dimengzhe
* @date: 2024/1/31
**/
@Data
public class UrlQuery {
private String url;
}

25
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysnotice/SysNoticeMapper.java

@ -0,0 +1,25 @@
package com.yxt.anrui.portal.biz.sysnotice;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.yxt.anrui.portal.api.sysnotice.SysNotice;
import com.yxt.anrui.portal.api.sysnotice.SysNoticeListVo;
import com.yxt.anrui.portal.api.sysnotice.SysNoticeVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @description:
* @author: dimengzhe
* @date: 2024/1/30
**/
@Mapper
public interface SysNoticeMapper extends BaseMapper<SysNotice> {
IPage<SysNoticeVo> selectPageVo(IPage<SysNotice> page, @Param(Constants.WRAPPER) QueryWrapper<SysNotice> qw);
List<SysNoticeListVo> getLists();
}

26
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysnotice/SysNoticeMapper.xml

@ -0,0 +1,26 @@
<?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.yxt.anrui.portal.biz.sysnotice.SysNoticeMapper">
<select id="selectPageVo" resultType="com.yxt.anrui.portal.api.sysnotice.SysNoticeVo">
select sn.sid,sn.title,
DATE_FORMAT(sn.createTime, '%Y-%m-%d') as createDate,
sn.validityDate,
case state
when 1
then '开启'
when 2 then '关闭' end as stateValue,
sn.topping
from sys_notice sn
<where>
${ew.sqlSegment}
</where>
</select>
<select id="getLists" resultType="com.yxt.anrui.portal.api.sysnotice.SysNoticeListVo">
select sid, title, DATE_FORMAT(createTime, '%Y-%m-%d') as createTime
from sys_notice
where state = 1 and (validityDate is null or validityDate = '' or validityDate>NOW())
order by topping desc, createTime desc
limit 4
</select>
</mapper>

63
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysnotice/SysNoticeRest.java

@ -0,0 +1,63 @@
package com.yxt.anrui.portal.biz.sysnotice;
import com.yxt.anrui.portal.api.sysnotice.*;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @description:
* @author: dimengzhe
* @date: 2024/1/30
**/
@Api(tags = "通知公告")
@RestController
@RequestMapping("v1/SysNotice")
public class SysNoticeRest implements SysNoticeFeign {
@Autowired
private SysNoticeService sysNoticeService;
@Override
public ResultBean<PagerVo<SysNoticeVo>> listPage(PagerQuery<SysNoticeQuery> pagerQuery) {
ResultBean<PagerVo<SysNoticeVo>> rb = ResultBean.fireFail();
PagerVo<SysNoticeVo> pv = sysNoticeService.listPageVo(pagerQuery);
return rb.success().setData(pv);
}
@Override
public ResultBean saveOrUpdate(SysNoticeDto dto) {
return sysNoticeService.saveOrUpdateNotice(dto);
}
@Override
public ResultBean<SysNoticeDetailsVo> getDetails(String sid) {
return sysNoticeService.getDetails(sid);
}
@Override
public ResultBean setState(SysNoticesQuery query) {
return sysNoticeService.setState(query);
}
@Override
public ResultBean setTopping(SysNoticessQuery query) {
return sysNoticeService.setTopping(query);
}
@Override
public ResultBean<List<SysNoticeListVo>> getLists() {
return sysNoticeService.getLists();
}
@Override
public ResultBean delBySids(String[] sids) {
return sysNoticeService.delAllBySids(sids);
}
}

175
anrui-portal/anrui-portal-biz/src/main/java/com/yxt/anrui/portal/biz/sysnotice/SysNoticeService.java

@ -0,0 +1,175 @@
package com.yxt.anrui.portal.biz.sysnotice;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.anrui.portal.api.sysnotice.*;
import com.yxt.anrui.riskcenter.api.loantemplate.LoanTemplate;
import com.yxt.common.base.config.component.FileUploadComponent;
import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.PagerUtil;
import com.yxt.common.base.utils.StringUtils;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* @description:
* @author: dimengzhe
* @date: 2024/1/30
**/
@Service
public class SysNoticeService extends MybatisBaseService<SysNoticeMapper, SysNotice> {
@Autowired
private FileUploadComponent fileUploadComponent;
public PagerVo<SysNoticeVo> listPageVo(PagerQuery<SysNoticeQuery> pagerQuery) {
SysNoticeQuery query = pagerQuery.getParams();
QueryWrapper<SysNotice> qw = new QueryWrapper<>();
if (query != null) {
qw.eq("1", 1);
//标题
if (StringUtils.isNotBlank(query.getTitle())) {
qw.like("sn.title", query.getTitle());
}
qw.apply(StringUtils.isNotBlank(query.getCreateDateStart()), "date_format (sn.createTime,'%Y-%m-%d') >= date_format('" + query.getCreateDateStart() + "','%Y-%m-%d')").
apply(StringUtils.isNotBlank(query.getCreateDateEnd()), "date_format (sn.createTime,'%Y-%m-%d') <= date_format('" + query.getCreateDateEnd() + "','%Y-%m-%d')"
);
if (StringUtils.isNotBlank(query.getTopping())) {
qw.like("sn.topping", query.getTopping());
}
if (StringUtils.isNotBlank(query.getState())) {
qw.eq("sn.state", query.getState());
}
qw.orderByDesc("sn.createTime");
}
IPage<SysNotice> page = PagerUtil.queryToPage(pagerQuery);
IPage<SysNoticeVo> pagging = baseMapper.selectPageVo(page, qw);
PagerVo<SysNoticeVo> p = PagerUtil.pageToVo(pagging, null);
return p;
}
public ResultBean saveOrUpdateNotice(SysNoticeDto dto) {
ResultBean rb = ResultBean.fireFail();
String sid = dto.getSid();
if (StringUtils.isBlank(sid)) {
SysNotice sysNotice = new SysNotice();
BeanUtil.copyProperties(dto, sysNotice, "sid");
List<UrlQuery> filss = dto.getFilesList();
filss.removeAll(Collections.singleton(null));
if (!filss.isEmpty()) {
List<String> filesList = filss.stream().map(v -> v.getUrl()).collect(Collectors.toList());
filesList.removeAll(Collections.singleton(null));
if (!filesList.isEmpty()) {
String files = String.join(",", filesList).replaceAll(fileUploadComponent.getUrlPrefix(), "");
sysNotice.setFiles(files);
}
}
baseMapper.insert(sysNotice);
} else {
SysNotice sysNotice = fetchBySid(sid);
if (sysNotice == null) {
return rb.setMsg("该通知公告不存在");
}
BeanUtil.copyProperties(dto, sysNotice, "sid");
List<UrlQuery> filss = dto.getFilesList();
filss.removeAll(Collections.singleton(null));
if (!filss.isEmpty()) {
List<String> filesList = filss.stream().map(v -> v.getUrl()).collect(Collectors.toList());
filesList.removeAll(Collections.singleton(null));
if (!filesList.isEmpty()) {
String files = String.join(",", filesList).replaceAll(fileUploadComponent.getUrlPrefix(), "");
sysNotice.setFiles(files);
}
} else {
sysNotice.setFiles("");
}
baseMapper.updateById(sysNotice);
}
return rb.success();
}
public ResultBean<SysNoticeDetailsVo> getDetails(String sid) {
ResultBean<SysNoticeDetailsVo> rb = ResultBean.fireFail();
SysNoticeDetailsVo sysNoticeDetailsVo = new SysNoticeDetailsVo();
SysNotice sysNotice = fetchBySid(sid);
if (sysNotice == null) {
return rb.setMsg("该通知公告不存在");
}
BeanUtil.copyProperties(sysNotice, sysNoticeDetailsVo);
sysNoticeDetailsVo.setCreateTime(DateUtil.format(sysNotice.getCreateTime(), "yyyy-MM-dd"));
String filesss = sysNotice.getFiles();
List<UrlQuery> lists = new ArrayList<>();
if (StringUtils.isNotBlank(filesss)) {
List<String> fileList = Arrays.asList(filesss.split(",")).stream().map(c -> fileUploadComponent.getUrlPrefix() + c).collect(Collectors.toList());
for (int i = 0; i < fileList.size(); i++) {
UrlQuery urlQuery = new UrlQuery();
urlQuery.setUrl(fileList.get(i));
lists.add(urlQuery);
}
sysNoticeDetailsVo.setFilesList(lists);
}
return rb.success().setData(sysNoticeDetailsVo);
}
public ResultBean setState(SysNoticesQuery query) {
ResultBean rb = ResultBean.fireFail();
List<String> sidsList = query.getSidsList();
sidsList.removeAll(Collections.singleton(null));
if (sidsList.isEmpty()) {
return rb.setMsg("请选择数据");
}
String state = query.getState();
for (String sid : sidsList) {
SysNotice sysNotice = fetchBySid(sid);
if (sysNotice == null) {
return rb.setMsg("操作的数据中包含不存在的数据,请刷新后操作");
}
sysNotice.setState(Integer.valueOf(state).intValue());
baseMapper.updateById(sysNotice);
}
return rb.success();
}
public ResultBean<List<SysNoticeListVo>> getLists() {
ResultBean<List<SysNoticeListVo>> rb = ResultBean.fireFail();
List<SysNoticeListVo> list = baseMapper.getLists();
list.removeAll(Collections.singleton(null));
return rb.success().setData(list);
}
public ResultBean delAllBySids(String[] sids) {
ResultBean rb = ResultBean.fireFail();
delBySids(sids);
return rb.success().setMsg("删除成功");
}
public ResultBean setTopping(SysNoticessQuery query) {
ResultBean rb = ResultBean.fireFail();
List<String> sidsList = query.getSidsList();
sidsList.removeAll(Collections.singleton(null));
if (sidsList.isEmpty()) {
return rb.setMsg("请选择数据");
}
String topping = query.getTopping();
for (String sid : sidsList) {
SysNotice sysNotice = fetchBySid(sid);
if (sysNotice == null) {
return rb.setMsg("操作的数据中包含不存在的数据,请刷新后操作");
}
sysNotice.setTopping(topping);
baseMapper.updateById(sysNotice);
}
return rb.success();
}
}

28
doc/databases/portal_tables.sql

@ -819,3 +819,31 @@ CREATE TABLE `sys_report_parameter`
AUTO_INCREMENT = 18
DEFAULT CHARSET = utf8 COMMENT ='统计参数表';
DROP TABLE IF EXISTS `sys_notice`;
CREATE TABLE `sys_notice`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`sid` varchar(64) NOT NULL COMMENT 'sid',
`lockVersion` int(11) NOT NULL DEFAULT '0' COMMENT '记录版本,锁',
`createTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`modifyTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录最后修改时间',
`isEnable` int(11) NOT NULL DEFAULT '1' COMMENT '记录是否可用,1:可用,0:不可用',
`state` int(11) DEFAULT '1' COMMENT '状态',
`isDelete` int(11) DEFAULT NULL COMMENT '记录是否被删除,0:未删除,1:已经删除',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注信息',
`createBySid` varchar(64) DEFAULT NULL COMMENT '创建者',
`updateBySid` varchar(64) DEFAULT NULL COMMENT '更新者',
`title` text DEFAULT NULL COMMENT '标题',
`validityDate` varchar(500) DEFAULT NULL COMMENT '有效期至',
`type` varchar(500) DEFAULT NULL COMMENT '类别',
`typeKey` varchar(500) DEFAULT NULL COMMENT '类别Key',
`topping` varchar(500) DEFAULT NULL COMMENT '是否置顶',
`content` text DEFAULT NULL COMMENT '内容',
`files` text DEFAULT NULL COMMENT '附件',
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE = InnoDB
AUTO_INCREMENT = 18
DEFAULT CHARSET = utf8 COMMENT ='通知公告';

Loading…
Cancel
Save