liusheng
2026-09-23 ccf5fc76de48e6add5b325b93f2b0ea54efbf2b8
1.代码提交
已修改13个文件
已添加2个文件
205 ■■■■■ 文件已修改
.idea/encodings.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/redisSettings.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/ruoyi-admin.iml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatMedInhospController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-druid.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/PatMedInhospMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/ServiceTaskMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/encodings.xml
@@ -4,10 +4,13 @@
    <file url="file://$PROJECT_DIR$/ruoyi-admin/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatMedOuthospProvisionalController.java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskPreachformController.java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceTaskmedicalController.java" charset="GBK" />
    <file url="file://$PROJECT_DIR$/ruoyi-admin/src/main/resources" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/ruoyi-admin/src/main/resources/logback.xml" charset="GBK" />
    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/MessageSend.java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx/SmsServiceSoap.java" charset="GBK" />
    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx2/Hello.java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx2/HelloResponse.java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/ruoyi-common/src/main/java/com/ruoyi/common/dx2/I5GReply.java" charset="UTF-8" />
@@ -42,15 +45,22 @@
    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/common/DeepSeekApi.java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/domain/PatMedOuthospProvisional.java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/domain/ServiceSubtaskPreachform.java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/domain/ServiceTaskmedical.java" charset="GBK" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/domain/VO/ServiceTaskmedicalVO.java" charset="GBK" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/mapper/PatMedOuthospProvisionalMapper.java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskPreachformMapper.java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/mapper/ServiceTaskmedicalMapper.java" charset="GBK" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/service/IPatMedOuthospProvisionalService.java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/service/IServiceSubtaskPreachformService.java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/service/IServiceTaskmedicalService.java" charset="GBK" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/service/impl/PatMedOuthospProvisionalServiceImpl.java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java" charset="GBK" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskPreachformServiceImpl.java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/java/com/smartor/service/impl/ServiceTaskmedicalServiceImpl.java" charset="GBK" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/resources" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/resources/mapper/smartor/PatMedOuthospProvisionalMapper.xml" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/resources/mapper/smartor/ServiceSubtaskPreachformMapper.xml" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/smartor/src/main/resources/mapper/smartor/ServiceTaskmedicalMapper.xml" charset="GBK" />
    <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
    <file url="PROJECT" charset="GBK" />
.idea/redisSettings.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="RedisConfiguration">
    <option name="serverConfigurations">
      <list>
        <ServerConfiguration>
          <option name="label" value="local" />
          <option name="password" value="Smartor" />
          <option name="sercurityInfo">
            <SercurityInfo />
          </option>
          <option name="serverUrl" value="localhost:6020" />
          <option name="userName" value="" />
        </ServerConfiguration>
      </list>
    </option>
  </component>
</project>
ruoyi-admin/ruoyi-admin.iml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8" inherit-compiler-output="true">
    <exclude-output />
    <orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
    <orderEntry type="sourceFolder" forTests="false" />
  </component>
</module>
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/PatMedInhospController.java
@@ -1,6 +1,7 @@
package com.ruoyi.web.controller.smartor;
import com.github.pagehelper.ISelect;
import com.github.pagehelper.PageInfo;
import com.ruoyi.common.annotation.AddOrgId;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
@@ -70,12 +71,9 @@
        SysUser user = getLoginUser().getUser();
        patMedInhosp.setOrgid(user.getOrgid());
        List<PatMedInhosp> list = patMedInhospService.selectPatMedInhospList(patMedInhosp);
        long count = PageUtils.count(new ISelect() {
            @Override
            public void doSelect() {
                patMedInhospService.selectPatMedInhospList(patMedInhosp);
            }
        });
        // startPage ä¹‹åŽ PageHelper å·²ç»è‡ªåŠ¨æ‰§è¡Œè¿‡ä¸€æ¬¡ count æŸ¥è¯¢ï¼Œç›´æŽ¥å¤ç”¨ Page é‡Œçš„ total,
        // é¿å…ç”¨ PageUtils.count æŠŠå¸¦ JOIN çš„统计语句再跑一遍
        long count = new PageInfo<>(list).getTotal();
        return getDataTable2(count, list);
    }
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -137,14 +137,6 @@
        if (StringUtils.isEmpty(systype)) path = sysConfigService.selectConfigByKey("sys.qddz");
        else path = sysConfigService.selectConfigByKey("sys.qddz.yd");
        if (active.equals("nhfy")){
            //南华附一的,先不走免登,直接跳到登陆页
            path = sysConfigService.selectConfigByKey("sys.qddz.yd");
            log.info("【NHFYSSO登录】重定向地址:{}", path);
            return buildRedirect(path);
        }
            log.info("qddz的查询值为,path:{}", path);
        if (StringUtils.isEmpty(path)) {
            throw new BaseException("请配置前端地址");
        }
