diff --git a/xinelu-common/src/main/java/com/xinelu/common/enums/CachePrefix.java b/xinelu-common/src/main/java/com/xinelu/common/enums/CachePrefix.java
new file mode 100644
index 0000000..7499643
--- /dev/null
+++ b/xinelu-common/src/main/java/com/xinelu/common/enums/CachePrefix.java
@@ -0,0 +1,529 @@
+package com.xinelu.common.enums;
+
+import lombok.Getter;
+
+/**
+ * 缓存前缀
+ *
+ * @version 4.1
+ * @Author 李甲辉
+ * @since 1.0
+ */
+@Getter
+public enum CachePrefix {
+
+
+ /**
+ * nonce
+ */
+ NONCE,
+
+ /**
+ * 在线人数
+ */
+ ONLINE_NUM,
+
+
+ /**
+ * 会员分布数据
+ */
+ MEMBER_DISTRIBUTION,
+
+ /**
+ * 在线会员统计
+ */
+ ONLINE_MEMBER,
+
+ /**
+ * token 信息
+ */
+ ACCESS_TOKEN,
+ /**
+ * token 信息
+ */
+ REFRESH_TOKEN,
+ /**
+ * 联合登录响应
+ */
+ CONNECT_RESULT,
+ /**
+ * 微信联合登陆 session key
+ */
+ SESSION_KEY,
+ /**
+ * 权限
+ */
+ PERMISSION_LIST,
+ /**
+ * 部门id列表
+ */
+ DEPARTMENT_IDS,
+
+ /**
+ * 用户错误登录限制
+ */
+ LOGIN_TIME_LIMIT,
+ /**
+ * 系统设置
+ */
+ SETTING,
+
+ /**
+ * 验证码滑块源
+ */
+ VERIFICATION,
+
+ /**
+ * 验证码滑块源
+ */
+ VERIFICATION_IMAGE,
+
+ /**
+ * 快递平台
+ */
+ EXPRESS,
+
+ /**
+ * 图片验证码
+ */
+ CAPTCHA,
+
+ /**
+ * 商品
+ */
+ GOODS,
+
+ /**
+ * 商品SKU
+ */
+ GOODS_SKU,
+
+ /**
+ * 运费模板脚本
+ */
+ SHIP_SCRIPT,
+
+ /**
+ * 商品sku
+ */
+ SKU,
+
+ /**
+ * sku库存
+ */
+ SKU_STOCK,
+
+ /**
+ * 促销商品sku库存
+ */
+ PROMOTION_GOODS_STOCK,
+
+ /**
+ * 商品库存
+ */
+ GOODS_STOCK,
+
+ /**
+ * 商品分类 树状结构
+ */
+ CATEGORY,
+ /**
+ * 商品分类 集合
+ */
+ CATEGORY_ARRAY,
+ /**
+ * 浏览次数
+ */
+ VISIT_COUNT,
+ /**
+ * 存储方案
+ */
+ UPLOADER,
+ /**
+ * 地区
+ */
+ REGION,
+
+ /**
+ * 短信网关
+ */
+ SPlATFORM,
+ /**
+ * 短信验证码前缀
+ */
+ _CODE_PREFIX,
+ /**
+ * smtp
+ */
+ SMTP,
+ /**
+ * 系统设置
+ */
+ SETTINGS,
+ /**
+ * 电子面单
+ */
+ WAYBILL,
+ /**
+ * 短信验证码
+ */
+ SMS_CODE,
+ /**
+ * 邮箱验证码
+ */
+ EMAIL_CODE,
+ /**
+ * 管理员角色权限对照表
+ */
+ ADMIN_URL_ROLE,
+
+ /**
+ * 店铺管理员角色权限对照表
+ */
+ STORE_URL_ROLE,
+
+ /**
+ * 手机验证标识
+ */
+ MOBILE_VALIDATE,
+
+ /**
+ * 邮箱验证标识
+ */
+ EMAIL_VALIDATE,
+
+ /**
+ * 店铺运费模版列表
+ */
+ SHIP_TEMPLATE,
+
+ /**
+ * 店铺中某个运费模版
+ */
+ SHIP_TEMPLATE_ONE,
+
+ //================促销=================
+ /**
+ * 促销活动
+ */
+ PROMOTION,
+ /**
+ * 当前优惠券活动
+ */
+ CURRENT_COUPON_ACTIVITY,
+ /**
+ * 促销活动
+ */
+ PROMOTION_GOODS,
+
+ /*** 单品立减 */
+ STORE_ID_MINUS,
+
+ /*** 第二件半价 */
+ STORE_ID_HALF_PRICE,
+
+ /*** 满优惠 */
+ STORE_ID_FULL_DISCOUNT,
+
+ /**
+ * 秒杀活动活动缓存key前缀
+ */
+ STORE_ID_SECKILL,
+
+ /**
+ * 团购活动缓存key前缀
+ */
+ STORE_ID_GROUP_BUY,
+
+ /**
+ * 积分商品缓存key前缀
+ */
+ STORE_ID_EXCHANGE,
+ /**
+ * 会员领取标记
+ */
+ MEMBER_COUPON_SIGN,
+
+
+ //================交易=================
+
+ /**
+ * 购物车原始数据
+ */
+ CART_ORIGIN_DATA_PREFIX,
+
+ /**
+ * 立即购买原始数据
+ */
+ BUY_NOW_ORIGIN_DATA_PREFIX,
+
+ /**
+ * 交易原始数据
+ */
+ TRADE_ORIGIN_DATA_PREFIX,
+
+ /**
+ * 立即购买sku
+ */
+ CART_SKU_PREFIX,
+
+ /**
+ * 购物车视图
+ */
+ CART_MEMBER_ID_PREFIX,
+
+ /**
+ * 购物车,用户选择的促销信息
+ */
+ CART_PROMOTION_PREFIX,
+
+
+ /**
+ * 交易_交易价格的前缀
+ */
+ PRICE_SESSION_ID_PREFIX,
+
+ /**
+ * 交易_交易单
+ */
+ TRADE_SESSION_ID_PREFIX,
+
+
+ /**
+ * 结算参数
+ */
+ CHECKOUT_PARAM_ID_PREFIX,
+
+ /**
+ * 交易单号前缀
+ */
+ TRADE_SN_CACHE_PREFIX,
+
+ /**
+ * 订单编号前缀
+ */
+ ORDER_SN_CACHE_PREFIX,
+ /**
+ * 订单编号标记
+ */
+ ORDER_SN_SIGN_CACHE_PREFIX,
+ /**
+ * 订单编号前缀
+ */
+ PAY_LOG_SN_CACHE_PREFIX,
+
+ /**
+ * 合同编号
+ */
+ CONTRACT_SN_CACHE_PREFIX,
+
+
+ /**
+ * 零钱
+ */
+ SMALL_CHANGE_CACHE_PREFIX,
+
+ /**
+ * 售后服务单号前缀
+ */
+ AFTER_SALE_SERVICE_PREFIX,
+
+ /**
+ * 交易
+ */
+ TRADE,
+
+ /**
+ * 站点导航栏
+ */
+ SITE_NAVIGATION,
+
+ /**
+ * 支付参数
+ */
+ PAYMENT_CONFIG,
+
+ /**
+ * 流程控制
+ */
+ FLOW,
+
+ /**
+ * 热门搜索
+ */
+ HOT_WORD,
+
+ /**
+ * 会员积分
+ */
+ MEMBER_POINT,
+
+ /**
+ * 会员积分
+ */
+ POINT_ORDER,
+
+
+ /**
+ * 微博登录
+ */
+ WEIBO_STATE,
+ /**
+ * 微博登录
+ */
+ QQ_STATE,
+ /**
+ * 微博登录
+ */
+ GITHUB_STATE,
+ /**
+ * 验证码key
+ */
+ VERIFICATION_KEY,
+ /**
+ * 验证码验证结果
+ */
+ VERIFICATION_RESULT,
+ /**
+ * 微信CGItoken
+ */
+ WECHAT_CGI_ACCESS_TOKEN,
+ /**
+ * 微信JSApitoken
+ */
+ WECHAT_JS_API_TOKEN,
+ /**
+ * 微信会话信息
+ */
+ WECHAT_SESSION_PARAMS,
+ /**
+ * 第三方用户权限
+ */
+ ALIPAY_CONFIG,
+ /**
+ * 微信支付配置
+ */
+ WECHAT_PAY_CONFIG,
+ /**
+ * 微信支付平台证书配置
+ */
+ WECHAT_PLAT_FORM_CERT,
+ /**
+ * 第三方用户权限
+ */
+ CONNECT_AUTH,
+ /**
+ * 平台PageView 统计
+ */
+ PV,
+ /**
+ * 平台UserView 统计
+ */
+ UV,
+ /**
+ * 平台 商品PV 统计
+ */
+ GOODS_PV,
+ /**
+ * 平台 商品UV 统计
+ */
+ GOODS_UV,
+ /**
+ * 店铺PageView 统计
+ */
+ STORE_PV,
+ /**
+ * 店铺UserView 统计
+ */
+ STORE_UV,
+ /**
+ * 店铺 商品PV 统计
+ */
+ STORE_GOODS_PV,
+ /**
+ * 店铺 商品UV 统计
+ */
+ STORE_GOODS_UV,
+ /**
+ * 分销员
+ */
+ DISTRIBUTION,
+ /**
+ * 邀请人
+ */
+ INVITER,
+
+ /**
+ * 找回手机
+ */
+ FIND_MOBILE,
+ /**
+ * 文章分类
+ */
+ ARTICLE_CATEGORY,
+ /**
+ * 文章
+ */
+ ARTICLE_CACHE,
+
+ /**
+ * 初始化索引
+ */
+ INIT_INDEX_PROCESS,
+
+ /**
+ * 初始化索引标示
+ */
+ INIT_INDEX_FLAG,
+
+ /**
+ * 店铺
+ */
+ STORE,
+ /**
+ * 店铺分类
+ */
+ STORE_CATEGORY,
+ /**
+ * 用户菜单
+ */
+ MENU_USER_ID,
+ /**
+ * 用户菜单
+ *
+ * 这个缓存并非永久缓存,而是300秒缓存,也就是说修改用户关联的部门,关联的角色,
+ * 部门关联的角色,角色关联的菜单等等,最多需要5分钟才能生效
+ */
+ STORE_MENU_USER_ID,
+ /**
+ * 用户菜单
+ */
+ USER_MENU,
+ /**
+ * 用户菜单
+ */
+ STORE_USER_MENU,
+ /**
+ * 订单暂时缓存
+ */
+ ORDER,
+ /**
+ * 敏感词
+ */
+ SENSITIVE,
+
+ /**
+ * 扫码登录
+ *
+ * @param str
+ * @return
+ */
+ QR_CODE_LOGIN_SESSION;
+
+
+ public static String removePrefix(String str) {
+ return str.substring(str.lastIndexOf("}_") + 2);
+ }
+
+
+}
diff --git a/xinelu-nurse-manage/src/main/java/com/xinelu/manage/controller/goodsCategory/GoodsCategoryController.java b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/controller/goodsCategory/GoodsCategoryController.java
new file mode 100644
index 0000000..3a4b09b
--- /dev/null
+++ b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/controller/goodsCategory/GoodsCategoryController.java
@@ -0,0 +1,124 @@
+package com.xinelu.manage.controller.goodsCategory;
+
+import com.xinelu.common.annotation.Log;
+import com.xinelu.common.core.controller.BaseController;
+import com.xinelu.common.core.domain.AjaxResult;
+import com.xinelu.common.core.page.TableDataInfo;
+import com.xinelu.common.custominterface.Insert;
+import com.xinelu.common.custominterface.Update;
+import com.xinelu.common.enums.BusinessType;
+import com.xinelu.common.utils.poi.ExcelUtil;
+import com.xinelu.manage.domain.goodsCategory.GoodsCategory;
+import com.xinelu.manage.service.goodsCategory.IGoodsCategoryService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 商品分类信息Controller
+ *
+ * @author xinyilu
+ * @date 2022-10-17
+ */
+@RestController
+@RequestMapping("/system/goodsCategory")
+public class GoodsCategoryController extends BaseController {
+ @Resource
+ private IGoodsCategoryService goodsCategoryService;
+
+ /**
+ * 查询商品分类信息列表
+ */
+ @PreAuthorize("@ss.hasPermi('system:goodsCategory:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(GoodsCategory goodsCategory) {
+ startPage();
+ List list = goodsCategoryService.selectGoodsCategoryList(goodsCategory);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出商品分类信息列表
+ */
+ @PreAuthorize("@ss.hasPermi('system:goodsCategory:export')")
+ @Log(title = "商品分类信息", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, GoodsCategory goodsCategory) {
+ List list = goodsCategoryService.selectGoodsCategoryList(goodsCategory);
+ ExcelUtil util = new ExcelUtil<>(GoodsCategory.class);
+ util.exportExcel(response, list, "商品分类信息数据");
+ }
+
+ /**
+ * 获取商品分类信息详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('system:goodsCategory:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id) {
+ if (Objects.isNull(id)) {
+ return AjaxResult.error("商品分类信息不能为空!");
+ }
+ return AjaxResult.success(goodsCategoryService.selectGoodsCategoryById(id));
+ }
+
+ /**
+ * 新增商品分类信息
+ */
+ @PreAuthorize("@ss.hasPermi('system:goodsCategory:add')")
+ @Log(title = "商品分类信息", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ public AjaxResult add(@RequestBody @Validated(Insert.class) GoodsCategory goodsCategory) {
+ return goodsCategoryService.insertGoodsCategory(goodsCategory);
+ }
+
+ /**
+ * 修改商品分类信息
+ */
+ @PreAuthorize("@ss.hasPermi('system:goodsCategory:edit')")
+ @Log(title = "商品分类信息", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ public AjaxResult edit(@RequestBody @Validated(Update.class) GoodsCategory goodsCategory) {
+ return goodsCategoryService.updateGoodsCategory(goodsCategory);
+ }
+
+ /**
+ * 删除商品分类信息
+ */
+ @PreAuthorize("@ss.hasPermi('system:goodsCategory:remove')")
+ @Log(title = "商品分类信息", businessType = BusinessType.DELETE)
+ @PostMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids) {
+ return goodsCategoryService.deleteGoodsCategoryByIds(ids);
+ }
+
+ /**
+ * 查询商品分类信息集合树图
+ *
+ * @param goodsCategory 查询条件
+ * @return 返回结果信息
+ */
+ @GetMapping("/getStationCategoryList")
+ public AjaxResult getStationCategoryList(GoodsCategory goodsCategory) {
+ return AjaxResult.success(goodsCategoryService.selectGoodsCategoryList(goodsCategory));
+ }
+
+ /**
+ * 查询所有的分类 (暂时不用 可做demo)
+ *
+ * @param parentId 查询条件 父级id
+ * @return 返回结果信息
+ */
+ @GetMapping(value = "/getListAllChildren/{parentId}")
+ public AjaxResult getListAllChildren(@PathVariable String parentId) {
+ if (StringUtils.isBlank(parentId)) {
+ return AjaxResult.error("请输入父级id");
+ }
+ return AjaxResult.success(goodsCategoryService.listAllChildren(parentId));
+ }
+}
diff --git a/xinelu-nurse-manage/src/main/java/com/xinelu/manage/controller/information/InformationController.java b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/controller/information/InformationController.java
new file mode 100644
index 0000000..7d224ad
--- /dev/null
+++ b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/controller/information/InformationController.java
@@ -0,0 +1,95 @@
+package com.xinelu.manage.controller.information;
+
+import com.xinelu.common.annotation.Log;
+import com.xinelu.common.core.controller.BaseController;
+import com.xinelu.common.core.domain.AjaxResult;
+import com.xinelu.common.core.page.TableDataInfo;
+import com.xinelu.common.custominterface.Insert;
+import com.xinelu.common.custominterface.Update;
+import com.xinelu.common.enums.BusinessType;
+import com.xinelu.common.utils.poi.ExcelUtil;
+import com.xinelu.manage.domain.information.Information;
+import com.xinelu.manage.service.information.IInformationService;
+import com.xinelu.manage.vo.information.InformationVO;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 资讯信息管理Controller
+ *
+ * @author xinyilu
+ * @date 2023-02-14
+ */
+@RestController
+@RequestMapping("/system/informationInfo")
+public class InformationController extends BaseController {
+ @Resource
+ private IInformationService informationService;
+
+ /**
+ * 查询资讯信息管理列表
+ */
+ @PreAuthorize("@ss.hasPermi('system:informationInfo:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(Information information) {
+ startPage();
+ List list = informationService.selectInformationList(information);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出资讯信息管理列表
+ */
+ @PreAuthorize("@ss.hasPermi('system:informationInfo:export')")
+ @Log(title = "资讯信息管理", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, Information information) {
+ List list = informationService.selectInformationList(information);
+ ExcelUtil util = new ExcelUtil<>(InformationVO.class);
+ util.exportExcel(response, list, "资讯信息管理数据");
+ }
+
+ /**
+ * 获取资讯信息管理详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('system:informationInfo:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id) {
+ return AjaxResult.success(informationService.selectInformationById(id));
+ }
+
+ /**
+ * 新增资讯信息管理
+ */
+ @PreAuthorize("@ss.hasPermi('system:informationInfo:add')")
+ @Log(title = "资讯信息管理", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ public AjaxResult add(@RequestBody @Validated(Insert.class) Information information) {
+ return toAjax(informationService.insertInformation(information));
+ }
+
+ /**
+ * 修改资讯信息管理
+ */
+ @PreAuthorize("@ss.hasPermi('system:informationInfo:edit')")
+ @Log(title = "资讯信息管理", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ public AjaxResult edit(@RequestBody @Validated(Update.class) Information information) {
+ return informationService.updateInformation(information);
+ }
+
+ /**
+ * 删除资讯信息管理
+ */
+ @PreAuthorize("@ss.hasPermi('system:informationInfo:remove')")
+ @Log(title = "资讯信息管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable Long[] ids) {
+ return informationService.deleteInformationByIds(ids);
+ }
+}
diff --git a/xinelu-nurse-manage/src/main/java/com/xinelu/manage/domain/information/Information.java b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/domain/information/Information.java
new file mode 100644
index 0000000..cc80738
--- /dev/null
+++ b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/domain/information/Information.java
@@ -0,0 +1,153 @@
+package com.xinelu.manage.domain.information;
+
+import com.xinelu.common.annotation.Excel;
+import com.xinelu.common.core.domain.BaseDomain;
+import com.xinelu.common.custominterface.Insert;
+import com.xinelu.common.custominterface.Update;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+/**
+ * 资讯信息管理对象 information
+ *
+ * @author xinyilu
+ * @date 2023-02-14
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "资讯信息管理对象", description = "information")
+public class Information extends BaseDomain {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键id
+ */
+ @NotNull(message = "资讯信息不能为空!", groups = {Update.class})
+ private Long id;
+
+ /**
+ * 资讯所属分类id
+ */
+ @ApiModelProperty(value = "资讯所属分类id")
+ @Excel(name = "资讯所属分类id")
+ @NotNull(message = "资讯所属分类信息不能为空!", groups = {Insert.class, Update.class})
+ private Long informationCategoryId;
+
+ /**
+ * 资讯标题
+ */
+ @ApiModelProperty(value = "资讯标题")
+ @Excel(name = "资讯标题")
+ @NotBlank(message = "资讯标题不能为空!", groups = {Insert.class, Update.class})
+ private String informationTitle;
+
+ /**
+ * 资讯编码
+ */
+ @ApiModelProperty(value = "资讯编码")
+ @Excel(name = "资讯编码")
+ private String informationCode;
+
+ /**
+ * 资讯图文内容,富文本
+ */
+ @ApiModelProperty(value = "资讯图文内容,富文本")
+ @Excel(name = "资讯图文内容,富文本")
+ @NotBlank(message = "资讯图文内容不能为空!", groups = {Insert.class, Update.class})
+ private String informationContent;
+
+ /**
+ * 资讯点击次数
+ */
+ @ApiModelProperty(value = "资讯点击次数")
+ @Excel(name = "资讯点击次数")
+ private Integer informationClickCount;
+
+ /**
+ * 资讯跳转路径
+ */
+ @ApiModelProperty(value = "资讯跳转路径")
+ @Excel(name = "资讯跳转路径")
+ private String informationJumpLink;
+
+ /**
+ * 资讯来源,枚举类型
+ */
+ @ApiModelProperty(value = "资讯来源,枚举类型")
+ @Excel(name = "资讯来源,枚举类型")
+ private String informationSource;
+
+ /**
+ * 资讯主缩略图地址
+ */
+ @ApiModelProperty(value = "资讯主缩略图地址")
+ @Excel(name = "资讯主缩略图地址")
+ @NotBlank(message = "资讯主缩略图地址不能为空!", groups = {Insert.class, Update.class})
+ private String leadThumbnailUrl;
+
+ /**
+ * 资讯负缩略图1地址
+ */
+ @ApiModelProperty(value = "资讯负缩略图1地址")
+ @Excel(name = "资讯负缩略图1地址")
+ private String negativeOneThumbnailUrl;
+
+ /**
+ * 资讯负缩略图2地址
+ */
+ @ApiModelProperty(value = "资讯负缩略图2地址")
+ @Excel(name = "资讯负缩略图2地址")
+ private String negativeTwoThumbnailUrl;
+
+ /**
+ * 资讯大图地址
+ */
+ @ApiModelProperty(value = "资讯大图地址")
+ @Excel(name = "资讯大图地址")
+ private String largePictureUrl;
+
+ /**
+ * 显示顺序
+ */
+ @ApiModelProperty(value = "显示顺序")
+ @Excel(name = "显示顺序")
+ @NotNull(message = "显示顺序不能为空!", groups = {Insert.class, Update.class})
+ @Size(min = 0, max = 5, message = "显示顺序不能超过5个字符")
+ private Integer informationSort;
+
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+ .append("id", getId())
+ .append("informationCategoryId", getInformationCategoryId())
+ .append("informationTitle", getInformationTitle())
+ .append("informationCode", getInformationCode())
+ .append("informationContent", getInformationContent())
+ .append("informationClickCount", getInformationClickCount())
+ .append("informationJumpLink", getInformationJumpLink())
+ .append("informationSource", getInformationSource())
+ .append("leadThumbnailUrl", getLeadThumbnailUrl())
+ .append("negativeOneThumbnailUrl", getNegativeOneThumbnailUrl())
+ .append("negativeTwoThumbnailUrl", getNegativeTwoThumbnailUrl())
+ .append("largePictureUrl", getLargePictureUrl())
+ .append("informationSort", getInformationSort())
+ .append("createBy", getCreateBy())
+ .append("createTime", getCreateTime())
+ .append("updateBy", getUpdateBy())
+ .append("updateTime", getUpdateTime())
+ .toString();
+ }
+}
diff --git a/xinelu-nurse-manage/src/main/java/com/xinelu/manage/mapper/information/InformationMapper.java b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/mapper/information/InformationMapper.java
new file mode 100644
index 0000000..710cb19
--- /dev/null
+++ b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/mapper/information/InformationMapper.java
@@ -0,0 +1,95 @@
+package com.xinelu.manage.mapper.information;
+
+import com.xinelu.manage.domain.information.Information;
+import com.xinelu.manage.domain.informationcategory.InformationCategory;
+import com.xinelu.manage.vo.information.InformationVO;
+
+import java.util.List;
+
+/**
+ * 资讯信息管理Mapper接口
+ *
+ * @author xinyilu
+ * @date 2023-02-14
+ */
+public interface InformationMapper {
+ /**
+ * 查询资讯信息管理
+ *
+ * @param id 资讯信息管理主键
+ * @return 资讯信息管理
+ */
+ Information selectInformationById(Long id);
+
+ /**
+ * 查询资讯信息管理列表
+ *
+ * @param information 资讯信息管理
+ * @return 资讯信息管理集合
+ */
+ List selectInformationList(Information information);
+
+ /**
+ * 新增资讯信息管理
+ *
+ * @param information 资讯信息管理
+ * @return 结果
+ */
+ int insertInformation(Information information);
+
+ /**
+ * 修改资讯信息管理
+ *
+ * @param information 资讯信息管理
+ * @return 结果
+ */
+ int updateInformation(Information information);
+
+ /**
+ * 删除资讯信息管理
+ *
+ * @param id 资讯信息管理主键
+ * @return 结果
+ */
+ int deleteInformationById(Long id);
+
+ /**
+ * 批量删除资讯信息管理
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ int deleteInformationByIds(Long[] ids);
+
+ /**
+ * 查询资讯信息管理及分类名称
+ *
+ * @param id 资讯信息管理主键
+ * @return 资讯信息管理
+ */
+ InformationVO getInformationById(Long id);
+
+ /**
+ * 根据id数组查询资讯信息(资讯批量删除)
+ *
+ * @param ids 数组
+ * @return List
+ */
+ List selectInformationByIds(Long[] ids);
+
+ /**
+ * 查询资讯信息管理列表
+ *
+ * @param information 资讯信息管理
+ * @return 资讯信息管理集合
+ */
+ List selectInformationVoList(Information information);
+
+ /**
+ * 根据分类查询资讯信息管理列表
+ *
+ * @param informationCategory 资讯信息管理
+ * @return 资讯信息管理集合
+ */
+ List selectInformationByCategory(InformationCategory informationCategory);
+}
diff --git a/xinelu-nurse-manage/src/main/java/com/xinelu/manage/service/goodsCategory/IGoodsCategoryService.java b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/service/goodsCategory/IGoodsCategoryService.java
new file mode 100644
index 0000000..c134ab5
--- /dev/null
+++ b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/service/goodsCategory/IGoodsCategoryService.java
@@ -0,0 +1,82 @@
+package com.xinelu.manage.service.goodsCategory;
+
+
+import com.xinelu.common.core.domain.AjaxResult;
+import com.xinelu.manage.domain.goodsCategory.GoodsCategory;
+import com.xinelu.manage.vo.goodsCategory.GoodsCategoryVO;
+import com.xinelu.manage.vo.goodsCategory.ParentCategory;
+
+import java.util.List;
+
+/**
+ * 商品分类信息Service接口
+ *
+ * @author xinyilu
+ * @date 2022-10-17
+ */
+public interface IGoodsCategoryService {
+ /**
+ * 查询商品分类信息
+ *
+ * @param id 商品分类信息主键
+ * @return 商品分类信息
+ */
+ ParentCategory selectGoodsCategoryById(Long id);
+
+ /**
+ * 查询商品分类信息列表
+ *
+ * @param goodsCategory 商品分类信息
+ * @return 商品分类信息集合
+ */
+ List selectGoodsCategoryList(GoodsCategory goodsCategory);
+
+ /**
+ * 新增商品分类信息
+ *
+ * @param goodsCategory 商品分类信息
+ * @return 结果
+ */
+ AjaxResult insertGoodsCategory(GoodsCategory goodsCategory);
+
+ /**
+ * 修改商品分类信息
+ *
+ * @param goodsCategory 商品分类信息
+ * @return 结果
+ */
+ AjaxResult updateGoodsCategory(GoodsCategory goodsCategory);
+
+ /**
+ * 批量删除商品分类信息
+ *
+ * @param ids 需要删除的商品分类信息主键集合
+ * @return 结果
+ */
+ AjaxResult deleteGoodsCategoryByIds(Long[] ids);
+
+ /**
+ * 删除商品分类信息信息
+ *
+ * @param id 商品分类信息主键
+ * @return 结果
+ */
+ int deleteGoodsCategoryById(Long id);
+
+ /**
+ * 查询所有的分类,父子关系
+ *
+ * @param parentId 分类父ID
+ * @return 所有的分类,父子关系
+ */
+ List listAllChildren(String parentId);
+
+ /**
+ * 获取分类树
+ *
+ * @return 分类树
+ */
+ List categoryTree();
+
+
+}
diff --git a/xinelu-nurse-manage/src/main/java/com/xinelu/manage/service/goodsCategory/impl/GoodsCategoryServiceImpl.java b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/service/goodsCategory/impl/GoodsCategoryServiceImpl.java
new file mode 100644
index 0000000..a0d596b
--- /dev/null
+++ b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/service/goodsCategory/impl/GoodsCategoryServiceImpl.java
@@ -0,0 +1,312 @@
+package com.xinelu.manage.service.goodsCategory.impl;
+
+import com.xinelu.common.constant.Constants;
+import com.xinelu.common.core.domain.AjaxResult;
+import com.xinelu.common.enums.CachePrefix;
+import com.xinelu.common.exception.ServiceException;
+import com.xinelu.common.utils.SecurityUtils;
+import com.xinelu.common.utils.codes.GenerateSystemCodeUtil;
+import com.xinelu.manage.domain.goodsCategory.GoodsCategory;
+import com.xinelu.manage.mapper.goodsCategory.GoodsCategoryMapper;
+import com.xinelu.manage.service.goodsCategory.IGoodsCategoryService;
+import com.xinelu.manage.service.nursestationitem.INurseStationItemService;
+import com.xinelu.manage.service.patientinfo.IPatientInfoService;
+import com.xinelu.manage.vo.goodsCategory.GoodsCategoryVO;
+import com.xinelu.manage.vo.goodsCategory.ParentCategory;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import static com.sun.corba.se.impl.util.RepositoryId.cache;
+
+
+/**
+ * 商品分类信息Service业务层处理
+ *
+ * @author xinyilu
+ * @date 2022-10-17
+ */
+@Service
+public class GoodsCategoryServiceImpl implements IGoodsCategoryService {
+ @Resource
+ private GoodsCategoryMapper goodsCategoryMapper;
+ @Resource
+ private GenerateSystemCodeUtil generateSystemCodeUtil;
+ @Resource
+ private INurseStationItemService nurseStationItemService;
+ @Resource
+ private IPatientInfoService patientInfoService;
+
+ /**
+ * 商品分类的跟级别
+ */
+ private static final String GOODS_CATEGORY_PARENT_ID = "0";
+
+ /**
+ * 商品分类的一级分类的父级id默认值
+ */
+ private static final Long GOODS_CATEGORY_PARENT_IDS = 0L;
+
+ /**
+ * 商品分类的一级分类的级别默认值
+ */
+ private static final Integer GOODS_CATEGORY_ROOT_LEVEL = 1;
+
+ /**
+ * 查询商品分类信息
+ *
+ * @param id 商品分类信息主键
+ * @return 商品分类信息
+ */
+ @Override
+ public ParentCategory selectGoodsCategoryById(Long id) {
+ return goodsCategoryMapper.selectParentIdById(id);
+ }
+
+ /**
+ * 查询商品分类信息列表
+ *
+ * @param goodsCategory 商品分类信息
+ * @return 商品分类信息
+ */
+ @Override
+ public List selectGoodsCategoryList(GoodsCategory goodsCategory) {
+ return goodsCategoryMapper.selectGoodsCategoryList(goodsCategory);
+ }
+
+ /**
+ * 新增商品分类信息
+ *
+ * @param goodsCategory 商品分类信息
+ * @return 结果
+ */
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public AjaxResult insertGoodsCategory(GoodsCategory goodsCategory) {
+ //根据商品分类名称查询名称数量
+ int count = goodsCategoryMapper.getGoodsCategoryNameCount(null, goodsCategory.getGoodsCategoryName());
+ if (count > 0) {
+ return AjaxResult.error("商品分类名称重复,请重新录入!");
+ }
+
+ //若商品分类为一级分类则商品分类图片不能为空
+ boolean parentIdEmpty = Objects.isNull(goodsCategory.getParentId()) || goodsCategory.getParentId() == 0;
+ boolean pictureEmpty = StringUtils.isEmpty(goodsCategory.getGoodsCategoryPicture());
+ if (BooleanUtils.isTrue(parentIdEmpty) && BooleanUtils.isTrue(pictureEmpty)) {
+ return AjaxResult.error("商品主分类图片不能为空!");
+ }
+ //若新增父级id为null,则新增一级分类,否则增父级的下级分类
+ if (Objects.isNull(goodsCategory.getParentId()) || goodsCategory.getParentId() == 0) {
+ goodsCategory.setCategoryLevel(GOODS_CATEGORY_ROOT_LEVEL);
+ goodsCategory.setParentId(GOODS_CATEGORY_PARENT_IDS);
+ } else {
+ //查询父级分类信息
+ GoodsCategory selectGoodsCategory = goodsCategoryMapper.selectGoodsCategoryById(goodsCategory.getParentId());
+ if (Objects.isNull(selectGoodsCategory) || Objects.isNull(selectGoodsCategory.getCategoryLevel())) {
+ throw new ServiceException("当前分类所属的父级分类信息不存在,请联系管理员!");
+ }
+ goodsCategory.setCategoryLevel(selectGoodsCategory.getCategoryLevel() + 1);
+ }
+ //设置创建人创建时间以及生成唯一的商品分类编码
+ goodsCategory.setCreateBy(SecurityUtils.getUsername());
+ goodsCategory.setCreateTime(LocalDateTime.now());
+ goodsCategory.setGoodsCategoryCode(Constants.GOODS_CATEGORY_CODE + generateSystemCodeUtil.generateSystemCode(Constants.GOODS_CATEGORY_CODE));
+ int insert = goodsCategoryMapper.insertGoodsCategory(goodsCategory);
+ if (insert <= 0) {
+ throw new ServiceException("新增商品分类信息失败,请联系管理员!");
+ }
+ return AjaxResult.success();
+ }
+
+ /**
+ * 修改商品分类信息
+ *
+ * @param goodsCategory 商品分类信息
+ * @return 结果
+ */
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public AjaxResult updateGoodsCategory(GoodsCategory goodsCategory) {
+ GoodsCategory goodsCategoryUrl = goodsCategoryMapper.selectGoodsCategoryById(goodsCategory.getId());
+ if (Objects.isNull(goodsCategoryUrl)) {
+ return AjaxResult.error("当前商品分类信息不存在,请联系管理员!");
+ }
+ if (Objects.nonNull(goodsCategory.getParentId()) && goodsCategory.getParentId().equals(goodsCategory.getId())) {
+ return AjaxResult.error("父级分类名称不能选择当前商品分类名称,请重新选择!");
+ }
+ //根据商品分类名称查询名称数量
+ if (!goodsCategory.getGoodsCategoryName().equals(goodsCategoryUrl.getGoodsCategoryName())) {
+ int count = goodsCategoryMapper.getGoodsCategoryNameCount(goodsCategory.getId(), goodsCategory.getGoodsCategoryName());
+ if (count > 0) {
+ return AjaxResult.error("商品分类名称重复,请重新录入!");
+ }
+ }
+ //若父级id为null,则新增一级分类,否则增父级的下级分类
+ if (Objects.isNull(goodsCategory.getParentId()) || goodsCategory.getParentId() == 0) {
+ goodsCategory.setCategoryLevel(GOODS_CATEGORY_ROOT_LEVEL);
+ goodsCategory.setParentId(GOODS_CATEGORY_PARENT_IDS);
+ } else {
+ GoodsCategory selectGoodsCategory = goodsCategoryMapper.selectGoodsCategoryById(goodsCategory.getParentId());
+ if (Objects.isNull(selectGoodsCategory) || Objects.isNull(selectGoodsCategory.getCategoryLevel())) {
+ throw new ServiceException("当前分类所属的父级分类信息不存在,请联系管理员!");
+ }
+ goodsCategory.setCategoryLevel(selectGoodsCategory.getCategoryLevel() + 1);
+ }
+ //设置修改人以及修改时间
+ goodsCategory.setUpdateBy(SecurityUtils.getUsername());
+ goodsCategory.setUpdateTime(LocalDateTime.now());
+ int update = goodsCategoryMapper.updateGoodsCategory(goodsCategory);
+ if (update <= 0) {
+ throw new ServiceException("修改商品分类信息失败,请联系管理员!");
+ }
+ //删除原有上传的分类图片
+ if (StringUtils.isNotBlank(goodsCategoryUrl.getGoodsCategoryPicture()) && StringUtils.isNotBlank(goodsCategory.getGoodsCategoryPicture())
+ && !goodsCategory.getGoodsCategoryPicture().equals(goodsCategoryUrl.getGoodsCategoryPicture())) {
+ nurseStationItemService.deletePictureUrl(goodsCategoryUrl.getGoodsCategoryPicture());
+ }
+ return AjaxResult.success();
+ }
+
+ /**
+ * 批量删除商品分类信息
+ *
+ * @param ids 需要删除的商品分类信息主键
+ * @return 结果
+ */
+ @Override
+ public AjaxResult deleteGoodsCategoryByIds(Long[] ids) {
+ //根据id查询本级及下级信息
+ List goodsCategories = goodsCategoryMapper.selectCategoryByIds(ids);
+ if (ids.length != goodsCategories.size()) {
+ return AjaxResult.error("删除失败!该分类存在下级分类!");
+ }
+ //循环查询本级图片
+ List formerPicture = goodsCategories.stream().filter(Objects::nonNull).filter(item -> StringUtils.isNotBlank(item.getGoodsCategoryPicture())).map(GoodsCategory::getGoodsCategoryPicture).distinct().collect(Collectors.toList());
+ //删除商品分类信息
+ int count = goodsCategoryMapper.deleteGoodsCategoryByIds(ids);
+ if (count <= 0) {
+ throw new ServiceException("删除商品分类信息失败,请联系管理员!");
+ }
+ //删除商品主表的图片地址
+ if (CollectionUtils.isNotEmpty(formerPicture)) {
+ patientInfoService.updatePicture(formerPicture);
+ }
+ return AjaxResult.success();
+ }
+
+ /**
+ * 删除商品分类信息信息
+ *
+ * @param id 商品分类信息主键
+ * @return 结果
+ */
+ @Override
+ public int deleteGoodsCategoryById(Long id) {
+ return goodsCategoryMapper.deleteGoodsCategoryById(id);
+ }
+
+
+ /**
+ * 根据父id查询分类
+ *
+ * @param parentId 父id
+ * @return java.util.List
+ **/
+ @Override
+ public List listAllChildren(String parentId) {
+ if (GOODS_CATEGORY_PARENT_ID.equals(parentId)) {
+ return categoryTree();
+ }
+ //循环代码,找到对象,把他的子分类返回
+ List topCatList = categoryTree();
+ for (GoodsCategoryVO item : topCatList) {
+ if (item.getId().toString().equals(parentId)) {
+ return item.getChildren();
+ } else {
+ return getChildren(parentId, item.getChildren());
+ }
+ }
+ return new ArrayList<>();
+ }
+
+
+ /**
+ * 找出子分类返回
+ *
+ * @return java.util.List
+ **/
+ @Override
+ public List categoryTree() {
+ List categoryVOList = (List) cache.get(CachePrefix.CATEGORY);
+ if (categoryVOList != null) {
+ return categoryVOList;
+ }
+ //获取全部分类
+ GoodsCategory goodsCategory = new GoodsCategory();
+ List list = goodsCategoryMapper.selectGoodsCategoryList(goodsCategory);
+ //构造分类树
+ categoryVOList = new ArrayList<>();
+ for (GoodsCategory category : list) {
+ if (GOODS_CATEGORY_PARENT_IDS.equals(category.getParentId())) {
+ GoodsCategoryVO categoryVO = new GoodsCategoryVO(category);
+ categoryVO.setChildren(findChildren(list, categoryVO));
+ categoryVOList.add(categoryVO);
+ }
+ }
+ categoryVOList.sort(Comparator.comparing(GoodsCategory::getSort));
+ if (!categoryVOList.isEmpty()) {
+ cache.put(CachePrefix.CATEGORY, categoryVOList);
+ cache.put(CachePrefix.CATEGORY_ARRAY, list);
+ }
+ return categoryVOList;
+ }
+
+
+ /**
+ * 递归自身,找到id等于parentId的对象,获取他的children 返回
+ *
+ * @param parentId 父ID
+ * @param categoryVOList 分类VO
+ * @return 子分类列表VO
+ */
+ private List getChildren(String parentId, List categoryVOList) {
+ for (GoodsCategoryVO item : categoryVOList) {
+ if (item.getId().toString().equals(parentId)) {
+ return item.getChildren();
+ }
+ if (item.getChildren() != null && !item.getChildren().isEmpty()) {
+ return getChildren(parentId, item.getChildren());
+ }
+ }
+ return categoryVOList;
+ }
+
+ /**
+ * 递归树形VO
+ *
+ * @param categories 分类列表
+ * @param categoryVO 分类VO
+ * @return 分类VO列表
+ */
+ private List findChildren(List categories, GoodsCategoryVO categoryVO) {
+ List children = new ArrayList<>();
+ categories.forEach(item -> {
+ if (item.getParentId().equals(categoryVO.getId())) {
+ GoodsCategoryVO temp = new GoodsCategoryVO(item);
+ temp.setChildren(findChildren(categories, temp));
+ children.add(temp);
+ }
+ });
+ return children;
+ }
+}
diff --git a/xinelu-nurse-manage/src/main/java/com/xinelu/manage/service/information/IInformationService.java b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/service/information/IInformationService.java
new file mode 100644
index 0000000..3cb9498
--- /dev/null
+++ b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/service/information/IInformationService.java
@@ -0,0 +1,64 @@
+package com.xinelu.manage.service.information;
+
+import com.xinelu.common.core.domain.AjaxResult;
+import com.xinelu.manage.domain.information.Information;
+import com.xinelu.manage.vo.information.InformationVO;
+
+import java.util.List;
+
+
+/**
+ * 资讯信息管理Service接口
+ *
+ * @author xinyilu
+ * @date 2023-02-14
+ */
+public interface IInformationService {
+ /**
+ * 查询资讯信息管理
+ *
+ * @param id 资讯信息管理主键
+ * @return 资讯信息管理
+ */
+ Information selectInformationById(Long id);
+
+ /**
+ * 查询资讯信息管理列表
+ *
+ * @param information 资讯信息管理
+ * @return 资讯信息管理集合
+ */
+ List selectInformationList(Information information);
+
+ /**
+ * 新增资讯信息管理
+ *
+ * @param information 资讯信息管理
+ * @return 结果
+ */
+ int insertInformation(Information information);
+
+ /**
+ * 修改资讯信息管理
+ *
+ * @param information 资讯信息管理
+ * @return 结果
+ */
+ AjaxResult updateInformation(Information information);
+
+ /**
+ * 批量删除资讯信息管理
+ *
+ * @param ids 需要删除的资讯信息管理主键集合
+ * @return 结果
+ */
+ AjaxResult deleteInformationByIds(Long[] ids);
+
+ /**
+ * 删除资讯信息管理信息
+ *
+ * @param id 资讯信息管理主键
+ * @return 结果
+ */
+ int deleteInformationById(Long id);
+}
diff --git a/xinelu-nurse-manage/src/main/java/com/xinelu/manage/service/information/impl/InformationServiceImpl.java b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/service/information/impl/InformationServiceImpl.java
new file mode 100644
index 0000000..46cc2c4
--- /dev/null
+++ b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/service/information/impl/InformationServiceImpl.java
@@ -0,0 +1,176 @@
+package com.xinelu.manage.service.information.impl;
+
+import com.xinelu.common.constant.Constants;
+import com.xinelu.common.core.domain.AjaxResult;
+import com.xinelu.common.exception.ServiceException;
+import com.xinelu.common.utils.SecurityUtils;
+import com.xinelu.common.utils.codes.GenerateSystemCodeUtil;
+import com.xinelu.common.utils.file.FileUtils;
+import com.xinelu.manage.domain.information.Information;
+import com.xinelu.manage.mapper.information.InformationMapper;
+import com.xinelu.manage.service.information.IInformationService;
+import com.xinelu.manage.service.nursestationitem.INurseStationItemService;
+import com.xinelu.manage.service.patientinfo.IPatientInfoService;
+import com.xinelu.manage.vo.information.InformationVO;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+
+/**
+ * 资讯信息管理Service业务层处理
+ *
+ * @author xinyilu
+ * @date 2023-02-14
+ */
+@Service
+public class InformationServiceImpl implements IInformationService {
+ @Resource
+ private InformationMapper informationMapper;
+ @Resource
+ private GenerateSystemCodeUtil generateSystemCodeUtil;
+ @Resource
+ private INurseStationItemService nurseStationItemService;
+ @Resource
+ private IPatientInfoService patientInfoService;
+
+ /**
+ * 查询资讯信息管理
+ *
+ * @param id 资讯信息管理主键
+ * @return 资讯信息管理
+ */
+ @Override
+ public Information selectInformationById(Long id) {
+ return informationMapper.getInformationById(id);
+ }
+
+ /**
+ * 查询资讯信息管理列表
+ *
+ * @param information 资讯信息管理
+ * @return 资讯信息管理
+ */
+ @Override
+ public List selectInformationList(Information information) {
+ return informationMapper.selectInformationVoList(information);
+ }
+
+ /**
+ * 新增资讯信息管理
+ *
+ * @param information 资讯信息管理
+ * @return 结果
+ */
+ @Override
+ public int insertInformation(Information information) {
+ information.setCreateTime(LocalDateTime.now());
+ information.setCreateBy(SecurityUtils.getUsername());
+ information.setInformationCode(Constants.INFORMATION_CODE + generateSystemCodeUtil.generateSystemCode(Constants.INFORMATION_CODE));
+ return informationMapper.insertInformation(information);
+ }
+
+ /**
+ * 修改资讯信息管理
+ *
+ * @param information 资讯信息管理
+ * @return 结果
+ */
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public AjaxResult updateInformation(Information information) {
+ //根据id查询原数据库信息
+ Information existInformation = informationMapper.selectInformationById(information.getId());
+ if (Objects.isNull(existInformation)) {
+ return AjaxResult.error("当前资讯信息不存在,无法修改,请联系管理员!");
+ }
+ //添加修改人,修改时间
+ information.setUpdateTime(LocalDateTime.now());
+ information.setUpdateBy(SecurityUtils.getUsername());
+ //修改
+ int count = informationMapper.updateInformation(information);
+ if (count <= 0) {
+ throw new ServiceException("修改资讯信息失败,请联系管理员!");
+ }
+ //删除缩略图
+ if (!information.getLeadThumbnailUrl().equals(existInformation.getLeadThumbnailUrl())) {
+ nurseStationItemService.deletePictureUrl(existInformation.getLeadThumbnailUrl());
+ }
+ if (StringUtils.isNotBlank(information.getInformationContent())
+ && StringUtils.isNotBlank(existInformation.getInformationContent())
+ && !information.getInformationContent().equals(existInformation.getInformationContent())) {
+ List informationImgSrc = FileUtils.getImgSrc(information.getInformationContent());
+ List getInformationImgSrc = FileUtils.getImgSrc(existInformation.getInformationContent());
+ //差集不同的
+ List subtractNurseStationImgSrc = new ArrayList<>(CollectionUtils.subtract(getInformationImgSrc, informationImgSrc));
+ //删除富文本图片
+ for (String pictureUrl : subtractNurseStationImgSrc) {
+ if (StringUtils.isBlank(pictureUrl)) {
+ continue;
+ }
+ //修改路径
+ String substring = pictureUrl.substring(pictureUrl.indexOf("/profile"));
+ //删除富文本图片
+ nurseStationItemService.deletePictureUrl(substring);
+ }
+ }
+ return AjaxResult.success();
+ }
+
+ /**
+ * 批量删除资讯信息管理
+ *
+ * @param ids 需要删除的资讯信息管理主键
+ * @return 结果
+ */
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public AjaxResult deleteInformationByIds(Long[] ids) {
+ //查询删除之前数据
+ List informationList = informationMapper.selectInformationByIds(ids);
+ //删除表信息
+ int count = informationMapper.deleteInformationByIds(ids);
+ if (count <= 0) {
+ return AjaxResult.error("删除资讯信息失败!");
+ }
+ //筛选资讯主缩略图
+ List leadThumbnailUrlList = informationList.stream().filter(Objects::nonNull).map(Information::getLeadThumbnailUrl).filter(StringUtils::isNotBlank).collect(Collectors.toList());
+ //删除图片
+ patientInfoService.updatePicture(leadThumbnailUrlList);
+ //筛选资讯内容
+ List informationContentList = informationList.stream().filter(Objects::nonNull).map(Information::getInformationContent).filter(StringUtils::isNotBlank).collect(Collectors.toList());
+ //遍历获取内容图片地址
+ for (String informationContent : informationContentList) {
+ List pictureUrlList = FileUtils.getImgSrc(informationContent);
+ for (String pictureUrl : pictureUrlList) {
+ if (StringUtils.isBlank(pictureUrl)) {
+ continue;
+ }
+ //修改路径
+ String substring = pictureUrl.substring(pictureUrl.indexOf("/profile"));
+ //删除富文本图片
+ nurseStationItemService.deletePictureUrl(substring);
+ }
+ }
+ return AjaxResult.success();
+ }
+
+ /**
+ * 删除资讯信息管理信息
+ *
+ * @param id 资讯信息管理主键
+ * @return 结果
+ */
+ @Override
+ public int deleteInformationById(Long id) {
+ return informationMapper.deleteInformationById(id);
+ }
+}
diff --git a/xinelu-nurse-manage/src/main/java/com/xinelu/manage/vo/goodsCategory/GoodsCategoryNameVO.java b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/vo/goodsCategory/GoodsCategoryNameVO.java
new file mode 100644
index 0000000..8cdca8d
--- /dev/null
+++ b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/vo/goodsCategory/GoodsCategoryNameVO.java
@@ -0,0 +1,78 @@
+package com.xinelu.manage.vo.goodsCategory;
+
+import com.xinelu.common.annotation.Excel;
+import com.xinelu.common.custominterface.Insert;
+import com.xinelu.common.custominterface.Update;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author ljh
+ * @version 1.0
+ * Create by 2023/1/28 15:05
+ */
+@Data
+public class GoodsCategoryNameVO implements Serializable {
+ private static final long serialVersionUID = -2360475035289257536L;
+
+ /**
+ * 主键id
+ */
+ private Long id;
+
+ /**
+ * 父级分类id
+ */
+ private Long parentId;
+
+ /**
+ * 商品分类名称
+ */
+ @NotBlank(message = "商品分类名称不能为空", groups = {Insert.class, Update.class})
+ @ApiModelProperty(value = "商品分类名称")
+ @Excel(name = "商品分类名称")
+ @Length(max = 10, message = "商品分类名称不能超过10个字符", groups = {Insert.class, Update.class})
+ private String goodsCategoryName;
+
+ /**
+ * 商品分类编码
+ */
+ @ApiModelProperty(value = "商品分类编码")
+ @Excel(name = "商品分类编码")
+ private String goodsCategoryCode;
+
+ /**
+ * 商品分类图片地址
+ */
+ @ApiModelProperty(value = "商品分类图片地址")
+ @Excel(name = "商品分类图片地址")
+ private String goodsCategoryPicture;
+
+ /**
+ * 分类概述
+ */
+ @ApiModelProperty(value = "分类概述")
+ @Excel(name = "分类概述")
+ private String categoryRemark;
+
+ /**
+ * 分类级别,0:代码根节点,1:代表一级节点,依次递增
+ */
+ private Integer categoryLevel;
+
+ /**
+ * 显示顺序
+ */
+ @ApiModelProperty(value = "显示顺序")
+ @Excel(name = "显示顺序")
+ private Integer sort;
+
+ /**
+ * 主键id
+ */
+ private List goodsCategoryNameId;
+}
diff --git a/xinelu-nurse-manage/src/main/java/com/xinelu/manage/vo/goodsCategory/GoodsCategoryVO.java b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/vo/goodsCategory/GoodsCategoryVO.java
new file mode 100644
index 0000000..16a3a1f
--- /dev/null
+++ b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/vo/goodsCategory/GoodsCategoryVO.java
@@ -0,0 +1,68 @@
+package com.xinelu.manage.vo.goodsCategory;
+
+import com.xinelu.manage.domain.goodsCategory.GoodsCategory;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
+
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * @author ljh
+ * @version 1.0
+ * Create by 2023/1/13 15:07
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class GoodsCategoryVO extends GoodsCategory {
+ private static final long serialVersionUID = 7306585265130625106L;
+
+ @ApiModelProperty(value = "父节点名称")
+ private String goodsCategoryName;
+
+ @ApiModelProperty("子分类列表")
+ private List children;
+
+ public GoodsCategoryVO(GoodsCategory category) {
+ BeanUtils.copyProperties(category, this);
+ }
+
+ public GoodsCategoryVO(Long id,
+ Long parentId,
+ String goodsCategoryName,
+ String goodsCategoryCode,
+ String goodsCategoryPicture,
+ String categoryRemark,
+ Integer categoryLevel,
+ Integer sort) {
+ super(id,
+ parentId,
+ goodsCategoryName,
+ goodsCategoryCode,
+ goodsCategoryPicture,
+ categoryRemark,
+ categoryLevel,
+ sort);
+ }
+
+
+ public List getChildren() {
+
+ if (children != null) {
+ children.sort(new Comparator() {
+ @Override
+ public int compare(GoodsCategoryVO o1, GoodsCategoryVO o2) {
+ return o1.getSort().compareTo(o2.getSort());
+ }
+ });
+ return children;
+ }
+ return null;
+ }
+}
diff --git a/xinelu-nurse-manage/src/main/java/com/xinelu/manage/vo/information/InformationVO.java b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/vo/information/InformationVO.java
new file mode 100644
index 0000000..9c564b5
--- /dev/null
+++ b/xinelu-nurse-manage/src/main/java/com/xinelu/manage/vo/information/InformationVO.java
@@ -0,0 +1,24 @@
+package com.xinelu.manage.vo.information;
+
+import com.xinelu.manage.domain.information.Information;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * 资讯信息管理对象 information
+ *
+ * @author ZH
+ * @date 2023-02-14
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class InformationVO extends Information implements Serializable {
+ private static final long serialVersionUID = 182835156741534308L;
+
+ /**
+ * 资讯分类名称
+ */
+ private String informationCategoryName;
+}
diff --git a/xinelu-nurse-manage/src/main/resources/mapper/manage/information/InformationMapper.xml b/xinelu-nurse-manage/src/main/resources/mapper/manage/information/InformationMapper.xml
new file mode 100644
index 0000000..76976da
--- /dev/null
+++ b/xinelu-nurse-manage/src/main/resources/mapper/manage/information/InformationMapper.xml
@@ -0,0 +1,323 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id,
+ information_category_id,
+ information_title,
+ information_code,
+ information_content,
+ information_click_count,
+ information_jump_link,
+ information_source,
+ lead_thumbnail_url,
+ negative_one_thumbnail_url,
+ negative_two_thumbnail_url,
+ large_picture_url,
+ information_sort,
+ create_by,
+ create_time,
+ update_by,
+ update_time
+ from information
+
+
+
+
+
+
+
+ insert into information
+
+ information_category_id,
+
+ information_title,
+
+ information_code,
+
+ information_content,
+
+ information_click_count,
+
+ information_jump_link,
+
+ information_source,
+
+ lead_thumbnail_url,
+
+ negative_one_thumbnail_url,
+
+ negative_two_thumbnail_url,
+
+ large_picture_url,
+
+ information_sort,
+
+ create_by,
+
+ create_time,
+
+ update_by,
+
+ update_time,
+
+
+
+ #{informationCategoryId},
+
+ #{informationTitle},
+
+ #{informationCode},
+
+ #{informationContent},
+
+ #{informationClickCount},
+
+ #{informationJumpLink},
+
+ #{informationSource},
+
+ #{leadThumbnailUrl},
+
+ #{negativeOneThumbnailUrl},
+
+ #{negativeTwoThumbnailUrl},
+
+ #{largePictureUrl},
+
+ #{informationSort},
+
+ #{createBy},
+
+ #{createTime},
+
+ #{updateBy},
+
+ #{updateTime},
+
+
+
+
+
+ update information
+
+ information_category_id =
+ #{informationCategoryId},
+
+ information_title =
+ #{informationTitle},
+
+ information_code =
+ #{informationCode},
+
+ information_content =
+ #{informationContent},
+
+ information_click_count =
+ #{informationClickCount},
+
+ information_jump_link =
+ #{informationJumpLink},
+
+ information_source =
+ #{informationSource},
+
+ lead_thumbnail_url =
+ #{leadThumbnailUrl},
+
+ negative_one_thumbnail_url =
+ #{negativeOneThumbnailUrl},
+
+ negative_two_thumbnail_url =
+ #{negativeTwoThumbnailUrl},
+
+ large_picture_url =
+ #{largePictureUrl},
+
+ information_sort =
+ #{informationSort},
+
+ create_by =
+ #{createBy},
+
+ create_time =
+ #{createTime},
+
+ update_by =
+ #{updateBy},
+
+ update_time =
+ #{updateTime},
+
+
+ where id = #{id}
+
+
+
+ delete
+ from information
+ where id = #{id}
+
+
+
+ delete from information where id in
+
+ #{id}
+
+
+
+
+
+
+
+
+
+
+