소스 검색

代码提交,总后台和店铺端资质商品过期提醒,文章审核部分功能提交

yjwang 3 일 전
부모
커밋
6a6df867cb

+ 72 - 0
fs-admin/src/main/java/com/fs/his/controller/FsArticleAuditController.java

@@ -0,0 +1,72 @@
+package com.fs.his.controller;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.core.redis.RedisCache;
+import com.fs.his.domain.FsArticle;
+import com.fs.his.param.FsArticleAuditParam;
+import com.fs.his.service.IFsArticleService;
+import com.fs.his.vo.FsArticleListVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 文章审核Controller
+ *
+ * @author fs
+ * @date 2025-11-13
+ */
+@RestController
+@RequestMapping("/his/articleAudit")
+public class FsArticleAuditController extends BaseController
+{
+    @Autowired
+    private IFsArticleService fsArticleService;
+    @Autowired
+    RedisCache redisCache;
+
+    /**
+     * 查询文章列表
+     */
+    @PreAuthorize("@ss.hasPermi('his:articleAudit:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsArticle fsArticle)
+    {
+        startPage();
+        fsArticle.setAuditStatus(1);
+        List<FsArticleListVO> list = fsArticleService.selectFsArticleListVO(fsArticle);
+        return getDataTable(list);
+    }
+
+
+    /**
+     * 获取文章详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('his:articleAudit:query')")
+    @GetMapping(value = "/{articleId}")
+    public AjaxResult getInfo(@PathVariable("articleId") Long articleId)
+    {
+        return AjaxResult.success(fsArticleService.selectFsArticleByArticleId(articleId));
+    }
+
+    /**
+     * 文章审核接口
+     * @param param 参数
+     * @return R
+     * **/
+    @PreAuthorize("@ss.hasPermi('his:articleAudit:articleAudit')")
+    @PostMapping("/audit")
+    public R audit(FsArticleAuditParam param){
+        if(param.getArticleId() == null){
+            return R.error("文章ID不能为空");
+        }
+        if(param.getAuditStatus() == null){
+            return R.error("操作失败,审核类型不能为空!");
+        }
+        return fsArticleService.articleAudit(param);
+    }
+}

+ 26 - 0
fs-service/src/main/java/com/fs/his/domain/FsArticle.java

@@ -57,6 +57,16 @@ public class FsArticle extends BaseEntity
     @Excel(name = "发布时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date publishTime;
 
+    /**
+     * 是否审核(-1驳回、0待审核,1审核中、2已审核)
+     * **/
+    private Integer auditStatus;
+
+    /**
+     * 审核日期
+     * **/
+    private Date auditTime;
+
     public void setArticleId(Long articleId) 
     {
         this.articleId = articleId;
@@ -148,6 +158,20 @@ public class FsArticle extends BaseEntity
         return publishTime;
     }
 
+    public Date getAuditTime() {
+        return auditTime;
+    }
+
+    public void setAuditTime(Date auditTime) {
+        this.auditTime = auditTime;
+    }
+    public Integer getAuditStatus() {
+        return auditStatus;
+    }
+
+    public void setAuditStatus(Integer auditStatus) {
+        this.auditStatus = auditStatus;
+    }
     @Override
     public String toString() {
         return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
@@ -163,6 +187,8 @@ public class FsArticle extends BaseEntity
             .append("createTime", getCreateTime())
             .append("updateTime", getUpdateTime())
             .append("publishTime", getPublishTime())
+                .append("auditStatus", getAuditStatus())
+                .append("auditTime", getAuditTime())
             .toString();
     }
 }

+ 1 - 0
fs-service/src/main/java/com/fs/his/mapper/FsArticleMapper.java

@@ -76,6 +76,7 @@ public interface FsArticleMapper
     @Select({"<script> " +
              "SELECT fa.*,fac.cate_name  FROM fs_article fa LEFT JOIN fs_article_cate fac ON fa.cate_id=fac.cate_id"+
             "<where>  \n" +
+            "            <if test=\"auditStatus != null \"> and fa.audit_status = #{auditStatus}</if>\n" +
             "            <if test=\"cateId != null \"> and fa.cate_id = #{cateId}</if>\n" +
             "            <if test=\"title != null  and title != ''\"> and fa.title like concat('%', #{title}, '%')</if>\n" +
             "            <if test=\"imageUrl != null  and imageUrl != ''\"> and fa.image_url = #{imageUrl}</if>\n" +

+ 31 - 0
fs-service/src/main/java/com/fs/his/param/FsArticleAuditParam.java

@@ -0,0 +1,31 @@
+package com.fs.his.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 文章审核参数
+ * **/
+@Data
+public class FsArticleAuditParam implements Serializable {
+    /**
+     * 文章ID
+     * **/
+    private Long articleId;
+
+    /**
+     * 审核类型  -1驳回、0待审核,1审核中、2已审核
+     * **/
+    private Integer auditStatus;
+
+    /**
+     * 审核原因
+     * **/
+    private String reason;
+
+    /**
+     * 审核图片
+     * **/
+    private String attachImage;
+}

+ 10 - 0
fs-service/src/main/java/com/fs/his/service/IFsArticleService.java

@@ -1,7 +1,10 @@
 package com.fs.his.service;
 
 import java.util.List;
+
+import com.fs.common.core.domain.R;
 import com.fs.his.domain.FsArticle;
+import com.fs.his.param.FsArticleAuditParam;
 import com.fs.his.param.FsArticleListUParam;
 import com.fs.his.vo.FsArticleListUVO;
 import com.fs.his.vo.FsArticleListVO;
@@ -68,4 +71,11 @@ public interface IFsArticleService
     int updateFsArticleViews(Long articleId);
 
     List<FsArticleListVO> selectFsArticleListVO(FsArticle fsArticle);
+
+    /**
+     * 审核信息
+     * @param param 审核参数
+     * @return  R
+     * **/
+    R articleAudit(FsArticleAuditParam param);
 }

+ 38 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsArticleServiceImpl.java

@@ -1,11 +1,16 @@
 package com.fs.his.service.impl;
 
+import java.util.Date;
 import java.util.List;
+
+import com.fs.common.core.domain.R;
 import com.fs.common.utils.DateUtils;
+import com.fs.his.param.FsArticleAuditParam;
 import com.fs.his.param.FsArticleListUParam;
 import com.fs.his.vo.FsArticleListUVO;
 import com.fs.his.vo.FsArticleListVO;
 import com.fs.his.vo.FsArticleVO;
+import com.fs.hisStore.utils.StoreAuditLogUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.fs.his.mapper.FsArticleMapper;
@@ -24,6 +29,9 @@ public class FsArticleServiceImpl implements IFsArticleService
     @Autowired
     private FsArticleMapper fsArticleMapper;
 
+    @Autowired
+    private StoreAuditLogUtil storeAuditLogUtil;
+
     /**
      * 查询文章
      *
@@ -112,4 +120,34 @@ public class FsArticleServiceImpl implements IFsArticleService
     public List<FsArticleListVO> selectFsArticleListVO(FsArticle fsArticle) {
         return fsArticleMapper.selectFsArticleListVO(fsArticle);
     }
+
+    @Override
+    public R articleAudit(FsArticleAuditParam param) {
+        //校验数据是否存在
+        FsArticle fsArticle = fsArticleMapper.selectFsArticleByArticleId(param.getArticleId());
+        if(fsArticle == null){
+            return R.error("操作失败,数据不存在!");
+        }
+
+        if(fsArticle.getAuditStatus() != null && fsArticle.getAuditStatus() == 2){
+            return R.error("操作失败,数据已审核!");
+        }
+
+
+        if(fsArticle.getAuditStatus() < -1 && param.getAuditStatus() > 2){
+            return R.error("操作失败,审核状态异常!");
+        }
+
+        FsArticle update = new FsArticle();
+        update.setAuditStatus(param.getAuditStatus());
+        update.setArticleId(param.getArticleId());
+        update.setAuditTime(new Date());
+        if(fsArticleMapper.updateFsArticle(update) <= 0){
+            return R.error("操作失败,数据更新失败!");
+        }
+
+        //插入日志信息
+        storeAuditLogUtil.addAudit(param.getArticleId(), param.getReason(), param.getAttachImage());
+        return R.ok("操作成功");
+    }
 }

+ 1 - 1
fs-service/src/main/java/com/fs/hisStore/dto/ForbiddenDrugItemDTO.java

@@ -11,7 +11,7 @@ import java.io.Serializable;
 public class ForbiddenDrugItemDTO implements Serializable {
     private Long id; // 唯一标识
     private String name; // 禁止品种名称
-    private String type; // 类型(1=政策禁止,2=单方制剂禁止,3=剂型禁止,4=兴奋剂禁止)
+    private String type; // 类型(1政策禁止,2单方制剂禁止,3剂型禁止,4兴奋剂禁止)
     private Integer sortNum; // 排序号
     private String exceptionKey; // 例外关键词
     private String remark; // 备注

+ 49 - 6
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductScrmServiceImpl.java

@@ -462,12 +462,6 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
 
         product.setBusinessLink(param.getBusinessLink());
 
-        //校验是否药品网络销售禁止清单
-        if(product.getIsDrug().equals("1")){//药品进入校验
-
-
-        }
-
         //获取店铺
         FsStoreScrm store = fsStoreScrmService.selectFsStoreByStoreId(product.getStoreId());
         if (store == null || 1 != store.getStatus()) {
@@ -514,6 +508,14 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
             product.setIsAudit("1");
         }
 
+        //校验是否药品网络销售禁止清单
+//        if(product.getIsDrug().equals("1")){//药品进入校验
+//            String checkStr = checkProductInfo(product);
+//            if(checkStr != null){
+//                return R.error(checkStr);
+//            }
+//        }
+
         if(param.getProductId() != null && param.getProductId() > 0){
             FsStoreProductScrm oldFsStoreProduct = fsStoreProductMapper.selectFsStoreProductById(product.getProductId());
             Boolean isAudit = configUtil.generateConfigByKey("medicalMall.func.switch").getBoolean("isAudit");
@@ -1521,4 +1523,45 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
             return null;
         }
     }
+
+    public  String checkProductInfo(FsStoreProductScrm product){
+        String commonName = product.getCommonName() != null ? product.getCommonName() : "";
+        String dosageForm = product.getDosageForm() != null ? product.getDosageForm() : "";
+        String productName = product.getProductName() != null ? product.getProductName() : "";
+        String description = product.getDescription() != null ? product.getDescription() : "";
+
+        for (ForbiddenDrugItemDTO item : forbiddenListManager.getSortedForbiddenList()) {
+            String itemName = item.getName();
+            String exceptionKey = item.getExceptionKey();
+            switch (item.getType()) {
+                case "1": // 政策禁止
+                    if (itemName.equals(commonName)) {
+                        return "驳回(排序" + item.getSortNum() + "):该药品属于政策禁止网售品种(" + itemName + ")";
+                    }
+                    break;
+                case "3": // 剂型禁止
+                    if (itemName.equals(dosageForm)) {
+                        if (exceptionKey != null && (productName.contains(exceptionKey) || description.contains(exceptionKey))) {
+                            continue;
+                        }
+                        return "驳回(排序" + item.getSortNum() + "):该剂型(" + itemName + ")禁止网售," + item.getRemark();
+                    }
+                    break;
+                case "4": // 兴奋剂禁止
+                    if (commonName.contains(itemName) && !productName.contains(exceptionKey)) {
+                        return "驳回(排序" + item.getSortNum() + "):该药品属于兴奋剂相关品种(" + itemName + "),禁止网售";
+                    }
+                    break;
+                case "2": // 单方制剂禁止
+                    if (itemName.equals(commonName)) {
+                        if (exceptionKey != null && (productName.contains(exceptionKey) || description.contains(exceptionKey))) {
+                            continue;
+                        }
+                        return "驳回(排序" + item.getSortNum() + "):该单方制剂(" + itemName + ")禁止网售";
+                    }
+                    break;
+            }
+        }
+        return null;
+    }
 }

+ 6 - 0
fs-service/src/main/resources/mapper/his/FsArticleMapper.xml

@@ -76,6 +76,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">create_time,</if>
             <if test="updateTime != null">update_time,</if>
             <if test="publishTime != null">publish_time,</if>
+            <if test="auditStatus != null">audit_status,</if>
+            <if test="auditTime != null">audit_time,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="cateId != null">#{cateId},</if>
@@ -89,6 +91,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">#{createTime},</if>
             <if test="updateTime != null">#{updateTime},</if>
             <if test="publishTime != null">#{publishTime},</if>
+            <if test="auditStatus != null">#{auditStatus},</if>
+            <if test="auditTime != null">#{auditTime},</if>
          </trim>
     </insert>
 
@@ -106,6 +110,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createTime != null">create_time = #{createTime},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
             <if test="publishTime != null">publish_time = #{publishTime},</if>
+            <if test="auditStatus != null">audit_status = #{auditStatus},</if>
+            <if test="auditTime != null">audit_time = #{auditTime},</if>
         </trim>
         where article_id = #{articleId}
     </update>

+ 8 - 8
fs-service/src/main/resources/mapper/hisStore/FsStoreProductScrmMapper.xml

@@ -698,12 +698,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     '生产企业营业执照',
                     CASE
                         WHEN business_end &lt; CURDATE() THEN '已过期'
-                        ELSE '即将15天内过期'
+                        ELSE '即将1个月内过期'
                         END
                 ) AS status_text
         FROM fs_store_product_scrm
         WHERE business_end IS NOT NULL
-          AND business_end &lt;= DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+          AND business_end &lt;= DATE_ADD(CURDATE(), INTERVAL 1 MONTH)
           AND is_business_permanent != 1
         <if test="storeId != null">AND store_id = #{storeId}</if>
 
@@ -716,12 +716,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     '生产企业的生产许可证/备案凭证',
                     CASE
                         WHEN license_end &lt; CURDATE() THEN '已过期'
-                        ELSE '即将15天内过期'
+                        ELSE '即将1个月内过期'
                         END
                 ) AS status_text
         FROM fs_store_product_scrm
         WHERE license_end IS NOT NULL
-          AND license_end &lt;= DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+          AND license_end &lt;= DATE_ADD(CURDATE(), INTERVAL 1 MONTH)
           AND is_license_permanent != 1
         <if test="storeId != null">AND store_id = #{storeId}</if>
 
@@ -734,12 +734,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     '商品注册证/备案凭证',
                     CASE
                         WHEN certificate_end &lt; CURDATE() THEN '已过期'
-                        ELSE '即将15天内过期'
+                        ELSE '即将1个月内过期'
                         END
                 ) AS status_text
         FROM fs_store_product_scrm
         WHERE certificate_end IS NOT NULL
-          AND certificate_end &lt;= DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+          AND certificate_end &lt;= DATE_ADD(CURDATE(), INTERVAL 1 MONTH)
           AND is_certificate_permanent != 1
         <if test="storeId != null">AND store_id = #{storeId}</if>
 
@@ -751,12 +751,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     'GMP/GSP认证证书有效期',
                     CASE
                         WHEN gmp_auth_end &lt; CURDATE() THEN '已过期'
-                        ELSE '即将15天内过期'
+                        ELSE '即将1个月内过期'
                         END
                 ) AS status_text
         FROM fs_store_product_scrm
         WHERE  gmp_auth_end IS NOT NULL
-          AND gmp_auth_end &lt;= DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+          AND gmp_auth_end &lt;= DATE_ADD(CURDATE(), INTERVAL 1 MONTH)
           AND is_gmp_auth_permanent != 1
         <if test="storeId != null">AND store_id = #{storeId}</if>
     </select>

+ 53 - 53
fs-service/src/main/resources/mapper/hisStore/FsStoreScrmMapper.xml

@@ -596,9 +596,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     CASE
                         WHEN business_license IS NOT NULL
                             AND business_license_expire_end IS NOT NULL
-                            AND business_license_expire_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+                            AND business_license_expire_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH)
                             AND is_business_license_permanent != 1
-            THEN '营业执照15天内过期,请注意更新;'
+            THEN '营业执照3个月内过期,请注意更新;'
                         ELSE ''
                         END,
                 -- 药品经营许可证
@@ -613,9 +613,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     CASE
                         WHEN drug_license IS NOT NULL
                             AND drug_license_expiry_end IS NOT NULL
-                            AND drug_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+                            AND drug_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH)
                             AND is_drug_license_permanent != 1
-            THEN '药品经营许可证15天内过期,请注意更新;'
+            THEN '药品经营许可证3个月内过期,请注意更新;'
                         ELSE ''
                         END,
                 -- 一类器械生产备案
@@ -630,9 +630,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     CASE
                         WHEN medical_device1 IS NOT NULL
                             AND medical_device1_expiry_end IS NOT NULL
-                            AND medical_device1_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+                            AND medical_device1_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH)
                             AND is_medical_device1_expiry_permanent != 1
-            THEN '一类器械生产备案15天内过期,请注意更新;'
+            THEN '一类器械生产备案3个月内过期,请注意更新;'
                         ELSE ''
                         END,
                 -- 二类医疗器械备案
@@ -647,9 +647,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     CASE
                         WHEN medical_device2 IS NOT NULL
                             AND medical_device2_expiry_end IS NOT NULL
-                            AND medical_device2_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+                            AND medical_device2_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH)
                             AND is_medical_device2_expiry_permanent != 1
-            THEN '二类医疗器械备案15天内过期,请注意更新;'
+            THEN '二类医疗器械备案3个月内过期,请注意更新;'
                         ELSE ''
                         END,
                 -- 三类器械经营许可证
@@ -664,9 +664,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     CASE
                         WHEN medical_device3 IS NOT NULL
                             AND medical_device3_expiry_end IS NOT NULL
-                            AND medical_device3_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+                            AND medical_device3_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH)
                             AND is_medical_device3_expiry_permanent != 1
-            THEN '三类器械经营许可证15天内过期,请注意更新;'
+            THEN '三类器械经营许可证3个月内过期,请注意更新;'
                         ELSE ''
                         END,
                 -- 食品经营许可证
@@ -681,9 +681,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     CASE
                         WHEN food_license IS NOT NULL
                             AND food_license_expiry_end IS NOT NULL
-                            AND food_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+                            AND food_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH)
                             AND is_food_license_expiry_permanent != 1
-            THEN '食品经营许可证15天内过期,请注意更新;'
+            THEN '食品经营许可证3个月内过期,请注意更新;'
                         ELSE ''
                         END,
                 -- 医疗机构执业许可证
@@ -698,49 +698,49 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     CASE
                         WHEN medical_license IS NOT NULL
                             AND medical_license_expiry_end IS NOT NULL
-                            AND medical_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+                            AND medical_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH)
                             AND is_medical_license_expiry_permanent != 1
-            THEN '医疗机构执业许可证15天内过期,请注意更新;'
+            THEN '医疗机构执业许可证3个月内过期,请注意更新;'
                         ELSE ''
                         END
                 ) AS warning_message
         FROM fs_store_scrm
         WHERE STATUS = 1
           AND (
-            -- 营业执照:已过期 或 15天内过期 + 非永久
+            -- 营业执照
                 (business_license IS NOT NULL
                     AND business_license_expire_end IS NOT NULL
-                    AND (business_license_expire_end &lt; CURDATE() OR business_license_expire_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY))
+                    AND (business_license_expire_end &lt; CURDATE() OR business_license_expire_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH))
                     AND is_business_license_permanent != 1)
                 -- 药品经营许可证
                 OR (drug_license IS NOT NULL
                 AND drug_license_expiry_end IS NOT NULL
-                AND (drug_license_expiry_end &lt; CURDATE() OR drug_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY))
+                AND (drug_license_expiry_end &lt; CURDATE() OR drug_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH))
                 AND is_drug_license_permanent != 1)
                 -- 一类器械生产备案
                 OR (medical_device1 IS NOT NULL
                 AND medical_device1_expiry_end IS NOT NULL
-                AND (medical_device1_expiry_end &lt; CURDATE() OR medical_device1_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY))
+                AND (medical_device1_expiry_end &lt; CURDATE() OR medical_device1_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH))
                 AND is_medical_device1_expiry_permanent != 1)
                 -- 二类医疗器械备案
                 OR (medical_device2 IS NOT NULL
                 AND medical_device2_expiry_end IS NOT NULL
-                AND (medical_device2_expiry_end &lt; CURDATE() OR medical_device2_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY))
+                AND (medical_device2_expiry_end &lt; CURDATE() OR medical_device2_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH))
                 AND is_medical_device2_expiry_permanent != 1)
                 -- 三类器械经营许可证
                 OR (medical_device3 IS NOT NULL
                 AND medical_device3_expiry_end IS NOT NULL
-                AND (medical_device3_expiry_end &lt; CURDATE() OR medical_device3_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY))
+                AND (medical_device3_expiry_end &lt; CURDATE() OR medical_device3_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH))
                 AND is_medical_device3_expiry_permanent != 1)
                 -- 食品经营许可证
                 OR (food_license IS NOT NULL
                 AND food_license_expiry_end IS NOT NULL
-                AND (food_license_expiry_end &lt; CURDATE() OR food_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY))
+                AND (food_license_expiry_end &lt; CURDATE() OR food_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH))
                 AND is_food_license_expiry_permanent != 1)
                 -- 医疗机构执业许可证
                 OR (medical_license IS NOT NULL
                 AND medical_license_expiry_end IS NOT NULL
-                AND (medical_license_expiry_end &lt; CURDATE() OR medical_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY))
+                AND (medical_license_expiry_end &lt; CURDATE() OR medical_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH))
                 AND is_medical_license_expiry_permanent != 1)
             )
         HAVING warning_message != '';
@@ -750,7 +750,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             CONCAT(
                     store_name,
                     '的',
-                -- 营业执照(补充永久标识判断)
+                -- 营业执照
                     CASE
                         WHEN business_license IS NOT NULL
                             AND business_license_expire_end IS NOT NULL
@@ -762,12 +762,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     CASE
                         WHEN business_license IS NOT NULL
                             AND business_license_expire_end IS NOT NULL
-                            AND business_license_expire_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+                            AND business_license_expire_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH)
                             AND is_business_license_permanent != 1
-            THEN '营业执照15天内过期,请注意更新;'
+            THEN '营业执照3个月内过期,请注意更新;'
                         ELSE ''
                         END,
-                -- 药品经营许可证(补充永久标识判断)
+                -- 药品经营许可证
                     CASE
                         WHEN drug_license IS NOT NULL
                             AND drug_license_expiry_end IS NOT NULL
@@ -779,12 +779,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     CASE
                         WHEN drug_license IS NOT NULL
                             AND drug_license_expiry_end IS NOT NULL
-                            AND drug_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+                            AND drug_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH)
                             AND is_drug_license_permanent != 1
-            THEN '药品经营许可证15天内过期,请注意更新;'
+            THEN '药品经营许可证3个月内过期,请注意更新;'
                         ELSE ''
                         END,
-                -- 一类器械生产备案(补充永久标识判断)
+                -- 一类器械生产备案
                     CASE
                         WHEN medical_device1 IS NOT NULL
                             AND medical_device1_expiry_end IS NOT NULL
@@ -796,12 +796,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     CASE
                         WHEN medical_device1 IS NOT NULL
                             AND medical_device1_expiry_end IS NOT NULL
-                            AND medical_device1_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+                            AND medical_device1_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH)
                             AND is_medical_device1_expiry_permanent != 1
-            THEN '一类器械生产备案15天内过期,请注意更新;'
+            THEN '一类器械生产备案3个月内过期,请注意更新;'
                         ELSE ''
                         END,
-                -- 二类医疗器械备案(补充永久标识判断,保留原字段名 medicalDevice2)
+                -- 二类医疗器械备案
                     CASE
                         WHEN medicalDevice2 IS NOT NULL
                             AND medical_device2_expiry_end IS NOT NULL
@@ -813,12 +813,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     CASE
                         WHEN medicalDevice2 IS NOT NULL
                             AND medical_device2_expiry_end IS NOT NULL
-                            AND medical_device2_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+                            AND medical_device2_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH)
                             AND is_medical_device2_expiry_permanent != 1
-            THEN '二类医疗器械备案15天内过期,请注意更新;'
+            THEN '二类医疗器械备案3个月内过期,请注意更新;'
                         ELSE ''
                         END,
-                -- 三类器械经营许可证(补充永久标识判断,保留原字段名 medicalDevice3)
+                -- 三类器械经营许可证
                     CASE
                         WHEN medicalDevice3 IS NOT NULL
                             AND medical_device3_expiry_end IS NOT NULL
@@ -830,12 +830,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     CASE
                         WHEN medicalDevice3 IS NOT NULL
                             AND medical_device3_expiry_end IS NOT NULL
-                            AND medical_device3_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+                            AND medical_device3_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH)
                             AND is_medical_device3_expiry_permanent != 1
-            THEN '三类器械经营许可证15天内过期,请注意更新;'
+            THEN '三类器械经营许可证3个月内过期,请注意更新;'
                         ELSE ''
                         END,
-                -- 食品经营许可证(补充永久标识判断)
+                -- 食品经营许可证
                     CASE
                         WHEN food_license IS NOT NULL
                             AND food_license_expiry_end IS NOT NULL
@@ -847,12 +847,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     CASE
                         WHEN food_license IS NOT NULL
                             AND food_license_expiry_end IS NOT NULL
-                            AND food_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+                            AND food_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH)
                             AND is_food_license_expiry_permanent != 1
-            THEN '食品经营许可证15天内过期,请注意更新;'
+            THEN '食品经营许可证3个月内过期,请注意更新;'
                         ELSE ''
                         END,
-                -- 医疗机构执业许可证(补充永久标识判断)
+                -- 医疗机构执业许可证
                     CASE
                         WHEN medical_license IS NOT NULL
                             AND medical_license_expiry_end IS NOT NULL
@@ -864,9 +864,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                     CASE
                         WHEN medical_license IS NOT NULL
                             AND medical_license_expiry_end IS NOT NULL
-                            AND medical_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
+                            AND medical_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH)
                             AND is_medical_license_expiry_permanent != 1
-            THEN '医疗机构执业许可证15天内过期,请注意更新;'
+            THEN '医疗机构执业许可证3个月内过期,请注意更新;'
                         ELSE ''
                         END
                 ) AS warning_message
@@ -874,40 +874,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         WHERE STATUS = 1
           AND store_id = #{storeId}
           AND (
-            -- 营业执照:已过期 或 15天内过期 + 非永久
+            -- 营业执照
                 (business_license IS NOT NULL
                     AND business_license_expire_end IS NOT NULL
-                    AND (business_license_expire_end &lt; CURDATE() OR business_license_expire_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY))
+                    AND (business_license_expire_end &lt; CURDATE() OR business_license_expire_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH))
                     AND is_business_license_permanent != 1)
                 -- 药品经营许可证
                 OR (drug_license IS NOT NULL
                 AND drug_license_expiry_end IS NOT NULL
-                AND (drug_license_expiry_end &lt; CURDATE() OR drug_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY))
+                AND (drug_license_expiry_end &lt; CURDATE() OR drug_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH))
                 AND is_drug_license_permanent != 1)
                 -- 一类器械生产备案
                 OR (medical_device1 IS NOT NULL
                 AND medical_device1_expiry_end IS NOT NULL
-                AND (medical_device1_expiry_end &lt; CURDATE() OR medical_device1_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY))
+                AND (medical_device1_expiry_end &lt; CURDATE() OR medical_device1_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH))
                 AND is_medical_device1_expiry_permanent != 1)
-                -- 二类医疗器械备案(保留原字段名 medicalDevice2)
+                -- 二类医疗器械备案
                 OR (medicalDevice2 IS NOT NULL
                 AND medical_device2_expiry_end IS NOT NULL
-                AND (medical_device2_expiry_end &lt; CURDATE() OR medical_device2_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY))
+                AND (medical_device2_expiry_end &lt; CURDATE() OR medical_device2_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH))
                 AND is_medical_device2_expiry_permanent != 1)
-                -- 三类器械经营许可证(保留原字段名 medicalDevice3)
+                -- 三类器械经营许可证
                 OR (medicalDevice3 IS NOT NULL
                 AND medical_device3_expiry_end IS NOT NULL
-                AND (medical_device3_expiry_end &lt; CURDATE() OR medical_device3_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY))
+                AND (medical_device3_expiry_end &lt; CURDATE() OR medical_device3_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH))
                 AND is_medical_device3_expiry_permanent != 1)
                 -- 食品经营许可证
                 OR (food_license IS NOT NULL
                 AND food_license_expiry_end IS NOT NULL
-                AND (food_license_expiry_end &lt; CURDATE() OR food_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY))
+                AND (food_license_expiry_end &lt; CURDATE() OR food_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH))
                 AND is_food_license_expiry_permanent != 1)
                 -- 医疗机构执业许可证
                 OR (medical_license IS NOT NULL
                 AND medical_license_expiry_end IS NOT NULL
-                AND (medical_license_expiry_end &lt; CURDATE() OR medical_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY))
+                AND (medical_license_expiry_end &lt; CURDATE() OR medical_license_expiry_end BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH))
                 AND is_medical_license_expiry_permanent != 1)
             )
         HAVING warning_message != '';