@@ -155,7 +147,7 @@
            return buildRedirect(path + "/login");
        }
        String redirectUrl = path + "/loginSSO?token=" + loginToken + "&orgid=" + orgid + "&campusid=" + campusid + "&orgname=null&ZuHuID=null&deptCode=null";
        String redirectUrl = path + "/#/loginSSO?token=" + loginToken + "&orgid=" + orgid + "&campusid=" + campusid + "&orgname=null&ZuHuID=null&deptCode=null";
        log.info("【SSO登录】重定向地址:{}", redirectUrl);
        return buildRedirect(redirectUrl);
    }
ruoyi-admin/src/main/resources/application-druid.yml
@@ -34,7 +34,7 @@
        #        password: Hxerp2000
        #        driverClassName: com.mysql.cj.jdbc.Driver
        #  å…¬å¸æœ¬åœ°
        url: jdbc:mysql://haiershi.a1.luyouxia.net:23844/smartor_lishui?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&connectTimeout=120000&socketTimeout=240000
        url: jdbc:mysql://haiershi.a1.luyouxia.net:23844/smartor_sltd?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&connectTimeout=120000&socketTimeout=240000
        username: smartor
        password: Smartor.2023
        driverClassName: com.mysql.cj.jdbc.Driver
ruoyi-admin/src/main/resources/application.yml
@@ -36,14 +36,14 @@
# æ—¥å¿—配置
logging:
  # æ—¥å¿—路径 ç¤ºä¾‹ï¼ˆ Windows配置D:/ruoyi/logs,Linux配置 /home/ruoyi/logs,不填同级目录logs)
  path: D:/ruoyi/ls/logs
  path: D:/health/logs
  # å­—符编码
  charset:
    console: UTF-8
    file: UTF-8
  # æ—¥å¿—文件配置
  file:
    name: ${logging.path}/ruoyi.log
    name: ${logging.path}/sys-info.log
    max-size: 100MB
    max-history: 30
  # æ—¥å¿—级别配置
@@ -51,7 +51,7 @@
    com.ruoyi: info
    com.smartor: info
    org.springframework: warn
    org.apache.ibatis: warn
    org.apache.ibatis: debug
    # æŽ§åˆ¶å°è¾“出级别
    root: info
  # æ—¥å¿—格式配置
@@ -75,7 +75,7 @@
    # å›½é™…化资源文件路径
    basename: i18n/messages
  profiles:
    active: ls
    active: nhfy
  # æ–‡ä»¶ä¸Šä¼ 
  servlet:
@@ -174,5 +174,6 @@
sms_appkey:
sms_flag:
shurl:
shversion:
#三汇电话地址
shurl: http://192.168.99.224:8098/
shversion: 6.1.x
ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml
@@ -12,7 +12,7 @@
        <!-- é…ç½®é»˜è®¤çš„æ‰§è¡Œå™¨.SIMPLE就是普通执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将重用语句并执行批量更新 -->
        <setting name="defaultExecutorType" value="SIMPLE"/>
        <!-- æŒ‡å®š MyBatis æ‰€ç”¨æ—¥å¿—的具体实现(是否打印SQL) -->
<!--        <setting name="logImpl" value="STDOUT_LOGGING"/>-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <!-- ä½¿ç”¨é©¼å³°å‘½åæ³•转换字段 -->
        <!-- <setting name="mapUnderscoreToCamelCase" value="true"/> -->
    </settings>
ruoyi-common/src/main/java/com/ruoyi/common/utils/HttpUtil.java
@@ -395,14 +395,18 @@
            // èŽ·å–å“åº”ç 
            int responseCode = connection.getResponseCode();
            log.info("postFormRequest å“åº”码:{},url:{}", responseCode, fullUrl);
            // è¯»å–响应
            // è¯»å–响应(非200时errorStream可能为null,避免NPE)
            StringBuilder response = new StringBuilder();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            } else {
                reader = new BufferedReader(new InputStreamReader(connection.getErrorStream()));
            InputStream respStream = responseCode == HttpURLConnection.HTTP_OK
                    ? connection.getInputStream()
                    : connection.getErrorStream();
            if (respStream == null) {
                log.warn("postFormRequest å“åº”体为空,响应码:{},url:{}", responseCode, fullUrl);
                return "";
            }
            reader = new BufferedReader(new InputStreamReader(respStream));
            String line;
            while ((line = reader.readLine()) != null) {
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -175,7 +175,12 @@
        headers.put("app-key", APP_KEY);
        Map<String, String> requestParams = new HashMap<>();
        requestParams.put("token", token);
        String reqData = HttpUtil.postFormRequest(sltdPubPath + "/checkSsoTokenId", requestParams, headers, null);
        String url = active != null && active.contains("nhfy")
                ? sltdPubPath + "/hbos-thirdparty-integration/standard/ih/getHisLoginUserInfo"
                : sltdPubPath + "/checkSsoTokenId";
        log.info("【SLTD token éªŒè¯ã€‘请求地址:{},token长度:{},token结尾:{}", url, token.length(),
                token.length() > 4 ? token.substring(token.length() - 4) : token);
        String reqData = HttpUtil.postFormRequest(url, requestParams, headers, null);
        log.info("【SLTD token éªŒè¯ã€‘响应结果:{}", reqData);
        if (StringUtils.isEmpty(reqData)) {
@@ -184,13 +189,31 @@
        }
        Map<String, Object> map = JSONObject.parseObject(reqData, Map.class);
        if (ObjectUtils.isEmpty(map) || (Integer) map.get("code") != 200) {
            log.error("【SLTD token éªŒè¯ã€‘响应码异常,验证失败");
        if (ObjectUtils.isEmpty(map)) {
            log.error("【SLTD token éªŒè¯ã€‘响应解析为空,验证失败,响应内容:{}", reqData);
            return null;
        }
        Map<String, Object> data = (Map<String, Object>) map.get("data");
        return (String) data.get("accountNo");
        Object codeObj = map.get("code");
        int code = codeObj instanceof Number ? ((Number) codeObj).intValue() : -1;
        if (code != 200) {
            log.error("【SLTD token éªŒè¯ã€‘响应码异常,验证失败,code={}, message={}, å“åº”内容:{}",
                    code, map.get("message"), reqData);
            return null;
        }
        Object dataObj = map.get("data");
        if (!(dataObj instanceof Map)) {
            log.error("【SLTD token éªŒè¯ã€‘响应缺少data节点,验证失败,data={}", dataObj);
            return null;
        }
        Object accountNo = ((Map<?, ?>) dataObj).get("accountNo");
        if (accountNo == null || StringUtils.isEmpty(String.valueOf(accountNo))) {
            log.error("【SLTD token éªŒè¯ã€‘响应data中没有accountNo,验证失败,data={}", dataObj);
            return null;
        }
        return String.valueOf(accountNo);
    }
    public String loginByUserName(String userName) {
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -75,6 +75,10 @@
    @Value("${isAdmin}")
    private List<Long> isAdmin;
    @Value("${spring.profiles.active}")
    private String active;
    /**
     * æ ¹æ®æ¡ä»¶åˆ†é¡µæŸ¥è¯¢ç”¨æˆ·åˆ—表
     *
@@ -337,7 +341,8 @@
    @Override
    public SysUser selectUserByUserNameAndDeptId(String userName) {
        String[] split = userName.split("&");
        if (split[2].contains("null")) {
        //南华附一也不验证dept_id了
        if (split[2].contains("null") || active.equals("nhfy")) {
            split[2] = null;
        }
        SysUser sysUser = userMapper.selectUserByUserNameByCondition(split[0], split[1], split[2]);
smartor/src/main/java/com/smartor/mapper/PatMedInhospMapper.java
@@ -1,6 +1,7 @@
package com.smartor.mapper;
import java.util.List;
import java.util.Map;
import com.smartor.domain.PatMedInhosp;
import com.smartor.domain.PatMedInhospVO;
@@ -30,6 +31,14 @@
    public String getTagnameBypatid(Long patid);
    /**
     * æ‰¹é‡æŸ¥è¯¢æ‚£è€…标签(GROUP_CONCAT æ‹¼æŽ¥åŽçš„æ ‡ç­¾ä¸²ï¼‰
     *
     * @param patids æ‚£è€…档案id集合,调用方须保证非空且已去重
     * @return æ¯è¡Œå« patid、tagname ä¸¤ä¸ª key
     */
    public List<Map<String, Object>> getTagnameByPatids(@Param("patids") List<Long> patids);
    /**
     * æŸ¥è¯¢æ‚£è€…住院记录列表
     *
     * @param patMedInhosp æ‚£è€…住院记录
smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -116,14 +116,60 @@
        }
        List<PatMedInhosp> patMedInhospList = patMedInhospMapper.selectPatMedInhospList(patMedInhosp);
        for (PatMedInhosp patMedInhosp1 : patMedInhospList) {
            String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid());
            patMedInhosp1.setTagname(tagname);
        }
        fillTagname(patMedInhospList);
        return patMedInhospList;
    }
    /**
     * æ‰¹é‡å¡«å……患者标签
     * <p>
     * åŽŸå®žçŽ°æ˜¯æ¯è¡Œè°ƒä¸€æ¬¡ getTagnameBypatid,SQL å¾€è¿”次数随 pageSize çº¿æ€§å¢žé•¿ï¼›
     * è¿™é‡ŒæŒ‰ patid åŽ»é‡åŽåˆ†æ‰¹ä¸€æ¬¡æŸ¥å›žï¼Œç»“æžœä¸Žé€è¡ŒæŸ¥è¯¢å®Œå…¨ä¸€è‡´ï¼ˆæ‚£è€…æ— æ ‡ç­¾æ—¶ä»ä¸º null)。
     *
     * @param patMedInhospList å¾…填充的住院记录,允许为空
     */
    private void fillTagname(List<PatMedInhosp> patMedInhospList) {
        if (CollectionUtils.isEmpty(patMedInhospList)) {
            return;
        }
        // LinkedHashSet åŽ»é‡åŒæ—¶ä¿æŒé¡ºåºï¼Œé¿å… IN åˆ—表出现重复 patid
        Set<Long> patids = new LinkedHashSet<>();
        for (PatMedInhosp patMedInhosp : patMedInhospList) {
            if (patMedInhosp.getPatid() != null) {
                patids.add(patMedInhosp.getPatid());
            }
        }
        if (patids.isEmpty()) {
            return;
        }
        Map<Long, String> tagnameMap = new HashMap<>();
        List<Long> patidList = new ArrayList<>(patids);
        // åˆ†ç‰‡ï¼Œé˜²æ­¢ IN å‚数过多
        int batchSize = 1000;
        for (int i = 0; i < patidList.size(); i += batchSize) {
            List<Long> batch = patidList.subList(i, Math.min(i + batchSize, patidList.size()));
            List<Map<String, Object>> rows = patMedInhospMapper.getTagnameByPatids(batch);
            if (CollectionUtils.isEmpty(rows)) {
                continue;
            }
            for (Map<String, Object> row : rows) {
                Object patid = row.get("patid");
                Object tagname = row.get("tagname");
                if (patid != null) {
                    tagnameMap.put(((Number) patid).longValue(), tagname == null ? null : tagname.toString());
                }
            }
        }
        for (PatMedInhosp patMedInhosp : patMedInhospList) {
            if (patMedInhosp.getPatid() != null) {
                patMedInhosp.setTagname(tagnameMap.get(patMedInhosp.getPatid()));
            }
        }
    }
    /**
     * å½’一化入院床位排序参数
     * <p>
     * asc / 1 -> asc(床位正序),desc / 2 -> desc(床位倒序),其余(含不传)-> null(不排序)。
smartor/src/main/resources/mapper/smartor/PatMedInhospMapper.xml
@@ -661,6 +661,19 @@
          AND d.del_flag = 0
    </select>
    <!-- æ‰¹é‡å–患者标签,替代逐行调用 getTagnameBypatid;每行含 patid、tagname ä¸¤ä¸ª key -->
    <select id="getTagnameByPatids" resultType="java.util.HashMap">
        SELECT d.patid                     AS patid,
               GROUP_CONCAT(d.tagname, ', ') AS tagname
        FROM pat_archivetag d
        WHERE d.del_flag = 0
          AND d.patid IN
        <foreach collection="patids" item="patid" open="(" separator="," close=")">
            #{patid}
        </foreach>
        GROUP BY d.patid
    </select>
    <select id="selectPatMedInhospByInhospid" parameterType="Long" resultMap="PatMedInhospResult">
        <include refid="selectPatMedInhospVo"/>
smartor/src/main/resources/mapper/smartor/ServiceTaskMapper.xml
@@ -315,7 +315,6 @@
        </if>
        <if test="templateid != null  and templateid != ''">and service_task.templateid = #{templateid}</if>
        <if test="longTask != null  and longTask != ''">and service_task.long_task = #{longTask}</if>
        <if test="serviceType != null  and serviceType != ''">and service_task.service_type = #{serviceType}</if>
        <if test="templatename != null  and templatename != ''">and service_task.templatename like concat('%',
            #{templatename},
            '%')
@@ -331,7 +330,6 @@
        </if>
        <if test="checktime != null ">and service_task.checktime = #{checktime}</if>
        <if test="sendDay != null ">and service_task.send_day = #{sendDay}</if>
        <if test="type != null  and type != ''">and service_task.type = #{type}</if>
        <if test="typename != null  and typename != ''">and service_task.typename like concat('%', #{typename},
            '%')
        </if>